1

如果选中了“LOCK”复选框,我的程序只是将锁锁定在用户身上。

一切正常,用户记录在USR02. 当这种变化发生时,我希望它也反映在 中IT_USR02,即 DB 表 USR02 和 itabit_usr02应该是相同的。

SELECT-OPTIONS: USER_ID FOR USR02-BNAME.
  START-OF-SELECTION.
  SELECT BNAME
         USTYP
         UFLAG
  FROM USR02
  INTO TABLE IT_USR02
  WHERE BNAME IN USER_ID.

  LOOP AT IT_USR02 INTO ST_USR02.
      IF LOCK = 'X'.
        CALL FUNCTION 'BAPI_USER_LOCK'
          EXPORTING
            USERNAME = ST_USR02-BNAME
          TABLES
            RETURN   = I_BAPI_RETURN.

        MOVE-CORRESPONDING IT_USR02[] TO IT_ZATO_LOCK_UNLOCK[].
        MODIFY ZATO_LOCK_UNLOCK FROM TABLE IT_ZATO_LOCK_UNLOCK.

      ENDIF.
  ENDLOOP.

基本上在BAPI_USER_LOCK调用函数之后,我也希望在 IT_USR02 表中进行更改。从那里我将内容复制IT_USR02到我的自定义表中ZATO_LOCK_UNLOCK

这里的一切似乎都很好,我只是不知道如何更新我的内部表。任何帮助,将不胜感激。

4

1 回答 1

1

如果我正确理解您的问题,那么您需要这样的东西:

LOOP AT IT_USR02 ASSIGNING FIELD-SYMBOL(<USR02>).
  " Using field symbol for performance and so the entry can be changed

  IF LOCK = 'X'.
    CALL FUNCTION 'BAPI_USER_LOCK'
      EXPORTING
        USERNAME = ST_USR02-BNAME
      TABLES
        RETURN   = I_BAPI_RETURN.
    IF "All is OK in I_BAPI_RETURN
      " Change the table entry
      <USR02>-UFLAG = 32. " Not sure if this is the right value
    ENDIF.
  ENDIF.
ENDLOOP.
" This needs to be outside the loop since you are handling the complete table
MOVE-CORRESPONDING IT_USR02[] TO IT_ZATO_LOCK_UNLOCK[].
MODIFY ZATO_LOCK_UNLOCK FROM TABLE IT_ZATO_LOCK_UNLOCK.
" A commit work might be needed here

请注意,您仍然需要对条件进行编码以检查 BAPI 调用是否一切正常。我不熟悉 BAPI,所以不知道没有条目是否是好消息,或者您是否需要检查返回的表中是否有任何错误。

于 2017-07-31T15:24:54.190 回答