Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Problem running BDC Session Method

Former Member
0 Likes
568

Hi all,

I was given the task of making an include program that will use bdc session method. the idea was to use my custom include rather than 'bdcrecx1'.

I am loading data from a conversion program using my include. There are some 5000 records to be loaded and the problem is that the system hangs whenever i run it using my include. The program is not able to create session using my include. I copied the program and used 'bdcrecx1' and it is running fine.

Another problem with it is that when i choose UNIX filepath with f4 help and execute, the filename is deleted from the path, therefore, my error message pops up saying that filepath is empty.

Can anyone help me please. I would really appreciate it. Following is code:

  • P_TEST to perform a test run of the conversion Check box P_TEST (Test Run)

  • P_GROUP to enter session name for BDC Parameter P_GROUP (Session Name)

  • P_USER Username of user running the program Parameter P_USER (Username)

  • P_UNIX to indicate UNIX file is used as i/p Radio Button P_UNIX (UNIX File)

  • P_LOCAL to indicate GUI file is used as i/p Radio Button P_LOCAL (Local File)

  • P_INFILE Legacy file path on Server File path P_INFILE (Input File)

********************************************************************************************************************************

********************************************************************************************************************************

*--


ATTENTION!--


  • W_TMPFILENAME = P_INFILE

*( Declare this statement in your main program right before passing data to GUI_UPLOAD. Then pass W_TMPFILENAME as filename)

*

*You should write a logic in your program indicating that if P_TEST = 'X' --> Validate input records.

  • if P_TEST <> 'X' AND No Errors --> Perform BDC

********************************************************************************************************************************

----


  • Tables

----


  • message texts

TABLES: T100.

----


  • data definition

----


  • Batchinputdata of single transaction

DATA: BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.

  • messages of call transaction

DATA: MESSTAB LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.

  • error session opened (' ' or 'X')

DATA: E_GROUP_OPENED.

data: W_TMPFILENAME type string.

DATA: HOLDDATE like sy-datum.

DATA: W_IT_FILE TYPE FILETABLE, " F4 Help

W_RC TYPE I. " To Hold the return value.

  • Work area to get the file name from the presentation server

DATA: WA_FILE TYPE FILE_TABLE.

----


  • Constants

----


Constants: SESSION(1) TYPE C VALUE 'X', "BDC run through Session

KEEP(1) TYPE C VALUE 'X', "Keep Session when finished

NODATA(1) TYPE C VALUE '/', "No Data indicator

SMALLLOG(1) TYPE C VALUE ' ', "Log all transactions

C_CHECK TYPE C VALUE 'X'. "Value for radiobutton

----


  • Selection Screen

----


SELECTION-SCREEN BEGIN OF BLOCK A1 WITH FRAME.

PARAMETERS: P_TEST AS CHECKBOX USER-COMMAND FLAG1. "Test Run

SELECTION-SCREEN BEGIN OF BLOCK A2 WITH FRAME TITLE TITLE1.

PARAMETERS: P_GROUP(12), "group name of session

P_USER(12) DEFAULT SY-UNAME. "user for session in batch

SELECTION-SCREEN END OF BLOCK A2.

SELECTION-SCREEN BEGIN OF BLOCK A3 WITH FRAME TITLE TITLE2.

PARAMETERS: P_LOCAL RADIOBUTTON GROUP RB1 DEFAULT 'X' USER-COMMAND FLAG, "Local file

P_UNIX RADIOBUTTON GROUP RB1, "Server file

P_INFILE(80) VISIBLE LENGTH 41 LOWER CASE.

SELECTION-SCREEN END OF BLOCK A3.

SELECTION-SCREEN END OF BLOCK A1.

----


  • Initialization *

----


INITIALIZATION.

TITLE1 = 'Create Session'.

TITLE2 = 'File Path'.

----


  • Selection Screen Validations *

----


AT SELECTION-SCREEN.

*Check for Session Name

IF SY-UCOMM <> 'FLAG1'.

IF P_GROUP IS INITIAL.

IF P_TEST IS INITIAL.

MESSAGE 'Enter Session Name!' TYPE 'E'.

ENDIF.

ENDIF.

ENDIF.

*Check for File Path

IF SY-UCOMM = 'ONLI'.

IF P_INFILE IS INITIAL.

MESSAGE 'File Path is Empty!' TYPE 'E'.

ENDIF.

ENDIF.

*Clear File Path on change of radiobutton

IF SY-UCOMM <> 'ONLI'.

IF SY-UCOMM <> 'FLAG1'.

CASE C_CHECK.

WHEN P_UNIX.

CLEAR P_INFILE.

WHEN P_LOCAL.

CLEAR P_INFILE.

ENDCASE.

ENDIF.

ENDIF.

----


  • at selection screen output *

----


AT SELECTION-SCREEN OUTPUT.

*If Test is marked, Session and Username will be display-only

IF P_TEST = 'X'.

CLEAR P_GROUP.

LOOP AT SCREEN.

CASE SCREEN-NAME.

WHEN 'P_GROUP'.

SCREEN-INPUT = '0'.

MODIFY SCREEN.

WHEN 'P_USER'.

SCREEN-INPUT = '0'.

MODIFY SCREEN.

ENDCASE.

ENDLOOP.

ENDIF.

----


  • Value request to get the input file name

----


AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_INFILE.

if P_LOCAL = 'X'.

  • FOR GUI FILE

PERFORM F4_GUI_FILENAME.

else.

  • FOR UNIX FILE

PERFORM F4_UNIX_FILENAME.

endif.

----


  • open dataset *

----


FORM OPEN_DATASET USING P_DATASET.

OPEN DATASET P_DATASET

FOR INPUT IN TEXT MODE

ENCODING DEFAULT.

IF SY-SUBRC <> 0.

WRITE: / TEXT-E00, SY-SUBRC.

STOP.

ENDIF.

ENDFORM. "OPEN_DATASET

----


  • close dataset *

----


FORM CLOSE_DATASET USING P_DATASET.

CLOSE DATASET P_DATASET.

ENDFORM. "CLOSE_DATASET

----


  • create batchinput session *

  • (not for call transaction using...) *

----


FORM OPEN_GROUP.

IF SESSION = 'X'.

SKIP.

WRITE: /(20) 'Create group'(I01), P_GROUP.

SKIP.

  • open batchinput group

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

CLIENT = SY-MANDT

GROUP = P_GROUP

USER = P_USER

KEEP = KEEP

HOLDDATE = HOLDDATE.

  • HOLDDATE = HOLDDATE.

WRITE: /(30) 'BDC_OPEN_GROUP'(I02),

(12) 'returncode:'(I05),

SY-SUBRC.

ENDIF.

ENDFORM. "OPEN_GROUP

----


  • end batchinput session *

  • (call transaction using...: error session) *

----


FORM CLOSE_GROUP.

IF SESSION = 'X'.

  • close batchinput group

CALL FUNCTION 'BDC_CLOSE_GROUP'.

WRITE: /(30) 'BDC_CLOSE_GROUP'(I04),

(12) 'returncode:'(I05),

SY-SUBRC.

ELSE.

IF E_GROUP_OPENED = 'X'.

CALL FUNCTION 'BDC_CLOSE_GROUP'.

WRITE: /.

WRITE: /(30) 'Fehlermappe wurde erzeugt'(I06).

E_GROUP_OPENED = ' '.

ENDIF.

ENDIF.

ENDFORM. "CLOSE_GROUP

----


  • Start new transaction according to parameters *

----


FORM BDC_TRANSACTION USING TCODE.

DATA: L_MSTRING(480).

DATA: L_SUBRC LIKE SY-SUBRC.

  • batch input session

IF SESSION = 'X'.

CALL FUNCTION 'BDC_INSERT'

EXPORTING

TCODE = TCODE

TABLES

DYNPROTAB = BDCDATA.

IF SMALLLOG <> 'X'.

WRITE: / 'BDC_INSERT'(I03),

TCODE,

'returncode:'(I05),

SY-SUBRC,

'RECORD:',

SY-INDEX.

ENDIF.

ENDIF.

ENDFORM. "BDC_TRANSACTION

----


  • Start new screen *

----


FORM BDC_DYNPRO USING PROGRAM DYNPRO.

CLEAR BDCDATA.

BDCDATA-PROGRAM = PROGRAM.

BDCDATA-DYNPRO = DYNPRO.

BDCDATA-DYNBEGIN = 'X'.

APPEND BDCDATA.

ENDFORM. "BDC_DYNPRO

----


  • Insert field *

----


FORM BDC_FIELD USING FNAM FVAL.

IF FVAL <> NODATA.

CLEAR BDCDATA.

BDCDATA-FNAM = FNAM.

BDCDATA-FVAL = FVAL.

APPEND BDCDATA.

ENDIF.

ENDFORM. "BDC_FIELD

&----


*& Form F4_UNIX_FILENAME

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM F4_UNIX_FILENAME .

  • FM TO BROWSE FOR THE FILE NAME ON SERVER.

CALL FUNCTION '/SAPDMC/LSM_F4_SERVER_FILE'

IMPORTING

SERVERFILE = P_INFILE

EXCEPTIONS

CANCELED_BY_USER = 1

OTHERS = 2.

IF SY-SUBRC <> 0.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1.

ENDIF.

ENDFORM. " F4_UNIX_FILENAME

*&----


**& Form F4_GUI_FILENAME

*&----


    • text

*----


    • --> p1 text

    • <-- p2 text

*----


FORM F4_GUI_FILENAME.

*FUNCTION MODULE FOR THE FILE NAME ON PC

CLEAR P_INFILE.

CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG

CHANGING

FILE_TABLE = W_IT_FILE

RC = W_RC

EXCEPTIONS

FILE_OPEN_DIALOG_FAILED = 1

CNTL_ERROR = 2

ERROR_NO_GUI = 3

NOT_SUPPORTED_BY_GUI = 4

OTHERS = 5.

  • The call to the method is successful

IF W_RC GT 0.

READ TABLE W_IT_FILE INTO WA_FILE INDEX 1.

P_INFILE = WA_FILE-FILENAME.

ENDIF.

REFRESH: W_IT_FILE.

CLEAR: WA_FILE, W_RC.

ENDFORM. " F4_GUI_FILENAME

2 REPLIES 2
Read only

Former Member
0 Likes
486

Any help will be greatly appreciated...

Thanks.

Regards,

Fred.

Read only

Former Member
0 Likes
486

Hi fred,

Did you keep a break point to see if the loop is going indefinitely as you said the system get hangs when trying to upload the data into internal table.

Also, I noticed that an error message about file path is empty in your code.

<b>IF SY-UCOMM = 'ONLI'.

IF P_INFILE IS INITIAL.

MESSAGE 'File Path is Empty!' TYPE 'E'.

ENDIF.

ENDIF.</b>

try to keep a break point and see if the p_INFILE is cleared some where after selecting the unix file path and executed.

hope this will give some idea.

Regards,

vicky

PS: Award points if helpful