ABAP小白开发操作手册+(四)新增RFC接口

目录

开发类型:

开发申请:​

开发步骤:

代码如下:


开发类型:

新增客户订单下发接收接口

开发申请:

虽然开发申请上面只写了表数据,没有写导出参数,但是大多数情况下是需要导出参数的,方便判断该接口是否执行成功,或是失败以及失败的消息返回。需要开发人员和业务顾问沟通,确认一下开发申请里的参数。

沟通后,我们加上了这样的两个导出参数。

开发步骤:

因为开发申请上面已经预定了该接口的名称,我们直接使用SE37新建接口就好了。

新建好接口后,就可以开始填充导入参数、导出参数、表等参数信息。(本次开发的这个接口,没有导入参数)

这里参数T_HEADER和T_ITEMS分别参考了两个结构,建立表参考的结构:使用SE11,在数据类型栏位下,建立结构

选择结构

将描述和字段添加进去

注意:当数据类型为CURR时,需要参考其他表的字段(QUAN、CURR等数据类型都需要参考其他表和字段)

点击检查按钮,选择相应模块,进行保存和激活

激活成功后,可以在接口中参考

同样的操作,将T_ITEMS也关联上一个关联类型

点击源代码,就可以看到系统已经自动生成注释,介绍了该接口的参数

这是日志记录代码(各个公司会自行开发并封装好,意在调用这个接口就会生成一个消息记录,方便后期运维查询)

在接口中,不用再次声明导入参数、导出参数、表等变量,都可以直接使用

将代码逻辑写入即可检查、激活、测试、上线,以上就是普遍的RFC的接口创建方式。外围系统调用的话,要将接口设置为远程启用的模块。

代码在测试时,如下截图:

代码如下:


FUNCTION ZZSD_ORDERERECEIVE_FROM_ZT.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  EXPORTING
*"     VALUE(E_RTYPE) TYPE  BAPI_MTYPE
*"     VALUE(E_RTMSG) TYPE  BAPI_MSG
*"  TABLES
*"      T_HEADER STRUCTURE  ZSSD0184
*"      T_ITEMS STRUCTURE  ZSSD0185
*"----------------------------------------------------------------------
  MACRO_SAVE_LOG_BEFORE_PROC.

  MACRO_SAVE_LOG_AFTER_PROC 'IN'."日志记录传入数据
  DATA:LS_ZTSD0146 TYPE ZTSD0146.
  DATA:GT_ZTSD0146 TYPE TABLE OF ZTSD0146.
  DATA:GS_ZTSD0146 TYPE ZTSD0146.
  DATA:GS_ZTSD0145 TYPE ZTSD0145.
  DATA FLAG VALUE 0."校验通过
*  1.核对采购订单界面加锁,校验采购订单是否正在处理,若正在处理则报错"采购订单xxx正在被用户xxx处理,请稍后再推送。"
  "判断是否被锁定
  LOOP AT T_HEADER.
    DATA(LV_PURCHASENO) = T_HEADER-PURCHASENO.
    T_HEADER-PURCHASENO = T_HEADER-CONTRACTNUMBER."采购订单号等于中台传输的CONTRACTNUMBER字段
    T_HEADER-CONTRACTNUMBER = LV_PURCHASENO.
    CLEAR:LV_PURCHASENO.
*    如果用户的采购订单号为空,直接报错退出
    IF T_HEADER-CONTRACTNUMBER IS INITIAL.
      E_RTYPE = 'E'.
      E_RTMSG = |采购订单:{ T_HEADER-CONTRACTNUMBER  } 的合同号:{ T_HEADER-PURCHASENO } 为空,请重新确认。|.
    ELSE.
      IF T_HEADER-PURCHASENO IS NOT INITIAL.
        CALL FUNCTION 'ENQUEUE_EZ_ZTSD0145'
          EXPORTING
            MODE_ZTSD0145  = 'X'
            MANDT          = SY-MANDT
            PURCHASENO     = T_HEADER-PURCHASENO
            X_PURCHASENO   = ' '
            _SCOPE         = '1'
            _WAIT          = ' '
            _COLLECT       = ' '
          EXCEPTIONS
            FOREIGN_LOCK   = 1
            SYSTEM_FAILURE = 2
            OTHERS         = 3.
        IF SY-SUBRC <> 0.
          E_RTYPE = 'E'.
          E_RTMSG = '采购订单' && T_HEADER-CONTRACTNUMBER  && '合同号' && T_HEADER-PURCHASENO  && '正在被用户处理,请稍后再推送。'.
        ENDIF.
      ENDIF.

      IF E_RTYPE <> 'E'.
        IF T_HEADER-PUSHTYPE <> '1' AND T_HEADER-PUSHTYPE <> '3'.
          E_RTYPE = 'E'.
          E_RTMSG = '只允许推送类型为"1 新增"或"3 删除"'.
*      若不为3
        ELSEIF T_HEADER-PUSHTYPE = '1'."创建
          SELECT RESULTTYPE,CRDAT,CRTIM,GUID,PUSHTYPE
          FROM ZTSD0147
*      INNER  JOIN ZTSD0147 ON ZTSD0147~GUID = ZTSD0145~GUID
          INTO TABLE @DATA(LT_ZTSD0147)
          WHERE ZTSD0147~BSTKD  = @T_HEADER-PURCHASENO
            AND RESULTTYPE = '1'.
*      WHERE ZTSD0145~PURCHASENO = @T_HEADER-PURCHASENO.

          SORT LT_ZTSD0147 BY CRDAT DESCENDING CRTIM DESCENDING.
          READ TABLE LT_ZTSD0147 INTO DATA(LS_ZTSD0147) INDEX 1.
          IF SY-SUBRC = 0 AND  LS_ZTSD0147-PUSHTYPE = '1'.
            E_RTYPE = 'E'.
            E_RTMSG = '采购订单' && T_HEADER-CONTRACTNUMBER && '合同号' && T_HEADER-PURCHASENO && '推送类型“' && T_HEADER-PUSHTYPE && ' 新增”HKC已核对为确认,请联系HKC销售处理'.
          ELSE.
            FLAG = 1."校验通过
            E_RTYPE = 'S'.
            E_RTMSG =  '采购订单' && T_HEADER-CONTRACTNUMBER && '合同号' && T_HEADER-PURCHASENO && '传输成功!'.
          ENDIF.

*      若为3
        ELSEIF T_HEADER-PUSHTYPE = '3'."删除
*          SELECT LIKP~UVWAK ,LIKP~VBELN
*            FROM ZTSD0035
*    INNER JOIN ZTSD0036 ON ZTSD0036~VBELN = ZTSD0035~VBELN_DH
*            INNER JOIN VBAP ON VBAP~ZZCFDH = ZTSD0035~ZCFDH AND VBAP~ZZCFHH = ZTSD0035~POSNR
*            INNER JOIN LIPS ON VBAP~VBELN = LIPS~VGBEL AND VBAP~POSNR = LIPS~VGPOS
*            INNER JOIN LIKP ON LIPS~VBELN = LIKP~VBELN
*            INTO  TABLE @DATA(LT_LIKP)
**        WHERE ZTSD0035~VBELN_DH = @T_HEADER-PURCHASENO
*            WHERE ZTSD0036~BSTKD = @T_HEADER-PURCHASENO
*            AND LIKP~WBSTK = 'C'.
*
*          READ TABLE LT_LIKP INTO DATA(LS_LIKP) WITH KEY UVWAK = 'C'.
*          IF SY-SUBRC = 0.
*            E_RTYPE = 'E'.
*            E_RTMSG = '采购订单' && T_HEADER-CONTRACTNUMBER && '合同号' && T_HEADER-PURCHASENO && '已有交货单' && LS_LIKP-VBELN && '过账,请联系HKC销售处理'.
*          ELSE.
            FLAG = 1."校验通过
            E_RTYPE = 'S'.
            E_RTMSG = '采购订单' && T_HEADER-CONTRACTNUMBER && '合同号' && T_HEADER-PURCHASENO  && '传输成功!'.
*          ENDIF.
        ENDIF.
      ENDIF.

      IF FLAG = 1.
*更改ZTSD0145
        SELECT *
        FROM ZTSD0145
        INTO TABLE @DATA(LT_ZTSD0145)
        WHERE PURCHASENO = @T_HEADER-PURCHASENO.
        SORT LT_ZTSD0145 BY CRDAT DESCENDING CRTIM DESCENDING.
        READ TABLE LT_ZTSD0145 INTO DATA(LS_ZTSD0145) INDEX 1.
        IF SY-SUBRC <> 0 .
          CLEAR: LS_ZTSD0145.
*      生成UUID 创建人
          CALL FUNCTION 'GUID_CREATE'
            IMPORTING
              EV_GUID_32 = LS_ZTSD0145-UUID.
          MOVE-CORRESPONDING T_HEADER TO LS_ZTSD0145.
          LS_ZTSD0145-CRDAT = SY-DATUM.
          LS_ZTSD0145-CRTIM = SY-UZEIT.
          LS_ZTSD0145-CRNAM = SY-UNAME.
          MODIFY ZTSD0145 FROM LS_ZTSD0145.
*ZTSD0146
          LOOP AT T_ITEMS INTO DATA(LS_ITEM).
*      生成UUID 创建人
            MOVE-CORRESPONDING LS_ITEM  TO LS_ZTSD0146.
            LS_ZTSD0146-UUID = LS_ZTSD0145-UUID.
            LS_ZTSD0146-PURCHASENO = T_HEADER-PURCHASENO.
            LS_ZTSD0146-CRDAT = SY-DATUM.
            LS_ZTSD0146-CRTIM = SY-UZEIT.
            LS_ZTSD0146-CRNAM = SY-UNAME.
            MODIFY ZTSD0146 FROM LS_ZTSD0146.
            CLEAR: LS_ZTSD0146.
          ENDLOOP.

        ELSEIF SY-SUBRC = 0 AND LS_ZTSD0145-GUID IS NOT INITIAL.
          CLEAR: LS_ZTSD0145.
*  CALL 随机数.UUID 创建人
          CALL FUNCTION 'GUID_CREATE'
            IMPORTING
              EV_GUID_32 = LS_ZTSD0145-UUID.
          MOVE-CORRESPONDING T_HEADER TO LS_ZTSD0145.
          LS_ZTSD0145-CRDAT = SY-DATUM.
          LS_ZTSD0145-CRTIM = SY-UZEIT.
          LS_ZTSD0145-CRNAM = SY-UNAME.
          MODIFY ZTSD0145 FROM LS_ZTSD0145.
*ZTSD0146
          LOOP AT T_ITEMS INTO LS_ITEM.
*      生成UUID 创建人
            MOVE-CORRESPONDING LS_ITEM  TO LS_ZTSD0146.
            LS_ZTSD0146-UUID = LS_ZTSD0145-UUID.
            LS_ZTSD0146-PURCHASENO = T_HEADER-PURCHASENO.
            LS_ZTSD0146-CRDAT = SY-DATUM.
            LS_ZTSD0146-CRTIM = SY-UZEIT.
            LS_ZTSD0146-CRNAM = SY-UNAME.
            MODIFY ZTSD0146 FROM LS_ZTSD0146.
            CLEAR: LS_ZTSD0146.
          ENDLOOP.

        ELSEIF SY-SUBRC = 0 AND  LS_ZTSD0145-GUID IS  INITIAL.
*    更改人.
          CLEAR: GS_ZTSD0145.
          GS_ZTSD0145-UUID = LS_ZTSD0145-UUID.
          GS_ZTSD0145-CRDAT = LS_ZTSD0145-CRDAT.
          GS_ZTSD0145-CRTIM = LS_ZTSD0145-CRTIM.
          GS_ZTSD0145-CRNAM = LS_ZTSD0145-CRNAM.
          CLEAR: LS_ZTSD0145.
          MOVE-CORRESPONDING GS_ZTSD0145 TO LS_ZTSD0145.
          MOVE-CORRESPONDING T_HEADER TO LS_ZTSD0145.
          LS_ZTSD0145-CHDAT = SY-DATUM.
          LS_ZTSD0145-CHTIM = SY-UZEIT.
          LS_ZTSD0145-CHNAM = SY-UNAME.
          MODIFY ZTSD0145 FROM LS_ZTSD0145.
*ZTSD0146
          SELECT *
          FROM ZTSD0146
          INTO TABLE GT_ZTSD0146
          WHERE UUID = LS_ZTSD0145-UUID.
*DELETE 删除ZTSD0146所有已经核对的UUID数据-
          DELETE ZTSD0146 FROM TABLE GT_ZTSD0146.
          LOOP AT T_ITEMS INTO LS_ITEM.
*     修改人
            READ TABLE GT_ZTSD0146 INTO GS_ZTSD0146 WITH KEY PURCHASENO = T_HEADER-PURCHASENO  PURCHASELINENO = LS_ITEM-PURCHASELINENO.
            IF SY-SUBRC = 0.
              LS_ZTSD0146-CRDAT = GS_ZTSD0146-CRDAT.
              LS_ZTSD0146-CRTIM = GS_ZTSD0146-CRTIM.
              LS_ZTSD0146-CRNAM = GS_ZTSD0146-CRNAM.
            ELSE.
              LS_ZTSD0146-CRDAT = SY-DATUM.
              LS_ZTSD0146-CRTIM = SY-UZEIT.
              LS_ZTSD0146-CRNAM = SY-UNAME.
            ENDIF.
            MOVE-CORRESPONDING LS_ITEM  TO LS_ZTSD0146.
            LS_ZTSD0146-UUID = LS_ZTSD0145-UUID.
            LS_ZTSD0146-PURCHASENO = T_HEADER-PURCHASENO.
            LS_ZTSD0146-CHDAT = SY-DATUM.
            LS_ZTSD0146-CHTIM = SY-UZEIT.
            LS_ZTSD0146-CHNAM = SY-UNAME.
            MODIFY ZTSD0146 FROM LS_ZTSD0146.
            CLEAR: GS_ZTSD0146,LS_ZTSD0146,LS_ITEM.
          ENDLOOP.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDLOOP.
  MACRO_SAVE_LOG_AFTER_PROC 'OUT'."日志记录传出数据
ENDFUNCTION.

  • 23
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值