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.

  • 相关阅读:
    数据绑定表达式语法(Eval,Bind区别)
    使用博客园的第一件事 自定义主题
    sql2000 跨服务器复制表数据
    使用UpdatePanel 局部刷新出现中文乱码的解决方法!!
    MMC不能打开文件MSC文件
    sql 日期 、时间相关
    loaded AS2 swf call function in AS3 holder
    Rewrite the master page form action attribute in asp.net 2.0
    100万个不重复的8位的随机数
    flash 中实现斜切变型
  • 原文地址:https://www.cnblogs.com/sapSB/p/9233436.html
Copyright © 2011-2022 走看看