您的位置:首页 > 其它

CRM事件增强

2016-12-06 20:01 225 查看
上一篇转载了SDN上面的一篇博文。写的非常棒,将event的事情说的很透彻。
这篇就实际谈谈具体是怎么操作的,多说无益,直接上代码。

使用事务代码CRMV_EVENT,创建一个如下的事件功能:
交易类别        BUS2000115   销售
执行时间        30   抬头处理结束
优先级          自己定
对象名称        ORDERADM_H
事件            AFTER_CREATE_WITH_REFERENCE
属性            <*>
功能          
Z开头的FUNC
 
然后func的相关代码如下:
FUNCTION zxxxxxxxxx.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(IV_HEADER_GUID) TYPE  CRMT_OBJECT_GUID
*"     REFERENCE(IV_OBJECT_GUID) TYPE  CRMT_OBJECT_GUID
*"     REFERENCE(IV_OBJECT_NAME) TYPE  CRMT_OBJECT_NAME
*"     REFERENCE(IV_EVENT_EXETIME) TYPE  CRMT_EVENT_EXETIME
*"     REFERENCE(IV_EVENT) TYPE  CRMT_EVENT
*"     REFERENCE(IV_ATTRIBUT) TYPE  CRMT_EVENT
*"     REFERENCE(IV_STRVAL_OLD) TYPE  ANY
*"     REFERENCE(IV_STRVAL_NEW) TYPE  ANY
*"     REFERENCE(IV_RCODE_STATUS) TYPE  SY-SUBRC
*"     REFERENCE(IV_STRUC_NAME) TYPE  CRMC_EVENT_STRUC-STRUC
*"  EXCEPTIONS
*"      ERROR_OCCURRED
*"----------------------------------------------------------------------

  DATA:      lv_ref_kind            TYPE crmt_object_kind,
        ls_payplan_wrk         TYPE crmt_payplan_wrk,
        lt_payplan_d_wrk       TYPE crmt_payplan_d_wrkt,
        ls_payplan_com         TYPE crmt_payplan_com,
        lt_payplan_d_com       TYPE crmt_payplan_d_comt,
        ls_pr_copy_ma_key      TYPE crmt_pr_copy_ma_key,
        ls_it_copy_ma_key      TYPE crmt_it_copy_ma_key,
        ls_pr_copy_ma          TYPE crmc_pr_copy_ma,
        ls_it_copy_ma          TYPE crmc_it_copy_ma,
        ls_input_field_names   TYPE crmt_input_field_names,
        lt_input_field_names   TYPE crmt_input_field_names_tab,
        ls_input_fields        TYPE crmt_input_field,
        lt_input_fields        TYPE crmt_input_field_tab,
        lv_message_text        TYPE crmt_msgtext,
        lv_allowed             TYPE crmt_boolean,
        ls_payplan_d_wrk       TYPE crmt_payplan_d_wrk,
        ls_payplan_d_com       TYPE crmt_payplan_d_com.

  DATA:      lv_ref_strval_old      TYPE   REF TO data,
        lv_ref_strval_new      TYPE   REF TO data,
        lv_structure_name      TYPE   crmt_tablename.

  FIELD-SYMBOLS:               <ls_strval_old>  TYPE   any,
                 <ls_strval_new>  TYPE   any,
                 <lv_ref_guid>    TYPE   crmt_object_guid,
                 <lv_field>       TYPE   any.

* look if there is something to do
  CHECK iv_object_name EQ gc_object_name-orderadm_h OR
      iv_object_name EQ gc_object_name-orderadm_i.

* determine name of structure
  CALL FUNCTION 'CRM_OBJECT_NAMES_DETERMINE'
    EXPORTING
      iv_object_name        = iv_object_name
    IMPORTING
      ev_wrk_structure_name = lv_structure_name.

* disable copy function if predeccesor document is template
  CALL FUNCTION 'CRM_TSRV_TEMPLATE_CHECK_COPY'
    EXPORTING
      iv_strval_new      = iv_strval_new
      iv_structure_name  = lv_structure_name
      iv_object_name     = iv_object_name
    IMPORTING
      ev_no_copy_allowed = lv_allowed.

  CHECK lv_allowed EQ false.

  CREATE DATA lv_ref_strval_old TYPE (lv_structure_name).
  ASSIGN lv_ref_strval_old->* TO <ls_strval_old>.
  <ls_strval_old> = iv_strval_old.

  CREATE DATA lv_ref_strval_new TYPE (lv_structure_name).
  ASSIGN lv_ref_strval_new->* TO <ls_strval_new>.
  <ls_strval_new> = iv_strval_new.

  DATA:iu_orderadm_h    TYPE  crmt_orderadm_h_wrk.
  DATA:is_ref_orderadm_h  TYPE  crmt_orderadm_h_wrk.
  is_ref_orderadm_h = iv_strval_old.
  iu_orderadm_h     = iv_strval_new.

  DATA:lt_orderadm_i TYPE crmt_orderadm_i_comt.
  DATA:ls_orderadm_i TYPE crmt_orderadm_i_com.
  DATA:       lt_schedlin_i TYPE crmt_schedlin_i_comt,
         is_schedlin_i TYPE crmt_schedlin_i_com,
         is_schedlins TYPE crmt_schedlin_extd.
  DATA:lt_product_i TYPE  crmt_product_i_comt.
  DATA:ls_product_i TYPE  crmt_product_i_com.
  DATA:ls_items_maint        TYPE crmt_guid_handle.
  DATA:lt_items_maint        TYPE crmt_guid_handle_tab.

  DATA:in_exception TYPE crmt_exception_t.
  DATA: it_objects_to_save   TYPE crmt_object_guid_tab.
  DATA: is_objects_to_save   TYPE crmt_object_guid.
  DATA:et_saved_objects TYPE  crmt_return_objects.
  DATA:et_exception TYPE  crmt_exception_t.
  DATA:et_objects_not_saved TYPE  crmt_object_guid_tab.
  DATA:return LIKE  bapiret2.
  DATA:item_guid TYPE crmt_object_guid.
  DATA:lt_input_fields      TYPE crmt_input_field_tab.
  DATA:ls_input_fields TYPE crmt_input_field .
  DATA:ls_input_field_names TYPE crmt_input_field_names.
  DEFINE add_field.
    clear ls_input_field_names.
    ls_input_field_names-fieldname   = &1.
    insert ls_input_field_names into table ls_input_fields-field_names.
  END-OF-DEFINITION.

  DATA:     it_header_guid TYPE  crmt_object_guid_tab,
       et_orderadm_h TYPE  crmt_orderadm_h_wrkt,
  et_orderadm_i TYPE  crmt_orderadm_i_wrkt,
  es_orderadm_i TYPE  crmt_orderadm_i_wrk,
  ls_orderadm_i1 TYPE  crmt_orderadm_i_com,
  et_product_i  TYPE  crmt_product_i_wrkt,
  et_schedlin TYPE  crmt_schedlin_wrkt,
  et_schedlin_i TYPE  crmt_schedlin_i_wrkt.

    CLEAR:ls_orderadm_i.
    REFRESH:lt_orderadm_i,lt_input_fields.
    ls_orderadm_i-handle = '0000000001'.
    ls_orderadm_i-mode   = 'A'."创建
    ls_orderadm_i-header = iu_orderadm_h-guid.
    ls_orderadm_i-number_int = '0000000010'.
    ls_orderadm_i-itm_type = 'ZXXX'.
    ls_orderadm_i-ordered_prod = 'ZYYY'.
    ls_orderadm_i-Z自定义字段 = '123abc'.
    INSERT ls_orderadm_i INTO TABLE lt_orderadm_i.

    CLEAR:ls_input_fields,ls_input_field_names.
    ls_input_fields-ref_handle = '0000000001'.
    ls_input_fields-ref_kind   = 'B'."管理项目
    ls_input_fields-objectname = 'ORDERADM_I'.
    add_field 'REF_KIND'.
    add_field 'ORDERED_PROD'.
    add_field 'ITM_TYPE'.
    add_field 'MODE'.
    add_field 'NUMBER_INT'.
    add_field 'HEADER'.
    add_field 'Z自定义字段'.
    INSERT ls_input_fields INTO TABLE lt_input_fields.
* ITEMS_MAINT
    REFRESH lt_items_maint.
    CLEAR ls_items_maint.
    ls_items_maint-handle = ls_orderadm_i-handle.
    COLLECT ls_items_maint INTO lt_items_maint.
*创建item
    CALL FUNCTION 'CRM_ORDER_I_MAINTAIN_MULTI_OW'
      EXPORTING
        iv_header_guid  = iu_orderadm_h-guid
        it_items_maint  = lt_items_maint
      CHANGING
        ct_orderadm_i   = lt_orderadm_i
        ct_input_fields = lt_input_fields
      EXCEPTIONS
  
ac90
      error_occurred  = 1
        OTHERS          = 2.

*修改数量QUANTITY
    CLEAR ls_orderadm_i.
    READ TABLE lt_orderadm_i INTO ls_orderadm_i INDEX 1.
    item_guid = ls_orderadm_i-guid.

    REFRESH lt_input_fields.
    REFRESH lt_schedlin_i.
    CLEAR: is_schedlin_i, is_schedlins.
    is_schedlins-quantity = 12345.
    is_schedlins-handle   = 0.
    is_schedlins-logical_key      = '00000000000000000000000000000000'.
    INSERT is_schedlins INTO TABLE is_schedlin_i-schedlines.
    is_schedlin_i-ref_guid   = item_guid.
    is_schedlin_i-mode       = 'A'."创建

    CLEAR:ls_input_fields.
    REFRESH lt_input_fields.

    ls_input_fields-ref_guid = item_guid.
    add_field 'QUANTITY'.
    ls_input_fields-ref_kind   = 'B'.
    ls_input_fields-objectname = 'SCHEDLIN'.
    ls_input_fields-logical_key = '00000000000000000000000000000000'.
    INSERT ls_input_fields INTO TABLE lt_input_fields.

    CLEAR:ls_input_fields.

    CALL FUNCTION 'CRM_SCHEDLIN_I_MAINTAIN_OW'
      CHANGING
        cs_schedlin_i_com       = is_schedlin_i
        ct_input_fields         = lt_input_fields
      EXCEPTIONS
        schedlin_i_change_error = 1
        schedlin_i_create_error = 2
        error_occurred      = 3
        OTHERS          = 4.

ENDFUNCTION.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  CRM EVENT SAP