IE02中修改设备数据主要分为两个部分:一般数据+状态(系统状态和用户自定义状态)。
一般数据修改BAPI:BAPI_EQUI_CHANGE
状态数据修改BAPI: STATUS_CHANGE_EXTERN(用户自定义状态)
STATUS_CHANGE_INTERN (系统状态)
上述BAPI 调用之后都需要CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
重点介绍STATUS_CHANGE_EXTERN用法
CALL FUNCTION 'STATUS_CHANGE_EXTERN'
EXPORTING
objnr = lv_objnr
user_status = lv_estat
set_inact = ''
EXCEPTIONS
object_not_found = 1
status_inconsistent = 2
status_not_allowed = 3
OTHERS = 4.
lv_objnr获取逻辑:SELECT SINGLE objnr INTO lv_objnr FROM equi WHERE equnr = lv_equnr."Equipment no.;
lv_estat对应TJ30-ESATA值;
参数set_inact很重要,当set_inact = ''时,可以更新设备对应的自定义状态为选择状态(X)并且不会删除原本的选定状态;set_inact = 'X' 无法更新设备自定义状态为选择状态或删除已经选定状态('')。如下示例:
对应上述的两种更新场景如下:
1:追加选定状态‘INIT’,即选定状态=ESD+INIT;
set_inact = ''
2:只选定‘INIT’,即要删除ESD的选定状态并选定INIT,选定状态=INIT;
需要做两次次操作:第一次选择INIT时:set_inact = ''
第二次删除ESD时:set_inact = 'X'
参考链接:https://archive.sap.com/discussions/thread/1151227