반응형
정답 스포일러 : move-corresponding과 정적 스트럭처(양쪽의 키와 업데이트할 필드값 보유)
0. 정적 스트럭처에 업데이트를 원하는 필드와 업데이트할 테이블의 키값, 다른 테이블 조회에 사용할 데이터를 넣는다.
DATA: lv_obj TYPE typename,
lv_type type ddtypekind,
lo_log type ref to data,
lv_error.
DATA: BEGIN OF ls_calid,
callid TYPE sxmsqid,
msgstate TYPE sxmspmstat,
end of ls_calid.
FIELD-SYMBOLS <lt_log> TYPE STANDARD TABLE.
1. 아래처럼 동적으로 테이블 명을 가져온다. (데이터를 업데이트 해줄 테이블)
SELECT log_table
FROM zwmift0040
INTO TABLE @DATA(lt_table) .
SORT lt_table by log_table.
DELETE ADJACENT DUPLICATES FROM lt_table COMPARING log_table.
2. 다음과 같이 루프의 시작점에서 가져온 테이블 명으로 동적으로 오브젝트의 타입정보를 체크한다.
이후 코드는 해당루프의 안에 위치한다.
LOOP AT lt_table INTO DATA (ls_table).
lv_obj = ls_table-log_table.
CLEAR lv_type.
CALL FUNCTION 'DDIE_TYPEINFO_GET'
EXPORTING
typename = lv_obj
IMPORTING
typekind = lv_type.
CHECK lv_type = 'TABL'.
* 여기서부터 코드 시작
endloop.
3. 루프의 내부에서 테이블 타입의 오브젝트를 생성하고, 해당 오브젝트를 Field symbol에 assign 한다.
CLEAR lo_log.
CREATE DATA lo log TYPE TABLE OF (ls_table-log_table) .
ASSIGN lo log->* TO <1t log>.
5. 루프의 내부에서 해당 테이블 의 데이터를 가져온다. (업데이트 대상 테이블 데이터)
TRY.
SELECT *
FROM (1s_table-log_table)
WHERE zcrldate IN @s_date
AND calid IS NOT INITIAL
INTO CORRESPONDING FIELDS OF TABLE @<lt_log>.
CATCH cx root.
lv error = 'X'.
ENDTRY.
CHECK lv error = ''.
CHECK <1t log> IS NOT INITIAL.
6.
1. 해당 테이블에 있는 데이터를 move-corresponding 통해 정적 타입 선언된 스트럭처로 옮기고 해당 정보를 이용해 원하는 데이터를 가져온다.
2. 그 다음 해당 정적 타입 데이터에서 업데이트할 할 부분을 업데이트 한다.
3. 다시 정적에서 동적 데이터로 move-corresponding으로 데이터를 옮겨준다.
4. modify를 사용해 업데이트 한다.
LOOP AT <lt log> ASSIGNING FIELD-SYMBOL (<ls_log>) .
CLEAR ls calid.
MOVE-CORRESPONDING <ls_log> TO ls calid.
SELECT SINGLE msgstate FROM sxmspmast INTO @DATA (lv_msgstate)
WHERE msgguid = @ls_calid-calid.
IF sy-subrc = 0.
ls_calid-msgstate = lv_msgstate.
MOVE-CORRESPONDING 1s_calid TO <ls_log>.
CALL FUNCTION 'SET CBO DATE SINGLE'
CHANGING
cs_data = <ls_log>.
MODIFY (ls_table-log_table) FROM <ls_log>.
ENDIF.
ENDLOOP.
FREE <lt log>.
반응형
'SAP' 카테고리의 다른 글
| [EWM] 쓸만한 sap notes 파일 - 개발관련 (0) | 2026.03.15 |
|---|---|
| [EWM] ewm의 Delivery 삭제 확인 (0) | 2026.03.07 |
| [EWM] 왜 batch를 별도 CBO성 필드로 관리하는가 (0) | 2026.02.26 |
| [WM] Stock Type 삭제 Config (0) | 2026.02.26 |
| EWM Deep Dipe : SCU BP (1) | 2026.02.18 |