2017-07-31 146 views
0

如果選中「LOCK」複選框,我的程序只會鎖定用戶。 這一切都工作並更新USR02表中的用戶記錄。發生此更改時,我想更新我的內部表「IT_USR02」以模擬對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. 
** WHERE UFLAG EQ P_UFLAG. 

    IF IT_USR02[] IS NOT INITIAL. 

    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。這裏的一切似乎工作正常,我只是不知道如何更新我的內部表。任何幫助,將不勝感激。

+0

代碼不完整 - LOCK從哪裏來,以及您想要寫回到表中的是哪種更改?你沒有改變循環中的任何東西。 – vwegert

+0

'LOCK'指的是一個複選框,我想存儲的是我的自定義表(ZATO_LOCK_UNLOCK)中的BNAME,USTYP和UFLAG值。程序運行後,它不會更新IT_USR02中的值,而IT_USR02不會更新定製表。它改變了我們如何將改變從USR02複製到我的IT_USR02的難題。 – oceanlab1

+1

您不會更改BNAME或USTYP,因此無需更新它,對吧?而且你並沒有爲自己確定UFLAG的新價值,所以你需要從數據庫或BAPI_USER_GETDETAIL中讀取。 – vwegert

回答

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,所以不知道沒有條目是好消息,還是需要檢查返回的表中是否有錯誤。