zoukankan      html  css  js  c++  java
  • 如何自行给指定的SAP OData服务添加自定义日志记录功能

    有的时候,SAP标准的OData实现或者相关的工具没有提供我们想记录的日志功能,此时可以利用SAP系统强大的扩展特性,进行自定义日志功能的二次开发。

    以SAP CRM Fiori应用“My Opportunity”为例:我们首先在其OData服务CRM_OPPORTUNITY的实现类CL_CRM_OPPORTUNITY_IMPL的构造函数方法CONSTRUCTOR里设置一个值为GET_BADI的动态断点,这样调试模式下,ABAP调试器会自动停在所有出现了GET BADI关键字调用的地方。

    clipboard1,1

    通过这个方法,我们很快找到了一个能够放置我们自定义日记记录逻辑的地方:就是代码85行的BAdI定义,CRM_OPPORTUNITY_ODATA_DB. 在SAP标准OData服务实现的读取操作里,每次从数据库调用One Order API读取Opportunity数据后,都要执行这个BAdI.

    clipboard2,2

    这是该BAdI执行的调用栈:

    clipboard3,3

    事务码SE18,根据我们刚刚找到的BAdI定义创建一个增强实现:

    clipboard4,4
    clipboard5,5
    clipboard6,6

    这个增强实现类ZCL_JERRY_ODATA_TRACE里,现在可以编写我们的日志记录逻辑了。

    首先创建一个数据库表,用于存放我们的日志记录。为简单起见,我仅仅记录了请求的用户名,请求日期和时间,大家可以根据自己实际需求添加相关字段。

    clipboard7,7

    增强代码也很简单:

    DATA(ls_log) = VALUE zorder_guid( user_name = sy-uname
          req_date = sy-datum req_time = sy-timlo ).
    
        CALL FUNCTION 'SYSTEM_UUID_CREATE'
          IMPORTING
            uuid = ls_log-guid.
    
        INSERT zorder_guid FROM ls_log.
    

    clipboard8,8

    激活这个增强后,到Fiori UI上随便做几个点击操作:

    clipboard9,9

    回到我们自定义的日志记录表里,发现填充了一些记录了,这个自定义日志记录功能就实现了。

    clipboard10,10

    要获取更多Jerry的原创文章,请关注公众号"汪子熙":
    公众号截图

  • 相关阅读:
    hdu3336 Count the string 扩展KMP
    hdu3294 Girls' research manacher
    hdu3068 最长回文 manacher
    hdu2886 Lou 1 Zhuang 数学/快速幂
    hdu2841 Visible Trees 容斥原理
    hdu2819 Swap 二分图匹配
    RandomAccess接口的使用
    java集合框架
    java集合简介
    JDK,JRE,JVM的区别与联系
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/11968028.html
Copyright © 2011-2022 走看看