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

about errors in call transaction

Former Member
0 Likes
1,098

how will You handle errors in Call transaction?

how will You handle errors in Call transaction?

7 REPLIES 7
Read only

marcelo_ramos1
SAP Mentor
SAP Mentor
0 Likes
1,063

Hi,

If you are trying to run a Batch-input do as follow:

DATA: BDCDATA TYPE TABLE OF BDCDATA.                   
                                                       
DATA: ITAB TYPE TABLE OF BDCMSGCOLL.  "Returning Messages Table
                                                       
DATA: PROGRAM LIKE SY-REPID,                           
      WA_BDCDATA TYPE BDCDATA.                                                                                
WA_BDCDATA-PROGRAM  = 'SAPMS38M'.                      
WA_BDCDATA-DYNPRO   = '0100'.                          
WA_BDCDATA-DYNBEGIN = 'X'.                             
APPEND WA_BDCDATA TO BDCDATA.                          
CLEAR WA_BDCDATA.                                      
WA_BDCDATA-FNAM     = 'RS38M-PROGRAMM'.                
WA_BDCDATA-FVAL     = PROGRAM.                         
APPEND WA_BDCDATA TO BDCDATA.                          
...                                                    
CALL TRANSACTION 'SE38'  USING BDCDATA  MODE 'N'       
                         MESSAGES INTO ITAB.  "ITAB is filled with all returning Messages 

Regards.

Marcelo Ramos

Read only

Former Member
0 Likes
1,063

Sap recommends (or at least used to recommend) that the data that was used to create the incorrect call transaction be used to create a batch input session. The user can then correct it.

Rob

Read only

0 Likes
1,063

Hi Rob,

How to do create that error session in calltransaction. If you have any samplecode. Can you post that for me.

Its very urgent for me.

[email protected].

Read only

0 Likes
1,063

You can:


*& call transaction and capture results
  CLEAR sy_int.
  CALL TRANSACTION 'FM28' USING bdcdata MODE p_dmode UPDATE 'S'
                          MESSAGES INTO messtab.
  MOVE-CORRESPONDING sy TO sy_int.
  IF sy_int-subrc = 0.                 "fails
    tran_int-subrc = 0.
  ELSE.
    tran_int-subrc = 1.
    IF p_test NE 'X'.
      PERFORM batch_input USING 'FM28'.
    ENDIF.
  ENDIF.
  IF p_test NE 'X'.
    MOVE sy-msgv1 TO tran_int-doc#.
  ENDIF.
  IF p_test NE 'X'.
    MOVE sy-msgv1 TO tran_int-doc#.
  ENDIF.
  PERFORM get_message USING sy_int
                      CHANGING tran_int-text.

*&---------------------------------------------------------------------*
*&      Form  BATCH_INPUT                                   "FISK910031
*&---------------------------------------------------------------------*
*       Create a batch input sessions to process and analyze errors.   *
*----------------------------------------------------------------------*
FORM batch_input USING transaction.                         "FISK910031

  IF first_err = 'YES'.
    MOVE 'NO' TO first_err.
    PERFORM open_batch_session USING p_job.
  ENDIF.
  PERFORM insert_batch_session USING transaction.

ENDFORM.                               " BATCH_INPUT

*&---------------------------------------------------------------------*
*&      Form  OPEN_BATCH_SESSION                            "FISK910031
*&---------------------------------------------------------------------*
FORM open_batch_session USING group.                        "FISK910031
  CALL FUNCTION 'BDC_OPEN_GROUP'
       EXPORTING
            group               = group
            user                = sy-uname
       EXCEPTIONS
            client_invalid      = 01
            destination_invalid = 02
            group_invalid       = 03
            holddate_invalid    = 04
            internal_error      = 05
            queue_error         = 06
            running             = 07
            user_invalid        = 08.
  IF sy-subrc NE 0.
    MESSAGE e025 WITH 'Unable to open batch input session.'.
  ENDIF.
ENDFORM.                               " OPEN_BATCH_SESSION

*&---------------------------------------------------------------------*
*&      Form  INSERT_BATCH_SESSION                          "FISK910031
*&---------------------------------------------------------------------*
FORM insert_batch_session USING transaction.                "FISK910031
  CALL FUNCTION 'BDC_INSERT'
       EXPORTING
            tcode          = transaction
       TABLES
            dynprotab      = bdcdata
       EXCEPTIONS
            internal_error = 01
            not_open       = 02
            queue_error    = 03
            tcode_invalid  = 04.
  IF sy-subrc NE 0.
    MESSAGE e025 WITH 'Unable to insert batch input session.'.
  ENDIF.
ENDFORM.                               " INSERT_BATCH_SESSION

Rob

Read only

Former Member
0 Likes
1,063

Hi,

On the selection screen, you have an option Error Session in both Session & Call Transaction method. So, if you mention an error session name on the selection screen, whenever an error occurs, a session will be created and error data will be passed to that session. So, once your transaction is done, you can go to SM35 & can process that error session manually.

Reward points if the answer is helpful.

Regards,

Mukul

Read only

Former Member
0 Likes
1,063

hi,

check this example, in this we canget error messages and for error records we can open session and we can reprocess there

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.

Read only

Former Member
0 Likes
1,063

This is more easy and helpful to you...

Reward points

call transaction 'MI01' using itab_bdcdata mode 'A' MESSAGES INTO

ITAB_msg.

CLEAR itab_bdcdata[].

loop at itab_msg where msgtyp = 'S'.

break-point.

message i010(zmgs) with itab_msg-MSGV1.

docno = itab_msg-msgv1.

endloop.

regards