‎2007 Nov 21 5:42 AM
hi
given a code , what is the best way to understand how the code works, especially when it is too lengthy.
thanks in advance
‎2007 Nov 21 5:46 AM
Contents
1.Events Related to Reports . 04
2.Table Declaration 04
3.Structure Declaration .. 04
4.Internal Table Declaration .. 05
5.Declaration of ITAB for BDC 05
6.Table Control Declaration 05
7.Table Control Line Definition . 05
8.Variable Declaration 05
9.Field Symbol Declaration 06
10.Constants Declaration .. 06
11.Functions Declaration .. 06
12.Transaction Code . 06
13.Selection Screen Type
a) Type I ... 07
b) Type II .. 07
c) Type III (Tabbed Selection Screen) .. 07
d) AT SELECTION-SCREEN OUTPUT 09
e) AT SELECTION SCREEN ON VALUE REQUEST .. 10
f) AT SELECTION SCREEN FOR FIELDS . 11
g) START OF SELECTION .. 11
h) END OF SELECTION .. 11
i) FORM LOG_WRITE_START . 11
j) FORM P_ERROR_LOG_END . 12
14.Message Display . 12
15.Range Statement .. 13
16.Select Query types
1Select Single . 13
2Upto 1 rows .. 13
3Into vbak-vbeln 13
4Inner Join . 13
5For All Entries . 14
6Appending Corresponding Fields 14
17. SQL Statement 15
18.To get Field Names from SAP Table .. 16
19.Runtime Exception Handling .. 16
20.To get Field Names from Internal Table . 17
21.Different Statements
Read Statement 18
Delete Statement .. 18
Describe Statement .. 19
Sort Statement .. 19
Split Statement . 19
Concatenate Statement . 19
Shift Statement . 19
Submit Statement . 19
Write Statement . 20
Modify Statement .. 20
Edit Mask Statement 21
22.Runtime Error Handling
23. Modifying an Internal Table
24. Inserting a line at a specified position .
25.Using Logical Database . 22
26.Transfer Data to a file . 22
27.Reading Data from a file . 22.
28.Use of Field symbols and Assign Statement 24
29.Popup Screen 24
30.Program Statement in BDC ..24
31.Adding BDC Screen .25
32.Call Transaction Syntax 25
33.Handling BDC Error Messages 26
34.Populate Dropdown Menu(Not from Table) .
35.Refreshing Table Control ..26
36.Set Cursor Syntax . 26
37.Get Cursor Syntax . 27
38.PBO ... 27
39.PAI .
40.Passing Values from Table Control to Internal Table
41.Generating a Program
42.Running a Report using Submit Statement
43.External Perform(Caller)
44.External Perform(Called from) ..
45.Dynamic External program(Call Back from) .
46.Dynamic Open Commands : Table Name ..
47.Exporting to ABAP/4 Memory
48.Importing from ABAP/4 Memory
49.Using Symbols and Icons
50.Using Colors
51.Classifying Parameters
52.Using Table Parameters ..
53.Working with Hide Command
54.Uploading Files from PC(Presentation Server) ...
55.Downloading Files to PC(Presentation Server) ...
56.Uploading, Downloading files to/from Appln Server and Lock Mechanisms
57.Creating a new program via ABAP
58.Conversion of Date to Characters ...
59.Smart Forms
60.SapScript .
Types of Symbols
Script copy from one client to another Client
To display data only in last page.
General Points
Events related to reports
Initialization : triggered when the report is loaded in memory.
At selection-screen output : triggered when the selection screen is loaded in memory before being displayed.
At selection-screen / . "行選択
Constants Declaration
CONSTANTS:
CNS_YEAR TYPE NUM4 VALUE 1800, "年判断
CNS_MSGTPS TYPE CHAR1 VALUE 'S',
CNS_DZERO TYPE CHAR8 VALUE '00000000', "日付0
Function Declaration
CONSTANTS: BEGIN OF FUNC,
DOWN LIKE SY-UCOMM VALUE 'CUSTOMS',"輸入通関依頼機能
SAVE LIKE SY-UCOMM VALUE 'SAVE', "保存機能コード
BACK LIKE SY-UCOMM VALUE 'BACK', "前画面機能コード
EXIT LIKE SY-UCOMM VALUE '%EX', "終了機能コード
CANC LIKE SY-UCOMM VALUE 'RW', "中止機能コード
MARK LIKE SY-UCOMM VALUE 'MARK', "全選択
DMRK LIKE SY-UCOMM VALUE 'DMARK', "全解除
END OF FUNC.
Transaction Code Declaration
CONSTANTS : BEGIN OF TCODE, "輸入ステータス一覧
EDIT LIKE SY-TCODE VALUE 'ZMME271', "(変更)
DISP LIKE SY-TCODE VALUE 'ZMME272', "(照会)
VT02 LIKE SY-TCODE VALUE 'VT02', "シップメント変更
VT03 LIKE SY-TCODE VALUE 'VT03', "シップメント照会
MB1A LIKE SY-TCODE VALUE 'MB1A', "出庫登録
ME21 LIKE SY-TCODE VALUE 'ME21', "購買伝票登録
END OF TCODE.
CONSTANTS : BEGIN OF PAGE,
FIST LIKE SY-UCOMM VALUE 'P--', "第一ページ
PREV LIKE SY-UCOMM VALUE 'P-' , "前ページ
NEXT LIKE SY-UCOMM VALUE 'P+' , "次ページ
LAST LIKE SY-UCOMM VALUE 'P++', "最終ページ
END OF PAGE.
Selection Screen Types
Type : I
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 3(18) TEXT-P01.
SELECTION-SCREEN POSITION 22.
SELECT-OPTIONS : S_TKNUM FOR VTTK-TKNUM. "シップメント番号
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 3(18) TEXT-P02.
SELECTION-SCREEN POSITION 22.
SELECT-OPTIONS : S_SPART FOR TSPA-SPART. "製品部門
SELECTION-SCREEN END OF LINE.
Type : II
SELECTION-SCREEN BEGIN OF BLOCK B_TITLE01 WITH FRAME TITLE TEXT-P01.
SELECT-OPTIONS:
S_OTNAK FOR ZTET001-ZZOTUNAKACD, "乙仲コード
S_SHIPDY FOR ZTET001-ZZSHIPDY OBLIGATORY,
PARAMETERS: P_SHIMUK LIKE ZTET001-ZZEXPKOKUMEI. "国コード
SELECT-OPTIONS: S_SEIHIN FOR TSPA-SPART, "製品部門
S_BUNDIV FOR ZTEM003-ZZBUNDIV, "新旧バン区分
S_INVDAT FOR ZTET010-ZZINSDT. "請求伝票登録日
PARAMETERS: P_FILNAM LIKE RLGRAP-FILENAME. "アップロード/
SELECTION-SCREEN END OF BLOCK B_TITLE01.
Type : III Tabbed Selection Screen
SELECTION-SCREEN BEGIN OF BLOCK TAISHOU WITH FRAME TITLE TEXT-T00.
PARAMETERS: P_GENBA1 AS CHECKBOX, "チェックボックス
P_GENBA2 AS CHECKBOX, "チェックボックス
P_SORUI1 AS CHECKBOX, "チェックボックス
P_SORUI2 AS CHECKBOX. "チェックボックス
SELECTION-SCREEN END OF BLOCK TAISHOU.
*----
-
SELECTION-SCREEN BEGIN OF SCREEN 101 AS SUBSCREEN.
SELECT-OPTIONS : S_VENG1 FOR LFA1-LIFNR, "仕入先または債権者
S_SOTYG1 FOR TVAK-AUART, "販売伝票タイプ
S_PDNOG1 FOR MARA-MATNR. "品目コード
SELECTION-SCREEN END OF SCREEN 101.
*----
-
SELECTION-SCREEN BEGIN OF SCREEN 102 AS SUBSCREEN.
SELECT-OPTIONS : S_VENG2 FOR LFA1-LIFNR, "仕入先または債権者
S_YUKOG2 FOR MARA-DATAB, "有効開始日
S_PDNOG2 FOR MARA-MATNR.
SELECTION-SCREEN END OF SCREEN 102.
*----
-
SELECTION-SCREEN BEGIN OF SCREEN 103 AS SUBSCREEN.
SELECT-OPTIONS : S_VENS1 FOR LFA1-LIFNR, "仕入先または債権者
S_SOTYS1 FOR TVAK-AUART, "販売伝票タイプ
S_ITRMS2 FOR TINC-INCO1. "インコタームズ (1)
SELECTION-SCREEN END OF SCREEN 103.
*----
-
SELECTION-SCREEN BEGIN OF SCREEN 104 AS SUBSCREEN .
SELECT-OPTIONS : S_VENS2 FOR LFA1-LIFNR, "仕入先または債権者
S_SEIS2 FOR TSPA-SPART, "製品部門
S_JUSKS2 FOR KNA1-KUNNR. "得意先コード
SELECTION-SCREEN END OF SCREEN 104.
SELECTION-SCREEN BEGIN OF TABBED BLOCK MAIN FOR 10 LINES .
SELECTION-SCREEN TAB (15) TEXT-N01 USER-COMMAND GENBA1
DEFAULT SCREEN 101.
SELECTION-SCREEN TAB (15) TEXT-N02 USER-COMMAND GENBA2
DEFAULT SCREEN 102.
SELECTION-SCREEN TAB (15) TEXT-N03 USER-COMMAND SHORUI1
DEFAULT SCREEN 103.
SELECTION-SCREEN TAB (15) TEXT-N04 USER-COMMAND SHORUI2
DEFAULT SCREEN 104.
SELECTION-SCREEN END OF BLOCK MAIN.
AT SELECTION-SCREEN OUTPUT.
PARAMETERS: rb1 RADIOBUTTON GROUP g1 USER-COMMAND rb1,
rb2 RADIOBUTTON GROUP g1,
rb3 RADIOBUTTON GROUP g1,
cb1 AS CHECKBOX USER-COMMAND cb1,
radio LIKE mara-matnr MODIF ID rb,
check LIKE mara-matnr MODIF ID cb.
AT SELECTION-SCREEN OUTPUT.
CASE 'X'.
WHEN rb1.
LOOP AT SCREEN.
IF screen-group1 = 'RB'.
screen-input = '1'.
screen-output = '1'.
screen-invisible = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
WHEN rb2.
LOOP AT SCREEN.
IF screen-group1 = 'RB'.
screen-input = '0'.
screen-output = '1'.
screen-invisible = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
WHEN rb3.
LOOP AT SCREEN.
IF screen-group1 = 'RB'.
screen-input = '0'.
screen-output = '0'.
screen-invisible = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDCASE.
LOOP AT SCREEN.
IF screen-group1 = 'CB' AND cb1 = 'X'.
screen-input = '0'.
screen-output = '0'.
screen-invisible = '1'.
ELSEIF screen-group1 = 'CB'.
screen-input = '1'.
screen-output = '1'.
screen-invisible = '0'.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
AT SELECTION SCREEN ON VALUE REQUEST
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILNAM.
PERFORM FILE_NAME_GET_SLS USING P_FILNAM.
AT SELECTION SCREEN FOR FIELDS
AT SELECTION-SCREEN ON S_SPART.
PERFORM CHECK_SPART_SLS.
AT SELECTION-SCREEN ON S_MATKL.
PERFORM CHECK_MATKL_SLS.
START OF SELECTION.
START-OF-SELECTION.
PERFORM LOG_WRITE_START.
PERFORM INIT_PRC. "内部テーブル及び変数の初期化.
PERFORM SHIPMENT_EXTRACTION_PRC. "シップメント情報抽出
END OF SELECTION.
END-OF-SELECTION.
PERFORM P_ERROR_LOG_END. "ログ書き込みを終了する
FORM LOG_WRITE_START.
CLEAR: WRK_MSGV1,WRK_MSGV2,WRK_MSGV3,
WRK_MSGV4,WRK_MSGNO,WRK_SUBRC.
WRK_MSGNO = CNS_MSG043.
WRK_MSGV1 = CNS_PRGNAME.
PERFORM ERROR_LOG USING WRK_MSGID "ログ出力
WRK_MSGNO
WRK_MSGV1
WRK_MSGV2
WRK_MSGV3
WRK_MSGV4
WRK_REPID
WRK_TRNCD
WRK_MTYPE
CHANGING WRK_SUBRC.
IF WRK_SUBRC <> 0.
MESSAGE S005 WITH 'エラーログ管理テーブル登録(ZMM_EST_ERROR)'
WRK_SUBRC.
ENDIF.
ENDFORM. " LOG_WRITE_START
FORM P_ERROR_LOG_END.
CLEAR: WRK_MSGV1,WRK_MSGV2,WRK_MSGV3,
WRK_MSGV4,WRK_MSGNO,WRK_SUBRC.
WRK_MSGV1 = CNS_PRGNAME.
WRK_MSGNO = CNS_MSG044.
PERFORM ERROR_LOG USING WRK_MSGID "ログにメッセージを出す
WRK_MSGNO
WRK_MSGV1
WRK_MSGV2
WRK_MSGV3
WRK_MSGV4
WRK_REPID
WRK_TRNCD
WRK_MTYPE
CHANGING WRK_SUBRC.
IF WRK_SUBRC <> 0.
MESSAGE S005 WITH 'エラーログ管理テーブル登録(ZMM_EST_ERROR)'
WRK_SUBRC.
ENDIF.
ENDFORM. " P_ERROR_LOG_END
Message Display
MESSAGE E038 WITH '配船F・基本情報(ZTET001)'
'配船管理No(ZZHAISEN)'
S_HAISEN-LOW
S_HAISEN-HIGH.
Message Types
Type
Display
Action
I - Info
Dialog window
'Press Enter to continue'.
W - Warning
Status window
'Correction possible'.
= E for Lists Processing
E - Error
Status window
'Correction required'.
= A for Processing of basic list,
returns to the previous list level for a secondary list.
A - Abend
Dialog window
'Transaction terminated'.
X - eXit
Status window
= A, but transaction terminated with short dump
MESSAGE_TYPE_X
S - Success
Status window
'Message on next screen'.
Range Statement
data: r_tcode type range of tstc-tcode with header line.
r_tcode-sign = 'I'.
r_tcode-option = 'CP'.
r_tcode-low = 'SE*'.
append r_tcode.
select tcode pgmna up to 10 rows
from tstc into table it_tstc
where tcode in r_tcode.
Select Statement Types
Type : 01
SELECT SINGLE BUKRS INTO WRK_TEMP
FROM T001
WHERE WAERS = 'JPY'.
The 'SELECT SINGLE' statement selects the first row in the database that it finds that fulfils the 'WHERE' clause. If this results in multiple records then only the first one will be returned and therefore may not be unique.
This causes a problem in the Extended Program Check in that if the full key is not specified in a 'SELECT SINGLE'
Type : 02 (a)
SELECT PERIV INTO WRK_TEMP FROM T001
UP TO 1 ROWS
WRITE 😕 WRK_TEMP1.
ENDSELECT.
The 'SELECT .... UP TO 1 ROWS' statement is subtly different. The database selects all of the relevant records that are defined by the WHERE clause or lack of, applies any aggregate, ordering or grouping functions to them and then returns the first record of the resultant result set.
(b) SELECT * FROM MKPF WHERE MBLNR IN S_MBLNR.
MOVE-CORRESPONDING MKPF TO INT_MKPF.
APPEND INT_MKPF.
ENDSELECT.
Type : 03
SELECT SPART INTO TSPA-SPART FROM TSPA CLIENT SPECIFIED
WHERE MANDT = SY-MANDT "クライアント
AND SPART IN S_SPART. "製品部門
EXIT.
ENDSELECT.
Type : 04
SELECT A~TKNUM A~SHTYP A~TDLNR A~EXTI1 A~EXTI2 A~DPREG A~DAREG B~TKNUM B~VBELN INTO CORRESPONDING FIELDS OF TABLE TAB08_SHPHEAD FROM VTTK AS A INNER JOIN VTTP AS B
ON ( A~MANDT = B~MANDT
AND A~TKNUM = B~TKNUM )
CLIENT SPECIFIED
WHERE A~MANDT = SY-MANDT "クラアント
AND A~TKNUM IN S_TKNUM "Shipment番号
AND A~SHTYP IN S_SHTYP. "タイプ
Type : 05 For all Entries
SELECT A~VBELN A~BTGEW A~LFART A~LIFEX A~GEWEI A~NTGEW B~POSNR B~VBELN B~VGPOS B~VGBEL B~MATNR
INTO CORRESPONDING FIELDS OF TABLE ITAB09_SHPCHK
FROM LIKP AS A INNER JOIN LIPS AS B
ON ( A~MANDT = B~MANDT
AND A~VBELN = B~VBELN )
CLIENT SPECIFIED
FOR ALL ENTRIES IN ITAB_DATA
WHERE A~MANDT = SY-MANDT "クライアント
AND A~VBELN = ITAB_DATA-VBELN "出荷伝票
AND A~LIFNR IN S_LIFNR "仕入先
AND A~LFART = CNS_LFART.
Type : 06 Appending Corresponding Fields
SELECT ZZVENDCD ZZSEIHINDIV SHTYP ZZNIDUMICDIV
ZZNIAGECDIV ZZIMPMATNR INFNR ZZMENGE
APPENDING CORRESPONDING FIELDS OF TABLE ITAB13_ZTEM071
FROM ZTEM071
CLIENT SPECIFIED
WHERE MANDT = SY-MANDT "クライアント
AND ZZVENDCD = WRK_LIFNR "仕入先コード
AND ZZSEIHINDIV = WRK_SPART "ファイルパターン
AND SHTYP = WRK_SHTYP1 "シップメントタイプ
AND ZZNIAGECDIV = WRK_KNOTZ+0(5).
Sql Statements
(a) Insert Statement
ZMMT302-ZZZAIKOCLSCD = ITAB02_KOUSHIN-ZZZAIKOCLSCD.
ZMMT302-ZZZAIKONAIYO = ITAB02_KOUSHIN-ZZNAIYOU.
ZMMT302-ZZERRORKUBUN = ITAB02_KOUSHIN-ZZERRORKUBUN.
INSERT ZMMT302.
(b) Update Statement
UPDATE ZMMT301 CLIENT SPECIFIED
SET ZZDATAKUBUN = CNS_0
WHERE MANDT = SY-MANDT
AND LIFNR = WRK_VENDOR
AND ZZSOKOCD = WRK_SOKOCD.
(C) Delete Statement
DELETE FROM ZSDT302 CLIENT SPECIFIED
WHERE MANDT = SY-MANDT
AND LIFNR = ITAB_DELETE-LIFNR
AND ZZCATALOGCD = ITAB_DELETE-ZZCATALOGCD
AND ZZJANCD = ITAB_DELETE-ZZJANCD.
To Get Fields Name in a SAP table
DDIF_TABL_GET
Runtime Exceptions
CATCH SYSTEM-EXCEPTIONS ARITHMETIC_ERRORS = 5.
WRK_L_LNETWRS = WRK_L_LNETWRS + TTAB_FREIGHT_DIS-NETWR.
WRK_L_LNAVNW = WRK_L_LNAVNW + TTAB_FREIGHT_DIS-NAVNW.
WRK_L_AMT = WRK_L_AMT + TTAB_FREIGHT_DIS-TOTAL.
ENDCATCH.
IF SY-SUBRC = 5.
PERFORM P11100_OVERFLOW_PRC.
ENDIF.
FORM P11100_OVERFLOW_PRC.
CLEAR: WRK_MSGV1,WRK_MSGV2,WRK_MSGV3,
WRK_MSGV4,WRK_MSGNO,WRK_SUBRC.
WRK_MSGNO = CNS_MSG061.
PERFORM ERROR_LOG USING WRK_MSGID "ログにメッセージを出す
WRK_MSGNO
WRK_MSGV1
WRK_MSGV2
WRK_MSGV3
WRK_MSGV4
WRK_REPID
WRK_TRNCD
WRK_MTYPE
CHANGING WRK_SUBRC.
IF WRK_SUBRC -1234
Runtime Error Handling
LOOP AT TTAB04_FREIGHT_PO
WHERE EBELN = TTAB05_FREIGHT-EBELN.
CATCH SYSTEM-EXCEPTIONS ARITHMETIC_ERRORS = 5.
WRK_L_NETWR = WRK_L_NETWR + TTAB04_FREIGHT_PO-NETWR.
WRK_L_NAVNW = WRK_L_NAVNW + TTAB04_FREIGHT_PO-NAVNW.
ENDCATCH.
IF SY-SUBRC = 5.
Write in a log at the time of data overflow.
PERFORM P11100_OVERFLOW_PRC ..(Refer Page 16)
ENDIF.
ENDLOOP.
Inserting a line at a specified position
CUSTOMER_CITIES-ID = '00000005'.
CUSTOMER_CITIES-CITY = 'Pleasant Site'.
INSERT CUSTOMER_CITIES INDEX 3.
Using a Logical Database
Work areas
TABLES: CUSTOMERS, BOOKINGS.
Reading data
GET CUSTOMERS.
WRITE / CUSTOMERS-NAME.
GET BOOKINGS.
WRITE: AT /3 BOOKINGS-FLDATE.
Transfering Data to a File
REPORT CHAP2601.
Data declarations for later use
PARAMETERS FILENAME(128) DEFAULT '/usr/tmp/testfile.dat'
LOWER CASE.
TABLES CUSTOMERS.
DATA MSG_TEXT(50).
Get data for file transfer
DATA ALL_CUSTOMERS LIKE CUSTOMERS OCCURS 100
WITH HEADER LINE.
SELECT * FROM CUSTOMERS INTO TABLE ALL_CUSTOMERS.
SORT ALL_CUSTOMERS BY CITY.
LOOP AT ALL_CUSTOMERS.
WRITE: / ALL_CUSTOMERS-CITY,
ALL_CUSTOMERS-NAME.
ENDLOOP.
Opening the File
OPEN DATASET FILENAME FOR OUTPUT IN TEXT MODE
MESSAGE MSG_TEXT.
IF SY-SUBRC NE 0.
WRITE: 'File cannot be opened. Reason:', MSG_TEXT.
EXIT.
ENDIF.
Transferring Data
LOOP AT ALL_CUSTOMERS.
TRANSFER ALL_CUSTOMERS-NAME TO FILENAME.
ENDLOOP.
Closing the File
CLOSE DATASET FILENAME.
Reading Data from a File
REPORT CHAP2602.
Data declarations for later use
TABLES CUSTOMERS.
PARAMETERS FILENAME(128) DEFAULT '/usr/tmp/testfile.dat'
LOWER CASE.
DATA: MSG_TEXT(50),
ALL_CUSTOMER_NAMES LIKE CUSTOMERS-NAME OCCURS 100
WITH HEADER LINE.
Opening the File
OPEN DATASET FILENAME FOR INPUT IN TEXT MODE
MESSAGE MSG_TEXT.
IF SY-SUBRC NE 0.
WRITE: 'File cannot be opened. Reason:', MSG_TEXT.
EXIT.
ENDIF.
Reading Data
DO.
READ DATASET FILENAME INTO ALL_CUSTOMER_NAMES.
IF SY-SUBRC NE 0.
EXIT.
ENDIF.
APPEND ALL_CUSTOMER_NAMES.
ENDDO.
Closing the file
CLOSE DATASET FILENAME.
Display the result
LOOP AT ALL_CUSTOMER_NAMES.
WRITE / ALL_CUSTOMER_NAMES.
ENDLOOP.
Use of Field Symbols and Assign Statement
REPORT CHAP2403.
Table work area for later use
TABLES CUSTOMERS.
Defining a Field Symbol
FIELD-SYMBOLS .
Displaying all fields of all table entries
SELECT * FROM CUSTOMERS.
NEW-LINE.
DO.
ASSIGN COMPONENT SY-INDEX OF STRUCTURE CUSTOMERS TO .
ENDDO.
ENDSELECT.
Pop-Up Screens
TABLES spfli.
Processing data
START-OF-SELECTION.
SELECT * FROM spfli.
WRITE / spfli-carrid HOTSPOT ON.
ENDSELECT.
Single click
AT LINE-SELECTION.
WINDOW STARTING AT 10 10
ENDING AT 40 20.
WRITE 'This is my first window'.
Program statement for BDC
PERFORM GET_SCREEN_DATA USING 'SAPMV56A' '0020'.
PERFORM GET_FIELD_DATA USING 'BDC_SUBSCR' 'SAPMV56A'.
PERFORM GET_FIELD_DATA USING 'VTTK-EXTI1' TTAB_PLNINFM-EXTI1.
PERFORM GET_FIELD_DATA USING 'VTTK-EXTI2' TTAB_PLNINFM-EXTI2.
PERFORM GET_FIELD_DATA USING 'BDC_SUBSCR' 'SAPMV56A'.
Adding BDC Screen
FORM GET_SCREEN_DATA USING LI_VAL1
LI_VAL2.
CLEAR : ITAB_BDC.
ITAB_BDC-PROGRAM = LI_VAL1.
ITAB_BDC-DYNPRO = LI_VAL2.
ITAB_BDC-DYNBEGIN = CNS_VALUEX.
APPEND ITAB_BDC.
ENDFORM.
FORM GET_FIELD_DATA USING LI_VAL1
LI_VAL2.
CLEAR ITAB_BDC.
ITAB_BDC-FNAM = LI_VAL1.
ITAB_BDC-FVAL = LI_VAL2.
APPEND ITAB_BDC.
ENDFORM.
Call Transaction Syntax
CALL TRANSACTION TCODE-VT03 USING ITAB_BDC
MODE MODE-A
[ UPDATE ]
MESSAGES INTO ITAB_MESSTAB.
Types of Modes
1.Display Mode
A Display All
E Display only if there are errors
N Display Nothing(Normal Mode)
2.Update Mode
S Do not continue processing until update has finished(synchronous)
A Continue Processing Immediately.
Handling of BDC Error Messages
DESCRIBE TABLE ITAB04_MESSTAB LINES WRK_L_RECCOU.
READ TABLE ITAB04_MESSTAB INDEX WRK_L_RECCOU.
IF SY-SUBRC = 0.
MESSAGE ID ITAB_MESSTAB-MSGID "ステータスメッセージの取得
TYPE ITAB_MESSTAB-MSGTYP
NUMBER ITAB_MESSTAB-MSGNR WITH
ITAB_MESSTAB-MSGV1
ITAB_MESSTAB-MSGV2
ITAB_MESSTAB-MSGV3
ITAB_MESSTAB-MSGV4
INTO ITAB20_MB1A-ERROR. "エラーメッセージテキスト
ITAB20_MB1A-MSGTYP = ITAB_MESSTAB-MSGTYP.
ITAB20_MB1A-TKNUM = TTAB_SCDLEINFM-TKNUM.
IF ITAB20_MB1A-MSGTYP = 'E'.
ITAB20_MB1A-FLG_ERR = CNS_VALUEX.
FLG_MB1A = CNS_VALUEX.
ENDIF.
Refreshing a Table Control
REFRESH CONTROL 'TBC_9300' FROM SCREEN '9300'.
CALL SCREEN 9300.
Table Control Column Hide
DATA :  WA LIKE LINE OF TBC_9000-COLS.
FORM HIDE_9000_I.
LOOP AT TBC_9000-COLS INTO WA.
IF WA-SCREEN-GROUP1 = 'SC1'.
WA-INVISIBLE = 1. OR WA-INVISIBLE = 0.
MODIFY TBC_9000-COLS FROM WA.
ENDIF.
ENDLOOP.
ENDFORM. " HIDE_9000_I
Disabling or hiding screen fields
Loop at screen.
If screen-group1 eq 'DAT'.
Screen-invisible = 1.
Modify screen.
Endif.
Endloop.
Disabling Menus or toolbar buttons
SET PF-STATUS 'ABC EXCLUDING EXCL_TAB.
Set Cursor Syntax
SET CURSOR FIELD 'ITAB06_SCDLEINFM-KNOTA'
LINE TBC_9003-CURRENT_LINE.
Get Cursor Syntax
GET CURSOR FIELD WRK_CURFIELD LINE WRK_ZEILE.
DYNPRO Flow Logic
PROCESS BEFORE OUTPUT.
MODULE SET_CURSOR_9001O.
LOOP AT ITAB01_FREIGHT
WITH CONTROL TBC_9001
CURSOR TBC_9001-CURRENT_LINE.
抽出したデータをテーブルコントロールhの移動
MODULE TBC_9001_GET_LINES.
MODULE TBC_9002_GET_LINES OUTPUT.
MOVE-CORRESPONDING ITAB05_TRINFM TO TBC_9002.
G_TBC_9002_LINES = SY-LOOPC.
ENDMODULE.
PROCESS AFTER INPUT.
LOOP AT ITAB01_FREIGHT.
CHAIN.
FIELD : ITAB01_FREIGHT-TKNUM.
MODULE PICKUP.
FIELD : ITAB01_FREIGHT-KNOTA,
ITAB01_FREIGHT-DPREG,
ITAB01_FREIGHT-KNOTZ,
ITAB01_FREIGHT-DPABF.
MODULE LOAD_DLRY_PORTCD_9001I ON CHAIN-REQUEST.
ENDCHAIN.
FIELD ITAB01_FREIGHT-TKNUM
MODULE DATE_PAYMENT_9001I ON REQUEST.
MODULE CHANGE_FLDVALUES_9001I.
MODULE TBL_CTRL_TO_ITAB_9001I.
ENDLOOP.
MODULE TBL_CTRL_TO_ITAB_9001I INPUT.
MOVE-CORRESPONDING TBC_9001 TO ITAB01_FREIGHT.
MODIFY ITAB01_FREIGHT INDEX TBC_9001-CURRENT_LINE.
G_TBC_9001_LINES = SY-LOOPC.
ENDMODULE.
MODULE TBC_9001_GET_LINES OUTPUT.
MOVE-CORRESPONDING ITAB01_FREIGHT TO TBC_9001.
G_TBC_9001_LINES = SY-LOOPC.
ENDMODULE.
EDIT/UNEDIT MODE IN TABLE CONTROL
PERFORM ACTUAL_DATE_EDIT_MODE_ICD USING 'ITAB06_SCDLEINFM-DAREG'
CNS_VALUEX.
FORM ACTUAL_DATE_EDIT_MODE_ICD USING LI_DATE
LI_VALUEX.
IF ITAB06_SCDLEINFM-IDX = WRK_LINE.
LOOP AT SCREEN.
CHECK SCREEN-NAME = LI_DATE.
IF LI_VALUEX = CNS_VALUEX.
SCREEN-INPUT = 0.
ELSE.
SCREEN-INPUT = 1.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
ENDFORM. " ACTUAL_DATE_EDIT_MODE_ICD
PERFORM SELECT_TABLE_CONTROL_ICD USING WRK_TABLE1
WRK_TABLE2
WRK_TABLE3
WRK_TABLE4.
FORM SELECT_TABLE_CONTROL_ICD USING LI_TAB1
LI_TAB2
LI_TAB3
LI_TAB4.
CLEAR : WRK_DATA,WRK_DATA1,WRK_TKNUM.
CONCATENATE LI_TAB1 '[]' INTO WRK_TNAME.
ASSIGN (WRK_TNAME) TO .
輸送情報タブ
PERFORM RECORD_SELECTION USING LI_TAB2 WRK_DATA WRK_DATA1.
日程情報タブ
PERFORM RECORD_SELECTION USING LI_TAB3 WRK_DATA WRK_DATA1.
計画情報タブ
PERFORM RECORD_SELECTION USING LI_TAB4 WRK_DATA WRK_DATA1.
ENDLOOP.
ENDFORM. " SELECT_TABLE_CONTROL_ICD
FORM RECORD_SELECTION USING LI_TAB2
LI_DATA1
LI_DATA2.
CLEAR WRK_TKNUM.
CONCATENATE LI_TAB2 '[]' INTO WRK_TNAME.
ASSIGN (WRK_TNAME) TO = ' '.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " RECORD_SELECTION
MODULE USER_COMMAND_9001I INPUT.
CASE SY-UCOMM.
ページコントロール機能の場合
WHEN PAGE-FIST OR "第一ページ
PAGE-PREV OR "前ページ
PAGE-NEXT OR "次ページ
PAGE-LAST. "最終ページ
PERFORM PAGE_CTRL_FUNCTION_ICD USING 'TBC_9001' SY-UCOMM.
行選択、解除機能の場合
WHEN FUNC-MARK OR FUNC-DMRK.
PERFORM SELECT_DELESELCT_ICD USING 'TBC_9001'
'ITAB01_FREIGHT'
'REC'
SY-UCOMM.
ENDCASE.
ENDMODULE. " USER_COMMAND_9001I INPUT
FORM PAGE_CTRL_FUNCTION_ICD USING LI_TBLCTRL LI_OKCODE.
*-BEGIN OF LOCAL DATA----
*
DATA L_TC_NEW_TOP_LINE TYPE I.
DATA L_TC_NAME LIKE FELD-NAME.
DATA L_TC_LINES_NAME LIKE FELD-NAME.
DATA L_TC_FIELD_NAME LIKE FELD-NAME.
FIELD-SYMBOLS TYPE I.
*-END OF LOCAL DATA----
*
ASSIGN (LI_TBLCTRL) TO .
テーブルコントロールループラインのゲット
CONCATENATE 'G_' LI_TBLCTRL '_LINES' INTO L_TC_LINES_NAME.
ASSIGN (L_TC_LINES_NAME) TO
OK_CODE = LI_OKCODE
OVERLAPPING   = CNS_VALUEX
IMPORTING 
ENTRY_NEW = L_TC_NEW_TOP_LINE
EXCEPTIONS
NO_ENTRY_OR_PAGE_ACT = 0
NO_ENTRY_TO   = 0
NO_OK_CODE_OR_PAGE_GO = 0
OTHERS    = 99.
ENDIF.
GET CURSOR FIELD L_TC_FIELD_NAME
AREA L_TC_NAME.
IF SYST-SUBRC = 0.
IF L_TC_NAME = LI_TBLCTRL.
列のセット
SET CURSOR FIELD L_TC_FIELD_NAME LINE 1.
ENDIF.
ENDIF.
-TOP_LINE = L_TC_NEW_TOP_LINE.
ENDFORM. " PAGE_CTRL_FUNCTION
*&----
*
*& Form SELECT_DELESELCT_ICD
*&----
*
FORM SELECT_DELESELCT_ICD USING LI_TBLCTL
LI_ITAB
LI_FLAG
LI_BTN.
ASSIGN (LI_TBLCTL) TO . "ヘッダ行外
既に記入している行のマーク
LOOP AT = SPACE.
ENDIF.
ENDLOOP.
ENDFORM. " SELECT_DELESELCT_ICD
DOWNLOADING INFORMATIONS
FORM P10000_DOWNLOAD_AUC.
内部テーブルITAB03_DWLNDは初期の場合
CLEAR FLG_ERR.
IF NOT ITAB03_DWLND[] IS INITIAL.
ログテーブルへダウンロード開始メッセージを書込む
PERFORM FILE_DOWNLOAD_START_LOG_AUC.
CSVファイルにヘッダを書込む
PERFORM FILE_HEADER_AUC.
データのダウンロード
PERFORM FILE_DOWNLOAD_DATA_AUC.
ログテーブルへダウンロード終了メッセージを書込む
PERFORM FILE_DOWNLOAD_END_LOG_AUC.
ELSE.
レコードが存在しない場合
CLEAR : WRK_MSGV1,WRK_MSGV2,WRK_MSGV3,WRK_MSGV4,
WRK_MSGNO,WRK_SUBRC.
WRK_MSGNO = CNS_MSG010.
エラーの場合、ログテーブルへエラーメッセージを書込
PERFORM ERROR_LOG USING WRK_MSGID
WRK_MSGNO
WRK_MSGV1
WRK_MSGV2
WRK_MSGV3
WRK_MSGV4
WRK_REPID
WRK_TRNCD
WRK_MTYPE
CHANGING WRK_SUBRC.
IF WRK_SUBRC <> 0.
MESSAGE S005 WITH 'エラーログ管理テーブル登録(ZMM_EST_ERROR)'
WRK_SUBRC.
ENDIF.
MESSAGE S010.
STOP.
ENDIF.
ENDFORM. " P10000_DOWNLOAD_AUC
*&----
*
*& Form FILE_DOWNLOAD_START_LOG_AUC
*&----
*
FORM FILE_DOWNLOAD_START_LOG_AUC.
CLEAR: WRK_MSGV1,WRK_MSGV2,WRK_MSGV3,WRK_MSGV4,WRK_MSGNO,WRK_SUBRC.
WRK_MSGNO = CNS_MSG050.
WRK_MSGV1 = P_FILNAM.
ログテーブルへプログラムヘッダを書込む
PERFORM ERROR_LOG USING WRK_MSGID
WRK_MSGNO
WRK_MSGV1
WRK_MSGV2
WRK_MSGV3
WRK_MSGV4
WRK_REPID
WRK_TRNCD
WRK_MTYPE
CHANGING WRK_SUBRC.
リターンコード出力
IF WRK_SUBRC <> 0.
MESSAGE S005 WITH 'エラーログ管理テーブル登録(ZMM_EST_ERROR)'
WRK_SUBRC.
ENDIF.
ENDFORM. " FILE_DOWNLOAD_START_LOG_AUC
*&----
*
*& Form FILE_DOWNLOAD_DATA_AUC
*&----
*
FORM FILE_DOWNLOAD_DATA_AUC.
FIELD-SYMBOLS .
ダウンロード処理
DATA : WRK_L_FNAME LIKE RLGRAP-FILENAME, "ファイル
WRK_L_SUBRC TYPE NUM2, "リータンコード
WRK_DATA TYPE CHAR30.
CLEAR: WRK_L_FNAME,WRK_L_SUBRC.
WRK_L_FNAME = P_FILNAM.
内部テーブルITAB03_DWLNDの各レコードに繰り返す
LOOP AT ITAB03_DWLND.
CLEAR: ITAB04_DWLND,SY-SUBRC.
各レコードを処理する
WHILE SY-SUBRC = 0.
ASSIGN COMPONENT SY-INDEX OF
STRUCTURE ITAB03_DWLND TO .
CHECK SY-SUBRC = 0.
セパレーターがデータの中あった場合、の中に追加する
SEARCH .
ENDIF.
最初の項目の場合、セパレーターがいらない
IF SY-INDEX = 1.
ITAB04_DWLND = WRK_DATA.
ELSE.
残り項目の場合、セパレーターが必要です
CONCATENATE ITAB04_DWLND WRK_DATA INTO
ITAB04_DWLND
SEPARATED BY CNS_COMMA.
ENDIF.
CLEAR SY-SUBRC.
ENDWHILE.
データを追加する
APPEND ITAB04_DWLND.
CLEAR ITAB04_DWLND.
ENDLOOP.
汎用モジュールを使用し、ローカルPCへダウンロードする
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = WRK_L_FNAME
FILETYPE = 'ASC'
TABLES
DATA_TAB = ITAB04_DWLND
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
OTHERS = 10.
IF SY-SUBRC <> 0.
エラーフラグのセット.
FLG_ERR = CNS_VALUEX.
CLEAR: WRK_MSGV1,WRK_MSGV2,WRK_MSGV3,WRK_MSGV4,WRK_MSGNO,
WRK_SUBRC,WRK_L_SUBRC.
WRK_MSGNO = CNS_MSG005.
WRK_MSGV1 = 'プレゼンテーションサーバ転送(WS_DOWNLOAD)'.
WRK_L_SUBRC = SY-SUBRC.
WRK_MSGV2 = WRK_L_SUBRC .
エラーの場合、ログテーブルへメッセージを書込む
PERFORM ERROR_LOG USING WRK_MSGID
WRK_MSGNO
WRK_MSGV1
WRK_MSGV2
WRK_MSGV3
WRK_MSGV4
WRK_REPID
WRK_TRNCD
WRK_MTYPE
CHANGING WRK_SUBRC.
リターンコード出力
IF WRK_SUBRC <> 0.
MESSAGE S005 WITH 'エラーログ管理テーブル登録(ZMM_EST_ERROR)'
WRK_SUBRC.
ENDIF.
ELSE.
ダウンロードされたレコードの合計
PERFORM DOWNLOAD_NO_RECORD_AUC.
ENDIF.
ENDFORM. " FILE_DOWNLOAD_DATA_AUC
*&----
*
*& Form DOWNLOAD_NO_RECORD_AUC
*&----
*
FORM DOWNLOAD_NO_RECORD_AUC.
CLEAR CNT_REC .
レコード数の計算
DESCRIBE TABLE ITAB03_DWLND LINES CNT_REC .
SHIFT CNT_REC LEFT DELETING LEADING CNS_ZERO.
CLEAR: WRK_MSGV1,WRK_MSGV2,WRK_MSGV3,WRK_MSGV4,WRK_MSGNO,
WRK_SUBRC.
WRK_MSGNO = CNS_MSG052.
WRK_MSGV1 = CNT_REC.
WRK_MSGV2 = P_FILNAM.
ログテーブルへメッセージを書込む
PERFORM ERROR_LOG USING WRK_MSGID
WRK_MSGNO
WRK_MSGV1
WRK_MSGV2
WRK_MSGV3
WRK_MSGV4
WRK_REPID
WRK_TRNCD
WRK_MTYPE
CHANGING WRK_SUBRC.
リターンコード出力
IF WRK_SUBRC <> 0.
MESSAGE S005 WITH 'エラーログ管理テーブル登録(ZMM_EST_ERROR)'
WRK_SUBRC.
ENDIF.
ENDFORM. " DOWNLOAD_NO_RECORD_AUC
*&----
*
*& Form FILE_DOWNLOAD_END_LOG_AUC
*&----
*
FORM FILE_DOWNLOAD_END_LOG_AUC.
CLEAR: WRK_MSGV1,WRK_MSGV2,WRK_MSGV3,WRK_MSGV4,WRK_MSGNO,
WRK_SUBRC.
WRK_MSGNO = CNS_MSG051.
WRK_MSGV1 = P_FILNAM.
ログ出力
PERFORM ERROR_LOG USING WRK_MSGID
WRK_MSGNO
WRK_MSGV1
WRK_MSGV2
WRK_MSGV3
WRK_MSGV4
WRK_REPID
WRK_TRNCD
WRK_MTYPE
CHANGING WRK_SUBRC.
リターンコード出力
IF WRK_SUBRC <> 0.
MESSAGE S005 WITH 'エラーログ管理テーブル登録(ZMM_EST_ERROR)'
WRK_SUBRC.
ENDIF.
ENDFORM. " FILE_DOWNLOAD_END_LOG_AUC
Populate Dropdown menu(Not from Table)
TYPE-POOLS: VRM.
DATA: NAME TYPE VRM_ID,
LIST TYPE VRM_VALUES,
VALUE LIKE LINE OF LIST.
PARAMETERS: PS_PARM(10) AS LISTBOX VISIBLE LENGTH 10.
AT SELECTION-SCREEN OUTPUT.
NAME = 'PS_PARM'.
VALUE-KEY = '1'.
VALUE-TEXT = 'LINE 1'.
APPEND VALUE TO LIST. VALUE-KEY = '2'.
VALUE-TEXT = 'LINE 2'.
APPEND VALUE TO LIST.
CALL FUNCTION 'VRM_SET_VALUES' EXPORTING ID = NAME VALUES = LIST.
START-OF-SELECTION.
WRITE: / 'PARAMETER:', PS_PARM.
Generating a Program
REPORT CHAP2504.
Internal table for source code, field for name of temporary program
DATA: SOURCE_TABLE(72) OCCURS 10 WITH HEADER LINE,
PROGRAM_NAME LIKE SY-CPROG.
Building the source code
APPEND 'report zgenprog.' TO SOURCE_TABLE.
APPEND 'write ''I am a generated program''.' TO SOURCE_TABLE.
Insert the report, if necessary
READ REPORT 'zgenprog' INTO SOURCE_TABLE.
IF SY-SUBRC NE 0.
APPEND 'report zgenprog.' TO SOURCE_TABLE.
APPEND 'write ''Here is zgenprog''.' TO SOURCE_TABLE.
INSERT REPORT 'zgenprog' FROM SOURCE_TABLE.
ENDIF.
Execute the report
SUBMIT ZGENPROG AND RETURN.
Running a Report Using Submit Statement
(a)
REPORT CHAP1802.
Work area
TABLES CUSTOMERS.
Selection criteria
SELECT-OPTIONS S_NAME FOR CUSTOMERS-NAME.
Running report chap1801 with specified selection criteria
SUBMIT CHAP1801
WITH P_DATE = SY-DATUM
WITH S_NAME IN S_NAME.
(b)
REPORT CHAP1803.
Work area
TABLES CUSTOMERS.
Selection criteria
SELECT-OPTIONS S_NAME FOR CUSTOMERS-NAME.
running chap1801 and displaying the selection screen
SUBMIT CHAP1801
VIA SELECTION-SCREEN
WITH P_DATE = SY-DATUM
WITH S_NAME IN S_NAME.
(C)
REPORT CHAP1801.
TABLES: CUSTOMERS, BOOKINGS.
PARAMETERS P_DATE TYPE D.
SELECT-OPTIONS S_NAME FOR CUSTOMERS-NAME.
SELECT * FROM CUSTOMERS
WHERE NAME IN S_NAME.
WRITE / CUSTOMERS-NAME.
SELECT * FROM BOOKINGS
WHERE ORDER_DATE = P_DATE
AND CUSTOMID = CUSTOMERS-ID.
WRITE: / BOOKINGS-CARRID,
BOOKINGS-CONNID,
BOOKINGS-FLDATE.
ENDSELECT.
ENDSELECT.
External perform (caller)
REPORT CHAP2307.
List of the current program
WRITE / 'I am program chap2307'.
External perform
PERFORM EXTFORM IN PROGRAM CHAP2308.
External perform (called form)
REPORT CHAP2308.
Form definition
FORM EXTFORM.
WRITE / 'I am extform in program chap2308'.
ENDFORM.
Dynamic external perform (call back form)
REPORT CHAP2309.
PERFORM EXTFORM IN PROGRAM CHAP2310
USING 'CALL_BACK_FORM'
SY-CPROG.
FORM CALL_BACK_FORM.
WRITE / 'I am the call back form in chap2309.'.
ENDFORM.
Dynamic external perform
REPORT CHAP2310.
FORM EXTFORM
USING F_CALL_BACK_FORM
F_PROGRAM.
PERFORM (F_CALL_BACK_FORM) IN PROGRAM (F_PROGRAM).
WRITE / 'I am the form in chap2310.'.
ENDFORM.
Dynamic Open SQL Commands: table name
(a)
REPORT CHAP2305.
PARAMETERS TABLENAME(10) DEFAULT 'CUSTOMERS'.
DATA COUNT_ROWS TYPE I.
SELECT COUNT( * ) FROM (TABLENAME) INTO COUNT_ROWS.
WRITE: TABLENAME, COUNT_ROWS.
DATA WHERE_TAB(80) OCCURS 10 WITH HEADER LINE.
APPEND 'name like ''E%''' TO WHERE_TAB.
APPEND 'and city like ''S%''' TO WHERE_TAB.
TABLES CUSTOMERS.
DATA ALL_CUSTOMERS LIKE CUSTOMERS OCCURS 100.
SELECT * FROM CUSTOMERS INTO TABLE ALL_CUSTOMERS
WHERE ID BETWEEN 1 AND 999
AND (WHERE_TAB).
(b)
REPORT CHAP2305.
PARAMETERS TABLENAME(10) DEFAULT 'CUSTOMERS'.
DATA COUNT_ROWS TYPE I.
SELECT COUNT( * ) FROM (TABLENAME) INTO COUNT_ROWS.
WRITE: TABLENAME, COUNT_ROWS.
DATA WHERE_TAB(80) OCCURS 10 WITH HEADER LINE.
APPEND 'name like ''E%''' TO WHERE_TAB.
APPEND 'and city like ''S%''' TO WHERE_TAB.
TABLES CUSTOMERS.
DATA ALL_CUSTOMERS LIKE CUSTOMERS OCCURS 100.
SELECT * FROM CUSTOMERS INTO TABLE ALL_CUSTOMERS
WHERE ID BETWEEN 1 AND 999
AND (WHERE_TAB).
Exporting to the ABAP/4 Memory
REPORT CHAP1401.
Work areas
TABLES: CUSTOMERS, BOOKINGS.
Internal tables which will be exported
DATA: ALL_CUSTOMERS LIKE CUSTOMERS OCCURS 100
WITH HEADER LINE,
ALL_BOOKINGS LIKE BOOKINGS OCCURS 10
WITH HEADER LINE.
Filling the internal tables
SELECT * FROM CUSTOMERS INTO TABLE ALL_CUSTOMERS.
SELECT * FROM BOOKINGS INTO TABLE ALL_BOOKINGS.
Exporting to the ABAP/4 Memory
EXPORT ALL_CUSTOMERS ALL_BOOKINGS
TO MEMORY ID 'CUSTBOOK'.
Displaying the result
LOOP AT ALL_CUSTOMERS.
WRITE / ALL_CUSTOMERS-NAME.
ENDLOOP.
LOOP AT ALL_BOOKINGS.
WRITE / ALL_BOOKINGS-FLDATE.
ENDLOOP.
Importing from the ABAP/4 Memory
REPORT CHAP1402.
Internal tables which will be imported
DATA: ALL_CUSTOMERS LIKE CUSTOMERS OCCURS 100
WITH HEADER LINE,
ALL_BOOKINGS LIKE BOOKINGS OCCURS 10
WITH HEADER LINE,
NEW_BOOKINGS LIKE BOOKINGS OCCURS 50
WITH HEADER LINE.
Importing from the ABAP/4 Memory
IMPORT ALL_CUSTOMERS ALL_BOOKINGS
FROM MEMORY ID 'CUSTBOOK'.
IF SY-SUBRC NE 0.
WRITE 'Import failed.'.
ENDIF.
Skipping and renaming objects at import
IMPORT ALL_BOOKINGS TO NEW_BOOKINGS
FROM MEMORY ID 'CUSTBOOK'.
Displaying the result
LOOP AT ALL_CUSTOMERS.
WRITE / ALL_CUSTOMERS-NAME.
ENDLOOP.
LOOP AT ALL_BOOKINGS.
WRITE / ALL_BOOKINGS-FLDATE.
ENDLOOP.
LOOP AT NEW_BOOKINGS.
WRITE / NEW_BOOKINGS-FLDATE.
ENDLOOP.
Using Symbols and Icons
REPORT CHAP0806.
Declaring symbols and icons
INCLUDE: .
Displaying symbols and icons
WRITE: / SYM_PHONE AS SYMBOL, 'telephone',
/ SYM_FAX AS SYMBOL, 'fax machine',
/ SYM_LEFT_HAND AS SYMBOL, 'hand pointing left',
/ SYM_CAUTION AS SYMBOL, 'caution',
/ ICON_CHECKED AS ICON, 'checked; okay',
/ ICON_DELETE AS ICON, 'delete',
/ ICON_PRINT AS ICON, 'print'.
Using Colors
WRITE 'Header' COLOR COL_HEADING.
Switch the standard color
FORMAT COLOR COL_TOTAL.
Make the color less bright
WRITE / 'total sum' COLOR COL_TOTAL INTENSIFIED OFF.
Using different colors
FORMAT COLOR COL_HEADING.
WRITE / 'Header'.
FORMAT COLOR OFF.
SKIP.
WRITE: / 'Key field' COLOR COL_KEY,
'Background',
'Negative' COLOR COL_NEGATIVE,
/ 'Total sum' COLOR COL_TOTAL INTENSIFIED OFF.
Classifying parameters
Data declarations for later use
DATA: A1 TYPE P VALUE 2,
A2 TYPE P VALUE 4,
A3 TYPE P VALUE 8.
Calling a form with different parameter types
PERFORM CALC USING A1
A2
CHANGING A3.
Displaying the result
WRITE A3.
Defining a form with different parameter types
FORM CALC USING VALUE(F1) LIKE A1
F2 LIKE A2
CHANGING VALUE(F3) LIKE A3.
F3 = F1 + ( F2 * F3 ).
ENDFORM.
Using table parameters
Work area of database table and internal table for later use
TABLES CUSTOMERS.
DATA ALL_CUSTOMERS LIKE CUSTOMERS OCCURS 50 WITH HEADER LINE.
Calling a form with a table parameter
PERFORM READ_CUSTOMERS TABLES ALL_CUSTOMERS.
LOOP AT ALL_CUSTOMERS.
WRITE / ALL_CUSTOMERS-NAME.
ENDLOOP.
Defining a form with a table parameter
FORM READ_CUSTOMERS TABLES F_CUSTOMERS STRUCTURE ALL_CUSTOMERS.
SELECT * FROM CUSTOMERS INTO TABLE F_CUSTOMERS.
ENDFORM.
Working with the hide command(At line Selection)
REPORT CHAP1704.
work area
TABLES CUSTOMERS.
Internal table
DATA ALL_CUSTOMERS LIKE CUSTOMERS OCCURS 100
WITH HEADER LINE.
Processing data
START-OF-SELECTION.
SELECT * FROM CUSTOMERS INTO TABLE ALL_CUSTOMERS.
LOOP AT ALL_CUSTOMERS.
WRITE / ALL_CUSTOMERS-NAME HOTSPOT ON.
HIDE ALL_CUSTOMERS-ID.
ENDLOOP.
Detail information
AT LINE-SELECTION.
WRITE: / 'Customer detail information:',
ALL_CUSTOMERS-NAME,
ALL_CUSTOMERS-CITY,
ALL_CUSTOMERS-TELEPHONE.
Uploading files from PC(Presentation Server)
Retrieve data file from presentation server(Upload from PC)
DATA: i_file like rlgrap-filename value '/usr/sap/tmp/file.txt'.
DATA: begin of it_datatab occurs 0,
row(500) type c,
end of it_datatab.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = i_file
filetype = 'ASC'
TABLES
data_tab = it_datatab "ITBL_IN_RECORD[]
EXCEPTIONS
file_open_error = 1
OTHERS = 2.
Downloading files to PC(Presentation Server)
(a)* Download internal table to presentation server file(PC)
DATA: ld_filename TYPE string,
Pre version 4.7 declaration e_file like rlgrap-filename.
DATA: begin of it_datatab occurs 0,
row(500) type c,
end of it_datatab.
call function 'GUI_DOWNLOAD'
exporting
filename = ld_filename
filetype = 'ASC'
tables
data_tab = it_datatab[]
exceptions
file_open_error = 1
file_write_error = 2
others = 3.
(b) Download internal table to presentation server file(PC)
Separating fields/columns by a tab
DATA: ld_filename TYPE string,
Pre version 4.7 declaration e_file like rlgrap-filename.
DATA: begin of it_datatab occurs 0,
col1(50) type c,
col2(50) type c,
col3(50) type c,
etc....
end of it_datatab.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = ld_filename
filetype = 'ASC'
APPEND = 'X'
write_field_separator = 'X'
CONFIRM_OVERWRITE = 'X'
TABLES
data_tab = it_datatab[]
EXCEPTIONS
file_open_error = 1
file_write_error = 2
OTHERS = 3.
Uploading and Downloading Data from Application Server and Lock Mechanisms
REPORT ZTEST_ABN1 .
TYPES: BEGIN OF WRK_DATA,
DATA(1000) TYPE C, "データ
END OF WRK_DATA.
TYPES: BEGIN OF WRK_LOCK,
LIFNR LIKE ZMMT301-LIFNR,
ZZSOKOCD LIKE ZMMT301-ZZSOKOCD,
ZZJANCD LIKE ZMMT301-ZZJANCD,
END OF WRK_LOCK.
DATA: ITAB TYPE STANDARD TABLE OF WRK_DATA
WITH DEFAULT KEY
WITH HEADER LINE.
DATA: ITAB_LOCK TYPE STANDARD TABLE OF WRK_LOCK
WITH DEFAULT KEY
WITH HEADER LINE.
PARAMETERS TFNAME(128) DEFAULT '/tmp/TEST.DAT'
LOWER CASE.
PARAMETERS FFNAME(128) DEFAULT 'd:aa-yodhobashiifilez.txt'
LOWER CASE.
PARAMETERS: WRITE1 RADIOBUTTON GROUP X1,
READ1 RADIOBUTTON GROUP X1 DEFAULT 'X',
LOCKT RADIOBUTTON GROUP X1,
ULOCK RADIOBUTTON GROUP X1. " DEFAULT 'X'.
IF WRITE1 = 'X'.
PERFORM WRITE_DATA_APP.
CLEAR WRITE1.
ENDIF.
IF READ1 = 'X'.
PERFORM READ_DATA_APP.
CLEAR READ1.
ENDIF.
IF LOCKT = 'X'.
PERFORM APPEND_TBL.
PERFORM LOCK_TBL.
CLEAR LOCKT.
ENDIF.
IF ULOCK = 'X'.
PERFORM UNLOCK_TABLE_PRC.
CLEAR ULOCK.
ENDIF.
*&----
*
*& Form write_data_app
*&----
*
FORM WRITE_DATA_APP .
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = FFNAME
TABLES
DATA_TAB = ITAB
EXCEPTIONS
FILE_OPEN_ERROR = 1
OTHERS = 2.
CASE SY-SUBRC.
WHEN 1.
WRITE 'Error when file opened'.
EXIT.
WHEN 2.
WRITE 'Error during data transfer'.
EXIT.
ENDCASE.
Opening the File
OPEN DATASET TFNAME FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
MESSAGE MSG_TEXT.
IF SY-SUBRC NE 0.
WRITE: 'File cannot be opened. Reason:'. ", MSG_TEXT.
EXIT.
ENDIF.
Transferring Data
LOOP AT ITAB.
TRANSFER ITAB-DATA TO TFNAME.
ENDLOOP.
Closing the File
CLOSE DATASET : TFNAME,FFNAME.
Display the result
*LOOP AT itab.
WRITE: / itab-data.
*ENDLOOP.
ENDFORM. " write_data_app
*&----
*
*& Form read_data_app
*&----
*
FORM READ_DATA_APP .
Opening the File
OPEN DATASET TFNAME FOR INPUT IN TEXT MODE ENCODING DEFAULT.
MESSAGE MSG_TEXT.
IF SY-SUBRC NE 0.
WRITE: 'File cannot be opened. Reason:'. ", MSG_TEXT.
EXIT.
ENDIF.
Reading Data
DO.
READ DATASET TFNAME INTO ITAB.
IF SY-SUBRC NE 0.
EXIT.
ENDIF.
APPEND ITAB.
ENDDO.
Closing the file
CLOSE DATASET TFNAME.
Display the result
LOOP AT ITAB.
WRITE / ITAB-DATA.
ENDLOOP.
ENDFORM. " read_data_app
*&----
*
*& Form APPEND_TBL
*&----
*
FORM APPEND_TBL .
CLEAR : ITAB_LOCK.
REFRESH : ITAB_LOCK.
ITAB_LOCK-LIFNR = '0000001111'.
ITAB_LOCK-ZZSOKOCD = 'R_KOL'.
ITAB_LOCK-ZZJANCD = '1'.
APPEND ITAB_LOCK. CLEAR ITAB_LOCK.
ITAB_LOCK-LIFNR = '0000001111'.
ITAB_LOCK-ZZSOKOCD = 'R_KOL'.
ITAB_LOCK-ZZJANCD = '2'.
APPEND ITAB_LOCK.
CLEAR ITAB_LOCK.
ENDFORM. " APPEND_TBL
*&----
*
*& Form UNLOCK_TABLE_PRC
*&----
*
FORM UNLOCK_TABLE_PRC .
LOOP AT ITAB_LOCK.
CALL FUNCTION 'DEQUEUE_EZMMT301_ZMMT001'
EXPORTING
MODE_ZMMT301 = 'E'
MANDT = SY-MANDT
LIFNR = ITAB_LOCK-LIFNR
ZZSOKOCD = ITAB_LOCK-ZZSOKOCD
ZZJANCD = ITAB_LOCK-ZZJANCD.
ENDLOOP.
ENDFORM. " UNLOCK_TABLE_PRC
*&----
*
*& Form LOCK_TBL
*&----
*
FORM LOCK_TBL .
LOOP AT ITAB_LOCK.
CALL FUNCTION 'ENQUEUE_EZMMT301_ZMMT001'
EXPORTING
MODE_ZMMT301 = 'E'
MANDT = SY-MANDT
LIFNR = ITAB_LOCK-LIFNR
ZZSOKOCD = ITAB_LOCK-ZZSOKOCD
ZZJANCD = ITAB_LOCK-ZZJANCD
EXCEPTIONS
FOREIGN_LOCK = 1
SYSTEM_FAILURE = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
WRITE /: ' ERROR LOCKING TABLE'.
ELSE.
WRITE /: 'TABLE LOCKED'.
ENDIF.
ENDLOOP.
ENDFORM. " LOCK_TBL
Creating New Program Via ABAP
REPORT ZCREATE_NEW_PROGRAM_VIA_ABAP.
Type of an editor line: rssource-line
DATA: code TYPE TABLE OF rssource-line.
Report Name
APPEND 'REPORT ZTESTING.' TO code.
APPEND 'WRITE / ''Program created via ABAP!''.'
TO code.
Report Name in SE38
INSERT REPORT 'ZTESTING' FROM code.
WRITE: / 'Report created (old report with same name overwritten).'.
WRITE: / 'Please check via transaction SE38'.
Submit Report as a Job
*Submit report as job(i.e. in background)
data: jobname like tbtcjob-jobname value
' TRANSFER TRANSLATION'.
data: jobcount like tbtcjob-jobcount,
host like msxxlist-host.
data: begin of starttime.
include structure tbtcstrt.
data: end of starttime.
data: starttimeimmediate like btch0000-char1.
Job open
call function 'JOB_OPEN'
exporting
delanfrep = ' '
jobgroup = ' '
jobname = jobname
sdlstrtdt = sy-datum
sdlstrttm = sy-uzeit
importing
jobcount = jobcount
exceptions
cant_create_job = 01
invalid_job_data = 02
jobname_missing = 03.
if sy-subrc ne 0.
"error processing
endif.
Insert process into job
SUBMIT zreport and return
with p_param1 = 'value'
with p_param2 = 'value'
user sy-uname
via job jobname
number jobcount.
if sy-subrc > 0.
"error processing
endif.
Close job
starttime-sdlstrtdt = sy-datum + 1.
starttime-sdlstrttm = '220000'.
call function 'JOB_CLOSE'
exporting
event_id = starttime-eventid
event_param = starttime-eventparm
event_periodic = starttime-periodic
jobcount = jobcount
jobname = jobname
laststrtdt = starttime-laststrtdt
laststrttm = starttime-laststrttm
prddays = 1
prdhours = 0
prdmins = 0
prdmonths = 0
prdweeks = 0
sdlstrtdt = starttime-sdlstrtdt
sdlstrttm = starttime-sdlstrttm
strtimmed = starttimeimmediate
targetsystem = host
exceptions
cant_start_immediate = 01
invalid_startdate = 02
jobname_missing = 03
job_close_failed = 04
job_nosteps = 05
job_notex = 06
lock_failed = 07
others = 99.
if sy-subrc eq 0.
"error processing
endif.
Conversion of Date to Characters
PERFORM FORMAT_DATE_ICD USING OTAB_DATA-DAREG
CHANGING WRK_DCONV.
FORM FORMAT_DATE_ICD USING LI_DATE
CHANGING LO_DCONV.
DATA: WRK_L_DATA TYPE CHAR50 VALUE 'JAN/FEB/MAR/APR/MAY/JUN/JLY/AUG/SEP/OCT/NOV/DEC',
WRK_L_DTE TYPE NUM2, "日の変数
WRK_L_MTH TYPE NUM2, "月の変数
WRK_L_YEAR TYPE NUM4. "年の変数
変数の初期化(* Initialization of * variable)
CLEAR: WRK_L_MTH,WRK_L_YEAR,LO_DCONV.
IF LI_DATE = CNS_DZERO.
LO_DCONV = SPACE.
EXIT.
ENDIF.
日の取得(* Acquisition of day)
WRK_L_DTE = LI_DATE+6(2).
月の取得(Acquisition of the moon)
WRK_L_MTH = LI_DATE+4(2).
年の取得(Acquisition of a year)
WRK_L_YEAR = LI_DATE+0(4).
定義した変数を使用し月をMMMMフォーマットに変更する
(The moon is changed into a MMMM format using the defined variable.)
WRK_L_MTH = ( WRK_L_MTH - 1 ) * 4.
LO_DCONV = WRK_L_DATA+WRK_L_MTH(3).
MMMと SPACE をCONCATENATEする
CONCATENATE LO_DCONV SPACE INTO LO_DCONV.
日をCONCATENATEする
CONCATENATE LO_DCONV WRK_L_DTE INTO LO_DCONV SEPARATED BY SPACE.
年をCONCATENATEする
CONCATENATE LO_DCONV WRK_L_YEAR INTO LO_DCONV SEPARATED BY SPACE.
ENDFORM. " FORMAT_DATE_ICD
Smart Forms
TABLES: MKPF.
DATA: FM_NAME TYPE RS38L_FNAM.
DATA: BEGIN OF INT_MKPF OCCURS 0.
INCLUDE STRUCTURE MKPF.
DATA: END OF INT_MKPF.
SELECT-OPTIONS S_MBLNR FOR MKPF-MBLNR MEMORY ID 001.
SELECT * FROM MKPF WHERE MBLNR IN S_MBLNR.
MOVE-CORRESPONDING MKPF TO INT_MKPF.
APPEND INT_MKPF.
ENDSELECT.
At the end of your program.
Passing data to SMARTFORMS
call function 'SSF_FUNCTION_MODULE_NAME'
exporting
formname = 'ZSMARTFORM'
* VARIANT = ' '
* DIRECT_CALL = ' '
IMPORTING
FM_NAME = FM_NAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
if sy-subrc <> 0.
WRITE: / 'ERROR 1'.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
call function FM_NAME
EXPORTING
* ARCHIVE_INDEX =
* ARCHIVE_INDEX_TAB =
* ARCHIVE_PARAMETERS =
* CONTROL_PARAMETERS =
* MAIL_APPL_OBJ =
* MAIL_RECIPIENT =
* MAIL_SENDER =
* OUTPUT_OPTIONS =
* USER_SETTINGS = 'X'
IMPORTING
* DOCUMENT_OUTPUT_INFO =
* JOB_OUTPUT_INFO =
* JOB_OUTPUT_OPTIONS =
TABLES
GS_MKPF = INT_MKPF
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
if sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
SapScript
SE71
Form painter
SE72
Style maintenance
SE73
SapScript font maintenance
SE78
SapScript Graphics Management
SO10
Create standard text module
Types of Symbols
1.System Symbols Date,Day,Name_of_day,Month,Year,Time,Hours,Minutes,Seconds,Page,NextPage,Device,Space,Uline,Vline
2.Standard Symbols
Standard symbols are user defined and are maintained in table TTDG. You use transaction SM30 to change or display standard symbols.
An examples of standard symbols is &MFG& fot "Yours faithfully"
3.Standard Text
Standard texts is predifined texts that can be used in more than one form. Standard texts are can be created, changed and displayed using transaction SO10.
4.Program Symbols
Program symbols are for contents of database fields or global program symbols. When you print the form, data from the database tables are printed isntead of the symbols.
TABLES: kna1.
&KNA1-NAME1&
Script Copy from one Client to other Client
(a) if its a local object
From SE71... UTILITIES->COPY FROM CLIENT
...or...
Execute program RSTXFCPY, both are same
b) if tis assigned to a dev class and has request/task #
use tcode SCC1 in the client you want to copy the SAPScript to
...or...
you can follow the instructions listed under a)
if the object is already released and you don't want to create a new request/task # then you can only use tcode SCC1
c) if tis in a different system
use program RSTXSCRP to Import/Export SAPScript dataset
To Display Data only in last page
/: IF &NEXTPAGE& NE 0
any dependent programs must be scheduled in a different job
5. Suggested methods for error handling & reprocessing
If subsequent steps in a job are not dependent on the first one finishing successfully, the first program should be set up to crash using a success message followed by the STOP statement.
Before every error message, call a routine which notifies the Operations Center of error type, severity, action, etc.
6. Transactions used for Background JOBS:
SM36 - Define Background Jobs
SM37 - Background Jobs Overview
How to define Periodic Jobs
Execute transaction SM36
Define Job name, Job class, Target server
Click on 'START CONDITION' button
Click on 'Date/Time' button
Enter Scheduled start DATE & TIME. Check mark 'Periodic Job' field. Click on 'Period values' button and select 'Hourly' or 'Dialy' or 'Weekly' or 'Monthly' or Other period and SAVE. Go back to main screen.
Click on 'STEPS' button and enter Program name and Variant under box 'ABAP Program'. Click on 'Print Specification' button and enter Printer name under 'Output device' and SAVE
Click on SAVE button until you get message on bottom of the screen that describes 'Job XYZ saved with status: Scheduled'.
Click on 'Job overview' button or execute SM37 transaction.
Select the appropriate 'Job name', 'User name', 'Job Status' & Schedule date under 'Job start condition' and click on 'Execute' button or press F8.
You will now see all your scheduled JOBS.
Types of Tables In SAP
1. Transparent Table
Stores Data Directly
Tables can be read directly from the database from outside SAP.
Its a one-to-one relationship table.
Used to store Transaction data.
Example : EKKO,VBAP
2. Cluster Table
Its a many-to-one relationship table.
Used to store Application data.
It must have a foreign-key relationship
Native SQL can be used.
Secondary Index cant be created and select distinct, group can be used
Example : BSEG(A/c ting Document Segment),
DOKTL(Documentation text lines)
3. Pooled Table
Its a many-to-one relationship table.
Used to store Application data.
Does not need to have a foreign-key relationship.
Native SQL can be used.
Secondary Index cant be created and select distinct, group can be used
Types of Views
1. Projection View
Projection views are used to hide fields of a table.
A projection view contains exactly one table.
You cannot define selection conditions for projection views.
There is no corresponding object in the database for a projection view.
The R/3 System maps the access to a projection view to the corresponding access to its base table.
You can also access pooled tables and cluster tables with a projection view.
2. Database Views
3. Maintenance Views
Types of Internal Tables
- Hash Table
This is the most appropriate type for any table where the main operation is key access. You cannot access a hashed table using its index. The response time for key access remains constant, regardless of the number of table entries. Like database tables, hashed tables always have a unique key. Hashed tables are useful if you want to construct and use an internal table which resembles a database table or for processing large amounts of data.
MatchCodes
Creation of Match Codes
The tables relevant for the search are included in a matchcode object. The table selection is based on one primary table. Further secondary tables can also be included, which are linked with the primary table by foreign keys. The fields of the matchcode object can then be selected from the Basis tables.
A matchcode object is not stored physically. It only describes a complete logical view on one or more tables.
1.Defining Attributes of the Matchcode Object
2.Selecting Secondary Tables for the Matchcode Object
3.Selecting Fields of the Matchcode Object
4.Activating Matchcode Objects
Creating Match Code Ids
Several matchcode IDs can be created for one matchcode object. The matchcode IDs are derived from the matchcode object by projection (field selection) and selection (definition of a selection condition).
A matchcode ID must be identified within a matchcode object with one letter or digit. This means that a maximum of 36 matchcode IDs (26 letters and 10 digits) can be defined for each matchcode object.
1.Defining Attributes of a Matchcode ID
2.Selecting Secondary Tables of a Matchcode ID
3.Selecting Fields of a Matchcode ID
4.Defining Selection Conditions for Matchcode IDs (optional)
5.Activating a Matchcode ID
‎2007 Nov 21 5:52 AM
Hi,
It really takes a long time to analyse a new code if its lengthy. So better understand the requirement first then divide the code into sections i.e. what exactly the particular block is all about, so that you wont get confused and debug the code for understanding more about it. Its takes a bit long time to understand it but once u have a clear idea about the requirement it ll be easy for you to understand any code.
Regards,
Srikanth.
‎2007 Nov 21 5:53 AM
HI
if you want to understand the PROGRAM flow and logic just DEBUG the program
from start-of-selection then you can know flow very easily
in DEBUGGING in each step you can know what happenning there , in the 1st atempt you can't know much try to do DEBUGG 4 or 5 times you will get the information about the report
<b>Reward if usefull</b>
‎2007 Nov 21 5:57 AM
trace the code from start of selection step by step if it s report,
if u want to check only a specific part, identify that part , set break point there and debug