前言:在ABAP開發中有時候會涉及到狀態的變更,比如銷售訂單的系統狀態變更未審批->已審批、設備的在運->報廢等,在這里就需要用到標准函數I_CHANGE_STATUS、STATUS_CHANGE_EXTERN針對這些對象的狀態進行變更。
1.狀態更改
使用案例:I_CHANGE_STATUS
參數說明:
OBJNR——對象號;
ESTAT_INACTIVE——當前用戶狀態;
ESTAT_ACTIVE——要修改的用戶狀態;
STSMA——用戶狀態參數文件;
注意:修改狀態之前要判斷當前狀態是否與要修改的狀態相同,不相同則能修改,否則會出現系統異常。
以上參數可從SAP前台界面獲取,舉例銷售訂單:路徑va03->菜單欄轉到->抬頭->狀態
如果從前台找不到,也可以從以下表中知道對應的參數:
TJ02——系統狀態表:CRTD.REL等系統狀態對象值;
TJ02T——系統狀態文本表:CRTD.REL等系統狀態對象值;
TJ03——對象類型表:
TJ03T——對象類型文本表:
TJ20——狀態參數文件:狀態參數文件ZNPCON等值;
TJ30——用戶狀態表:根據參數文件找對應的用戶狀態:appr已批准用戶狀態等值;可根據狀態參數文件在此表中查詢對象號。
JEST——單獨對象狀態:輸入OR+000000+工單號可查詢該工單的所有狀態Number;
JSTO——狀態對象信息:
2.狀態查詢
使用系統標准函數:STATUS_TEXT_EDIT
FORM frm_get_order_status.
DATA:l_stsma TYPE jsto-stsma,
l_line TYPE bsvx-sttxt,
l_user_line TYPE bsvx-sttxt,
l_stonr TYPE tj30-stonr.
DATA:lv_objnr TYPE jest-objnr.
"取對象號"
SELECT SINGLE objnr INTO lv_objnr FROM vbak WHERE vbeln = <fs_opt>-vbeln.
CALL FUNCTION 'STATUS_TEXT_EDIT'
EXPORTING
* CLIENT = SY-MANDT
flg_user_stat = 'X'
objnr = lv_objnr "對象號"
only_active = 'X'
spras = sy-langu
IMPORTING
e_stsma = l_stsma "對象狀態參數文件"
line = l_line "狀態文本:對象的狀態拼接而成"
user_line = l_user_line "用戶狀態文本"
stonr = l_stonr
EXCEPTIONS
object_not_found = 1
OTHERS = 2.
SEARCH l_user_line FOR 'B'. "如果存在B字符,則對象已審批"
IF sy-subrc = 0.
ENDIF.
ENDFORM.