6 BAPI

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6.1 基础篇

在这里插入图片描述

6.1.1 bapi

在这里插入图片描述

6.1.2 给用户上锁bapi

在这里插入图片描述

6.2 直接上实例

在这里插入图片描述

6.2.1 建输入参数结构

在这里插入图片描述

se11建结构1

在这里插入图片描述

在这里插入图片描述

se11建结构2,对应后台表JEST和TJ30T

在这里插入图片描述

查看表

在这里插入图片描述

在这里插入图片描述

6.2.2 建函数组和函数

在这里插入图片描述

在这里插入图片描述

6.2.2.1 远程调用

在这里插入图片描述

6.2.2.2 远程调用 输入参数,参考结构ZBAPI_ORDER_STATUS_IMPORTA,值传递

在这里插入图片描述

6.2.2.3 输出是BAPI类型的输出,系统定义的,也是值传递

在这里插入图片描述

6.2.2.4 表是ZBAPISTAT的结构

在这里插入图片描述

6.2.3 函数代码

6.2.3.1 函数组全局信息
在这里插入代码片
FUNCTION-POOL ZBAPI_GROUP.                  "MESSAGE-ID ..

* INCLUDE LZBAPI_GROUPD...                   " Local class definition
DATA: l_char1 type char2,

      l_char2 type char2.

* 把表TJ30T里面的状态ID istat  短描述 txt04和中长描述txt30给拉出来形成结构
TYPES :
  BEGIN OF Type_tj02t,
    istat like tj02t-istat,
    txt04 like tj02t-txt04,
    txt30 like tj02t-txt30,
  END OF type_tj02t.

* 根据结构来定义内表和结构变量
DATA:

  T_BAPISTAT like ZBAPISTAT OCCURS 0,
  G_BAPISTAT like ZBAPISTAT,

  t_tj02t TYPE type_tj02t OCCURS 0,
  g_tj02t type type_tj02t .

* 返回参数
DATA:
      BEGIN OF MESSAGE,
        MSGTY like SY-MSGTY,
        MSGID like SY-MSGID,
        MSGNO like SY-MSGNO,
        MSGV1 like SY-MSGV1,
        MSGV2 like SY-MSGV2,
        MSGV3 like SY-MSGV3,
        MSGV4 like SY-MSGV4,
       END OF MESSAGE.
6.2.3.2 函数模块
FUNCTION Z_BAPI_GET_ORDER_STATUS.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(BAPI_ORDER_STATUS_IMPORT) TYPE  ZBAPI_ORDER_STATUS_IMPORTA
*"  EXPORTING
*"     VALUE(RETURN) TYPE  BAPIRETURN
*"  TABLES
*"      T_BAPISTAT STRUCTURE  ZBAPISTAT
*"----------------------------------------------------------------------

*定义两个变量,其中l_aufnr是用来定义生产订单编号的临时变量,而 l_objnr是存储jest表中订单的临时变量,后面主要是拼接OR开头的字符串

  DATA:
     l_aufnr like afko-aufnr,
     l_objnr like jest-objnr.

* 第一步,将输入bapi_order_status_import的ID与afko中的aufnr对比,看看是否在生产订单表中存在该订单,不存在则报返回信息
  Select SINGLE aufnr
      from afko
      into l_aufnr
      where aufnr = bapi_order_status_import-orderid.

  IF sy-subrc ne 0.
    clear message.
    message-msgty = 'E'.
    message-msgid ='Z3'.
    message-msgno = '000'.
    message-msgv1 = BAPI_ORDER_STATUS_IMPORT-orderid.
    PERFORM set_return_message USING message
                                CHANGING return.

    IF 1 = 2.
      MESSAGE e000(z3).
    ENDIF.

  ENDIF.

* 第二步,检查返回信息是否初始化,拼接bapi_order_status_import的ID的前缀’orCHECK return is INITIAL.

  CONCATENATE 'OR' bapi_order_status_import-orderid INTO l_objnr.

*  第三步 ,检查选项i_excludeinactive是否输入是X,如果是那么从jest状态表中把三个字段取出来,同时过滤状态是X的。啥都没查到继续抛信息
  IF bapi_order_status_import-i_excludeinactive ='X'.
    SElect objnr stat inact
      from jest
      into TABLE t_bapistat
      where objnr = l_objnr and inact <> 'X'.
   ELSE.
     SElect objnr stat inact
      from jest
      into TABLE t_bapistat
      where objnr = l_objnr .
  ENDIF.


  IF sy-subrc <> 0.
     clear message.
    message-msgty = 'E'.
    message-msgid ='Z3'.
    message-msgno = '001'.
    message-msgv1 = BAPI_ORDER_STATUS_IMPORT-orderid.
    PERFORM set_return_message USING message
                                CHANGING return.

    IF 1 = 2.
      MESSAGE e000(z3).
    ENDIF.

  ENDIF.

*  第四步 ,从tj02t文本描述表查询状态名istat、文本信息,同时条件中过滤了i_spras(语言),当然检索了内表t_bapistat,将信息放到内表t_tj02t(这个内表在全局变量定义了)
  CHECK return is INITIAL.

  select istat txt04 txt30
     from tj02t
    INTO table t_tj02t
    FOR ALL ENTRIES IN t_bapistat
    where istat = t_bapistat-stat And
          spras = bapi_order_status_import-i_spras.



*  第五步 ,通过结构g_bapistat循环内表t_bapistat,读内表信息t_tj02t(用关键字istat状态名来判断,读到g_tj02t结构中,读到了就将信息写入到g_bapistat结构中,然后修改内表t_bapistat中的相关信息
    sort t_tj02t by istat.

    LOOP AT t_bapistat INTo g_bapistat.
      READ TABLE t_tj02t with key istat = g_bapistat-stat BINARY SEARCH
        into g_tj02t.
      IF sy-subrc = 0.
        move:
        g_tj02t-txt04 to g_bapistat-txt04,
        g_tj02t-txt30 to g_bapistat-txt30.
        MODIFY t_bapistat from g_bapistat TRANSPORTING txt04 txt30.




      ENDIF.
      ENDLOOP.
ENDFUNCTION.
6.2.3.3 模块调用的子程序,建在函数组外面

在这里插入图片描述

在这里插入图片描述

*----------------------------------------------------------------------*
***INCLUDE LZBAPI_GROUPF01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  SET_RETURN_MESSAGE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_MESSAGE  text
*      <--P_RETURN  text
*----------------------------------------------------------------------*
FORM SET_RETURN_MESSAGE  USING    value(P_MESSAGE) like message
                         CHANGING P_RETURN like bapireturn.
  check not message is INITIAL.
  CALL FUNCTION 'BALW_BAPIRETURN_GET'
    EXPORTING
      TYPE                             = p_message-msgty
      CL                               = p_message-msgid
      NUMBER                           = p_message-msgno
      PAR1                             = p_message-msgv1
      PAR2                             = p_message-msgv2
      PAR3                             = p_message-msgv3
      PAR4                             = p_message-msgv4
*     LOG_NO                           = ' '
*     LOG_MSG_NO                       = ' '
    IMPORTING
      BAPIRETURN                       = p_return
   EXCEPTIONS
     ONLY_2_CHAR_FOR_MESSAGE_ID       = 1
     OTHERS                           = 2
            .
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.


ENDFORM.                    " SET_RETURN_MESSAGE
6.2.3.4 运行

在这里插入图片描述

点击输入参数

在这里插入图片描述

结果如下:
在这里插入图片描述

跟生产订单对比下,感觉好像对不上啊。以后再研究

在这里插入图片描述

如果输入一个不存在的订单呢?

在这里插入图片描述

6.3 生成bapi

6.3.1 SWO1创建,SAP自己封装的一层

在这里插入图片描述

在这里插入图片描述

6.3.2 添加API

在这里插入图片描述

在这里插入图片描述

下一步,定义table仅为输出参数

在这里插入图片描述

在这里插入图片描述

可以看到方法了,将方法发布实施

在这里插入图片描述

执行,结果和单独执行函数是一样的
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6.4 再看BAPI

首先选择过滤,查看全部的BAPI,找到ZORDERSTAT,发现状态是未释放
在这里插入图片描述

6.4.1 释放对象类型

在这里插入图片描述

在这里插入图片描述

再点对象类型组件释放,提示

在这里插入图片描述

需要SE37先把函数释放

在这里插入图片描述

再点对象类型组件释放,提示OK

在这里插入图片描述

在这里插入图片描述

4.生成函数对象

在这里插入图片描述

再看BAPI状态
在这里插入图片描述

6.4.2 当函数名和参数不含BAPI时,会报错

在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐