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

call transaction method

Former Member
0 Likes
766

can any one give, how to catch the error records using call transaction method without using BDCMSGCOL.

4 REPLIES 4
Read only

Former Member
0 Likes
693

hi,

following is an example program use this

REPORT zmmme029_rbc_enhancement

NO STANDARD PAGE HEADING

MESSAGE-ID zmm.

----


  • T Y P E D E C L A R A T I O N S *

----


  • Final output structure

TYPES: BEGIN OF ty_s_cbht,

matnr TYPE zkt_cbht-matnr, "Material Number

werks TYPE zkt_cbht-werks, "Plant

stprs TYPE mbew-stprs , "Material Standard price

trcom TYPE zkt_cbht-trcom, "Transaction Complete Ind

END OF ty_s_cbht,

ty_t_cbht TYPE STANDARD TABLE OF ty_s_cbht.

  • Error Table Structure

TYPES: BEGIN OF ty_s_matnr,

matnr TYPE matnr, "Material number

werks TYPE werks, "Plant

msg(500) TYPE c, "Messages

END OF ty_s_matnr,

ty_t_matnr TYPE STANDARD TABLE OF ty_s_matnr.

  • Plant n amd material pertaing to to single company code.

TYPES: BEGIN OF ty_s_plant,

matnr TYPE matnr, "Material number

werks TYPE marc-werks, "Plant

END OF ty_s_plant,

ty_t_plant TYPE STANDARD TABLE OF ty_s_plant.

  • Success table Structure

TYPES: BEGIN OF ty_s_success,

matnr TYPE matnr, "Material number

END OF ty_s_success,

ty_t_success TYPE STANDARD TABLE OF ty_s_success.

  • BDC Structure Table

TYPES:ty_t_bdc_tab TYPE STANDARD TABLE OF bdcdata.

  • BDC Messages Structure

TYPES: ty_s_bdcmsg TYPE bdcmsgcoll.

  • BDC messages Table

TYPES:ty_t_bdcmsg TYPE STANDARD TABLE OF bdcmsgcoll.

  • Capturing error messages

TYPES: BEGIN OF ty_s_msgs,

msg(200), "Error messages

END OF ty_s_msgs,

ty_t_msgs TYPE STANDARD TABLE OF ty_s_msgs.

----


  • I N T E R N A L T A B L E S *

----


DATA: gt_objhead TYPE TABLE OF solisti1, "Object Header Table

gt_objtxt TYPE TABLE OF solisti1, "Body

gt_reclist TYPE TABLE OF somlreci1, "Recipient list

gt_cbht TYPE ty_t_cbht, "internal table

gt_cbht_tmp TYPE ty_t_cbht, "Temp internal table

gt_error TYPE ty_t_matnr, "Error table

gt_marc TYPE ty_t_plant, "Plant table

gt_success TYPE ty_t_success, "Success table

gt_bdc_tab TYPE ty_t_bdc_tab, "BDC table

gt_bdc_msg TYPE STANDARD TABLE OF bdcmsgcoll. "Message table

----


  • V A R I A B L E S *

----


DATA: gv_tab_lines TYPE i,

gv_bdc_open_flag TYPE c.

----


  • G L O B A L D A T A D E C L A R A T I O N S *

----


DATA: gs_objtxt TYPE solisti1, "Body

gs_reclist TYPE somlreci1, "Recipient List

gs_doc_chng TYPE sodocchgi1, "Mail Header details

gs_error TYPE ty_s_matnr, "Error table structure

gs_marc TYPE ty_s_plant, "Plant data Structure

gs_success TYPE ty_s_matnr, "Success table Structure

gs_bdc_tab TYPE bdcdata, "BDC table data

gt_msgs TYPE ty_t_msgs. "Capturing the messages

----


  • G L O B A L C O N S T A N T S *

----


CONSTANTS: gc_x(1) TYPE c VALUE 'X', "For checking field

gc_c(1) TYPE c VALUE 'C', "Constant value C

gc_u(1) TYPE c VALUE 'U', "Contant value U

gc_p(4) TYPE c VALUE '1000', "Constant value 1000

gc_f TYPE c VALUE 'F', "Footer indicator

gc_h TYPE c VALUE 'H', "Header indicator

gc_at(2) TYPE c VALUE '@', "@ symbol

gc_grpid TYPE apqi-groupid VALUE 'RBC_ERRORS',

gc_cbht TYPE rstable-tabname VALUE 'ZKT_CBHT',

gc_s VALUE 'S', "constant S

gc_2 VALUE '2', "constant value 2

gc_3 VALUE '3', "constant value 3

gc_y VALUE 'Y'. "constant Y

----


  • S E L E C T I O N S C R E E N *

----


  • Selection Screen data for block b.

SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-001.

PARAMETERS: p_gjahr TYPE zkt_cbht-gjahr OBLIGATORY, "Fiscal Year

p_monat TYPE zkt_cbht-monat OBLIGATORY, "FiscalPeriod

p_fweek TYPE zkt_cbht-fweek OBLIGATORY, "Fiscal week

p_budat TYPE budat OBLIGATORY DEFAULT sy-datum,

p_bukrs TYPE t001-bukrs OBLIGATORY DEFAULT gc_p.

SELECTION-SCREEN END OF BLOCK b.

*Selection Screen data for block b1.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-006.

PARAMETERS: p_dlist TYPE p10_email OBLIGATORY."Email ID/Distr List

SELECTION-SCREEN END OF BLOCK b1.

----


  • A T S E L E C T I O N S C R E E N *

----


  • Validation check for Comapny code

AT SELECTION-SCREEN ON p_bukrs.

PERFORM validate_bukrs.

----


  • S T A R T O F S E L E C T I O N *

----


INITIALIZATION.

  • Defaulting the Fiscal Year/Period/Week on the Selection-screen

PERFORM default_fiscal_data.

----


  • S T A R T O F S E L E C T I O N *

----


START-OF-SELECTION.

  • Retrieve costing data from the custom table.

PERFORM get_cbht_data.

  • Retrieve all the plants data for which the material is extended

PERFORM get_data_from_marc.

  • Run the MR21 transaction to update Std Price retrieved from ZKT_CBHT

PERFORM update_std_price.

  • Display materials which are not updated.

PERFORM display_materials.

  • Check for materials that failed to update

IF gt_error IS NOT INITIAL.

  • Send a mail with error information

PERFORM send_log_mail.

ENDIF.

----


  • E N D O F S E L E C T I O N *

----


END-OF-SELECTION.

  • Footer for the report display using FM 'Z_SL_HEADER_FOOTER'

PERFORM header_footer USING gc_f.

----


  • T O P O F P A G E *

----


TOP-OF-PAGE.

  • Header for the report display using FM 'Z_SL_HEADER_FOOTER'

PERFORM header_footer USING gc_h .

----


  • Form get_cbht_data *

----


  • Retrieving data from the CBHT custom table *

----


FORM get_cbht_data .

  • Populate the internal table.

SELECT matnr "Material

werks "Plant

stprs "Standard material Price

trcom "Costing version

FROM zkt_cbht

INTO TABLE gt_cbht

WHERE gjahr EQ p_gjahr AND

monat EQ p_monat AND

fweek EQ p_fweek.

  • Delete the records for which the MR21 is completed

DELETE gt_cbht WHERE trcom EQ gc_y.

  • If the table is empty

IF gt_cbht IS INITIAL .

MESSAGE s004. "No data found status message

LEAVE LIST-PROCESSING.

ENDIF.

ENDFORM. " get_cbht_data

----


  • Form get_data_from_marc *

----


  • Retrieving All the Plant data from MARC table *

----


FORM get_data_from_marc.

  • local declaration

TYPES : BEGIN OF ty_s_t001k,

bwkey TYPE t001k-bwkey,

END OF ty_s_t001k,

ty_t_t001k TYPE STANDARD TABLE OF ty_s_t001k.

DATA : lr_bwkey TYPE RANGE OF t001k-bwkey,

ls_bwkey LIKE LINE OF lr_bwkey,

lt_t001k TYPE ty_t_t001k,

ls_t001k TYPE ty_s_t001k.

CONSTANTS: lc_i VALUE 'I',

lc_eq(2) VALUE 'EQ'.

REFRESH : lt_t001k,

gt_marc.

  • Get the Unique Materials from ZKT_CBHT

IF NOT gt_cbht IS INITIAL.

gt_cbht_tmp = gt_cbht.

SORT gt_cbht_tmp BY matnr.

DELETE ADJACENT DUPLICATES FROM gt_cbht_tmp COMPARING matnr.

ENDIF.

  • select all the plants and company codes

SELECT bwkey "Valuation area

FROM t001k

INTO TABLE lt_t001k

WHERE bukrs EQ p_bukrs.

  • Populating the range table for the Plants that are retrieved

ls_bwkey-sign = lc_i.

ls_bwkey-option = lc_eq.

LOOP AT lt_t001k INTO ls_t001k.

ls_bwkey-low = ls_t001k-bwkey.

APPEND ls_bwkey TO lr_bwkey.

CLEAR: ls_bwkey-low.

ENDLOOP.

  • Select all the plant values

SELECT matnr "Material number

werks "Plant

FROM marc

INTO TABLE gt_marc

FOR ALL ENTRIES IN gt_cbht_tmp

WHERE matnr EQ gt_cbht_tmp-matnr AND

werks IN lr_bwkey.

SORT gt_marc BY matnr werks.

  • If the table is empty

IF gt_marc IS INITIAL .

MESSAGE s004. "No data found status message

LEAVE LIST-PROCESSING.

ENDIF.

ENDFORM. " get_data_from_marc

----


  • Form UPDATE_STD_PRICE *

----


  • Run the BDC recording for MR21 for updating the Std Price *

----


FORM update_std_price.

  • clear the flag value and loop the cost blending table

CLEAR: gv_bdc_open_flag.

  • Filling the BDCDATA

PERFORM prepare_bdc_tab.

  • Close the SESSION

IF gv_bdc_open_flag = gc_x.

PERFORM bdc_close_group.

ENDIF.

ENDFORM. "UPDATE_STD_PRICE

----


  • Form prepare_bdc_tab *

----


  • Prepare BDC Table for updating Copack Purchase Prices *

----


FORM prepare_bdc_tab .

  • Local variable.

DATA: lv_date(10) TYPE c,

ls_stprs TYPE ty_s_cbht,

ls_plant TYPE ty_s_plant,

lv_fnmatnr TYPE bdcdata-fnam,

lv_fnbwkey TYPE bdcdata-fnam,

lv_fnnewvalpr TYPE bdcdata-fnam,

lv_counter(2) TYPE n,

lv_num TYPE i.

CONSTANTS: lc_8 VALUE '8'.

CLEAR: lv_date.

SORT gt_cbht BY matnr.

LOOP AT gt_marc INTO gs_marc.

ls_plant = gs_marc.

AT NEW matnr.

CLEAR lv_counter.

  • Capture the date as per the user setting

WRITE p_budat TO lv_date.

  • Initial Screen of MR21 transaction

PERFORM bdc_dynpro USING 'SAPRCKM_MR21' '0201'.

PERFORM bdc_field USING: 'BDC_OKCODE' '=ENTR',

'MR21HEAD-BUDAT' lv_date,

'MR21HEAD-BUKRS' p_bukrs,

'MR21HEAD-WERKS' space.

READ TABLE gt_cbht INTO ls_stprs

WITH KEY matnr = ls_plant-matnr BINARY SEARCH.

ENDAT.

CLEAR : lv_fnmatnr,

lv_fnbwkey,

lv_fnnewvalpr.

lv_counter = lv_counter + 1.

lv_num = lv_num + 1.

CONCATENATE:

'CKI_MR21_0250-MATNR(' lv_counter ')' INTO lv_fnmatnr,

'CKI_MR21_0250-BWKEY(' lv_counter ')' INTO lv_fnbwkey,

'CKI_MR21_0250-NEWVALPR(' lv_counter ')' INTO lv_fnnewvalpr.

  • Second screen of MR21 transaction

PERFORM bdc_dynpro USING 'SAPRCKM_MR21' '0201'.

PERFORM bdc_field USING: 'BDC_OKCODE' '=ENTR',

lv_fnmatnr ls_plant-matnr,

lv_fnbwkey ls_plant-werks,

lv_fnnewvalpr ls_stprs-stprs.

IF lv_num EQ lc_8.

PERFORM bdc_dynpro USING 'SAPRCKM_MR21' '0201'.

PERFORM bdc_field USING: 'BDC_OKCODE' '=DOWN'.

CLEAR lv_num.

CLEAR lv_counter.

ENDIF.

AT END OF matnr.

PERFORM bdc_field USING: 'BDC_OKCODE' '=SAVE'.

  • Run MR21 using CALL TRANSACTION, if errors found create a SESSION

PERFORM call_transaction_mr21 USING ls_plant.

CLEAR : ls_stprs.

REFRESH gt_bdc_tab.

ENDAT.

CLEAR : gs_marc,

ls_plant.

ENDLOOP.

ENDFORM. " prepare_bdc_tab

----


  • Form call_transaction_mr21 *

----


  • Call Transaction for updating CoPack Price entries *

----


FORM call_transaction_mr21 USING p_ls_plant TYPE ty_s_plant.

  • Local Data Declaration

CONSTANTS:lc_e TYPE c VALUE 'E',

lc_mr21(4) TYPE c VALUE 'MR21',

lc_mode(1) TYPE c VALUE 'N',

lc_update(1) TYPE c VALUE 'U'.

DATA: ls_msgs TYPE ty_s_msgs.

REFRESH: gt_bdc_msg.

  • Call MR21 Transaction

CALL TRANSACTION lc_mr21

USING gt_bdc_tab

MODE lc_mode

UPDATE lc_update

MESSAGES INTO gt_bdc_msg.

  • If the Call Transaction Fails

IF sy-subrc NE 0.

IF gv_bdc_open_flag IS INITIAL.

PERFORM bdc_open_group.

gv_bdc_open_flag = gc_x.

ENDIF.

PERFORM bdc_insert_group.

DELETE gt_bdc_msg WHERE msgtyp NE lc_e.

  • get the error message

PERFORM read_error_message USING gt_bdc_msg

CHANGING gt_msgs.

  • If the message table is having error mesasges

IF gt_bdc_msg IS NOT INITIAL.

LOOP AT gt_msgs INTO ls_msgs.

gs_error-matnr = p_ls_plant-matnr.

gs_error-msg = ls_msgs-msg.

APPEND gs_error TO gt_error.

CLEAR gs_error.

ENDLOOP.

ENDIF.

REFRESH:gt_bdc_msg,

gt_bdc_tab,

gt_msgs.

ELSE.

  • Update the status as 'Y' for ZKT_CBHT-TRCOM for success records

PERFORM update_transaction_complete USING p_ls_plant.

  • Record all materials that updated Successfully with Standard Price

gs_success-matnr = p_ls_plant-matnr.

APPEND gs_success TO gt_success.

CLEAR: gs_success.

ENDIF.

CLEAR p_ls_plant.

ENDFORM. " call_transaction_mr21

----


  • Form UPDATE_TRANSACTION_COMPLETE *

----


  • -->LS_CBHT text *

----


FORM update_transaction_complete USING p_ls_plant TYPE ty_s_plant.

DATA lv_varkey TYPE rstable-varkey.

  • generate the KEY for locking the record in ZKT_CBHT

CONCATENATE sy-mandt

p_gjahr

p_monat

p_fweek

p_fweek

p_ls_plant-matnr

INTO lv_varkey.

  • Lock the ZKT_CBHT table before update

PERFORM lock_cbht_table USING lv_varkey.

  • Update the Table ZKT_CBHT using the field TRCOM.

UPDATE zkt_cbht

SET trcom = gc_y

WHERE gjahr EQ p_gjahr AND

monat EQ p_monat AND

fweek EQ p_fweek AND

tvers EQ p_fweek AND

matnr EQ p_ls_plant-matnr .

  • Unlock the ZKT_CBHT table after update

PERFORM unlock_cbht_table USING lv_varkey.

ENDFORM. "UPDATE_TRANSACTION_COMPLETE

----


  • Form READ_ERROR_MESSAGE *

----


  • -->GT_BDC_MSG text *

  • -->LT_MSGS text *

----


FORM read_error_message USING lt_bdc_msg TYPE ty_t_bdcmsg

CHANGING lt_msgs TYPE ty_t_msgs.

DATA: lv_msg(500).

DATA: ls_bdcmsg TYPE ty_s_bdcmsg.

DATA: ls_errormsg TYPE ty_s_msgs.

LOOP AT lt_bdc_msg INTO ls_bdcmsg.

CALL FUNCTION 'FORMAT_MESSAGE'

EXPORTING

id = ls_bdcmsg-msgid

lang = 'E'

no = ls_bdcmsg-msgnr

v1 = ls_bdcmsg-msgv1

v2 = ls_bdcmsg-msgv2

v3 = ls_bdcmsg-msgv3

v4 = ls_bdcmsg-msgv4

IMPORTING

msg = lv_msg

EXCEPTIONS

not_found = 0

OTHERS = 0.

ls_errormsg-msg = lv_msg.

APPEND ls_errormsg TO lt_msgs.

CLEAR ls_errormsg-msg.

ENDLOOP.

ENDFORM. "READ_ERROR_MESSAGE

----


  • Form default_fiscal_data *

----


  • Fetch Fiscal Year, Fiscal Period, Fiscal Week. *

----


FORM default_fiscal_data .

CALL FUNCTION 'Z_GET_FISCAL_WEEK_FROM_DATE'

EXPORTING

i_datum = sy-datum

i_bukrs = p_bukrs

IMPORTING

e_fisc_period = p_monat

e_fisc_year = p_gjahr

e_week_num = p_fweek

EXCEPTIONS

error_period = 1

error_period_version = 2

error_special_period = 3

error_version = 4

error_fiscal_year = 5

error_posting_period = 6

error_posting_date = 7

invalid_company = 8

OTHERS = 9.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

ENDFORM. "Default_fiscal_data

----


  • Form send_log_mail *

----


  • Sending the Error log as mail *

----


FORM send_log_mail .

  • Local Constants

CONSTANTS: lc_raw(3) TYPE c VALUE 'RAW'. "Docuement Type

  • Creating the document to be sent with error message.

IF gt_error IS NOT INITIAL.

gs_doc_chng-obj_name = 'Error Price'(002).

gs_doc_chng-obj_descr =

'Material Standard Price Updation Errors'(003).

  • Mail Content

gs_objtxt = text-009.

APPEND gs_objtxt TO gt_objtxt.

gs_objtxt = text-020.

APPEND gs_objtxt TO gt_objtxt.

CLEAR gs_objtxt.

APPEND gs_objtxt TO gt_objtxt.

  • Error message Heading

CONCATENATE text-022 "Material

text-024 "Error Message

INTO gs_objtxt.

APPEND gs_objtxt TO gt_objtxt.

gs_objtxt = text-021. "under line in mail

APPEND gs_objtxt TO gt_objtxt.

LOOP AT gt_error INTO gs_error.

  • Remove leading zero's for Material

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'

EXPORTING

input = gs_error-matnr

IMPORTING

output = gs_error-matnr.

  • Genearte the error text

gs_objtxt = gs_error-matnr.

gs_objtxt+27 = gs_error-msg.

APPEND gs_objtxt TO gt_objtxt.

ENDLOOP.

ENDIF.

  • Add the Content to the E-mail

DESCRIBE TABLE gt_objtxt LINES gv_tab_lines.

READ TABLE gt_objtxt INTO gs_objtxt INDEX gv_tab_lines.

gs_doc_chng-doc_size =

( gv_tab_lines - 1 ) * 255 + STRLEN( gs_objtxt ).

  • Check for Internet Address or Distribution List

IF p_dlist IS NOT INITIAL.

SEARCH p_dlist FOR gc_at.

IF sy-subrc EQ 0.

gs_reclist-rec_type = gc_u.

ELSE.

gs_reclist-rec_type = gc_c.

ENDIF.

gs_reclist-receiver = p_dlist.

APPEND gs_reclist TO gt_reclist.

ENDIF.

  • Call the function module to send the mail

CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'

EXPORTING

document_type = lc_raw

document_data = gs_doc_chng

put_in_outbox = gc_x

commit_work = gc_x

TABLES

object_header = gt_objhead

object_content = gt_objtxt

receivers = gt_reclist

EXCEPTIONS

too_many_receivers = 1

document_not_sent = 2

operation_no_authorization = 4

OTHERS = 99.

CASE sy-subrc.

WHEN 0.

SKIP.

FORMAT COLOR 3 ON.

WRITE:/ 'Mail has been sent successfully to below mentioned IDs:->'(005)

.

FORMAT COLOR 3 OFF.

WRITE:/ p_dlist.

WRITE:/ sy-uname.

WHEN 1.

WRITE: / 'Too many receivers specified !'(017).

WHEN 2.

WRITE: / 'No receiver got the document !'(018).

WHEN 4.

WRITE: / 'Missing send authority !'(016).

WHEN OTHERS.

WRITE: / 'Unexpected error occurred !'(019).

ENDCASE.

ENDFORM. " send_log_mail

----


  • Form display_materials *

----


  • Display all the Materials which failed to update the Standard Price *

----


FORM display_materials .

IF NOT gt_error IS INITIAL.

  • Update Failure message.

SKIP 2.

FORMAT COLOR 3 ON.

WRITE:/ text-009,

/ text-020. "Material Std.Price update failure message

FORMAT COLOR 3 OFF.

FORMAT COLOR COL_NEGATIVE ON.

  • Read all the materials that failed to update

LOOP AT gt_error INTO gs_error.

WRITE:/ gs_error-matnr,

28 gs_error-msg.

ENDLOOP.

FORMAT COLOR COL_NEGATIVE OFF.

SKIP 2.

ENDIF.

IF NOT gt_success IS INITIAL.

  • Mesage to define the updation is Successful.

FORMAT COLOR 3 ON.

WRITE:/ text-011, 97 p_bukrs."Material Std.Price update Success msg

FORMAT COLOR 3 OFF.

FORMAT COLOR COL_POSITIVE ON.

  • Read all the materials which updated Successfully

LOOP AT gt_success INTO gs_success.

WRITE:/ gs_success-matnr.

ENDLOOP.

FORMAT COLOR COL_POSITIVE OFF.

ENDIF.

ENDFORM. " display_materials

----


  • Form header_footer *

----


  • To write a header and a footer to the report layout *

----


  • -->P_GC_HF Header and Footer Indicator 'H' or 'F' *

----


FORM header_footer USING p_gc_hf TYPE sywtitl.

  • Custom Function module for the Header/Footer display for report

CALL FUNCTION 'Z_SL_HEADER_FOOTER'

EXPORTING

rpt_id = sy-cprog

rpt_txt_typ = p_gc_hf

rpt_width = sy-linsz

EXCEPTIONS

err_invalid_parameters = 1

OTHERS = 2.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

ENDFORM. " header_footer

----


  • FORM bdc_dynpro *

----


  • Generate BDCDATA *

----


FORM bdc_dynpro USING program TYPE bdcdata-program

dynpro TYPE bdcdata-dynpro .

CLEAR: gs_bdc_tab.

gs_bdc_tab-program = program.

gs_bdc_tab-dynpro = dynpro.

gs_bdc_tab-dynbegin = gc_x.

APPEND gs_bdc_tab TO gt_bdc_tab.

ENDFORM. "bdc_dynpro

----


  • FORM bdc_field *

----


  • Populate data to the Screen fields *

----


FORM bdc_field USING fnam TYPE bdcdata-fnam

fval TYPE any.

  • Clear the local structure.

CLEAR: gs_bdc_tab.

WRITE fval TO gs_bdc_tab-fval LEFT-JUSTIFIED.

gs_bdc_tab-fnam = fnam.

APPEND gs_bdc_tab TO gt_bdc_tab.

ENDFORM. "bdc_field

----


  • Form bdc_open_group *

----


  • Subroutine for Open BDC Group *

----


FORM bdc_open_group .

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

client = sy-mandt

group = gc_grpid

user = sy-uname

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.

IF sy-subrc <> 0.

WRITE 😕 text-013. "Error in BDC_OPEN_GROUP

EXIT.

ENDIF.

ENDFORM. " bdc_open_group

----


  • Form BDC_INSERT_GROUP *

----


  • Subroutine for calling BDC_INSERT for inserting BDC Table *

----


FORM bdc_insert_group .

DATA lc_mr21 TYPE tstc-tcode VALUE 'MR21'.

CALL FUNCTION 'BDC_INSERT'

EXPORTING

tcode = lc_mr21

TABLES

dynprotab = gt_bdc_tab

EXCEPTIONS

internal_error = 1

not_open = 2

queue_error = 3

tcode_invalid = 4

printing_invalid = 5

posting_invalid = 6

OTHERS = 7.

IF sy-subrc <> 0.

WRITE 😕 text-014. "Error in BDC_INSERT

EXIT.

ENDIF.

ENDFORM. " BDC_INSERT_GROUP

----


  • Form BDC_CLOSE_GROUP *

----


  • Subroutine for Closeing of BDC group *

----


FORM bdc_close_group .

CALL FUNCTION 'BDC_CLOSE_GROUP'

EXCEPTIONS

not_open = 1

queue_error = 2

OTHERS = 3.

IF sy-subrc <> 0.

WRITE 😕 text-015. "Error in BDC_CLOSE_GROUP.

EXIT.

ENDIF.

ENDFORM. " BDC_CLOSE_GROUP

----


  • Form validate_bukrs *

----


  • Validation for Company code *

----


FORM validate_bukrs .

  • Local declarations

DATA: lv_bukrs TYPE bukrs.

CLEAR lv_bukrs.

  • Check if the specified Company code exists or not

IF p_bukrs IS NOT INITIAL.

SELECT SINGLE bukrs "Comapny code

FROM t001

INTO lv_bukrs

WHERE bukrs EQ p_bukrs.

IF lv_bukrs IS INITIAL.

  • Enter a valid Company code

MESSAGE e117(zmm). "Invalid Company code

ENDIF.

ENDIF.

ENDFORM. " validate_bukrs

----


  • Form lock_cbht_table *

----


  • Lock the table 'ZKT_CBHT' while updating *

----


FORM lock_cbht_table USING p_varkey TYPE rstable-varkey.

CALL FUNCTION 'ENQUEUE_E_TABLES'

EXPORTING

mode_rstable = gc_s

tabname = gc_cbht

varkey = p_varkey

scope = gc2.

ENDFORM. "lock_cbht_table

----


  • Form unlock_cbht_table *

----


  • Unlock the table 'ZKT_CBHT' after updating *

----


FORM unlock_cbht_table USING p_varkey TYPE rstable-varkey.

CALL FUNCTION 'DEQUEUE_E_TABLES'

EXPORTING

mode_rstable = gc_s

tabname = gc_cbht

varkey = p_varkey

scope = gc3.

ENDFORM. "unlock_history_table

Read only

Former Member
0 Likes
693

Hi,

Go through the following Example Code

      • Generated data section with specific formatting - DO NOT CHANGE ***

data: begin of it_lfa1 occurs 0,

KTOKK like lfa1-ktokk,

NAME1 like lfa1-name1,

SORTL like lfa1-sortl,

LAND1 like lfa1-land1,

end of it_lfa1.

      • End generated data section ***

data : it_bdc like bdcdata occurs 0 with header line.

*DATA: IT_MESSAGES TYPE TABLE OF BDCMSGCOLL WITH HEADER LINE.

*DATA: LV_MESSAGE(255).

data : it_messages like bdcmsgcoll occurs 0 with header line.

data : V_message(255).

data : V_flag.

data : V_datum1 type sy-datum.

data : begin of it_mesg occurs 0,

message(100),

end of it_mesg.

*V_datum1 = sy-datum-1.

parameters : P_Sess like APQI-GROUPID.

start-of-selection.

perform Get_data.

*perform open_group.

loop at it_lfa1.

perform bdc_dynpro using 'SAPMF02K' '0100'.

perform bdc_field using 'BDC_CURSOR'

'RF02K-KTOKK'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'RF02K-KTOKK'

it_lfa1-KTOKK.

perform bdc_dynpro using 'SAPMF02K' '0110'.

perform bdc_field using 'BDC_CURSOR'

'LFA1-LAND1'.

perform bdc_field using 'BDC_OKCODE'

'=UPDA'.

perform bdc_field using 'LFA1-NAME1'

it_lfa1-name1.

perform bdc_field using 'LFA1-SORTL'

it_lfa1-sortl.

perform bdc_field using 'LFA1-LAND1'

it_lfa1-land1.

call transaction 'XK01' using it_bdc

mode 'N'

update 'S'

messages into it_messages.

if sy-subrc <> 0.

if V_flag <> 'X'.

perform open_group.

V_flag = 'X'.

endif.

perform bdc_transaction. "using 'XK01'.

endif.

perform format_messages.

refresh : it_bdc,it_messages.

.

endloop.

if V_flag = 'X'.

perform close_group.

endif.

&----


*& Form Get_data

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM Get_data .

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = 'C:\srinu_vendor.txt'

FILETYPE = 'DAT'

TABLES

DATA_TAB = it_lfa1

EXCEPTIONS

CONVERSION_ERROR = 1

INVALID_TABLE_WIDTH = 2

INVALID_TYPE = 3

NO_BATCH = 4

UNKNOWN_ERROR = 5

GUI_REFUSE_FILETRANSFER = 6

OTHERS = 7

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

ENDFORM. " Get_data

&----


*& Form bdc_dynpro

&----


  • text

----


  • -->P_0061 text

  • -->P_0062 text

----


FORM BDC_DYNPRO USING PROGRAM DYNPRO.

CLEAR it_BDC.

it_BDC-PROGRAM = PROGRAM.

it_BDC-DYNPRO = DYNPRO.

it_BDC-DYNBEGIN = 'X'.

APPEND it_BDC.

ENDFORM.

----


  • Insert field *

----


FORM BDC_FIELD USING FNAM FVAL.

CLEAR it_BDC.

it_BDC-FNAM = FNAM.

it_BDC-FVAL = FVAL.

APPEND it_BDC.

ENDFORM.

&----


*& Form format_messages

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM format_messages .

loop at it_messages.

CALL FUNCTION 'FORMAT_MESSAGE'

EXPORTING

ID = it_messages-MSGID

LANG = 'EN'

NO = it_messages-MSGNR

V1 = it_messages-MSGV1

V2 = it_messages-MSGV2

V3 = it_messages-MSGV3

V4 = it_messages-MSGV4

IMPORTING

MSG = V_message

EXCEPTIONS

NOT_FOUND = 1

OTHERS = 2

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

write : / V_message.

clear : V_message.

endloop.

ENDFORM. " format_messages

&----


*& Form open_group

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM open_group .

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

CLIENT = SY-MANDT

GROUP = P_Sess

  • HOLDDATE = V_datum1

KEEP = 'X'

USER = SY-UNAME

.

IF SY-SUBRC = 0.

write : / 'Session Creating wit Name : ',P_Sess.

ENDIF.

ENDFORM. " open_group

&----


*& Form close_group

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM close_group .

CALL FUNCTION 'BDC_CLOSE_GROUP'.

ENDFORM. " close_group

&----


*& Form bdc_transaction

&----


  • text

----


  • -->P_0132 text

----


FORM bdc_transaction. "USING VALUE(P_0132).

CALL FUNCTION 'BDC_INSERT'

EXPORTING

TCODE = 'XK01'

  • POST_LOCAL = NOVBLOCAL

  • PRINTING = NOPRINT

  • SIMUBATCH = ' '

  • CTUPARAMS = ' '

TABLES

DYNPROTAB = it_bdc

  • EXCEPTIONS

  • INTERNAL_ERROR = 1

  • NOT_OPEN = 2

  • QUEUE_ERROR = 3

  • TCODE_INVALID = 4

  • PRINTING_INVALID = 5

  • POSTING_INVALID = 6

  • OTHERS = 7

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

ENDFORM. " bdc_transaction

Regards

Sreeni

Read only

Former Member
0 Likes
693

YOu have to check the sy-subrc after the call transaction statement.

But it only tells you if the record is succesfully uploaded or not. It will not tell you why was it failed.

call transaction <Tcode> using bdcdata ......

if sy-subrc = 0.

write:/ itab-field1, 'is succesfully uploaded'.

else.

write:/ itab-field1, 'upload failed'.

endif.

Read only

Former Member
0 Likes
693

hi,

if u don't want to use BDCMSGCOLL ,u can catch errors using session method.

if sy-subrc <> 0.

write the session logic.

u can check it in sm35.

see the below coding.In this pg i cought errors using session method.i opened session and we can check errors in sm35.

report zsr_bdc .

*report zsk_bdc

  • no standard page heading line-size 255.

data:begin of w_input1,

g_data(200) type c,

end of w_input1,

t_input1 like standard table of w_input1 initial size 0,

begin of w_input,

ekorg(4) type c,

ktokk(4) type c,

anred(15) type c,

name1(30) type c,

sortl(10) type c,

land1(3) type c,

spras(2) type c,

waers(5) type c,

end of w_input,

t_input like standard table of w_input initial size 0,

g_string type string,

g_flag,

t_bdcdata type standard table of bdcdata initial size 0,

t_bdcmsgcoll type standard table of bdcmsgcoll,

w_bdcdata type bdcdata,

w_bdcmsgcoll type bdcmsgcoll.

parameters: p_file type ibipparms-path.

at selection-screen on value-request for p_file.

call function 'F4_FILENAME'

  • EXPORTING

  • PROGRAM_NAME = SYST-CPROG

  • DYNPRO_NUMBER = SYST-DYNNR

  • FIELD_NAME = ' '

importing

file_name = p_file

.

g_string = p_file.

*include bdcrecx1.

start-of-selection.

call function 'GUI_UPLOAD'

exporting

filename = g_string

filetype = 'ASC'

tables

data_tab = t_input1

  • EXCEPTIONS

  • FILE_OPEN_ERROR = 1

  • FILE_READ_ERROR = 2

  • NO_BATCH = 3

  • GUI_REFUSE_FILETRANSFER = 4

  • INVALID_TYPE = 5

  • NO_AUTHORITY = 6

  • UNKNOWN_ERROR = 7

  • BAD_DATA_FORMAT = 8

  • HEADER_NOT_ALLOWED = 9

  • SEPARATOR_NOT_ALLOWED = 10

  • HEADER_TOO_LONG = 11

  • UNKNOWN_DP_ERROR = 12

  • ACCESS_DENIED = 13

  • DP_OUT_OF_MEMORY = 14

  • DISK_FULL = 15

  • DP_TIMEOUT = 16

  • OTHERS = 17

.

if sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

endif.

loop at t_input1 into w_input1.

split w_input1-g_data at ',' into w_input-ekorg

w_input-ktokk

w_input-anred

w_input-name1

w_input-sortl

w_input-land1

w_input-spras

w_input-waers.

append w_input to t_input.

endloop.

*perform open_group.

loop at t_input into w_input.

refresh t_bdcdata.

perform bdc_dynpro using 'SAPMF02K' '0107'.

perform bdc_field using 'BDC_CURSOR'

'RF02K-KTOKK'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'RF02K-EKORG'

w_input-ekorg.

perform bdc_field using 'RF02K-KTOKK'

w_input-ktokk.

perform bdc_dynpro using 'SAPMF02K' '0110'.

perform bdc_field using 'BDC_CURSOR'

'LFA1-SPRAS'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'LFA1-ANRED'

w_input-anred.

perform bdc_field using 'LFA1-NAME1'

w_input-name1.

perform bdc_field using 'LFA1-SORTL'

w_input-sortl.

perform bdc_field using 'LFA1-LAND1'

w_input-land1.

perform bdc_field using 'LFA1-SPRAS'

w_input-spras.

perform bdc_dynpro using 'SAPMF02K' '0120'.

perform bdc_field using 'BDC_CURSOR'

'LFA1-KUNNR'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_dynpro using 'SAPMF02K' '0130'.

perform bdc_field using 'BDC_CURSOR'

'LFBK-BANKS(01)'.

perform bdc_field using 'BDC_OKCODE'

'=ENTR'.

perform bdc_dynpro using 'SAPMF02K' '0310'.

perform bdc_field using 'BDC_CURSOR'

'LFM1-WAERS'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'LFM1-WAERS'

w_input-waers.

perform bdc_dynpro using 'SAPMF02K' '0320'.

perform bdc_field using 'BDC_CURSOR'

'RF02K-LIFNR'.

perform bdc_field using 'BDC_OKCODE'

'=ENTR'.

perform bdc_dynpro using 'SAPLSPO1' '0300'.

perform bdc_field using 'BDC_OKCODE'

'=YES'.

call transaction 'MK01' using t_bdcdata

mode 'N'

update 'S'.

  • messages into t_bdcmsgcoll.

if sy-subrc <> 0.

if g_flag is initial.

call function 'BDC_OPEN_GROUP'

exporting

client = sy-mandt

  • DEST = FILLER8

group = 'ZSKCL'

  • HOLDDATE = FILLER8

keep = 'X'

user = sy-uname

  • RECORD = FILLER1

  • PROG = SY-CPROG

  • 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

.

if sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

endif.

g_flag = 'X'.

endif.

call function 'BDC_INSERT'

exporting

tcode = 'XK01'

  • POST_LOCAL = NOVBLOCAL

  • PRINTING = NOPRINT

  • SIMUBATCH = ' '

  • CTUPARAMS = ' '

tables

dynprotab = t_bdcdata

  • EXCEPTIONS

  • INTERNAL_ERROR = 1

  • NOT_OPEN = 2

  • QUEUE_ERROR = 3

  • TCODE_INVALID = 4

  • PRINTING_INVALID = 5

  • POSTING_INVALID = 6

  • OTHERS = 7

.

if sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

endif.

endif.

endloop.

if g_flag = 'X'.

call function 'BDC_CLOSE_GROUP'

  • EXCEPTIONS

  • NOT_OPEN = 1

  • QUEUE_ERROR = 2

  • OTHERS = 3

.

if sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

endif.

endif.

*perform close_group.

&----


*& Form bdc_dynpro

&----


  • text

----


  • -->P_0156 text

  • -->P_0157 text

----


form bdc_dynpro using value(p_0156)

value(p_0157).

clear w_bdcdata.

w_bdcdata-program = p_0156.

w_bdcdata-dynpro = p_0157.

w_bdcdata-dynbegin = 'X'.

append w_bdcdata to t_bdcdata.

endform. " bdc_dynpro

&----


*& Form bdc_field

&----


  • text

----


  • -->P_0175 text

  • -->P_0176 text

----


form bdc_field using value(p_0175)

value(p_0176).

clear w_bdcdata.

w_bdcdata-fnam = p_0175.

w_bdcdata-fval = p_0176.

append w_bdcdata to t_bdcdata.