IBAPI_ALM_ORDER_RELEASE
本BAPI可以将工单的状态设置为下达状态(REL)。但工单下达有一个前提:那就是工单必须已经维护了结算规则。本BAPI下达过的工单经过实测,在修改内容后保存时,会导致程序DUMP,因此,不建议使用此BAPI进行工单下达,建议使用BAPI:BAPI_ALM_ORDER_MAINTAIN 来进行工单下达。
BAPI的使用有通用的规则,比如BAPI在生成对象时,有最小的满足条件,即至少传入某些字段的值,才能保证生成相应的对象,上述表格中添加了黄色着色的字段的为本BAPI必须要传入的信息或者重要的传出信息;另外BAPI调用后,往往会至少返回一些个消息结构或者消息内表,这里需要根据返回的消息进行相应的处理:如果BAPI调用成功,则提交BAPI;如果BAPI调用失败,则回滚BAPI。
这里传入的工单需要带有前导0,如果没有,需要使用函数CONVERSION_EXIT_ALPHA_INPUT进行前导0补充,这里不详细说明,而对于传出的消息,需要逐条循环,使用MESSAGE_TEXT_BUILD函数来生成消息文本,以下为一个工单下达的完整示例代码:
"BAPI相关参数定义DATA: LS_MSG TYPE BAL_S_MSG, LT_MSG TYPE TABLE OF BAL_S_MSG. "BAPI调用返回消息DATA: LV_AUFNR TYPE AUFNR. "待下达的工单号DATA: LS_HEADER TYPE BAPI_ALM_ORDER_HEADER_E. "BAPI返回的工单头部信息DATA: LV_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 来进行工单下达