Skip to Content
author's profile photo Former Member
Former Member

bdcs

hi can anybody help me in explaining how to handle erroes in call transaction method?

Add a comment
10|10000 characters needed characters exceeded

Assigned Tags

Related questions

4 Answers

  • Posted on Jul 10, 2007 at 03:41 PM

    Hi Ramesh,

    Welcome to SDN.

    You need to make use of the internal table of the structure BDCMSGCOLL in call transaction statement.

    call transaction <tcode> using it_bdcdata messages into it_bdcmsgcoll.
     
    loop at it_bdcmsgcoll.
      call function 'FORMAT_MESSAGE'.
        importing msg = lv_message.
    
      write:/ lv_message.
    endloop.
    

    Regards,

    Ferry Lianto

    Please reward points if helpful.

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Jul 11, 2007 at 06:16 AM

    Hi,

    Please refer to this error-handling-in-session-method-and-call-transact

    Regards

    Bala

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Jul 11, 2007 at 02:15 PM

    Dear Ramesh,

    http://help.sap.com/saphelp_sm32/helpdata/en/fa/09715a543b11d1898e0000e8322d00/content.htm

    Populate error messages using a table with structure BDCMSGCOLL.

    DATA : <BDCMSGCOLL Int.Table> type table of bdcmsgcoll.
    .....
    .....
    CALL TRANSACTION <T.Code> 
               USING <BDCTAB> 
               MODE <A/N/E> 
               UPDATE <S/A>
               MESSAGES INTO <BDCMSGCOLL Int.Table>
    

    The structure has:

    - Message type

    - Message id

    - Message Number

    - Variable1

    - Variable2

    - Variable3

    By using FORMAT_MESSAGES function module we can process the error records.

    Refer to the following links for more informaion and code:

    how-to-store-error-records-in-bdc-by-using-call-tr

    Regards,

    Naveen.

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Jul 14, 2007 at 07:53 PM

    for call transaction method

    c the sample code

    You can do something like this :

    messtab is the error table returned by CALL TRANSACTION

    I am writing

    LOOP AT MESSTAB WHERE MSGTYP = 'E'.

    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

    If sy-subrc = 0.

    MOVE : v_ctr to t_error-ctr,

    T_INPUT-KURST TO T_ERROR-KURST,

    T_INPUT-GDATU TO T_ERROR-GDATU,

    T_INPUT-FCURR TO T_ERROR-FCURR,

    T_INPUT-TCURR TO T_ERROR-TCURR,

    T_INPUT-INUKURS TO T_ERROR-INUKURS,

    T_INPUT-DUKURS TO T_ERROR-DUKURS,

    W_TEXTOUT TO T_ERROR-MSG.

    APPEND T_ERROR.

    CLEAR: T_ERROR.

    endif.

    • Perform to close the BDC session.

    PERFORM CLOSE_GROUP.

    session method

    it is done thro session log

    Refer this sample program

    REPORT zgopi_report

    NO STANDARD PAGE HEADING

    LINE-SIZE 255

    MESSAGE-ID ZRASH.

    ************************************************************************

    • Internal Table Declarations *

    ************************************************************************

    *--Internal Table for Data Uploading.

    DATA : BEGIN OF IT_FFCUST OCCURS 0,

    KUNNR(10),

    BUKRS(4),

    KTOKD(4),

    ANRED(15),

    NAME1(35),

    SORTL(10),

    STRAS(35),

    ORT01(35),

    PSTLZ(10),

    LAND1(3),

    SPRAS(2),

    AKONT(10),

    END OF IT_FFCUST.

    *--Internal Table to Store Error Records.

    DATA : BEGIN OF IT_ERRCUST OCCURS 0,

    KUNNR(10),

    EMSG(255),

    END OF IT_ERRCUST.

    *--Internal Table to Store Successful Records.

    DATA : BEGIN OF IT_SUCCUST OCCURS 0,

    KUNNR(10),

    SMSG(255),

    END OF IT_SUCCUST.

    *--Internal Table for Storing the BDC data.

    DATA : IT_CUSTBDC LIKE BDCDATA OCCURS 0 WITH HEADER LINE.

    *--Internal Table for storing the messages.

    DATA : IT_CUSTMSG LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.

    DATA : V_FLAG1(1) VALUE ' ',

    "Flag used for opening session.

    V_TLINES LIKE SY-TABIX,

    "For storing total records processed.

    V_ELINES LIKE SY-TABIX,

    "For storing the no of error records.

    V_SLINES LIKE SY-TABIX.

    "For storing the no of success records.

    ************************************************************************

    • Selection screen *

    ************************************************************************

    SELECTION-SCREEN BEGIN OF BLOCK B1.

    PARAMETERS : V_FNAME LIKE RLGRAP-FILENAME,

    V_SESNAM LIKE RLGRAP-FILENAME.

    SELECTION-SCREEN END OF BLOCK B1.

    ************************************************************************

    • Start-of-selection *

    ************************************************************************

    START-OF-SELECTION.

    *-- Form to upload flatfile data into the internal table.

    PERFORM FORM_UPLOADFF.

    ************************************************************************

    • TOP-OF-PAGE *

    ************************************************************************

    TOP-OF-PAGE.

    WRITE:/ 'Details of the error and success records for the transaction'

    .

    ULINE.

    SKIP.

    ************************************************************************

    • End of Selection *

    ************************************************************************

    END-OF-SELECTION.

    *-- Form to Generate a BDC from the Uploaded Internal table

    PERFORM FORM_BDCGENERATE.

    *--To write the totals and the session name.

    PERFORM FORM_WRITEOP.

    &----


    *& Form form_uploadff

    &----


    • Form to upload flatfile data into the internal table.

    ----


    FORM FORM_UPLOADFF .

    *--Variable to change the type of the parameter file name.

    DATA : LV_FILE TYPE STRING.

    LV_FILE = V_FNAME.

    *--Function to upload the flat file to the internal table.

    CALL FUNCTION 'GUI_UPLOAD'

    EXPORTING

    FILENAME = LV_FILE

    • FILETYPE = 'ASC'

    HAS_FIELD_SEPARATOR = 'X'

    • HEADER_LENGTH = 0

    • READ_BY_LINE = 'X'

    • DAT_MODE = ' '

    • IMPORTING

    • FILELENGTH =

    • HEADER =

    TABLES

    DATA_TAB = IT_FFCUST

    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.

    *--Deleting the headings from the internal table.

    DELETE IT_FFCUST INDEX 1.

    *--Getting the total number of records uploaded.

    DESCRIBE TABLE IT_FFCUST LINES V_TLINES.

    ENDIF.

    ENDFORM. " form_uploadff

    &----


    *& Form Form_bdcgenerate

    &----


    • Form to Generate a BDC from the Uploaded Internal table

    ----


    FORM FORM_BDCGENERATE .

    *--Generating the BDC table for the fields of the internal table.

    LOOP AT IT_FFCUST.

    PERFORM POPULATEBDC USING :

    'X' 'SAPMF02D' '0105',

    ' ' 'BDC_OKCODE' '/00' ,

    ' ' 'RF02D-KUNNR' IT_FFCUST-KUNNR,

    ' ' 'RF02D-BUKRS' IT_FFCUST-BUKRS,

    ' ' 'RF02D-KTOKD' IT_FFCUST-KTOKD,

    'X' 'SAPMF02D' '0110' ,

    ' ' 'BDC_OKCODE' '/00',

    ' ' 'KNA1-ANRED' IT_FFCUST-ANRED,

    ' ' 'KNA1-NAME1' IT_FFCUST-NAME1,

    ' ' 'KNA1-SORTL' IT_FFCUST-SORTL,

    ' ' 'KNA1-STRAS' IT_FFCUST-STRAS,

    ' ' 'KNA1-ORT01' IT_FFCUST-ORT01,

    ' ' 'KNA1-PSTLZ' IT_FFCUST-PSTLZ,

    ' ' 'KNA1-LAND1' IT_FFCUST-LAND1,

    ' ' 'KNA1-SPRAS' IT_FFCUST-SPRAS,

    'X' 'SAPMFO2D' '0120',

    ' ' 'BDC_OKCODE' '/00',

    'X' 'SAPMF02D' '0125',

    ' ' 'BDC_OKCODE' '/00',

    'X' 'SAPMF02D' '0130',

    ' ' 'BDC_OKCODE' '=ENTR',

    'X' 'SAPMF02D' '0340',

    ' ' 'BDC_OKCODE' '=ENTR',

    'X' 'SAPMF02D' '0360',

    ' ' 'BDC_OKCODE' '=ENTR',

    'X' 'SAPMF02D' '0210',

    ' ' 'KNB1-AKONT' IT_FFCUST-AKONT,

    ' ' 'BDC_OKCODE' '/00',

    'X' 'SAPMF02D' '0215',

    ' ' 'BDC_OKCODE' '/00',

    'X' 'SAPMF02D' '0220',

    ' ' 'BDC_OKCODE' '/00',

    'X' 'SAPMF02D' '0230',

    ' ' 'BDC_OKCODE' '=UPDA'.

    *--Calling the transaction 'fd01'.

    CALL TRANSACTION 'FD01' USING IT_CUSTBDC MODE 'N' UPDATE 'S'

    MESSAGES INTO IT_CUSTMSG.

    IF SY-SUBRC <> 0.

    *--Populating the error records internal table.

    IT_ERRCUST-KUNNR = IT_FFCUST-KUNNR.

    APPEND IT_ERRCUST.

    CLEAR IT_ERRCUST.

    *--Opening a session if there is an error record.

    IF V_FLAG1 = ' '.

    PERFORM FORM_OPENSESSION.

    V_FLAG1 = 'X'.

    ENDIF.

    *--Inserting the error records into already open session.

    IF V_FLAG1 = 'X'.

    PERFORM FORM_INSERT.

    ENDIF.

    *--Populating the Success records internal table.

    ELSE.

    IT_SUCCUST-KUNNR = IT_FFCUST-KUNNR.

    APPEND IT_SUCCUST.

    CLEAR IT_SUCCUST.

    ENDIF.

    *--Displaying the messages.

    IF NOT IT_CUSTMSG[] IS INITIAL.

    PERFORM FORM_FORMATMSG.

    ENDIF.

    *--Clearing the message and bdc tables.

    CLEAR : IT_CUSTBDC[],IT_CUSTMSG[].

    ENDLOOP.

    *--Getting the total no of error records.

    DESCRIBE TABLE IT_ERRCUST LINES V_ELINES.

    *--Getting the total no of successful records.

    DESCRIBE TABLE IT_SUCCUST LINES V_SLINES.

    *--Closing the session only if it is open.

    IF V_FLAG1 = 'X'.

    PERFORM FORM_CLOSESESS.

    ENDIF.

    ENDFORM. " Form_bdcgenerate

    &----


    *& Form populatebdc

    &----


    • FOrm to Populate the BDC table.

    ----


    FORM POPULATEBDC USING VALUE(P_0178)

    VALUE(P_0179)

    VALUE(P_0180).

    IF P_0178 = 'X'.

    IT_CUSTBDC-PROGRAM = P_0179.

    IT_CUSTBDC-DYNPRO = P_0180.

    IT_CUSTBDC-DYNBEGIN = 'X'.

    ELSE.

    IT_CUSTBDC-FNAM = P_0179.

    IT_CUSTBDC-FVAL = P_0180.

    ENDIF.

    APPEND IT_CUSTBDC.

    CLEAR IT_CUSTBDC.

    ENDFORM. " populatebdc

    &----


    *& Form FORM_OPENSESSION

    &----


    • Form to Open a session.

    ----


    FORM FORM_OPENSESSION .

    *--Variable to convert the given session name into reqd type.

    DATA : LV_SESNAM(12).

    LV_SESNAM = V_SESNAM.

    *--Opening a session.

    CALL FUNCTION 'BDC_OPEN_GROUP'

    EXPORTING

    CLIENT = SY-MANDT

    GROUP = LV_SESNAM

    HOLDDATE = '20040805'

    KEEP = 'X'

    USER = SY-UNAME

    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.

    WRITE :/ 'Session not open'.

    ENDIF.

    ENDFORM. " FORM_OPENSESSION

    &----


    *& Form FORM_INSERT

    &----


    • fORM TO INSERT ERROR RECOED INTO A SESSION.

    ----


    FORM FORM_INSERT .

    *--Inserting the record into session.

    CALL FUNCTION 'BDC_INSERT'

    EXPORTING

    TCODE = 'FD01'

    • POST_LOCAL = NOVBLOCAL

    • PRINTING = NOPRINT

    • SIMUBATCH = ' '

    • CTUPARAMS = ' '

    TABLES

    DYNPROTAB = IT_CUSTBDC

    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 :/ 'Unable to insert the record'.

    ENDIF.

    ENDFORM. " FORM_INSERT

    &----


    *& Form FORM_CLOSESESS

    &----


    • Form to Close the Open Session.

    ----


    FORM FORM_CLOSESESS .

    CALL FUNCTION 'BDC_CLOSE_GROUP'

    EXCEPTIONS

    NOT_OPEN = 1

    QUEUE_ERROR = 2

    OTHERS = 3.

    IF SY-SUBRC <> 0.

    ENDIF.

    ENDFORM. " FORM_CLOSESESS

    &----


    *& Form FORM_FORMATMSG

    &----


    • Form to format messages.

    ----


    FORM FORM_FORMATMSG .

    *--Var to store the formatted msg.

    DATA : LV_MSG(255).

    CALL FUNCTION 'FORMAT_MESSAGE'

    EXPORTING

    ID = SY-MSGID

    LANG = SY-LANGU

    NO = SY-MSGNO

    V1 = SY-MSGV1

    V2 = SY-MSGV2

    V3 = SY-MSGV3

    V4 = SY-MSGV4

    IMPORTING

    MSG = LV_MSG

    EXCEPTIONS

    NOT_FOUND = 1

    OTHERS = 2.

    IF SY-SUBRC = 0.

    WRITE :/ LV_MSG.

    ENDIF.

    ULINE.

    ENDFORM. " FORM_FORMATMSG

    &----


    *& Form form_writeop

    &----


    • To write the totals and the session name.

    ----


    FORM FORM_WRITEOP .

    WRITE :/ 'Total Records Uploaded :',V_TLINES,

    / 'No of Error Records :',V_ELINES,

    / 'No of Success Records :',V_SLINES,

    / 'Name of the Session :',V_SESNAM.

    ULINE.

    ENDFORM. " form_writeop

    Add a comment
    10|10000 characters needed characters exceeded

Before answering

You should only submit an answer when you are proposing a solution to the poster's problem. If you want the poster to clarify the question or provide more information, please leave a comment instead, requesting additional details. When answering, please include specifics, such as step-by-step instructions, context for the solution, and links to useful resources. Also, please make sure that you answer complies with our Rules of Engagement.
You must be Logged in to submit an answer.

Up to 10 attachments (including images) can be used with a maximum of 1.0 MB each and 10.5 MB total.