SAP PO接口,SPROXY生成入站代理类的增强

SAP PO接口日志管理。 可能是保存自荐表,可能是接口平台。

出站很简单, NEW zcl_interface_out)->init_instance'DEMO_001' )->executeEXPORTING output = ls_req IMPORTING input = ls_resp  ).

SPROXY生成入站代理类时,想要自动继承自己的接口平台ZCL_INTERFACE_IN:

 

复制代码
CL_PROXY_GEN_EMPTY_PROVIDER->GENERATE_INTERN( ).


method GENERATE_INTERN.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"$\SE:(1) Klasse CL_PROXY_GEN_EMPTY_PROVIDER, Methode GENERATE_INTERN, Anfang                                                                               A
*$*$-Start: (1)---------------------------------------------------------------------------------$*$*
ENHANCEMENT 1  ZES_SPROXY.    "active versionDATA: lr_text TYPE REF TO cl_proxy_gen_class_code.
    DATA: lr_sproxdat TYPE REF TO sproxdat.

    READ TABLE sproxdat REFERENCE INTO lr_sproxdat WITH KEY object1 = 'CLAS' object2 = 'CLAS'.
    DATA(lv_clsname) = lr_sproxdat->obj_name1.

    "Attribute
    READ TABLE sproxdat REFERENCE INTO DATA(lr_sproxdat1) WITH KEY object1 = 'METH' object2 = 'PAIM'.
    IF sy-subrc = 0.
      APPEND VALUE #(
        clsname = lv_clsname
        cmpname = 'GS_REQ'
        state = 1
        attdecltyp = 0
        attexpvirt = 0 "private
        typtype = 1    "type
        type = lr_sproxdat1->obj_name_r
      ) TO gen->attribute.
    ENDIF.

    READ TABLE sproxdat REFERENCE INTO DATA(lr_sproxdat2) WITH KEY object1 = 'METH' object2 = 'PAEX'.
    IF sy-subrc = 0.
      APPEND VALUE #(
        clsname = lv_clsname
        cmpname = 'GS_RES'
        state = 1
        attdecltyp = 0
        attexpvirt = 0 "private
        typtype = 3    "type ref to
        type = lr_sproxdat2->obj_name_r
      ) TO gen->attribute.
    ENDIF.

    "Inheritance
    gen->inheritance-clsname = lv_clsname.
    gen->inheritance-refclsname = 'ZCL_INTERFACE_IN'.
    gen->inheritance-state = seoc_state_implemented.


    "REDEFINITIONS
    gen->redefinitions = VALUE #(
      ( clsname    = lv_clsname
        refclsname = 'ZCL_INTERFACE_IN'
        mtdname    = 'PROCESS_BUSINESS_LOGIC'
      )
      ( clsname    = lv_clsname
        refclsname = 'ZCL_INTERFACE_IN'
        mtdname    = 'SET_PARAMETER'
      )
    ).

    "Method PROCESS_BUSINESS_LOGIC
    CREATE OBJECT lr_text.
    CALL METHOD lr_text->append
      EXPORTING
        text = :
        |*--------------------------------------------------------------------*|,
        |* \| [--->] gs_req                         TYPE        { lr_sproxdat1->obj_name_r }|,
        |* \| [--->] gs_res                         TYPE REF TO { lr_sproxdat2->obj_name_r }|,
        |* 处理失败需要抛出异常   raise_exception( '失败' ).|,
        |*--------------------------------------------------------------------*|.
    APPEND VALUE #( cpdname = 'PROCESS_BUSINESS_LOGIC' redefine = abap_true source = lr_text->source ) TO gen->methods_with_source.

    "Method SET_PARAMETER
    CLEAR lr_text->source.
    CALL METHOD lr_text->append
      EXPORTING
        text = :
        ||,
        |*    ms_simp_dlog-seqid = gs_req-mt_demo001_req-line-matnr.|,
        ||.
    APPEND VALUE #( cpdname = 'SET_PARAMETER' redefine = abap_true source = lr_text->source ) TO gen->methods_with_source.

    "Method SI_*_IS
    CLEAR lr_text->source.
    LOOP AT sproxdat REFERENCE                           "#EC CI_STDSEQ
      INTO lr_sproxdat
      WHERE object = 'INTF' AND obj_name = intf_name AND object1 = 'METH' AND object2 = 'METH'.

      CALL METHOD lr_text->append
        EXPORTING
          text = :
       `*** **** INSERT IMPLEMENTATION HERE **** ***`,      "#EC NOTEXT
       ``,
       `    gs_req = input.`,
       `    gs_res = REF #( output ).`,
       `    init_instance('DEMO_001')->execute( EXPORTING output = gs_req IMPORTING input = gs_res ).`.


      gen->add_method(
        refclsname = intf_name
        method     = lr_sproxdat->obj_name1
        source     = lr_text->source
      ).

    ENDLOOP.

    gen->save( overwrite = overwrite  activate = activate  devclass = devclass  genflag = genflag suppress_dialogs = suppress_dialogs ).

    RETURN.


ENDENHANCEMENT.
*$*$-End:   (1)---------------------------------------------------------------------------------$*$*

  generate_methods( sproxdat = sproxdat ).
  gen->save( overwrite = overwrite  activate = activate  devclass = devclass  genflag = genflag suppress_dialogs = suppress_dialogs ).

endmethod.
复制代码

 

posted @   yangliu11223  阅读(99)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示