UI基础四:简单的assign block

经常会有需求让在标准的order加个assign block,那就来简单说一下:

1.创建assign block组件ZXXXXXX

2.添加BTORDER节点和GUID属性

3.创建表视图(可配置,根据情况是否按钮),在表的初始化中DO_INIT_CONTEXT或者DO_PREPARE_OUTPUT中根据GUID带出block信息

  METHOD do_init_context.
    DATA:gr_order     TYPE REF TO if_bol_bo_property_access,
         gw_order     TYPE crmst_guid_btil,
         lr_col       TYPE REF TO if_bol_bo_col,
         lr_valuenode TYPE REF TO cl_bsp_wd_value_node,
         gt_log       TYPE TABLE OF zcrm_proce_log,
         gw_log       LIKE LINE OF gt_log,
         gt_text      TYPE TABLE OF zdelay_reason,
         gw_text      LIKE LINE OF gt_text,
         gw_struct    TYPE zcrms0046,
         lr_line      TYPE REF TO zcrms0046.
    REFRESH:gt_log.
    CLEAR:gw_log.
    super->do_init_context( ).

    gr_order = me->typed_context->btorder->collection_wrapper->get_current( ).
    IF gr_order IS BOUND.
      gr_order->get_properties(
        IMPORTING
          es_attributes = gw_order ).
      SELECT * INTO TABLE gt_log FROM zcrm_proce_log WHERE guid = gw_order-crm_guid.
      SELECT * INTO TABLE gt_text FROM zdelay_reason WHERE spras = sy-langu.
      SORT gt_text BY estat.
    ENDIF.
*    SELECT * INTO TABLE gt_log FROM zcrm_proce_log WHERE guid = gw_order-crm_guid.
    CREATE OBJECT lr_col TYPE cl_crm_bol_bo_col.
    LOOP AT gt_log INTO gw_log.
      MOVE-CORRESPONDING gw_log TO gw_struct.
      READ TABLE gt_text INTO gw_text WITH KEY estat = gw_log-zzdlyrsn BINARY SEARCH.
      IF sy-subrc = 0.
        gw_struct-in_pro_des = gw_text-text.
      ENDIF.
      CREATE DATA lr_line.
      CREATE OBJECT lr_valuenode
        EXPORTING
          iv_data_ref = lr_line.
      lr_valuenode->set_properties( gw_struct ).
      lr_col->add( lr_valuenode ).
    ENDLOOP.

    me->typed_context->proce->collection_wrapper->set_collection( lr_col ).

  ENDMETHOD.

将组件添加InterfaceView 并把BTorder节点添加。

将组件添加到BT116H_SRVO的ComponentUsage

在BT116H_SRVO的组件控制器的WD_USAGE_INITIALIZE的方法中添加GUID节点的映射:

METHOD wd_usage_initialize.
  CONSTANTS:
    lc_node_name_totals TYPE seocmpname VALUE 'ADDPARENTTOTALS',
    lc_komp_name_rel    TYPE name_komp  VALUE 'PARENTTOTALREL1',
    lc_komp_name_total  TYPE name_komp  VALUE 'PARENTTOTAL1',
    lc_rel_name_cumulat TYPE string     VALUE 'BTHeaderCumulatExt',
    lc_komp_name_cost   TYPE string     VALUE 'COST_AMOUNT'.

  DATA:
    lr_component_usage TYPE REF TO if_bsp_wd_component_usage,
    lr_context_node    TYPE REF TO cl_bsp_wd_context_node,
    lr_property_access TYPE REF TO if_bol_bo_property_access.


  CHECK iv_usage IS BOUND.

* late instantiation of CuCos for
* component usages

  CASE iv_usage->usage_name.
    WHEN 'CUBTQualif'.
      get_custom_controller( 'BT116H_SRVO/CUBTQualifCuCo' ).
    WHEN 'CUBTRefObj'.
      get_custom_controller( 'BT116H_SRVO/CUBTRefObjCuCo' ).
    WHEN 'CUBTOrgSet'.
      get_custom_controller( 'BT116H_SRVO/CUBTOrgSetCuCo' ).
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                                   iv_target_node_name = 'BTADMINH'
                                   iv_node_2_bind      = 'PARENTNODE' ).
    WHEN 'CUBTAmntAll'.
      get_custom_controller( 'BT116H_SRVO/CUBTAmntAllCuCo' ).
    WHEN 'CUBTDates'.
      get_custom_controller( 'BT116H_SRVO/CUBTDatesCuCo' ).
    WHEN 'CUGSActions'.
      get_custom_controller( 'BT116H_SRVO/CUGSActionsCuCo' ).
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                                   iv_target_node_name = 'BTADMINH'
                                   iv_node_2_bind      = 'PARENTNODE' ).
    WHEN 'CUGSText'.
      get_custom_controller( 'BT116H_SRVO/CUGSTextCuCo' ).
    WHEN 'CUBTAcAssign'.
      get_custom_controller( 'BT116H_SRVO/CUBTAcAssignCuCo' ).
    WHEN 'CUBTStatusUS'.
      get_custom_controller( 'BT116H_SRVO/CUBTStatusUSCuCo' ).
    WHEN 'CUBTPartner'.
      get_custom_controller( 'BT116H_SRVO/CUBTPartnerCuCo' ).
    WHEN 'CUBTChangeHistory'.
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                                   iv_target_node_name = 'BTADMINH'
                                   iv_node_2_bind      = 'BTADMINH' ).
    WHEN 'CUBTShipping'.
* bind shipping usage
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                                   iv_target_node_name = 'BTORDER'        " name of component controller node
                                   iv_node_2_bind      = 'BTORDER' ).      " name of usage interface node

    WHEN 'CUBTCounter'.
* bind counter usage
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                                   iv_target_node_name = 'BTADMINH'        " name of component controller node
                                   iv_node_2_bind      = 'BTADMIN' ).      " name of usage interface node

* custom controller needed for counter link proposal
      get_custom_controller( 'BT116H_SRVO/CUBTCounterCuCo' ).

      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_custom
                                    iv_target_node_name = 'PROPOSALCOMP'        " name of custom controller node
                                    iv_name             = 'BT116H_SRVO/CUBTCounterCuCo'
                                    iv_node_2_bind      = 'PROPOSALCOMP' ).      " name of usage interface node

      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_custom
                                    iv_target_node_name = 'PROPOSALPROD'        " name of custom controller node
                                    iv_name             = 'BT116H_SRVO/CUBTCounterCuCo'
                                    iv_node_2_bind      = 'PROPOSALPROD' ).      " name of usage interface node

    WHEN 'CUBTServiceItem'
      OR 'CUBTServicePartItem'
      OR 'CUBTExpenseItem'
      OR 'CUBTToolItem'
      OR 'CUBTSalesItem'.
* bind single item component usages
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                                   iv_target_node_name = 'BTADMINI'
                                   iv_node_2_bind      = 'BTADMINI' ).
    WHEN 'CUBTSalesQuotItem'.
* special binding for sales quotation item
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                                   iv_target_node_name = 'BTADMINI'
                                   iv_node_2_bind      = 'BTADMINI' ).

      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                                   iv_target_node_name = 'BTITEMS'
                                   iv_node_2_bind      = 'BTITEMS' ).

    WHEN 'CUItemTable' OR 'CUItemTableHeader'.
* bind item table component usages
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                                   iv_target_node_name = 'BTITEMS'
                                   iv_node_2_bind      = 'BTITEMS' ).

      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                                   iv_target_node_name = 'BTADMINI'
                                   iv_node_2_bind      = 'BTADMINI' ).

    WHEN 'CUGSCMOverview' OR 'CUGSCMEdit'.
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_custom
                                   iv_name             = 'BT116H_SRVO/CUGSCMCuCo'
                                   iv_target_node_name = 'CMBO'
                                   iv_node_2_bind      = 'CMBUSOBJ' ).

      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_custom
                                   iv_name             = 'BT116H_SRVO/CUGSCMCuCo'
                                   iv_target_node_name = 'ATTRIBUTES'
                                   iv_node_2_bind      = 'ATTRIBUTES' ).

* bind parent node for locking
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                                   iv_target_node_name = 'BTADMINH'        " name of component controller node
                                   iv_node_2_bind      = 'PARENTNODE' ).   " name of usage interface node

    WHEN 'CUGSSurvey'.

      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                                   iv_target_node_name = 'BTADMINH'
                                   iv_node_2_bind      = 'ADMINH' ).

      iv_usage->bind_context_node(
                  iv_controller_type  = cl_bsp_wd_controller=>co_type_custom
                  iv_target_node_name = 'SURVEYVIEWTITLE'
                  iv_name             = 'BT116H_SRVO/CUGSSurveyCuCo'
                  iv_node_2_bind      = 'SURVEYVIEWTITLE' ).

    WHEN 'CUBTPayments'.
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                                   iv_target_node_name = 'BTORDER'
                                   iv_node_2_bind      = 'BTORDER' ).
    WHEN 'CUGSPrices'.

      get_custom_controller( 'BT116H_SRVO/CUGSPricesCuCo' ).

* bind parent node
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_custom
                                   iv_name             = 'BT116H_SRVO/CUGSPricesCuCo'
                                   iv_target_node_name = 'BTADMINH'        " name of component controller node
                                   iv_node_2_bind      = 'PARENTNODE' ).      " name of usage interface node

* prepare for display of price totals of header
      lr_component_usage   = me->get_component_usage( iv_usage->usage_name ).
      lr_context_node      = lr_component_usage->get_context_node( lc_node_name_totals ).
      lr_property_access   = lr_context_node->collection_wrapper->get_first( ).
      lr_property_access->set_property_as_string( iv_attr_name = lc_komp_name_rel
                                                  iv_value     = lc_rel_name_cumulat ).
      lr_property_access->set_property_as_string( iv_attr_name = lc_komp_name_total
                                                  iv_value     = lc_komp_name_cost   ).


* Private Notes
    WHEN 'CUPrivNote'.
      CALL METHOD iv_usage->bind_context_node
        EXPORTING
          iv_controller_type  = cl_bsp_wd_controller=>co_type_custom
          iv_name             = 'BT116H_SRVO/CUPrivNoteCuCo' "#EC NOTEXT
          iv_target_node_name = 'BOROBJECT'                 "#EC NOTEXT
          iv_node_2_bind      = 'BOROBJECT'.                "#EC NOTEXT


    WHEN 'CUBTDocFlow'.
      get_custom_controller( 'BT116H_SRVO/CUBTDocFlowCuCo' ).
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                                   iv_target_node_name = 'BTADMINH'
                                   iv_node_2_bind      = 'PARENTNODE' ).
    WHEN 'CUBTSolution' OR 'CUBTEMail'.
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                                   iv_target_node_name = 'BTADMINH'
                                   iv_node_2_bind      = 'BTADMINH' ).

    WHEN 'CUGSKnowArtDocFlow'.
      get_custom_controller( 'BT116H_SRVO/CUGSDocFlowCuCo' ).
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                                   iv_target_node_name = 'BTADMINH'
                                   iv_node_2_bind      = 'PARENTNODE' ).
    WHEN 'CUBTCategories'.
      get_custom_controller( 'BT116H_SRVO/CUBTCategoriesCuCo' ).
*   bind payment cards
    WHEN 'CUBTPaycards'.
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                                   iv_target_node_name = 'BTORDER'
                                   iv_node_2_bind      = 'BTORDER' ).
    WHEN 'CUBTFollowUp'.
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                             iv_target_node_name = 'BTADMINH'
                             iv_node_2_bind      = 'BTADMINH' ).

    WHEN 'CUCaseLink'.
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                             iv_target_node_name = 'BTORDER'
                             iv_node_2_bind      = 'EXTLINKOBJ' ).

    WHEN 'CUCustomer_H'.
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                              iv_target_node_name = 'BTADMINH'
                              iv_node_2_bind      = 'BTADMINH' ).

    WHEN 'CUGSProductCatalog'.                              "#EC NOTEXT
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                                   iv_target_node_name = 'BTITEMS' "#EC NOTEXT
                                   iv_node_2_bind      = 'ITEMS' ). "#EC NOTEXT
 "ADD BY LY 20170927 肖宇,增加in process 接口日志block
    WHEN 'CUZHSI_PROCE'.                                     "#EC NOTEXT
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                                   iv_target_node_name = 'BTORDER' "#EC NOTEXT
                                   iv_node_2_bind      = 'BTORDER' ). "#EC NOTEXT
  "ADD BY LY 20170927 肖宇,增加in process 接口日志block
    WHEN 'ZATTATCH'.                                     "#EC NOTEXT
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                                   iv_target_node_name = 'BTORDER' "#EC NOTEXT
                                   iv_node_2_bind      = 'BTORDER' ). "#EC NOTEXT

    WHEN 'BTSubject'.
      get_custom_controller( 'BT116H_SRVO/CuCoSubjectSet' ).
**********************************************************************20161117-Begin
*开发顾问:陈国光
*业务顾问:龚慧文
*1,传数据列表中增加一列字段,当点完Upload按钮后,
*如果上传信息model NOserial NOproduct ID与原有信息不一致,给予黄色警告提示。
*由操作者决定是否继续上传,不上传则修改上传模板
*2、 物流信息日志做成一个assignment block,服务工单、退机订单上可以显示每次物流状态等信息的更新记录;
    WHEN 'ZCUZSA_LOGI_INFO'.                                "#EC NOTEXT
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
      iv_target_node_name = 'BTADMINH'                      "#EC NOTEXT
      iv_node_2_bind      = 'BTADMINH' ).                   "#EC NOTEXT
**********************************************************************20161117-End
**********************************************************************20170117-Begin
*开发顾问:陈国光
*业务顾问:张弛
*FS《HOS_CRM_JP_06_周转机管理增强_V1.0_20170113》
    WHEN 'ZCUZSRV_JA_002'.                                "#EC NOTEXT
      iv_usage->bind_context_node( iv_controller_type  = cl_bsp_wd_controller=>co_type_component
      iv_target_node_name = 'BTADMINH'                      "#EC NOTEXT
      iv_node_2_bind      = 'BTADMINH' ).                   "#EC NOTEXT
********************************************************************** 20170117 -End

    WHEN OTHERS.
      "Detect extension binding
      DATA: lv_binding_source TYPE string.
      lv_binding_source =
        cl_axt_assignment_block_binder=>get_binding_source_4_usage(
          iv_usage->usage_name ).

      IF lv_binding_source IS NOT INITIAL.
        CASE lv_binding_source.
          WHEN 'HEADER'.
            "Bind Extension block
            CALL METHOD iv_usage->bind_context_node
              EXPORTING
                iv_controller_type  = cl_bsp_wd_controller=>co_type_component
                iv_target_node_name = 'BTAdminH' " Your node
                iv_node_2_bind      = 'PARENT'. " Always PARENT

        ENDCASE.
      ELSE.
        "No extension table
      ENDIF.
  ENDCASE.
ENDMETHOD.

在OverView Page中将组件视图添加进来,然后在配置中将组件放出,即可显示。

原文地址:https://www.cnblogs.com/sapSB/p/7770609.html