維修工單下達BAPI

2021-09-23 10:27:18 字數 3258 閱讀 7703

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

ms**1 

= ls_msg

-ms**1

ms**2 

= ls_msg

-ms**2

ms**3 

= ls_msg

-ms**3

ms**4 

= ls_msg

-ms**4

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'

.    

"回滾bapi

else

.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 來進行工單下達