1. 이 문장이 숫자인지 알아보기
2. PC file list(Popup window) 얻기 및 file 선택
3. File name과 path 분리
4. 현재 화면의 FIELD값 얻기
5. 현재 화면의 FIELD값 변경
6. VARIABLE의 길이 만큼 줄 긋기
7. SELECT-OPTION에 한가지 값만 들어왔는지 CHECK
(SELECT-OPTION에 들어온 정보에 따라 REPORT 모양이 변경될 때 유용)
8. 화면에 icon 보이기
9. Table 정보 얻기
10. Screen 정보 얻기
11. FIELD값 암호화 방법
12. DECIMAL 값을 CURRENCY로
13. 전표 LINE ITEM 조회
14. Post With Clearing BDC에서 Open item을 선택조건
15. BDC 전표 기표에서 NEXT SCREEN 결정 LOGIC
1. 이 문장이 숫자인지 알아보기
data : num(10) value '0123456789'.
if data cn num. TRUE : 숫자가 아닌 값이 존재한다.
FALSE : 모두 숫자다.
2. PC file list(Popup window) 얻기 및 file 선택
call function 'KD_GET_FILENAME_ON_F4'
3. File name과 path 분리
call function 'SO_SPLIT_FILE_AND_PATH'
4. 현재 화면의 FIELD값 얻기
form dynp_values_read tables fld structure dynpread
using value(fname) like dynpread-fieldname
retcd like sy-subrc.
refresh fld.
clear fld.
fld-fieldname = fname.
append fld.
5. 현재 화면의 FIELD값 변경
form dynp_values_update tables fld structure dynpread
using retcd like sy-subrc.
* 현재 화면의 특정 필드 값 변경
call function 'DYNP_VALUES_UPDATE'
exporting
dyname = sy-cprog
dynumb = sy-dynnr
tables
dynpfields = fld
exceptions
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
undefind_error = 7
others = 8.
retcd = sy-subrc.
endform. " DYNP_VALUES_READ
6. VARIABLE의 길이 만큼 줄 긋기
pos : 시작 지점
size : 너비
write at /pos(size) sy-uline.
7. SELECT-OPTION에 한가지 값만 들어왔는지 CHECK
form is_multi tables sel_option
using result.
data : begin of separator occurs 3,
option(1),
operator(2),
end of separator.
data : count like sy-fdpos.
* 분석을 위해 oprator만 알아보려고...
separator[] = sel_option[].
* 조건 table이 복수개의 line을 가지면 TRUE
describe table sel_option lines count.
if count > 1. result = 'T'. exit. endif.
* Operator가 'EQ'가 아니면 TRUE
read table separator index 1.
if sy-subrc ne 0. " 조건이 없다.
result = 'F'. exit.
endif.
if separator-operator ne 'EQ'.
result = 'T'. exit.
endif.
result = 'F'.
endform. " IS_MULTI
8. 화면에 icon 보이기
- 화면 특정 영역에 icon을 그때 그때 알맞게 보이고자 할 때 사용한다.
사용 예는 다음과 같다.
1) 우선 화면에 Char 30의 Templated를 하나 만든다.(With Icon check)
2) TOP inlcude에서 화면 필드를 data로 선언한다.(Character 80)
3) PBO에서 다음과 같은 함수를 사용하여 선언한 Template에 값을 move한다.
call function 'ICON_CREATE'
exporting
name = 'ICON_DETAIL'
text = ' ' " Icon 옆에 나타날 설명
info = '상세정보'
add_stdinf = 'X'
importing
result = <화면 필드>
exceptions
icon_not_found = 1
outputfield_too_short = 2
others = 3.
9. Table 정보 얻기
방법 1.
DATA : BEGIN OF NAMETAB OCCURS 0,
INCLUDE STRUCTURE DNTAB,
END OF NAMETAB
방법 2.
DATA: BEGIN OF TAB2 OCCURS 10.
INCLUDE STRUCTURE X031L.
DATA: END OF TAB2.
IMPORT NAMETAB X030L
TAB2
ID TABNAME.
테이블이 가진 필드의 정보를 보여준다.
만일 어떤 테이블에서 특정 필드만 제외하고 변경할 필요가 있다면 NAMETAB에서
그 필드의 항목을 지우고 POSITION과 OFFSET, KEY의 개수(지울 필드가 KEY일 때),
KEY(지울 필드가 KEY일 때)의 총 길이 등을 변경하면 된다.
이용가능한 곳 : Possible Entry로
10. Screen 정보 얻기
DATA : BEGIN OF HEADER_INFO,
INCLUDE STRUCTURE D020S,
END OF HEADER_INFO,
BEGIN OF FIELD_LIST OCCURS 0,
INCLUDE STRUCTURE D021S,
END OF FIELD_LIST,
BEGIN OF FLOW_LOGIC OCCURS 0,
INCLUDE STRUCTURE D022S,
END OF FLOW_LOGIC,
BEGIN OF MATCHCODE OCCURS 0,
INCLUDE STRUCTURE D023S,
END OF NAMETAB.
DATA : ID(12) TYPE C.
ID = 'SAPMF05A'.
ID+8(4) = '0100'.
IMPORT DYNPRO HEADER_INFO FIELD_LIST FLOW_LOGIC MATCHCODE ID ID.
필드의 존재 유무 판단이나 그 화면을 변경(?)하고 싶을 때...
Export Dynpro와 함께 사용
11. FIELD값 암호화 방법
* PASSWORD FIELD는 RAW TYPE이어야 한다.
PASSWORD = I_PASSWORD.
DESCRIBE FIELD PASSWORD LENGTH LEN.
OFFSET = F = 0.
DO LEN TIMES.
ASSIGN PASSWORD+OFFSET(1) TO < S > TYPE 'X'.
IF < S > IS INITIAL.
EXIT.
ENDIF.
F = F + < S >.
ADD 1 TO OFFSET.
ENDDO.
IF SY-SUBRC = 0.
* RSA Public key algorithm
* Choose two very large primes (simple e.g., P=47, Q=71) and
* set N = P*Q = 3337 and M = (P-1)*(Q-1) = 3220
* Choose E relatively prime to M, e.g E=79
* Set D = E^-1 (mod M) = 79^-1 (mod 3220) = 1019
* Public key is (N, E) = (3337, 79)
* Private key is (N, D) = (3337, 1019)
* To encrypt n, C = cipher = n^E (mod N) = n^79 mode 3337
* To decrypt C, n = C^D mod N
F = F ** 79.
F_STR = F DIV 3337.
REPLACE '.' WITH '' INTO F_STR.
REPLACE 'E+' WITH '' INTO F_STR.
CONDENSE F_STR NO-GAPS.
MOVE F_STR TO E_PASSWORD.
ELSE.
CLEAR E_PASSWORD.
ENDIF.
12. DECIMAL 값을 CURRENCY로
call function 'CURRENCY_AMOUNT_IDOC_TO_SAP'
exporting
currency = currkey
idoc_amount = decamt
importing
sap_amount = convamt
exceptions
others = 1.
if sy-subrc ne 0.
endif.
13. 전표 LINE ITEM 조회
* 상세정보를 볼 전표번호
data : begin of buztab occurs 30,
bukrs like bseg-bukrs,
belnr like bseg-belnr,
gjahr like bseg-gjahr,
buzei like bseg-buzei,
flaen(1) type c, " X = Posten geaendert
end of buztab.
call dialog 'RF_ZEILEN_ANZEIGE'
exporting
buztab " Line Item List
line " Total Line Count
tcode " Transaction code - FB05
x_nochange from 'X'.
14. Post With Clearing BDC에서 Open item을 선택조건
* Post With Clearing에서 Open item을 선택할 때 무엇으로 선택할지 기준을
* 주어야 하는데 이 기준에 해당하는 Radio Button의 위치가 Configuration
* 사항이라 BDC시 문제가 발생한다.
* 따라서 관리 Table에서 직접 정보를 읽어 BDC Data를 구성한다.
select single * from t021r
where event = 'SL-AG' and
feldn = 'BELNR'.
* 맨 앞에 NONE이 자동으로 생성되므로 위치가 뒤로 1씩 증가한다.
location = t021r-selps + 1.
concatenate 'RF05A-XPOS1(' location ')' into location_text.
perform append_bdcdata(sapfzfb0) tables bdcdata using
' ' location_text 'X'. " Document number로
15. BDC 전표 기표에서 NEXT SCREEN 결정 LOGIC
FORM NEXT_SCREEN USING VALUE(BUKRS)
VALUE(TCODE)
VALUE(KOART)
NEXT_SCR.
DATA DYN_ID(12).
*
SELECT SINGLE * FROM T001 WHERE BUKRS = BUKRS.
IF SY-SUBRC NE 0.
ENDIF.
*
SELECT SINGLE * FROM T020 WHERE TCODE = TCODE.
IF SY-SUBRC NE 0.