维修工单下达BAPI

    xiaoxiao2022-07-04  164

    IBAPI_ALM_ORDER_RELEASE

    本BAPI可以将工单的状态设置为下达状态(REL)。但工单下达有一个前提:那就是工单必须已经维护了结算规则。本BAPI下达过的工单经过实测,在修改内容后保存时,会导致程序DUMP,因此,不建议使用此BAPI进行工单下达,建议使用BAPIBAPI_ALM_ORDER_MAINTAIN 来进行工单下达

     

    BAPI的使用有通用的规则,比如BAPI在生成对象时,有最小的满足条件,即至少传入某些字段的值,才能保证生成相应的对象,上述表格中添加了黄色着色的字段的为本BAPI必须要传入的信息或者重要的传出信息;另外BAPI调用后,往往会至少返回一些个消息结构或者消息内表,这里需要根据返回的消息进行相应的处理:如果BAPI调用成功,则提交BAPI;如果BAPI调用失败,则回滚BAPI。

    这里传入的工单需要带有前导0,如果没有,需要使用函数CONVERSION_EXIT_ALPHA_INPUT进行前导0补充,这里不详细说明,而对于传出的消息,需要逐条循环,使用MESSAGE_TEXT_BUILD函数来生成消息文本,以下为一个工单下达的完整示例代码:

     

    "BAPI相关参数定义DATALS_MSG TYPE BAL_S_MSG,     LT_MSG TYPE TABLE OF BAL_S_MSG.     "BAPI调用返回消息DATALV_AUFNR TYPE AUFNR.            "待下达的工单号DATALS_HEADER TYPE BAPI_ALM_ORDER_HEADER_E.  "BAPI返回的工单头部信息DATALV_MESSAGE TYPE STRING,          "消息文本变量     EV_TYPE TYPE BAPI_MTYPE,          "消息类型     EV_MESSAGE TYPE BAPI_MSG.         "消息文本CLEAR:EV_TYPE,EV_MESSAGE,LV_MESSAGE,LS_MSG,LV_AUFNR,LS_HEADER,LT_MSG.*-----1 准备BAPI传入的参数LV_AUFNR '000004001837'.*-----2 调用BAPI创建工单CALL FUNCTION 'IBAPI_ALM_ORDER_RELEASE'   EXPORTING    IV_ORDERID    LV_AUFNR   IMPORTING    ES_HEADER_RESULT LS_HEADER   TABLES    ET_MESSAGES    LT_MSG.*-----3 根据BAPI执行结果,返回结果处理LOOP AT LT_MSG INTO LS_MSG WHERE MSGTY CA 'EA'.   CALL FUNCTION 'MESSAGE_TEXT_BUILD'     EXPORTING      MSGID LS_MSG-MSGID       MSGNR LS_MSG-MSGNO       MSGV1 LS_MSG-MSGV1       MSGV2 LS_MSG-MSGV2       MSGV3 LS_MSG-MSGV3       MSGV4 LS_MSG-MSGV4     IMPORTING      MESSAGE_TEXT_OUTPUT LV_MESSAGE.   IF EV_MESSAGE IS INITIAL.    EV_MESSAGE LV_MESSAGE.   ELSE.      CONCATENATE LV_MESSAGE '/' EV_MESSAGE INTO EV_MESSAGE."拼接输出的失败消息   ENDIF.ENDLOOP.IF  SY-SUBRC 0.  EV_TYPE 'E'.   CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.    "回滚BAPIELSE.   CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'      "提交BAPI   EXPORTING     WAIT 'X'.  EV_TYPE 'S'.    "将输出的消息类型设置为S   CONCATENATE '工单' LV_AUFNR '下达成功!' INTO EV_MESSAGE.*  MESSAGE EV_MESSAGE TYPE 'I'.ENDIF.

     

     

     

    本BAPI成功执行后,返回的消息内表ET_MESSAGES中,如果内表为空,则表示BAPI执行成功,则可以提交BAPI;如果消息中有A或者E类型的,则视为下达失败,先回滚BAPI,同时将消息内表中所有的E和A类型的消息拼接输出,用来告诉用户应该去纠正那些问题。传入的工单号必须带有前导0。

    本BAPI下达后的工单,有一定的BUG,当对下达的工单进行修改时,会造成程序DUMP。原因是BAPI的下达逻辑存在BUG,导致了工单的状态的不一致,从而造成修改时的DUMP。因此不建议使用此BAPI来进行工单下达,强烈建议使用BAPI:BAPI_ALM_ORDER_MAINTAIN 来进行工单下达

    最新回复(0)