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

BDC_INSERT, session not opened Error

Former Member
0 Likes
2,378

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

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,622

I think you are PERFORMing open_bdc_session multiple times. Make sure you just do it once for each BDC session.

Rob

6 REPLIES 6
Read only

Former Member
0 Likes
1,623

I think you are PERFORMing open_bdc_session multiple times. Make sure you just do it once for each BDC session.

Rob

Read only

0 Likes
1,622

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.

Read only

0 Likes
1,622

Then make sure the previous one was closed before opening a new one.

Rob

Read only

0 Likes
1,622

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

Read only

0 Likes
1,622

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

Read only

0 Likes
1,622

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.