前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Action framework BAdI Definition TRIGGER_EXECUTED

Action framework BAdI Definition TRIGGER_EXECUTED

作者头像
Jerry Wang
发布2019-07-15 15:48:48
4800
发布2019-07-15 15:48:48
举报

Created by Jerry Wang, last modified on May 28, 2014

可以基于该BAdI definition创建implementation来实现一些自定义逻辑:

clipboard1
clipboard1
clipboard2
clipboard2

指定filter的application name为CRM_ORDER, 激活BAdI implementation:

clipboard3
clipboard3

在BAdI implementation的实现里会记录当前action framework处理的transaction ID和type,新建如下的message class并维护下列message 信息:

clipboard4
clipboard4

在UI上修改order status触发action framework 操作之后,使用tcode SLG1查看 BAdI implementation里记录的application log是否成功保存:

clipboard5
clipboard5

CLASS zcl_im__order_action_log DEFINITION

  PUBLIC

  FINAL

  CREATE PUBLIC .

  PUBLIC SECTION.

    INTERFACES if_ex_trigger_executed .

  PROTECTED SECTION.

  PRIVATE SECTION.

    DATA mv_log_handle TYPE balloghndl .

    METHODS init_log .

    METHODS add_log

      IMPORTING

        !iv_object_id TYPE crmd_orderadm_h-object_id

        !iv_obj_type  TYPE swo_objtyp .

    METHODS save_log .

ENDCLASS.

CLASS ZCL_IM__ORDER_ACTION_LOG IMPLEMENTATION.

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Instance Private Method ZCL_IM__ORDER_ACTION_LOG->ADD_LOG

* +-------------------------------------------------------------------------------------------------+

* | [--->] IV_OBJECT_ID                   TYPE        CRMD_ORDERADM_H-OBJECT_ID

* | [--->] IV_OBJ_TYPE                    TYPE        SWO_OBJTYP

* +--------------------------------------------------------------------------------------</SIGNATURE>

  METHOD add_log.

    DATA:

      lv_log       TYPE bal_s_msg,

      lv_timestamp TYPE timestampl.

    lv_log-msgid   = 'ZCM_JERRY_TEST'.

    lv_log-msgno   = '002'.

    lv_log-msgty   = 'I'.

    lv_log-msgv1 = iv_object_id.

    lv_log-msgv2 = iv_obj_type.

    GET TIME STAMP FIELD lv_timestamp.

    lv_log-time_stmp = lv_timestamp.

    CALL FUNCTION 'BAL_LOG_MSG_ADD'

      EXPORTING

        i_log_handle  = mv_log_handle

        i_s_msg       = lv_log

      EXCEPTIONS

        log_not_found = 1

        OTHERS        = 2.

    IF sy-subrc <> 0.

      RAISE EXCEPTION TYPE cx_fatal_exception.

    ENDIF.

  ENDMETHOD.

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Instance Public Method ZCL_IM__ORDER_ACTION_LOG->IF_EX_TRIGGER_EXECUTED~TRIGGER_EXECUTED

* +-------------------------------------------------------------------------------------------------+

* | [--->] FLT_VAL                        TYPE        PPFDAPPL

* | [--->] IO_TRIGGER                     TYPE REF TO CL_TRIGGER_PPF

* +--------------------------------------------------------------------------------------</SIGNATURE>

  METHOD if_ex_trigger_executed~trigger_executed.

    DATA:

      lv_ppfdtt             TYPE ppfdtt,

      lv_object             TYPE REF TO object,

      lv_context            TYPE REF TO cl_doc_context_crm_order,

      lv_object_guid        TYPE crmt_object_guid,

      lv_header_guid        TYPE crmt_object_guid,

      lv_object_kind        TYPE crmt_object_kind,

      lv_appl_object        TYPE REF TO cl_doc_crm_order,

      lv_object_id          TYPE crmd_orderadm_h-object_id,

      lv_header_object_type TYPE swo_objtyp.

    CONSTANTS:

      lc_ppfdappl               TYPE ppfdappl VALUE 'CRM_ORDER'.

    INCLUDE crm_object_types_con.

    INCLUDE crm_object_kinds_con.

    INCLUDE crm_objectservices_con.

    CHECK sy-uname = 'WANGJER'.

    CHECK flt_val EQ lc_ppfdappl .

    CALL METHOD io_trigger->get_appl

      RECEIVING

        result = lv_object.

    lv_appl_object ?= lv_object .

    CALL METHOD lv_appl_object->get_crm_obj_guid

      RECEIVING

        result = lv_object_guid.

    CALL METHOD lv_appl_object->get_crm_obj_kind

      RECEIVING

        result = lv_object_kind.

    IF lv_object_kind EQ gc_object_kind-orderadm_h .

      MOVE lv_object_guid TO lv_header_guid .

    ELSE.

      CALL FUNCTION 'CRM_ORDERADM_I_READ_OW'

        EXPORTING

          iv_guid        = lv_object_guid

        IMPORTING

          ev_header_guid = lv_header_guid

        EXCEPTIONS

          item_not_found = 1

          OTHERS         = 2.

      IF sy-subrc <> 0.

        EXIT.

      ENDIF.

    ENDIF.

    CALL FUNCTION 'CRM_ORDERADM_H_READ_OW'

      EXPORTING

        iv_orderadm_h_guid     = lv_header_guid

      IMPORTING

        ev_object_type         = lv_header_object_type

      EXCEPTIONS

        admin_header_not_found = 1

        OTHERS                 = 2.

    IF sy-subrc <> 0.

      EXIT.

    ENDIF.

    SELECT SINGLE object_id FROM crmd_orderadm_h INTO lv_object_id WHERE guid = lv_header_guid.

    init_log( ).

    add_log( iv_object_id = lv_object_id iv_obj_type = lv_header_object_type ).

    save_log( ).

  ENDMETHOD.

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Instance Public Method ZCL_IM__ORDER_ACTION_LOG->IF_EX_TRIGGER_EXECUTED~TRIGGER_EXECUTED_IN_REPORT

* +-------------------------------------------------------------------------------------------------+

* | [--->] FLT_VAL                        TYPE        PPFDAPPL

* | [--->] IO_TRIGGER                     TYPE REF TO CL_TRIGGER_PPF

* +--------------------------------------------------------------------------------------</SIGNATURE>

  METHOD if_ex_trigger_executed~trigger_executed_in_report.

  ENDMETHOD.

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Instance Private Method ZCL_IM__ORDER_ACTION_LOG->INIT_LOG

* +-------------------------------------------------------------------------------------------------+

* +--------------------------------------------------------------------------------------</SIGNATURE>

  METHOD init_log.

    DATA: ls_log_header   TYPE bal_s_log.

    ls_log_header-object = 'PPF'.

    ls_log_header-subobject = 'PROCESSING'.

    CALL FUNCTION 'BAL_LOG_CREATE'

      EXPORTING

        i_s_log                 = ls_log_header

      IMPORTING

        e_log_handle            = mv_log_handle

      EXCEPTIONS

        log_header_inconsistent = 1

        OTHERS                  = 2.

    IF sy-subrc <> 0.

      RAISE EXCEPTION TYPE cx_fatal_exception.

    ENDIF.

  ENDMETHOD.

* <SIGNATURE>---------------------------------------------------------------------------------------+

* | Instance Private Method ZCL_IM__ORDER_ACTION_LOG->SAVE_LOG

* +-------------------------------------------------------------------------------------------------+

* +--------------------------------------------------------------------------------------</SIGNATURE>

  METHOD save_log.

    DATA: lt_log_handle TYPE bal_t_logh.

    APPEND mv_log_handle TO lt_log_handle.

    CLEAR mv_log_handle.

    CALL FUNCTION 'BAL_DB_SAVE'

      EXPORTING

        i_t_log_handle   = lt_log_handle

      EXCEPTIONS

        log_not_found    = 1

        save_not_allowed = 2

        numbering_error  = 3

        OTHERS           = 4.

    IF sy-subrc <> 0.

      RAISE EXCEPTION TYPE cx_fatal_exception.

    ENDIF.

  ENDMETHOD.

ENDCLASS.

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年07月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Created by Jerry Wang, last modified on May 28, 2014
相关产品与服务
NAT 网关
NAT 网关(NAT Gateway)提供 IP 地址转换服务,为腾讯云内资源提供高性能的 Internet 访问服务。通过 NAT 网关,在腾讯云上的资源可以更安全的访问 Internet,保护私有网络信息不直接暴露公网;您也可以通过 NAT 网关实现海量的公网访问,最大支持1000万以上的并发连接数;NAT 网关还支持 IP 级流量管控,可实时查看流量数据,帮助您快速定位异常流量,排查网络故障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档