7.11_ data interface exercises solutions

32
ECC 6.0 Data Interfaces: Exercise Solutions SAP Development ABAP Training Chapter 1 Exercise 1 Examining the background job in the Job Overview should indicate that this background job executed successfully. Its status will be ‘Finished’. Exercise 2 Examining the background job in the Job Overview should indicate that this background job executed successfully. Its status will be ‘Finished’. Exercise 3 Examining the background job in the Job Overview should indicate that this background job executed successfully. Its status will be ‘Finished’. Exercise 4 Examining the background job in the Job Overview should indicate that this background job did not execute successfully. Its status will be ‘Cancelled’. If you analyze the job log, you will see the message ‘Error opening file - No such file or directory’. This message is message number ‘020’ from message class ‘YTRABAPMSG’. Because of this message, the job was cancelled. Dec-2008 Page 1

Upload: bakkalibilal

Post on 20-Nov-2015

44 views

Category:

Documents


9 download

DESCRIPTION

7.11_ Data Interface Exercises Solutions

TRANSCRIPT

ABAP Dictionary Exercises

ECC 6.0

Data Interfaces: Exercise Solutions

SAP Development ABAP Training

Chapter 1Exercise 1Examining the background job in the Job Overview should indicate that this background job executed successfully. Its status will be Finished.

Exercise 2Examining the background job in the Job Overview should indicate that this background job executed successfully. Its status will be Finished.

Exercise 3Examining the background job in the Job Overview should indicate that this background job executed successfully. Its status will be Finished.

Exercise 4Examining the background job in the Job Overview should indicate that this background job did not execute successfully. Its status will be Cancelled. If you analyze the job log, you will see the message Error opening file - No such file or directory. This message is message number 020 from message class YTRABAPMSG. Because of this message, the job was cancelled.

Exercise 5Examining the background job in the Job Overview should indicate that this background job executed successfully. Its status will be Finished.

REPORT YDIXX1_5.

PARAMETERS:JOBNAME TYPE TBTCO-JOBNAME DEFAULT 'ABAPxxJOB5'.

DATA: JOBCOUNT TYPE TBTCO-JOBCOUNT.

CONSTANTS: PROGRAM TYPE SY-REPID VALUE ' YAPXX05_1'.

START-OF-SELECTION.

CALL FUNCTION 'JOB_OPEN'

EXPORTING

JOBNAME

= JOBNAME

IMPORTING

JOBCOUNT

= JOBCOUNT

EXCEPTIONS

CANT_CREATE_JOB= 1

INVALID_JOB_DATA= 2

JOBNAME_MISSING= 3

OTHERS

= 4.

IF SY-SUBRC = 0.

WRITE: / 'Job opened successfully'.

ELSE.

WRITE: / 'Error with JOB_OPEN - SY-SUBRC =', SY-SUBRC.

ENDIF.

CALL FUNCTION 'JOB_SUBMIT'

EXPORTING

AUTHCKNAM = SY-UNAME

JOBCOUNT = JOBCOUNT

JOBNAME = JOBNAME

REPORT = PROGRAM.*EXCEPTIONS

*BAD_PRIPARAMS

= 1

*. . .

*OTHERS.

= 10.IF SY-SUBRC = 0.

WRITE: / 'Job step inserted successfully'.

ELSE.

WRITE: / 'Error with JOB_SUBMIT - SY-SUBRC =', SY-SUBRC.

ENDIF.

CALL FUNCTION 'JOB_CLOSE'

EXPORTING

JOBCOUNT

= JOBCOUNT

JOBNAME

= JOBNAME

STRTIMMED

= 'X'.*EXCEPTIONS

*CANT_START_IMMEDIATE= 1

*. . .

*OTHERS

= 8.IF SY-SUBRC = 0.

WRITE: / 'Job closed successfully'.

ELSE.

WRITE: / 'Error with JOB_CLOSE - SY-SUBRC =', SY-SUBRC.

ENDIF.Chapter 2Exercise 1REPORT YDIXX2_1.

CONSTANTS: OUTFILE(30) TYPE C VALUE './file1xx'.

DATA: WA_YVENDOR TYPE YVENDOR.

DATA:BEGIN OF OUTREC,

VENDNUM

TYPE YVENDOR-VENDNUM,

COMPANY

TYPE YVENDOR-COMPANY,

ACCTGROUP TYPE YVENDOR-ACCTGROUP,

NAME

TYPE YVENDOR-NAME,

SORT

TYPE YVENDOR-SORT,

CITY

TYPE YVENDOR-CITY,

ZIPCODE

TYPE YVENDOR-ZIPCODE,

COUNTRY

TYPE YVENDOR-COUNTRY,REGION

TYPE YVENDOR-REGION,

LANG

TYPE YVENDOR-LANG,END OF OUTREC.

START-OF-SELECTION.

OPEN DATASET OUTFILE FOR OUTPUT IN TEXT MODE ENCODING .

SELECT VENDNUM

COMPANY

ACCTGROUP

NAME

SORT

CITY

ZIPCODE

COUNTRY

REGION

LANG

FROM YVENDOR INTO WA_YVENDOR WHERE UNAME = SY-UNAME.

OUTREC-VENDNUM = WA_YVENDOR-VENDNUM.

OUTREC-COMPANY = WA_YVENDOR-COMPANY.

OUTREC-ACCTGROUP = WA_YVENDOR-ACCTGROUP.

OUTREC-NAME = WA_YVENDOR-NAME.

OUTREC-SORT = WA_YVENDOR-SORT.

OUTREC-CITY = WA_YVENDOR-CITY.

OUTREC-ZIPCODE = WA_YVENDOR-ZIPCODE.

OUTREC-COUNTRY = WA_YVENDOR-COUNTRY.

OUTREC-REGION = WA_YVENDOR-REGION.

OUTREC-LANG = WA_YVENDOR-LANG.

TRANSFER OUTREC TO OUTFILE.

WRITE: / OUTREC-VENDNUM, 'transferred to file'.

ENDSELECT.

IF SY-SUBRC 0.

WRITE: / 'No records transferred to file'.

ENDIF.

CLOSE DATASET OUTFILE.Exercise 2REPORT YDIXX2_2.

CONSTANTS: INFILE(30) TYPE C VALUE './file1xx'.

DATA:BEGIN OF INREC,

VENDNUM

TYPE

YVENDOR-VENDNUM,

COMPANY

TYPE

YVENDOR-COMPANY,

ACCTGROUP TYPE

YVENDOR-ACCTGROUP,

NAME

TYPE

YVENDOR-NAME,

SORT

TYPE

YVENDOR-SORT,

CITY

TYPE

YVENDOR-CITY,

ZIPCODE

TYPE

YVENDOR-ZIPCODE,

COUNTRY

TYPE

YVENDOR-COUNTRY,REGION

TYPE

YVENDOR-REGION,

LANG

TYPE

YVENDOR-LANG,END OF INREC.

START-OF-SELECTION.

OPEN DATASET INFILE FOR INPUT IN TEXT MODE ENCODING DEFAULT.

DO.

READ DATASET INFILE INTO INREC.

IF SY-SUBRC 0.

EXIT.

ENDIF.WRITE:/ 'Vendor # :', INREC-VENDNUM,/ 'Company Code :', INREC-COMPANY,

/ 'Account Group :', INREC-ACCTGROUP,

/ 'Name :', INREC-NAME,

/ 'Sort term :', INREC-SORT,

/ 'City :', INREC-CITY,

/ 'Zipcode :', INREC-ZIPCODE,

/ 'Country :', INREC-COUNTRY,

/ 'Region :', INREC-REGION,

/ 'Language :', INREC-LANG.

ULINE.

ENDDO.

CLOSE DATASET INFILE.Exercise 3REPORT YDIXX2_3.

CONSTANTS: OUTFILE(30) TYPE C VALUE './file2xx'.

PARAMETERS:CUSTNUM TYPE KUNNRDEFAULT 'ABAPxx-001',

NAME TYPE NAME1DEFAULT 'Buyer, Inc.',

STREET TYPE STRAS DEFAULT '10 Walnut St.',

PHONE TYPE TELF1 DEFAULT '215-575-5900',

FAX TYPE TELFXDEFAULT '215-575-5515'.

DATA:BEGIN OF OUTREC,

CUSTNUMTYPE KUNNR,

NAME

TYPE NAME1,

STREETTYPE STRAS,

PHONE

TYPE TELF1,

FAX

TYPE TELFX,

END OF OUTREC.

START-OF-SELECTION.

OPEN DATASET OUTFILE FOR APPENDING IN TEXT MODE ENCODING DEFAULT.

OUTREC-CUSTNUM = CUSTNUM.

OUTREC-NAME = NAME.

OUTREC-STREET = STREET.

OUTREC-PHONE = PHONE.

OUTREC-FAX = FAX.

TRANSFER OUTREC TO OUTFILE.

WRITE: / OUTREC-CUSTNUM, 'transferred to file'.

CLOSE DATASET OUTFILE.Exercise 4REPORT YDIXX2_4.CONSTANTS: INFILE(30) TYPE C VALUE './file2xx'.

DATA:BEGIN OF INREC,

CUSTNUMTYPE KUNNR,

NAME

TYPE NAME1,

STREETTYPE STRAS,

PHONE

TYPE TELF1,

FAX

TYPE TELFX,

END OF INREC.

START-OF-SELECTION.

OPEN DATASET INFILE FOR INPUT IN TEXT MODE ENCODING DEFAULT.

DO.

READ DATASET INFILE INTO INREC.

IF SY-SUBRC 0.

EXIT.

ENDIF.

WRITE: / 'Customer #:', INREC-CUSTNUM,

/ 'Name :', INREC-NAME,

/ 'Street :', INREC-STREET,

/ 'Phone :', INREC-PHONE,

/ 'Fax :', INREC-FAX.

ULINE.

ENDDO.

CLOSE DATASET INFILE.Chapter 3Exercise 1REPORT YDIXX3_1 .

TYPES:BEGIN OF OUTREC,

VENDNUM

TYPE YVENDOR-VENDNUM,

COMPANY

TYPE YVENDOR-COMPANY,

ACCTGROUP TYPE YVENDOR-ACCTGROUP,

NAME

TYPE YVENDOR-NAME,

SORT

TYPE YVENDOR-SORT,

CITY

TYPE YVENDOR-CITY,

ZIPCODE

TYPE YVENDOR-ZIPCODE,

COUNTRY

TYPE YVENDOR-COUNTRY,REGION

TYPE YVENDOR-REGION,

LANG

TYPE YVENDOR-LANG,END OF OUTREC.

DATA: OUT_ITAB TYPE STANDARD TABLE OF OUTREC,

WA_OUT_ITAB TYPE OUTREC.

START-OF-SELECTION.

SELECT VENDNUM

COMPANY

ACCTGROUP

NAME

SORT

CITY

ZIPCODE

COUNTRY

REGION

LANG

FROM YVENDOR INTO TABLE OUT_ITAB WHERE USERNAME = SY-UNAME.

IF SY-SUBRC = 0.

CALL FUNCTION 'GUI_DOWNLOAD'

EXPORTING* BIN_FILESIZE = FILENAME = 'c:\file3xx'

FILETYPE = 'ASC'* APPEND = ' '

* WRITE_FIELD_SEPARATOR = ' ' TABLES

DATA_TAB = OUT_ITAB* FIELDNAMES =

* EXCEPTIONS

* FILE_WRITE_ERROR = 1

* NO_BATCH = 2

* GUI_REFUSE_FILETRANSFER = 3

* INVALID_TYPE = 4

* NO_AUTHORITY = 5

* UNKNOWN_ERROR = 6

* HEADER_NOT_ALLOWED = 7

* SEPARATOR_NOT_ALLOWED = 8

* FILESIZE_NOT_ALLOWED = 9

* HEADER_TOO_LONG = 10

* DP_ERROR_CREATE = 11

* DP_ERROR_SEND = 12

* DP_ERROR_WRITE = 13

* UNKNOWN_DP_ERROR = 14

* ACCESS_DENIED = 15

* DP_OUT_OF_MEMORY = 16

* DISK_FULL = 17

* DP_TIMEOUT = 18

* FILE_NOT_FOUND = 19

* DATAPROVIDER_EXCEPTION = 20

* CONTROL_FLUSH_ERROR = 21

* OTHERS = 22 .

IF SY-SUBRC 0.

WRITE: / 'Internal table transferred to file'.

ELSE.

WRITE: / 'Error transferring internal table to file'.

ENDIF.

ELSE.

WRITE: / 'No records transferred to file'.

ENDIF.Exercise 2REPORT YDIXX3_2 .

TYPES:BEGIN OF INREC,

VENDNUM

TYPE YVENDOR-VENDNUM,

COMPANY

TYPE YVENDOR-COMPANY,

ACCTGROUP TYPE YVENDOR-ACCTGROUP,

NAME

TYPE YVENDOR-NAME,

SORT

TYPE YVENDOR-SORT,

CITY

TYPE YVENDOR-CITY,

ZIPCODE

TYPE YVENDOR-ZIPCODE,

COUNTRY

TYPE YVENDOR-COUNTRY,REGION TYPE YVENDOR-REGION,

LANG

TYPE YVENDOR-LANG,END OF INREC.

DATA: IN_ITAB TYPE STANDARD TABLE OF INREC,

WA_IN_ITAB TYPE INREC.

START-OF-SELECTION.

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = 'c:\file3xx'

FILETYPE = 'ASC'* HAS_FIELD_SEPARATOR = ' ' TABLES

DATA_TAB = IN_ITAB* EXCEPTIONS

* FILE_OPEN_ERROR = 1

* FILE_READ_ERROR = 2

* NO_BATCH = 3

* GUI_REFUSE_FILETRANSFER = 4

* INVALID_TYPE = 5

* NO_AUTHORITY = 6

* UNKNOWN_ERROR = 7

* BAD_DATA_FORMAT = 8

* HEADER_NOT_ALLOWED = 9

* SEPARATOR_NOT_ALLOWED = 10

* HEADER_TOO_LONG = 11

* UNKNOWN_DP_ERROR = 12

* ACCESS_DENIED = 13

* DP_OUT_OF_MEMORY = 14

* DISK_FULL = 15

* DP_TIMEOUT = 16

* OTHERS = 17 .

IF SY-SUBRC = 0.

LOOP AT IN_ITAB INTO WA_IN_ITAB.

WRITE: / 'Vendor # :', WA_IN_ITAB-VENDNUM,

/ 'Company Code :', WA_IN_ITAB-COMPANY,

/ 'Account Group :', WA_IN_ITAB-ACCTGROUP,

/ 'Name :', WA_IN_ITAB-NAME,

/ 'Sort term :', WA_IN_ITAB-SORT,

/ 'City :', WA_IN_ITAB-CITY,

/ 'Zipcode :', WA_IN_ITAB-ZIPCODE,

/ 'Country :', WA_IN_ITAB-COUNTRY,

/ 'Region :', WA_IN_ITAB-REGION,

/ 'Language :', WA_IN_ITAB-LANG,

ULINE.

ENDLOOP.

IF SY-SUBRC 0.

WRITE: / 'No entries in internal table'.

ENDIF.

ELSE.

WRITE: / 'Error transferring file to internal table'.

ENDIF.Chapter 4Exercise 1Create Vendor Transaction Code: FK01PROGRAMDYNPRODYNBEGINFNAMFVAL

SAPMF02K0105X

RF02K-LIFNRABAPxx-nnn

RF02K-BUKRS0001

RF02K-KTOKK0001

BDC_OKCODE/00

SAPMF02K0110X

LFA1-NAME1Vendor

LFA1-SORTLNUM

LFA1-ORT01Miami

LFA1-PSTLZ33143

LFA1-LAND1US

LFA1-REGIOFL

LFA1-SPRASEN

SAPMF02K0120 *X

BDC_OKCODE **=UPDA

* Even though you are not filling any fields on screen 0120, you still have to reference it because you must pass through it when proceeding in the transaction.

** We can save the record on screen 0120 because we do not have to fill any more fields.Exercise 2REPORT YDIXX4_2.

DATA: BDC_TAB TYPE STANDARD TABLE OF BDCDATA ,

WA_BDC_TAB TYPE BDCDATA.

START-OF-SELECTION.

PERFORM FILL_BDC_TAB.

* The remaining code just creates a list with the contents of bdc_tabWRITE:/5 'Program',

15 'Screen',

25 'New Screen',

40 'Field Name',

55 'Field Value'.

ULINE /5(65).

LOOP AT BDC_TAB INTO WA_BDC_TAB.

WRITE: /5 WA_BDC_TAB-PROGRAM,

15 WA_BDC_TAB-DYNPRO,

30 WA_BDC_TAB-DYNBEGIN,

40 WA_BDC_TAB-FNAM,

55 WA_BDC_TAB-FVAL.

ENDLOOP.

* The subroutines are on the next two pagesFORM FILL_BDC_TAB.

REFRESH BDC_TAB.

PERFORM POPULATE_BDC_TAB USING:

'1''SAPMF02K' '0105', " initial create vendor screen

' ' 'BDC_CURSOR' 'USE_ZAV',

' ' 'BDC_OKCODE' '/00',

' ' 'RF02K-LIFNR' INREC-VENDNUM,

' ' 'RF02K-BUKRS' '0001',

' ' 'RF02K-KTOKK' '0001',

' ' 'USE_ZAV' 'X',

'1''SAPMF02K' '0111',

' ' 'BDC_OKCODE' '=UPDA',

' ''BDC_SUBSCR' 'SAPLSZA1 0300ADDRESS',

' ''BDC_SUBSCR' 'SAPLSZA1 0301COUNTRY_SCREEN',

' ''BDC_CURSOR''ADDR1_DATA-COUNTRY',

' ''ADDR1_DATA-NAME1'INREC-NAME,

' ''ADDR1_DATA-SORT1'INREC-SORT,

' ' 'ADDR1_DATA-CITY1' INREC-CITY,

' ''ADDR1_DATA-COUNTRY' INREC-COUNTRY,

' ''ADDR1_DATA-LANGU''EN'.

* note:Even though we are not filling any fields on screen 0120,

* we still have to reference it because we pass

* through it when proceeding in the transaction. Also,

* we can save the record on screen 0120.ENDFORM.

FORM POPULATE_BDC_TAB USING FLAG VAR1 VAR2.

CLEAR WA_BDC_TAB.

IF FLAG = '1'.WA_BDC_TAB-PROGRAM

= VAR1.

WA_BDC_TAB-DYNPRO

= VAR2.WA_BDC_TAB-DYNBEGIN

= 'X'.ELSE.

WA_BDC_TAB-FNAM

= VAR1.

WA_BDC_TAB-FVAL

= VAR2.ENDIF.

APPEND WA_BDC_TAB TO BDC_TAB.

ENDFORM.

Chapters 5 - 6Exercise 1REPORT YDIXX5_1 .

CONSTANTS:INFILE(30) TYPE C VALUE './file1xx'.

DATA:BDC_TAB TYPE STANDARD TABLE OF BDCDATA ,

WA_BDC_TAB TYPE BDCDATA,

SESSION LIKE APQI-GROUPID VALUE 'SESSION1-XX'.

DATA:BEGIN OF INREC,

VENDNUM

TYPE YVENDOR-VENDNUM,

COMPANY

TYPE YVENDOR-COMPANY,

ACCTGROUP TYPE YVENDOR-ACCTGROUP,

NAME

TYPE YVENDOR-NAME,

SORT

TYPE YVENDOR-SORT,

CITY

TYPE YVENDOR-CITY,

ZIPCODE

TYPE YVENDOR-ZIPCODE,

COUNTRY

TYPE YVENDOR-COUNTRY,REGION

TYPE YVENDOR-REGION,

LANG

TYPE YVENDOR-LANG,END OF INREC.

START-OF-SELECTION.

OPEN DATASET INFILE FOR INPUT IN TEXT MODE ENCODING DEFAULT.

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

CLIENT

= SY-MANDT

GROUP

= SESSION*HOLDDATE

= ' 'KEEP

= 'X'

USER

= SY-UNAME

EXCEPTIONS

CLIENT_INVALID = 1

DESTINATION_INVALID

= 2

GROUP_INVALID

= 3

GROUP_IS_LOCKED

= 4

HOLDDATE_INVALID

= 5

INTERNAL_ERROR

= 6

QUEUE_ERROR

= 7

RUNNING

= 8

SYSTEM_LOCK_ERROR

= 9

USER_INVALID

= 10

OTHERS

= 11.

IF SY-SUBRC = 0.

WRITE: / 'Batch input session --', SESSION, '-- opened'.

ELSE.

WRITE: / 'Error opening session - SY-SUBRC =', SY-SUBRC.

ENDIF.

DO.

READ DATASET INFILE INTO INREC.

IF SY-SUBRC 0.

EXIT.

ENDIF.

PERFORM FILL_BDC_TAB.

CALL FUNCTION 'BDC_INSERT'

EXPORTING

TCODE

= 'FK01'

" transaction code must be capitalized

TABLES

DYNPROTAB = BDC_TAB

EXCEPTIONS

INTERNAL_ERROR= 1

NOT_OPEN

= 2

QUEUE_ERROR

= 3

TCODE_INVALID

= 4

OTHERS

= 5.

IF SY-SUBRC = 0.

WRITE: / INREC-VENDNUM, 'inserted into session'.

ELSE.

WRITE: / 'Error inserting', INREC-VENDNUM, 'SY-SUBRC =', SY-SUBRC.

ENDIF.

ENDDO.

CALL FUNCTION 'BDC_CLOSE_GROUP'

EXCEPTIONS

NOT_OPEN

= 1

QUEUE_ERROR

= 2

OTHERS

= 3.

IF SY-SUBRC = 0.

WRITE: / 'Batch input session --', SESSION, '-- closed'.

ELSE.

WRITE: / 'Error closing session - SY-SUBRC =', SY-SUBRC.

ENDIF.

CLOSE DATASET INFILE.

FORM FILL_BDC_TAB.

REFRESH BDC_TAB.

PERFORM POPULATE_BDC_TAB USING:

'1''SAPMF02K' '0105', " initial create vendor screen

' ' 'BDC_CURSOR' 'USE_ZAV',

' ' 'BDC_OKCODE' '/00',

' ' 'RF02K-LIFNR' INREC-VENDNUM,

' ' 'RF02K-BUKRS' '0001',

' ' 'RF02K-KTOKK' '0001',

' ' 'USE_ZAV' 'X',

'1''SAPMF02K' '0111',

' ' 'BDC_OKCODE' '=UPDA',

' ''BDC_SUBSCR' 'SAPLSZA1 0300ADDRESS',

' ''BDC_SUBSCR' 'SAPLSZA1 0301COUNTRY_SCREEN',

' ''BDC_CURSOR''ADDR1_DATA-COUNTRY',

' ''ADDR1_DATA-NAME1'INREC-NAME,

' ''ADDR1_DATA-SORT1'INREC-SORT,

' ' 'ADDR1_DATA-CITY1' INREC-CITY,

' ''ADDR1_DATA-COUNTRY' INREC-COUNTRY,

' ''ADDR1_DATA-LANGU''EN'.* note:Even though we are not filling any fields on screen 0210,

* we still have to reference it because we pass

* through it when proceeding in the transaction.ENDFORM.

FORM POPULATE_BDC_TAB USING FLAG VAR1 VAR2.

CLEAR WA_BDC_TAB.

IF FLAG = '1'.WA_BDC_TAB-PROGRAM

= VAR1.

WA_BDC_TAB-DYNPRO

= VAR2.WA_BDC_TAB-DYNBEGIN

= 'X'.ELSE.

WA_BDC_TAB-FNAM

= VAR1.

WA_BDC_TAB-FVAL

= VAR2.ENDIF.

APPEND WA_BDC_TAB TO BDC_TAB.

ENDFORM. Exercise 2PROGRAMDYNPRODYNBEGINFNAMFVAL

SAPMF02K0106X

BDC_CURSORUSE_ZAV

BDC_OKCODE/00

RF02K-LIFNRVendor001

RF02K-BUKRS0001

RF02K-D0110X

USE_ZAVX

SAPMF02K0110X

BDC_OKCODE=UPDA

BDC_SUBSCRSAPLSZA1 0300ADDRESS

BDC_SUBSCRSAPLSZA1 0301COUNTRY_SCREEN

BDC_CURSORADDR1_DATA-COUNTRY

ADDR1_DATA-NAME1Vendor001_chang

ADDR1_DATA-SORT1ABAP1

ADDR1_DATA -CITY1Philadelphia

ADDR1_DATA -COUNTRYIN

ADDR1_DATA -LANGUEN

REPORT YDIXX5_2 .

CONSTANTS:INFILE(30) VALUE './file4xx'.

DATA:BDC_TAB LIKE STANDARD TABLE OF BDCDATA ,

WA_BDC_TAB TYPE BDCDATA,

SESSION LIKE APQI-GROUPID VALUE 'SESSION2-XX'.

DATA:BEGIN OF INREC,

VENDNUM(16) TYPE C,

NAME(30) TYPE C,

SORT(20) TYPE C,

COUNTRY(3) TYPE C,

END OF INREC.

START-OF-SELECTION.

OPEN DATASET INFILE FOR INPUT IN TEXT MODE ENCODING DEFAULT.

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

CLIENT

= SY-MANDT

GROUP

= SESSION*

HOLDDATE

= ' 'KEEP

= 'X'

USER

= SY-UNAME

EXCEPTIONS

CLIENT_INVALID

= 1

DESTINATION_INVALID

= 2

GROUP_INVALID

= 3

GROUP_IS_LOCKED

= 4

HOLDDATE_INVALID

= 5

INTERNAL_ERROR

= 6

QUEUE_ERROR

= 7

RUNNING

= 8

SYSTEM_LOCK_ERROR

= 9

USER_INVALID

= 10

OTHERS

= 11.

IF SY-SUBRC = 0.

WRITE: / 'Batch input session --', SESSION, '-- opened'.

ELSE.

WRITE: / 'Error opening session - SY-SUBRC =', SY-SUBRC.

ENDIF.

DO.

READ DATASET INFILE INTO INREC.

IF SY-SUBRC 0.

EXIT.

ENDIF.

PERFORM FILL_BDC_TAB.

CALL FUNCTION 'BDC_INSERT'

EXPORTING

TCODE

= 'FK02'

" transaction code must be capitalized

TABLES

DYNPROTAB = BDC_TAB

EXCEPTIONS

INTERNAL_ERROR

= 1

NOT_OPEN

= 2

QUEUE_ERROR

= 3

TCODE_INVALID = 4

OTHERS

= 5.

IF SY-SUBRC = 0.

WRITE: / INREC-VENDNUM, 'inserted into session'.

ELSE.

WRITE: / 'Error inserting', INREC-VENDNUM, 'SY-SUBRC =', SY-SUBRC.

ENDIF.

ENDDO.

CALL FUNCTION 'BDC_CLOSE_GROUP'

EXCEPTIONS

NOT_OPEN

= 1

QUEUE_ERROR

= 2

OTHERS

= 3.

IF SY-SUBRC = 0.

WRITE: / 'Batch input session --', SESSION, '-- closed'.

ELSE.

WRITE: / 'Error closing session - SY-SUBRC =', SY-SUBRC.

ENDIF.

CLOSE DATASET INFILE.

FORM FILL_BDC_TAB.

REFRESH BDC_TAB.

PERFORM POPULATE_BDC_TAB USING:

'1''SAPMF02K' '0105', " initial create vendor screen

' ' 'BDC_CURSOR' 'USE_ZAV',

' ' 'BDC_OKCODE' '/00',

' ' 'RF02K-LIFNR' INREC-VENDNUM,

' ' 'RF02K-BUKRS' '0001',

' ' 'RF02K-KTOKK' '0001',

' ' 'USE_ZAV' 'X',

'1''SAPMF02K' '0111',

' ' 'BDC_OKCODE' '=UPDA',

' ''BDC_SUBSCR' 'SAPLSZA1 0300ADDRESS',

' ''BDC_SUBSCR' 'SAPLSZA1 0301COUNTRY_SCREEN',

' ''BDC_CURSOR''ADDR1_DATA-COUNTRY',

' ''ADDR1_DATA-NAME1'INREC-NAME,

' ''ADDR1_DATA-SORT1'INREC-SORT,

' ''ADDR1_DATA-COUNTRY' INREC-COUNTRY,' ''ADDR1_DATA-LANGU''EN'.

ENDFORM.

FORM POPULATE_BDC_TAB USING FLAG VAR1 VAR2.

CLEAR WA_BDC_TAB.

IF FLAG = '1'.WA_BDC_TAB-PROGRAM

= VAR1.

WA_BDC_TAB-DYNPRO

= VAR2.WA_BDC_TAB-DYNBEGIN

= 'X'.ELSE.

WA_BDC_TAB-FNAM

= VAR1.

WA_BDC_TAB-FVAL

= VAR2.ENDIF.

APPEND WA_BDC_TAB TO BDC_TAB.

ENDFORM.Chapter 7Exercise 1REPORT YDIXX7_1 .

PARAMETERS:DISPMODE TYPE C DEFAULT 'A'.

CONSTANTS:INFILE(30) VALUE './file5xx',

SYNCHRONOUS VALUE 'S'.

DATA:BDC_TAB TYPE STANDARD TABLE OF BDCDATA ,

WA_BDC_TAB TYPE BDCDATA.

DATA:BEGIN OF INREC,

VENDNUM(16)TYPE C,

NAME(30) TYPE C,

SORT(20) TYPE C,

COUNTRY(3)TYPE C,

END OF INREC.

START-OF-SELECTION.

OPEN DATASET INFILE FOR INPUT IN TEXT MODE ENCODING DEFAULT.

DO.

READ DATASET INFILE INTO INREC.

IF SY-SUBRC 0.

EXIT.

ENDIF.

PERFORM FILL_BDC_TAB.

CALL TRANSACTION 'FK02'

USING

BDC_TAB

MODE

DISPMODE

UPDATE

SYNCHRONOUS.

*

in order to test the success of the actual update, the update mode

*

must be 'synchronous'. 'Asynchronous' updating is faster.

IF SY-SUBRC = 0.

WRITE: / 'Vendor', INREC-VENDNUM, 'updated successfully'.

ELSE.

WRITE: / 'Error updating vendor:', INREC-VENDNUM.

ENDIF.

ENDDO.

CLOSE DATASET INFILE.

*Bonus:If you wanted to create an error file with the unsuccessful records, you could

*

TRANSFER the contents of the field string INREC to an error file when

*

SY-SUBRC does not equal zero after the CALL TRANSACTION USING

*

statement.

FORM FILL_BDC_TAB.

REFRESH BDC_TAB.

PERFORM POPULATE_BDC_TAB USING:

'1''SAPMF02K' '0105', " initial create vendor screen

' ' 'BDC_CURSOR' 'USE_ZAV',

' ' 'BDC_OKCODE' '/00',

' ' 'RF02K-LIFNR' INREC-VENDNUM,

' ' 'RF02K-BUKRS' '0001',

' ' 'RF02K-KTOKK' '0001',

' ' 'USE_ZAV' 'X',

'1''SAPMF02K' '0111',

' ' 'BDC_OKCODE' '=UPDA',

' ''BDC_SUBSCR' 'SAPLSZA1 0300ADDRESS',

' ''BDC_SUBSCR' 'SAPLSZA1 0301COUNTRY_SCREEN',

' ''BDC_CURSOR''ADDR1_DATA-COUNTRY',

' ''ADDR1_DATA-NAME1'INREC-NAME,

' ''ADDR1_DATA-SORT1'INREC-SORT,

' ''ADDR1_DATA-COUNTRY' INREC-COUNTRY,

' ''ADDR1_DATA-LANGU''EN'.

ENDFORM.

*&---------------------------------------------------------------------*

*& Form POPULATE_BDC_TAB

*&---------------------------------------------------------------------*

* text*----------------------------------------------------------------------*

* -->FLAG text

* -->VAR1 text

* -->VAR2 text

*----------------------------------------------------------------------*FORM POPULATE_BDC_TAB USING FLAG VAR1 VAR2.

CLEAR WA_BDC_TAB.

IF FLAG = '1'.

WA_BDC_TAB-PROGRAM

= VAR1.

WA_BDC_TAB-DYNPRO

= VAR2.

WA_BDC_TAB-DYNBEGIN

= 'X'.

ELSE.

WA_BDC_TAB-FNAM

= VAR1.

WA_BDC_TAB-FVAL

= VAR2.

ENDIF.

APPEND WA_BDC_TAB TO BDC_TAB.

ENDFORM. "POPULATE_BDC_TABExercise 2The program in the previous exercise would change by using the CALL DIALOG statement instead of the CALL TRANSACTION USING statement. This statement would be:

CALL DIALOG Z_DIALOG_FK02

USING

BDC_TAB

MODE

DISPMODE.

Notice that no update mode is specified. Instead, you need to code a COMMIT WORK statement in the program to confirm the changes to the database.

Chapter 8Exercise 1(1) What is the function code associated with the Display pushbutton on the screen?

SHOP

Use the System > Status menu path and double click on the screen number to navigate into the Screen Painter. In the Screen Painter, go to the Fullscreen Editor and look at the attributes of the pushbutton field. The FctCode attributes will give you the function code SHOP.

(2) What is the function code associated with the Utilities > Splitscreen editor menu path?

SE39

Use the System > Status menu path and double click on the GUI status name to navigate into the Menu Painter. Expand the Menubar item and double click Utilities. Double click Splitscreen editor to get the function attributes. The Splitscreen editor branch is assigned the SE39 function code.

Dec-2008

Page 5