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