‎2008 Feb 08 6:55 PM
Hi,
I have a BDC program to Add, Update and Delete a customer. If I do either Add, Update or Delete it is working fine. But if I have ADD and Update And Delete or any two of those it is giving me BDC_INSERT session not opened error. I have BDC_OPEN_GROUP, BDC_CLOSE_GROUP and BDC_INSERT.
Can someone please help me to resolve this error.
Thanks,
veni.
when 'UPDATE'.
DESCRIBE TABLE itab_output LINES lv_cnt.
DO lv_cnt TIMES.
lv_index = sy-index + 3.
READ LINE lv_index FIELD VALUE chk.
IF chk = 'X'.
READ TABLE itab_output INTO wa_index INDEX sy-index.
IF sy-subrc EQ 0.
wa_index-index = sy-index.
APPEND wa_index TO itab_output2.
CLEAR wa_index.
ENDIF.
ENDIF.
CLEAR chk.
ENDDO.
set pf-status 'NORM1'.
LOOP at itab_output2.
IF itab_output2-transpzone = 'ADDITION'.
MOVE itab_output2-name TO wa1-name.
MOVE itab_output2-name_2 TO wa1-name_2.
MOVE itab_output2-name_3 TO wa1-name_3.
MOVE itab_output2-name_4 TO wa1-name_4.
MOVE itab_output2-city TO wa1-city .
MOVE itab_output2-city_no TO wa1-city_no.
MOVE itab_output2-postl_cod1 TO wa1-postl_cod1.
MOVE itab_output2-transpzone TO wa1-transpzone.
MOVE itab_output2-street TO wa1-street.
MOVE itab_output2-str_suppl1 TO wa1-str_suppl1.
MOVE itab_output2-country TO wa1-country.
MOVE itab_output2-extens_1 TO wa1-extens_1.
PERFORM FORMAT_STORENO.
APPEND wa1 TO itab_output3.
CLEAR: wa1.
ELSEIF itab_output2-transpzone = 'CHANGE'.
MOVE itab_output2-name TO wa1-name.
MOVE itab_output2-name_2 TO wa1-name_2.
MOVE itab_output2-name_3 TO wa1-name_3.
MOVE itab_output2-name_4 TO wa1-name_4.
MOVE itab_output2-city TO wa1-city .
MOVE itab_output2-city_no TO wa1-city_no.
MOVE itab_output2-postl_cod1 TO wa1-postl_cod1.
MOVE itab_output2-transpzone TO wa1-transpzone.
MOVE itab_output2-street TO wa1-street.
MOVE itab_output2-str_suppl1 TO wa1-str_suppl1.
MOVE itab_output2-country TO wa1-country.
MOVE itab_output2-extens_1 TO wa1-extens_1.
PERFORM FORMAT_STORENO.
APPEND wa1 TO itab_output4.
CLEAR: wa1.
ELSEIF itab_output2-transpzone = 'DELETE'.
MOVE itab_output2-name TO wa1-name.
MOVE itab_output2-name_2 TO wa1-name_2.
MOVE itab_output2-name_3 TO wa1-name_3.
MOVE itab_output2-name_4 TO wa1-name_4.
MOVE itab_output2-city TO wa1-city .
MOVE itab_output2-city_no TO wa1-city_no.
MOVE itab_output2-postl_cod1 TO wa1-postl_cod1.
MOVE itab_output2-transpzone TO wa1-transpzone.
MOVE itab_output2-street TO wa1-street.
MOVE itab_output2-str_suppl1 TO wa1-str_suppl1.
MOVE itab_output2-country TO wa1-country.
MOVE itab_output2-extens_1 TO wa1-extens_1.
PERFORM FORMAT_STORENO.
APPEND wa1 TO itab_output5.
CLEAR: wa1.
endif.
endloop.
clear chk.
refresh itab_output2.
DESCRIBE TABLE itab_output3 LINES lv_cnt.
if lv_cnt <> 0.
perform add_shipto.
endif.
clear lv_cnt.
DESCRIBE TABLE itab_output4 LINES lv_cnt.
if lv_cnt <> 0.
perform change_shipto.
endif.
clear lv_cnt.
DESCRIBE TABLE itab_output5 LINES lv_cnt.
if lv_cnt <> 0.
perform delete_shipto.
endif.
clear lv_cnt.
endcase.
FORM FORMAT_STORENO.
IF itab_output2-storeno >= 1 AND itab_output2-storeno <= 9.
CONCATENATE '1012'
'00000'
itab_output2-storeno
INTO wa1-storeno.
ELSEIF itab_output2-storeno > 9 AND itab_output2-storeno < 100.
CONCATENATE '1012'
'0000'
itab_output2-storeno
INTO wa1-storeno.
ELSEIF itab_output2-storeno > 99 AND itab_output2-storeno < 1000.
CONCATENATE '1012'
'000'
itab_output2-storeno
INTO wa1-storeno.
ELSEIF itab_output2-storeno > 999 AND itab_output2-storeno < 10000.
CONCATENATE '1012'
'00'
itab_output2-storeno
INTO wa1-storeno.
ENDIF.
ENDFORM. " FORMAT_STORENO
FORM add_shipto.
loop at itab_output3.
MOVE '1012' TO WA_EDPAR-KUNNR.
MOVE 'WE' TO WA_EDPAR-PARVW.
MOVE itab_output3-name_4 TO WA_EDPAR-EXPNR.
MOVE itab_output3-storeno TO WA_EDPAR-INPNR.
INSERT INTO EDPAR VALUES WA_EDPAR.
CLEAR WA_EDPAR.
endloop.
IF gd_open <> gc_true.
m_grpid = 'ADD_SHIPTO'.
PERFORM open_bdc_session.
ENDIF.
LOOP AT itab_output3 INTO wa1.
lv_lzone = wa1-postl_cod1(3).
perform bdc_dynpro using 'SAPMF02D' '0107'.
perform bdc_field using 'BDC_CURSOR' 'RF02D-KTOKD'.
// BDC to add customer
PERFORM bdc_transaction USING gc_tcode2.
m_count = m_count + 1.
ENDLOOP.
IF sy-subrc = 0.
WRITE: /01 'Batch job created successfully',
/01 'Number of new records added', m_count.
ENDIF.
clear m_count.
IF gd_open = gc_true.
PERFORM close_bdc_session.
ENDIF.
ENDFORM. " add_shipto
FORM change_shipto.
loop at itab_output4.
UPDATE EDPAR SET expnr = itab_output4-name_4
WHERE kunnr = '0000001012' AND
inpnr = itab_output4-storeno.
endloop.
IF gd_open <> gc_true.
m_grpid = 'CHANGE_SHIPTO'.
PERFORM open_bdc_session.
ENDIF.
LOOP AT itab_output4 INTO wa1.
lv_lzone = wa1-postl_cod1(3).
perform bdc_dynpro using 'SAPMF02D' '0108'.
perform bdc_field using 'BDC_CURSOR' 'RF02D-D0125'.
// BDC to change customer
PERFORM bdc_transaction USING gc_tcode1.
m_count = m_count + 1.
ENDLOOP.
IF sy-subrc = 0.
WRITE: /01 'Batch job created successfully',
/01 'Number of records changed', m_count.
ENDIF.
clear m_count.
IF gd_open = gc_true.
PERFORM close_bdc_session.
ENDIF.
ENDFORM. " change_shipto
FORM delete_shipto.
loop at itab_output5.
DELETE FROM EDPAR
WHERE kunnr = '0000001012' AND
expnr = itab_output5-name_4 AND
inpnr = itab_output5-storeno.
endloop.
IF gd_open <> gc_true.
m_grpid = 'DELETE_SHIPTO'.
PERFORM open_bdc_session.
ENDIF.
LOOP AT itab_output5 INTO wa1.
perform bdc_dynpro using 'SAPMF02D' '0507'.
perform bdc_field using 'BDC_CURSOR' 'RF02D-SPART'.
perform bdc_field using 'BDC_OKCODE' '/00'.
perform bdc_field using 'RF02D-KUNNR' wa1-storeno.
perform bdc_field using 'RF02D-VKORG' '300'.
perform bdc_field using 'RF02D-VTWEG' '20'.
perform bdc_field using 'RF02D-SPART' '01'.
perform bdc_dynpro using 'SAPMF02D' '0520'.
perform bdc_field using 'BDC_CURSOR' 'KNA1-LOEVM'.
perform bdc_field using 'BDC_OKCODE' '=UPDA'.
perform bdc_field using 'KNA1-LOEVM' 'X'.
PERFORM bdc_transaction USING gc_tcode3.
m_count = m_count + 1.
ENDLOOP.
IF sy-subrc = 0.
WRITE: /01 'Batch job created successfully',
/01 'Number of records deleted', m_count.
ENDIF.
clear m_count.
IF gd_open = gc_true.
PERFORM close_bdc_session.
ENDIF.
ENDFORM. " delete_shipto
FORM open_bdc_session.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = m_grpid
keep = 'X'
user = sy-uname.
IF sy-subrc <> 0.
MESSAGE e208(00) WITH 'Session open error'.
ELSE.
gd_open = gc_true.
ENDIF.
ENDFORM. " open_bdc_session
FORM close_bdc_session.
IF gd_open = gc_true.
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXPORTING
client = sy-mandt
group = m_grpid
keep = 'X'
user = sy-uname.
ENDIF.
ENDFORM. " close_bdc_session
FORM bdc_dynpro USING p_program
p_screen.
CLEAR: itab_bdcdata.
itab_bdcdata-program = p_program.
itab_bdcdata-dynpro = p_screen.
itab_bdcdata-dynbegin = gc_true.
APPEND itab_bdcdata.
ENDFORM. " bdc_dynpro
FORM bdc_field USING p_fieldname
p_value.
CLEAR itab_bdcdata.
itab_bdcdata-fnam = p_fieldname.
itab_bdcdata-fval = p_value.
APPEND itab_bdcdata.
ENDFORM. " BDC_FIELD
FORM bdc_transaction USING p_tcode.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = p_tcode
TABLES
dynprotab = itab_bdcdata.
REFRESH itab_bdcdata.
CLEAR: itab_bdcdata.
ENDFORM. " bdc_transaction
‎2008 Feb 08 7:09 PM
I think you are PERFORMing open_bdc_session multiple times. Make sure you just do it once for each BDC session.
Rob
‎2008 Feb 08 7:09 PM
I think you are PERFORMing open_bdc_session multiple times. Make sure you just do it once for each BDC session.
Rob
‎2008 Feb 08 7:20 PM
Hi Rob,
The data comming from EDI 816 may contain Add, Change, Delete customer. If I have all 3, then i have to create 3 BDC sessions one for each ADD_SHIPTO, CHANGE_SHIPTO and DELETE_SHIPTO.
Thanks,
Veni.
‎2008 Feb 08 7:27 PM
Then make sure the previous one was closed before opening a new one.
Rob
‎2008 Feb 08 7:51 PM
Thank you Rob.
I just added this in BDC_CLOSE_GROUP, and it worked.
IF sy-subrc = 0.
gd_open = ' '.
ENDIF.
In BDC_OPEN_GROUP if gd_open = ' ', then only it opens a new session.
Thanks,
Veni.
Edited by: veni reddy on Feb 8, 2008 8:52 PM
‎2008 Feb 08 7:56 PM
You're welcome Veni - glad to help.
Did you manage to do this so you only get one each BDC session for add change and delete?
Rob
‎2008 Feb 08 8:11 PM
No Rob, Based on status it creates, if I have only add, change or delete it creates one session. If I have any 2 of 3 then creates 2, if I have all 3 then creates 3 diffearent sessions, one for each.
Thank you for your help.
Regards,
Veni.