Loading

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

前言:在ABAP开发中有时候会涉及到状态的变更,比如销售订单的系统状态变更未审批->已审批、设备的在运->报废等,在这里就需要用到标准函数I_CHANGE_STATUSSTATUS_CHANGE_EXTERN针对这些对象的状态进行变更。

1.状态更改

使用案例:I_CHANGE_STATUS

image

参数说明:
OBJNR——对象号;
ESTAT_INACTIVE——当前用户状态;
ESTAT_ACTIVE——要修改的用户状态;
STSMA——用户状态参数文件;
注意:修改状态之前要判断当前状态是否与要修改的状态相同,不相同则能修改,否则会出现系统异常。

以上参数可从SAP前台界面获取,举例销售订单:路径va03->菜单栏转到->抬头->状态

image
如果从前台找不到,也可以从以下表中知道对应的参数:

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.
posted @ 2021-11-10 20:22  Gjboy666  阅读(2076)  评论(0编辑  收藏  举报