zoukankan      html  css  js  c++  java
  • CRM INBOX 结果增强功能

    前段时间接到的需求:INBOX(ICCMP_INBOX)查询结果,多选后弹出选择用户的框,选择用户,带入到单据的PARTNER FUNC的工程师中,并修改单据状态。

    其实标准的INBOX的ComponentUsages是有EMPLOYEE的,但是好像需要激活一些东西(SFW5),所以就自己把这个单独引入到INBOX中

     

    增强ICCMP_INBOX/InboxItems 视图

    给结果添加按钮:

      METHOD if_bsp_wd_dyn_btn_control~get_local_toolbar_buttons.
        DATA:gw_button TYPE crmt_thtmlb_button.
        rt_result = super->if_bsp_wd_dyn_btn_control~get_local_toolbar_buttons( ).
        READ TABLE rt_result INTO gw_button WITH KEY id = 'ASSIGN'.
        IF sy-subrc <> 0.
          gw_button-id = 'ASSIGN'.
          gw_button-text = '分配'.
          gw_button-on_click = 'SEL_ZHSI0ENG'."指定事件
          gw_button-enabled = 'X'.
          INSERT gw_button INTO rt_result INDEX 1.
        ENDIF.
    
      ENDMETHOD.

    创建事件Event Handler 并分配OUT BONUD:

      METHOD eh_onsel_zhsi0eng.
    * Added by wizard: Handler for event 'SEL_ZHSI0ENG'
        OP_TOEMP( ).
      ENDMETHOD.
      METHOD op_toemp.
    * Added by wizard: Outbound plug 'TOEMP'
        DATA lv_title TYPE string.
    
        lv_title = cl_wd_utilities=>get_otr_text_by_alias( 'CRM_UIU_BT/EMPLOYEE_SEARCH' ).
        bpsearch = comp_controller->window_manager->create_popup(
                              iv_interface_view_name = 'SearchHelpWindow' "#EC NOTEXT
                              iv_usage_name = 'BPEMPL'"gc_emp_resp_search_usage
                              iv_title = lv_title ).
    
    * set event
        bpsearch->set_on_close_event( iv_view = me iv_event_name = 'BP_SELEND' ).
    
    * set display mode
        bpsearch->set_display_mode( if_bsp_wd_popup=>c_display_mode_surrounded ).
    
    * Open the Popup
        bpsearch->open(  ).  " iv_inbound_plug = 'CLEAR_ALL'
      ENDMETHOD.

    这时候页面上会显示按钮,并且可以弹窗,但是没有返回事件,所以选择后就会DUMP。

    定义返回事件:(与上面对应)

      METHOD eh_onbp_selend.
    * Added by wizard: Handler for event 'BP_SELEND'
        DATA:
          lr_context_node  TYPE REF TO cl_bsp_wd_context_node,
          lr_current       TYPE REF TO if_bol_bo_property_access,
          lr_core          TYPE REF TO cl_crm_bol_core,
          lv_outbound_plug TYPE seocmpname.
        DATA: lr_selected_entities TYPE REF TO cl_crm_bol_entity_col.
    * Get query result context node
        lr_context_node = bpsearch->get_context_node( iv_cnode_name = 'EMPLOYEE' ).
        CHECK lr_context_node IS BOUND.
    
        lr_current = lr_context_node->collection_wrapper->get_current( ).
        CHECK lr_current IS BOUND.
    
        DATA: l_bp TYPE bu_partner.
        DATA: lr_entity TYPE REF TO if_bol_bo_property_access.
    *
        l_bp  = lr_current->get_property_as_string( iv_attr_name = 'BP_NUMBER' ).
    *    lr_entity ?= me->typed_context->zcorder->collection_wrapper->get_current( ).
        CHECK l_bp IS NOT INITIAL.
    
    
        TRY.
    *     Accept all selected items
            lr_selected_entities ?= get_selected_entity_col( ).
          CATCH cx_sy_move_cast_error.
            RETURN.
        ENDTRY.
    
        CHECK lr_selected_entities IS BOUND.
    
        DATA: lr_ex_internal_error TYPE REF TO cx_crm_ic_internal_error, "#EC NEEDED
              lr_ex                TYPE REF TO cx_root,         "#EC NEEDED
              lv_remark            TYPE string,                 "#EC NEEDED
              lv_msg_v1            TYPE symsgv,
              lv_msg_v2            TYPE symsgv,
              lv_text              TYPE string,
              lr_aui_oneorder      TYPE REF TO cl_crm_aui_oneorder,
              lr_mixed_ent         TYPE REF TO cl_bsp_wd_mixed_node,
              lr_msg_service       TYPE REF TO cl_bsp_wd_message_service.
    *
        TRY.
    *     Accept all selected items
            DATA: lr_selected_entity TYPE REF TO cl_crm_bol_entity.
            lr_selected_entity ?= lr_selected_entities->if_bol_entity_col~get_first( ).
            WHILE lr_selected_entity IS BOUND.
    
    *       Delegate to inbox entity
              DATA: lr_inbox_entity TYPE REF TO cl_crm_aui_entity,
                    lv_message      TYPE crmst_aui_message,
                    lv_navlink      TYPE string,
                    lt_groups       TYPE hrobjbupat.
              lr_inbox_entity ?= lr_selected_entity.
    
    
    *       Get the underyling bol entity
              DATA:lr_related_bol_entity  TYPE REF TO cl_crm_bol_entity.
              DATA:lr_root TYPE REF TO cl_crm_bol_entity.
              DATA:lr_order_h TYPE REF TO cl_crm_bol_entity.
              DATA:lr_partset TYPE REF TO cl_crm_bol_entity.
              DATA:lr_stuset TYPE REF TO cl_crm_bol_entity.
              DATA:lr_partall TYPE REF TO cl_crm_bol_entity.
              DATA:lr_partbol TYPE REF TO if_bol_entity_col.
              DATA:lr_stucurr TYPE REF TO cl_crm_bol_entity.
              DATA:lr_part    TYPE REF TO cl_crm_bol_entity.
              DATA:ls_part    TYPE crmst_partner_btil.
              DATA:ls_stu    TYPE crmst_status_btil.
              DATA:gv_guid TYPE crmt_object_guid.
              DATA:ls_key     TYPE crmst_partner_logical_key.
              DATA:lr_iter    TYPE REF TO if_bol_entity_col_iterator.
              DATA:gv_is_started TYPE abap_bool.
              DATA:gv_c TYPE abap_bool.
              DATA:lv_trans TYPE REF TO if_bol_transaction_context.
    
    
              lr_related_bol_entity  ?= lr_inbox_entity->get_bol_entity( ).
              IF lr_related_bol_entity IS INITIAL.
                lv_remark = 'Inbox processing: Underlying bol entity not bound'. "#EC NOTEXT
                RAISE EXCEPTION TYPE cx_crm_ic_internal_error
                  EXPORTING
                    remark = lv_remark.
              ELSE.
                lr_order_h = lr_related_bol_entity->get_related_entity( iv_relation_name = 'BTOrderHeader' ).
                lr_order_h->if_bol_bo_property_access~get_property_as_value(
                  EXPORTING
                    iv_attr_name = 'GUID'
                   IMPORTING
                    ev_result    = gv_guid ).
    *            "get instance
                lr_core = cl_crm_bol_core=>get_instance( ).
    *            "check the bol instance is initial
                gv_is_started = cl_crm_bol_core=>check_is_started( ).
    *            "if instance is not initial,get initial
                IF gv_is_started EQ abap_false.
                  lr_core->start_up( 'BT' ).
                ENDIF.
                lr_core->load_component( iv_component_name = 'BT' ).
    *            "get root entity
                CHECK lr_core IS BOUND.
                lr_root = lr_core->get_root_entity( iv_object_name = 'BTOrder' iv_object_guid = gv_guid ).
                lr_order_h = lr_root->get_related_entity( iv_relation_name = 'BTOrderHeader' ).
                CHECK lr_order_h IS BOUND.
                lr_partset = lr_order_h->get_related_entity( iv_relation_name = 'BTHeaderPartnerSet' ).
                IF lr_partset IS BOUND.
                  lr_partbol = lr_partset->get_related_entities( iv_relation_name = 'BTPartnerAll' ).
                  lr_iter ?= lr_partbol->get_iterator( ).
                  lr_part ?= lr_iter->find_by_property( EXPORTING iv_attr_name = 'PARTNER_FCT' iv_value = 'ZHSI0ENG' ).
    *              IF lr_iter IS BOUND.
                  IF lr_part IS NOT BOUND.
                    lr_partall = lr_partbol->get_first( ).
                    IF lr_partall->is_changeable( ) = abap_true.
                      CLEAR:ls_part.
                      ls_part-partner_fct = 'ZHSI0ENG'.
                      ls_part-partner_no = l_bp.
                      lr_partall->if_bol_bo_property_access~set_properties( is_attributes = ls_part ).
                    ENDIF.
                  ELSE.
                    CLEAR:gv_c.
                    IF lr_part->is_changeable( ) = abap_false.
                      gv_c = lr_part->switch_to_change_mode( ).
                    ENDIF.
                    IF gv_c = 'X' OR lr_part->is_changeable( ) = abap_true.
                      lr_part->if_bol_bo_property_access~get_properties( IMPORTING es_attributes = ls_part ).
                      ls_part-partner_fct = 'ZHSI0ENG'.
                      ls_part-partner_no = l_bp.
                      lr_part->if_bol_bo_property_access~set_properties( is_attributes = ls_part ).
                    ENDIF.
                  ENDIF.
                ENDIF.
                lr_stuset = lr_order_h->get_related_entity( iv_relation_name = 'BTHeaderStatusSet' ).
                IF lr_stuset IS BOUND.
                  lr_stucurr = lr_stuset->get_related_entity( iv_relation_name = 'BTStatusHCurrent' ).
                  IF lr_stucurr IS BOUND.
                    IF lr_stucurr->is_changeable( ) = abap_true.
                      CLEAR:ls_stu.
                      CLEAR:gv_c.
                      IF lr_stucurr->is_changeable( ) = abap_false.
                        gv_c = lr_stucurr->switch_to_change_mode( ).
                      ENDIF.
                      IF gv_c = 'X' OR lr_stucurr->is_changeable( ) = abap_true.
                        lr_stucurr->if_bol_bo_property_access~get_properties( IMPORTING es_attributes = ls_stu ).
                        ls_stu-status = 'E0003'.
                        ls_stu-act_status = 'E0003'.
                        ls_stu-active = 'X'.
                        lr_stucurr->if_bol_bo_property_access~set_properties( is_attributes = ls_stu ).
                      ENDIF.
                    ENDIF.
                  ENDIF.
                ENDIF.
                lr_core->modify( ).
                lv_trans = lr_core->get_transaction( ).
                lv_trans->save( ).
                lv_trans->commit( ).
              ENDIF.
    
    *          lr_related_bol_entity->reread( ).
    
              lr_selected_entity ?= lr_selected_entities->if_bol_entity_col~get_next( ).
              CHECK: lr_selected_entity IS BOUND.
    
            ENDWHILE.
    
    *   Error handling
          CATCH cx_root.
    *     Display error message
            lr_msg_service = cl_bsp_wd_message_service=>get_instance( ).
    
            lv_text = lr_inbox_entity->get_property_as_string( 'MAIN_CAT' ).    CONCATENATE '"' lv_text '"' INTO lv_msg_v1. "#EC_NOTEXT
            lv_text = lr_inbox_entity->get_property_as_string( 'DESCRIPTION' ). CONCATENATE '"' lv_text '"' INTO lv_msg_v2. "#EC_NOTEXT
    
            CALL METHOD lr_msg_service->add_message
              EXPORTING
                iv_msg_type   = if_genil_message_container=>mt_error
                iv_msg_id     = 'CRM_IC_AUI'
                iv_msg_number = '053'
                iv_msg_v1     = lv_msg_v1
                iv_msg_v2     = lv_msg_v2.
        ENDTRY.
      ENDMETHOD.

  • 相关阅读:
    PartialView
    常用取默认值
    迁移环境或升级正常功能出bug常见原因
    模拟登陆语法
    fsg报表相关
    常用数组定义方式
    to_char函数 官方文档详解(数字格式转换和日期转换)
    个人工作window10常用快捷键
    ebs常见概念解释
    常用ASCII码和字符的转换
  • 原文地址:https://www.cnblogs.com/sapSB/p/9233436.html
Copyright © 2011-2022 走看看