ABAP——系统状态&用户状态修改、查询

前言:在ABAP开发中有时候会涉及到状态的变更,比如销售订单的系统状态变更未审批->已审批、设备的在运->报废等,在这里就需要用到标准函数I_CHANGE_STATUS、STATUS_CHANGE_EXTERN针对这些对象的状态进行变更。
1.状态更改 使用案例:I_CHANGE_STATUS
ABAP——系统状态&用户状态修改、查询
文章图片

参数说明:
OBJNR——对象号;
ESTAT_INACTIVE——当前用户状态;
ESTAT_ACTIVE——要修改的用户状态;
STSMA——用户状态参数文件;
注意:修改状态之前要判断当前状态是否与要修改的状态相同,不相同则能修改,否则会出现系统异常。
以上参数可从SAP前台界面获取,举例销售订单:路径va03->菜单栏转到->抬头->状态
ABAP——系统状态&用户状态修改、查询
文章图片

如果从前台找不到,也可以从以下表中知道对应的参数:
【ABAP——系统状态&用户状态修改、查询】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_stsmaTYPE jsto-stsma, l_lineTYPE bsvx-sttxt, l_user_line TYPE bsvx-sttxt, l_stonrTYPE tj30-stonr.DATA:lv_objnr TYPE jest-objnr. "取对象号" SELECT SINGLE objnr INTO lv_objnr FROM vbak WHERE vbeln = -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.

    推荐阅读