‎2007 Aug 23 3:34 PM
Hi,
How can i create a session without using BDC in an executable program.
i mean it should create a session. i can check this in SM35.
please give me any sample code.
Regards
AZAD.
‎2007 Aug 23 3:41 PM
i don't think you can create a session without BDC.
check this code
&----
*& Report ZSAG_BS *
*& *
&----
*& *
*& *
&----
REPORT ZSAG_BS .
********TABLES
TABLES : MARA,MAKT .
*******INTERNAL TABLE
DATA : BEGIN OF ITAB OCCURS 0 ,
MATNR LIKE MARA-MATNR,
MBRSH LIKE MARA-MBRSH,
MTART LIKE MARA-MTART ,
MAKTX LIKE MAKT-MAKTX,
MEINS LIKE MARA-MEINS ,
END OF ITAB.
DATA : BDCTAB LIKE BDCDATA OCCURS 0 WITH HEADER LINE .
********WS_UPLOAD
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = 'C:\DAT1.TXT'
FILETYPE = 'DAT'
TABLES
DATA_TAB = ITAB .
****************BDC_OPEN_GROUP
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = 'CHANDU'
KEEP = 'X'
USER = SY-UNAME
PROG = SY-CPROG .
LOOP AT ITAB .
REFRESH BDCTAB .
*********FIRST SCREEN
BDCTAB-PROGRAM = 'SAPLMGMM'.
BDCTAB-DYNPRO = '0060'.
BDCTAB-DYNBEGIN = 'X' .
APPEND BDCTAB .
CLEAR BDCTAB.
BDCTAB-FNAM = 'RMMG1-MATNR' .
BDCTAB-FVAL = ITAB-MATNR .
APPEND BDCTAB .
CLEAR BDCTAB.
BDCTAB-FNAM = 'RMMG1-MBRSH' .
BDCTAB-FVAL = ITAB-MBRSH .
APPEND BDCTAB .
CLEAR BDCTAB.
BDCTAB-FNAM = 'RMMG1-MTART' .
BDCTAB-FVAL = ITAB-MTART .
APPEND BDCTAB .
CLEAR BDCTAB.
BDCTAB-FNAM = 'BDC_OKCODE'.
BDCTAB-FVAL = '=AUSW' .
APPEND BDCTAB .
CLEAR BDCTAB.
********SECOND SCREEN
BDCTAB-PROGRAM = 'SAPLMGMM'.
BDCTAB-DYNPRO = '0070'.
BDCTAB-DYNBEGIN = 'X' .
APPEND BDCTAB .
CLEAR BDCTAB.
BDCTAB-FNAM = 'MSICHTAUSW-KZSEL(01)' .
BDCTAB-FVAL = 'X' .
APPEND BDCTAB .
CLEAR BDCTAB.
BDCTAB-FNAM = 'BDC_OKCODE'.
BDCTAB-FVAL = '=ENTR' .
APPEND BDCTAB .
CLEAR BDCTAB.
***************THIRD SCREEN
BDCTAB-PROGRAM = 'SAPLMGMM'.
BDCTAB-DYNPRO = '4004'.
BDCTAB-DYNBEGIN = 'X' .
APPEND BDCTAB .
CLEAR BDCTAB.
BDCTAB-FNAM = 'MAKT-MAKTX' .
BDCTAB-FVAL = ITAB-MAKTX.
APPEND BDCTAB .
CLEAR BDCTAB.
BDCTAB-FNAM = 'MARA-MEINS'.
BDCTAB-FVAL = ITAB-MEINS .
APPEND BDCTAB .
CLEAR BDCTAB.
BDCTAB-FNAM = 'BDC_OKCODE'.
BDCTAB-FVAL = '=BU' .
APPEND BDCTAB .
CLEAR BDCTAB.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = 'MM01'
TABLES
DYNPROTAB = BDCTAB .
ENDLOOP .
CALL FUNCTION 'BDC_CLOSE_GROUP' .
regards,
srinivas
<b>*reward for useful answers*</b>
‎2007 Aug 23 3:42 PM
Hi!
Do not use call transaction, create session instead and use a coding like this:
INCLUDE bdcrecx1.
perform open_dataset using dataset.
perform open_group.
loop at gt_main into wa_main.
perform bdc_dynpro using 'SAPLIQS0' '0100'.
perform bdc_field using 'BDC_CURSOR'
'RIWO00-QMART'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_field using 'RIWO00-QMART'
record-QMART_001.
perform bdc_dynpro using 'SAPLSPO1' '0100'.
perform bdc_field using 'BDC_OKCODE'
'=NO'.
perform bdc_transaction using 'IW21'.
endloop.
perform close_group.
perform close_dataset using dataset.
Regards
Tamá
‎2007 Aug 23 3:50 PM
REPORT ZBIMMBOM.
****************************
*Program to create BOM
******************************
TABLES : MARA .
DATA BEGIN OF BDC_TAB OCCURS 50 .
INCLUDE STRUCTURE BDCDATA.
DATA END OF BDC_TAB.
DATA BEGIN OF MESSTAB OCCURS 10.
INCLUDE STRUCTURE BDCMSGCOLL.
DATA END OF MESSTAB.
DATA BEGIN OF I_MESSAGE OCCURS 1.
INCLUDE STRUCTURE ZBCS000002 .
DATA END OF I_MESSAGE.
DATA BEGIN OF ERROR_LOG OCCURS 10.
INCLUDE STRUCTURE SOLI .
DATA END OF ERROR_LOG.
DATA : BEGIN OF BOM_DATA OCCURS 100,
TOP_MATERIAL(18),
COMP_MATERIAL(18),
COMP_QTY(14) ,
END OF BOM_DATA.
DATA : PREV_MATNR(18),
DISP_MODE VALUE 'A' ,
UPD_MODE VALUE 'S' ,
SUBRC LIKE SY-SUBRC ,
TEMP_GROUP LIKE APQI-GROUPID VALUE 'ZEMMBOMCREA' .
PARAMETERS : BOM_FILE(70) OBLIGATORY LOWER CASE .
START-OF-SELECTION.
PERFORM OPEN_AND_READ_BOM_FILE.
PERFORM OPEN_BDC_GROUP .
PERFORM PROCESS_BOM_DATA .
PERFORM CLOSE_BDC_GROUP .
&----
*& Form OPEN_AND_READ_BOM_FILE
&----
text *
----
--> p1 text
<-- p2 text
----
FORM OPEN_AND_READ_BOM_FILE.
OPEN DATASET BOM_FILE FOR INPUT IN TEXT MODE .
IF SY-SUBRC <> 0 .
PERFORM MOVE_TO_MESSAGE USING 'ZI' '999' 'E' TEXT-001 BOM_FILE '' ''.
EXIT.
ENDIF.
REFRESH BOM_DATA .
DO.
CLEAR BOM_DATA .
READ DATASET BOM_FILE INTO BOM_DATA .
IF SY-SUBRC <> 0 .
EXIT.
ENDIF.
APPEND BOM_DATA .
ENDDO.
CLOSE DATASET BOM_FILE .
SORT BOM_DATA BY TOP_MATERIAL .
ENDFORM. " OPEN_AND_READ_BOM_FILE
&----
*& Form PROCESS_BOM_DATA
&----
text *
----
--> p1 text
<-- p2 text
----
FORM PROCESS_BOM_DATA.
DATA : FIRST_TIME .
FIRST_TIME = 1 .
CLEAR PREV_MATNR .
LOOP AT BOM_DATA.
IF PREV_MATNR <> BOM_DATA-TOP_MATERIAL .
IF FIRST_TIME <> 1 .
PERFORM SAVE_BOM_DATA.
ENDIF.
PERFORM FILL_HEADER_DETAIL.
ELSE.
PERFORM FILL_ITEM_DETAIL.
ENDIF.
PREV_MATNR = BOM_DATA-TOP_MATERIAL .
CLEAR FIRST_TIME .
ENDLOOP.
PERFORM SAVE_BOM_DATA.
ENDFORM. " PROCESS_BOM_DATA
&----
*& Form FILL_HEADER_DETAIL
&----
text *
----
--> p1 text
<-- p2 text
----
FORM FILL_HEADER_DETAIL.
DATA : QUANTITY_CH(14) .
REFRESH : BDC_TAB , ERROR_LOG .
WRITE BOM_DATA-COMP_QTY TO QUANTITY_CH DECIMALS 2 .
PERFORM FILL_DYNPRO USING :
'X' 'SAPLCSDI' '0100' ,
' ' 'RC29N-MATNR' BOM_DATA-TOP_MATERIAL ,
' ' 'RC29N-WERKS' '0301' ,
' ' 'RC29N-STLAN' '3' ,
' ' 'BDC_OKCODE' '/0' ,
'X' 'SAPLCSDI' '0110' ,
' ' 'BDC_OKCODE' '/0' ,
'X' 'SAPLCSDI' '0111' ,
' ' 'BDC_OKCODE' '/0',
'X' 'SAPLCSDI' '0140' ,
' ' 'RC29P-AUSKZ(1)' 'X' ,
' ' 'RC29P-IDNRK(1)' BOM_DATA-COMP_MATERIAL ,
' ' 'RC29P-MENGE(1)' QUANTITY_CH,
' ' 'RC29P-POSTP(1)' 'L' ,
' ' 'BDC_OKCODE' 'PHPT' ,
'X' 'SAPLCSDI' '0130' ,
' ' 'RC29P-AUSCH' '2' ,
' ' 'BDC_OKCODE' '/0' ,
'X' 'SAPLCSDI' '0131' ,
' ' 'BDC_OKCODE' '/0' ,
'X' 'SAPLCSDI' '0130' ,
' ' 'BDC_OKCODE' '/3' .
ENDFORM. " FILL_HEADER_DETAIL
&----
*& Form FILL_ITEM_DETAIL
&----
text *
----
--> p1 text
<-- p2 text
----
FORM FILL_ITEM_DETAIL.
DATA QUANTITY_CH(14).
WRITE BOM_DATA-COMP_QTY TO QUANTITY_CH .
PERFORM FILL_DYNPRO USING :
'X' 'SAPLCSDI' '0140' ,
' ' 'BDC_OKCODE' 'FCNP' ,
'X' 'SAPLCSDI' '0140' ,
' ' 'RC29P-AUSKZ(2)' 'X' ,
' ' 'RC29P-IDNRK(2)' BOM_DATA-COMP_MATERIAL ,
' ' 'RC29P-MENGE(2)' QUANTITY_CH ,
' ' 'RC29P-POSTP(2)' 'L' ,
' ' 'BDC_OKCODE' 'PHPT' ,
'X' 'SAPLCSDI' '0130' ,
' ' 'RC29P-AUSCH' '2' ,
' ' 'BDC_OKCODE' '/0' ,
'X' 'SAPLCSD1' '0131' ,
' ' 'BDC_OKCODE' '/0' ,
'X' 'SAPLCSDI' '0130' ,
' ' 'BDC_OKCODE' '/3' .
ENDFORM. " FILL_ITEM_DETAIL
&----
*& Form SAVE_BOM_DATA
&----
text *
----
--> p1 text
<-- p2 text
----
FORM SAVE_BOM_DATA.
PERFORM FILL_DYNPRO USING :
'X' 'SAPLCSDI' '0140' ,
' ' 'BDC_OKCODE' '/11' .
REFRESH MESSTAB .
CALL TRANSACTION 'CS01'
USING BDC_TAB
MODE DISP_MODE
UPDATE UPD_MODE
MESSAGES INTO MESSTAB .
SUBRC = SY-SUBRC .
PERFORM MOVE_MESSTAB .
IF SUBRC <> 0 .
PERFORM POST_BDC_SESSION USING TEMP_GROUP 'CS01' .
PERFORM MOVE_TO_MESSAGE USING 'ZI' '999' 'E' TEXT-002
BOM_DATA-TOP_MATERIAL '' '' .
ENDIF.
PERFORM CHANGE_MATERIAL_MASTER .
ENDFORM. " SAVE_BOM_DATA
&----
*& Form FILL_DYNPRO
&----
text *
----
--> p1 text
<-- p2 text
----
FORM FILL_DYNPRO USING DYNPRO FIELD VALUE.
CLEAR BDC_TAB.
IF DYNPRO = 'X'.
MOVE: FIELD TO BDC_TAB-PROGRAM,
VALUE TO BDC_TAB-DYNPRO,
'X' TO BDC_TAB-DYNBEGIN.
APPEND BDC_TAB.
ELSE.
MOVE: FIELD TO BDC_TAB-FNAM,
VALUE TO BDC_TAB-FVAL.
APPEND BDC_TAB.
ENDIF.
ENDFORM. " FILL_DYNPRO
&----
*& Form MOVE_MESSTAB
&----
text *
----
--> p1 text
<-- p2 text
----
FORM MOVE_MESSTAB.
LOOP AT MESSTAB .
MOVE-CORRESPONDING MESSTAB TO I_MESSAGE .
I_MESSAGE-MSGNO = MESSTAB-MSGNR .
I_MESSAGE-MSGTY = MESSTAB-MSGTYP .
ERROR_LOG = I_MESSAGE .
ignore the success message and warnings in the BDC program execution
IF MESSTAB-MSGTYP <> 'S' AND MESSTAB-MSGTYP <> 'W' .
APPEND ERROR_LOG .
ENDIF.
ENDLOOP .
ENDFORM. " MOVE_MESSTAB
&----
*& Form MOVE_TO_MESSAGE
&----
text *
----
--> p1 text
<-- p2 text
----
FORM MOVE_TO_MESSAGE USING MSGID MSGNO MSGTY MSGV1 MSGV2 MSGV3 MSGV4 .
I_MESSAGE-MSGID = MSGID .
I_MESSAGE-MSGNO = MSGNO .
I_MESSAGE-MSGTY = MSGTY .
I_MESSAGE-MSGV1 = MSGV1 .
I_MESSAGE-MSGV2 = MSGV2 .
I_MESSAGE-MSGV3 = MSGV3 .
I_MESSAGE-MSGV4 = MSGV4 .
ERROR_LOG = I_MESSAGE .
APPEND ERROR_LOG .
ENDFORM. " MOVE_TO_MESSAGE
&----
*& Form POST_BDC_SESSION
&----
text *
----
--> p1 text
<-- p2 text
----
FORM POST_BDC_SESSION USING TEMP_GROUP TRANSAC_CODE .
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = TRANSAC_CODE
TABLES
DYNPROTAB = BDC_TAB
EXCEPTIONS
INTERNAL_ERROR = 1
NOT_OPEN = 2
QUEUE_ERROR = 3
TCODE_INVALID = 4
OTHERS = 5.
ENDFORM. " POST_BDC_SESSION
&----
*& Form CHANGE_MATERIAL_MASTER
&----
text *
----
--> p1 text
<-- p2 text
----
FORM CHANGE_MATERIAL_MASTER.
REFRESH : ERROR_LOG , BDC_TAB .
PERFORM FILL_DYNPRO USING :
'X' 'SAPLMGMM' '0060' ,
' ' 'RMMG1-MATNR' PREV_MATNR ,
' ' 'BDC_OKCODE' '/5' ,
'X' 'SAPLMGMM' '0070' ,
' ' 'MSICHTAUSW-KZSEL(8)' 'X' ,
' ' 'BDC_OKCODE' '/0' ,
'X' 'SAPLMGMM' '0080' ,
' ' 'RMMG1-WERKS' '0301' ,
' ' 'BDC_OKCODE' '/0' ,
'X' 'SAPLMGMM' '3003' ,
' ' 'MARC-MTVFP' '32' ,
' ' 'BDC_OKCODE' 'PRZU' ,
'X' 'SAPLMGMM' '0531' ,
' ' 'RMMG1-DISPR' '0001' ,
' ' 'BDC_OKCODE' '/0' ,
'X' 'SAPLMGMM' '3003' ,
' ' 'BDC_OKCODE' '/11' .
REFRESH MESSTAB .
CALL TRANSACTION 'MM02'
USING BDC_TAB
MODE DISP_MODE
UPDATE UPD_MODE
MESSAGES INTO MESSTAB .
SUBRC = SY-SUBRC .
PERFORM MOVE_MESSTAB .
IF SUBRC <> 0 .
PERFORM POST_BDC_SESSION USING TEMP_GROUP 'MM02' .
PERFORM MOVE_TO_MESSAGE USING 'ZI' '999' 'E' TEXT-003
BOM_DATA-TOP_MATERIAL '' '' .
ENDIF.
ENDFORM. " CHANGE_MATERIAL_MASTER
&----
*& Form OPEN_BDC_GROUP
&----
text *
----
--> p1 text
<-- p2 text
----
FORM OPEN_BDC_GROUP.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
DEST = FILLER8
GROUP = TEMP_GROUP
HOLDDATE = FILLER8
KEEP = 'X'
USER = SY-UNAME
importing
qid =
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.
ENDFORM. " OPEN_BDC_GROUP
&----
*& Form CLOSE_BDC_GROUP
&----
text *
----
--> p1 text
<-- p2 text
----
FORM CLOSE_BDC_GROUP.
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN = 1
QUEUE_ERROR = 2
OTHERS = 3.
ENDFORM. " CLOSE_BDC_GROUP