‎2006 May 24 1:41 AM
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)
********************************************************************************************************************************
********************************************************************************************************************************
*--
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
‎2006 May 24 4:02 PM
‎2006 May 24 4:32 PM
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