예를들어
if ls_data-fld1 is not initial.
ls_data-fld1 = 'S'.
endif.
위 로직을 10개 필드에 대해서 하려면 로직이 많이 길어지는데요.
매크로를 정의하면 되긴하겠는데 abap자체적으로 값이 없을때만 채우는 구문이 있나 해서요
sql쪽에는 Coalesce라고 있는거 같던데..
댓글 5
-
GPARK
2024.01.12 22:39
-
Hwable
2024.01.12 22:52
안녕하세요.
어떤 방식을 쓰던간에 원하는 필드가 공백인지 아닌지 체크로직은 필요합니다.
참고로, ABAP에서 SQL COALESCE 는 NULL 체크 후 NULL이면 다음 파라미터로 채우기 위해서 사용하는 거구요.
이 조차도 필드가 10개면 구문을 10번 사용해야 합니다.
1. 매크로 구현
2. FORM 루틴 구현
3. Class Method 구현
4. COND 조건문 구현
5. SQL CASE 조건문 구현
결과적으로는, 어떤 걸 쓰시던 원하는 필드갯수만큼은 수행하셔야 합니다.
구문이 길어지는게 싫으시면,
인터널 테이블 내에서는 COND, SQL 구문에선 CASE 문을 사용하시면 짧아집니다.
-
로우랜즈
2024.01.17 01:46
답변감사합니다. 하나버전이 아니라 cond가 되는지 모르겠는데 abap표준 구문을 여쭤본 이유는 반복하더라도 깔끔하고 짧으면 좋을거 같아서였어서 말씀하신대로 모듈을 정의해서 구현하면 되겠네요. 매크로는 디버깅이 안되니 서브루틴이나 메소드로 해봐야겠습니다.
-
곰작
2024.01.12 23:54
아래 Sample 보시고 <fs3> 값을 만지작 거리면 될것 같습니다.
TYPES: BEGIN OF t_date,
year TYPE n LENGTH 4,
month TYPE n LENGTH 2,
day TYPE n LENGTH 2,
END OF t_date.
FIELD-SYMBOLS: <fs1> TYPE t_date,
<fs2> TYPE any,
<fs3> TYPE n.*------- Casting WITH implicit typing ------------
ASSIGN sy-datum TO <fs1> CASTING.*------- Casting WITH explicit typing ------------
ASSIGN sy-datum TO <fs2> CASTING TYPE t_date.
DO.
ASSIGN <fs2>-(sy-index) TO <fs3>.
IF sy-subrc <> 0.
EXIT.
ENDIF.
ENDDO. -
로우랜즈
2024.01.17 01:47
샘플 감사합니다. 새로운 방식인데 참고해서 더 간소화시켜봐야겠어요.
FIELD-SYMBOL 한번 사용해보세요 !