Sunday, June 15, 2008

BDC Call transaction Pgm with ERROR handling

REPORT zbdc_call NO STANDARD PAGE HEADING LINE-SIZE 255.

TYPE-POOLS truxs.

DATA flag TYPE c.
DATA cnt(2) TYPE n.
DATA t_cnt(6) TYPE n.
DATA l_cnt(5) TYPE n.
DATA rng(6) TYPE n.
DATA field(20).

*declaration to upload excel file
DATA it_raw TYPE truxs_t_text_data.
DATA: w_textout LIKE t100-text.
* internal table
DATA: BEGIN OF it_bdc OCCURS 0,
vbeln LIKE vbak-vbeln,
mabnr LIKE rv45a-mabnr,
kunnr LIKE kuagv-kunnr,
kunnr1 LIKE kuwev-kunnr,
guebg LIKE vbak-guebg,
END OF it_bdc.
* Internal table to handle errors
DATA: BEGIN OF ty_error,
vbeln LIKE vbak-vbeln,
mabnr LIKE rv45a-mabnr,
kunnr LIKE kuagv-kunnr,
kunnr1 LIKE kuwev-kunnr,
guebg LIKE vbak-guebg,
err_msg(73) TYPE c,
END OF ty_error.

DATA it_final LIKE TABLE OF it_bdc WITH HEADER LINE.
DATA bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA: it_error LIKE TABLE OF ty_error WITH HEADER LINE.

*Used to stores error information from CALL TRANSACTION Function Module
DATA: BEGIN OF messtab OCCURS 0.
INCLUDE STRUCTURE bdcmsgcoll.
DATA: END OF messtab.

*---------------------------------------------------------------------*
* Select Options Begin with SO_ *
*---------------------------------------------------------------------*
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE tit.
SELECTION-SCREEN SKIP 1.
PARAMETERS: p_file TYPE rlgrap-filename.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN: END OF BLOCK b1.

*---------------------------------------------------------------------*
* Initialisation *
*---------------------------------------------------------------------*
INITIALIZATION.

MOVE 'FILE NAME' TO tit.

*---------------------------------------------------------------------*
* At selection-screen *
*---------------------------------------------------------------------*

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

CALL FUNCTION 'F4_FILENAME'
EXPORTING
field_name = 'P_FILE'
IMPORTING
file_name = p_file.

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

START-OF-SELECTION.

CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR = 'X'
* I_LINE_HEADER = 'X'
i_tab_raw_data = it_raw
i_filename = p_file
TABLES
i_tab_converted_data = it_final.
* EXCEPTIONS
* CONVERSION_FAILED = 1
* OTHERS = 2.


LOOP AT it_final.

PERFORM bdc_dynpro USING 'SAPMV45A' '0102'.
PERFORM bdc_field USING 'BDC_CURSOR'
'VBAK-VBELN'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'VBAK-VBELN'
it_final-vbeln.
PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'KUAGV-KUNNR'
it_final-kunnr.
PERFORM bdc_field USING 'KUWEV-KUNNR'
it_final-kunnr1.
PERFORM bdc_field USING 'VBAK-KTEXT'
'ZCAG'.
PERFORM bdc_field USING 'VBAK-GUEBG'
it_final-guebg.
PERFORM bdc_field USING 'VBAK-GUEEN'
'31.12.9999'.
PERFORM bdc_field USING 'RV45A-MABNR(04)'
it_final-mabnr.
PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'KUAGV-KUNNR'
'4004313'.
PERFORM bdc_field USING 'KUWEV-KUNNR'
'4004313'.
PERFORM bdc_field USING 'VBAK-KTEXT'
'ZCAG'.
PERFORM bdc_field USING 'VBAK-GUEBG'
'01.06.2006'.
PERFORM bdc_field USING 'VBAK-GUEEN'
'31.12.9999'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RV45A-MABNR(05)'.
PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SICH'.
PERFORM bdc_field USING 'KUAGV-KUNNR'
'4004313'.
PERFORM bdc_field USING 'KUWEV-KUNNR'
'4004313'.
PERFORM bdc_field USING 'VBAK-KTEXT'
'ZCAG'.
PERFORM bdc_field USING 'VBAK-GUEBG'
'01.06.2006'.
PERFORM bdc_field USING 'VBAK-GUEEN'
'31.12.9999'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RV45A-MABNR(05)'.

*call transaction to update customer instalment text
CALL TRANSACTION 'VA02' USING bdcdata MODE 'N' UPDATE 'S'
MESSAGES INTO messtab.

*Check if update was succesful
IF sy-subrc NE 0.
*Retrieve error messages displayed during BDC update
LOOP AT messtab WHERE msgtyp = 'E'.
*Builds actual message based on info returned from Call transaction
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = messtab-msgid
msgnr = messtab-msgnr
msgv1 = messtab-msgv1
msgv2 = messtab-msgv2
msgv3 = messtab-msgv3
msgv4 = messtab-msgv4
IMPORTING
message_text_output = w_textout.
ENDLOOP.

* Build error table ready for output
it_error-vbeln = it_final-vbeln.
it_error-mabnr = it_final-mabnr.
it_error-kunnr = it_final-kunnr.
it_error-guebg = it_final-guebg.

it_error-err_msg = w_textout.
APPEND it_error.
CLEAR it_error.
ENDIF.

* Clear bdc data table
CLEAR: bdcdata.
REFRESH: bdcdata.
ENDLOOP.

*----------------------------------------------------------------------*
* 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