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 and BDC session in same program

Former Member
0 Likes
1,134

Hello All,

I am using call transaction method to post the document and if the call transaction fails I need to create a BDC session for later processing and return the session ID. I am okay with the call trasaction part but I don't know how create a session if call trasaction fails. Can somebody please help me figure out this problem?

Thanks,

Chandu

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
878

Hi Chandu,

Take a look at the following code :

CALL TRANSACTION 'V-03' USING W_BDCDATA MODE 'N' UPDATE 'S'
                                 MESSAGES INTO W_MESSTAB.

* Si subrc <> 0 : Batch input
  IF SY-SUBRC <> 0.
    W_COMPT_ERR = W_COMPT_ERR + 1.
    IF W_COMPT_ERR EQ 1.
*      Open BI
       PERFORM TREAT_BDC TABLES WE_BDCDATA
                           USING P_BATCH ' ' 'O'. 

    ENDIF.
* Insert BI
  PERFORM TREAT_BDC TABLES WE_BDCDATA
                       USING ' ' 'V-03' 'I'.
  ELSE.
    REFRESH W_BDCDATA.
  ENDIF.

...


* closing of bi  session if created
  IF W_COMPT_ERR > '0'.
    PERFORM TREAT_BDC TABLES WE_BDCDATA
                          USING ' ' 'V-03' 'C'.
  ENDIF.



*-------------------------------------------------------*
*       FORM TREAT_BDC
**------------------------------------------------------
*     Error treatment creating a Bacth Input session
*------------------------------------------------------
*- wf_bdcdata: internal table type BDCDATA,       
*- wf_dossier:  Batch Input session name wf_trans:   
* transaction code    
*     - wf_mode: O, I, OR C. 
*----------------------------------------------------*
FORM TREAT_BDC TABLES WF_BDCDATA
                     USING WF_DOSSIER WF_TRANS WF_MODE.


* Open Batch Input
  IF WF_MODE = 'O'.
    CALL FUNCTION 'BDC_OPEN_GROUP'
       EXPORTING
              CLIENT              = SY-MANDT
*         DEST                = FILLER8
              GROUP               = WF_DOSSIER
*         HOLDDATE            = FILLER8
*         KEEP                = FILLER1
              USER                = SY-UNAME
*         RECORD              = FILLER1
*    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 E016 WITH WF_DOSSIER.
    ENDIF.

  ENDIF.


* Call BDC_INSERT
  IF WF_MODE = 'I'.
    CALL FUNCTION 'BDC_INSERT'
         EXPORTING
              TCODE            = 'V-03'
*         POST_LOCAL       = NOVBLOCAL
*         PRINTING         = NOPRINT
         TABLES
              DYNPROTAB        = W_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 E017 WITH WF_TRANS.
    ENDIF.
    REFRESH W_BDCDATA.
  ENDIF.


* Closing Batch Input
  IF WF_MODE = 'C'.
    CALL FUNCTION 'BDC_CLOSE_GROUP'
         EXCEPTIONS
              NOT_OPEN    = 1
              QUEUE_ERROR = 2
              OTHERS      = 3.

    IF SY-SUBRC <> 0.
      MESSAGE E018.
    ENDIF.
  ENDIF.
ENDFORM.

Hope it helps,

Erwan.

7 REPLIES 7
Read only

FredericGirod
Active Contributor
0 Likes
878

Hello,

call transaction ... using wt_bdcdata ...

if sy-subrc ne space.

call function 'BDC_OPEN_GROUP' ....

call function 'BDC_INSERT' ... (using wt_bdcdata)

call function 'BDC_CLOSE_GROUP' ....

endif.

and if you need to call the batch immediatly look at the program RSBDCSUB

Regards

Frédéric

Read only

0 Likes
878

Thank you very much Frederic.

Read only

0 Likes
878

If it helps, can u please reward me ?

Thanks.

Erwan.

Read only

0 Likes
878

Erwan,

I did try to reward you but I got some error message. how do I do that?

chandu

Read only

Former Member
0 Likes
879

Hi Chandu,

Take a look at the following code :

CALL TRANSACTION 'V-03' USING W_BDCDATA MODE 'N' UPDATE 'S'
                                 MESSAGES INTO W_MESSTAB.

* Si subrc <> 0 : Batch input
  IF SY-SUBRC <> 0.
    W_COMPT_ERR = W_COMPT_ERR + 1.
    IF W_COMPT_ERR EQ 1.
*      Open BI
       PERFORM TREAT_BDC TABLES WE_BDCDATA
                           USING P_BATCH ' ' 'O'. 

    ENDIF.
* Insert BI
  PERFORM TREAT_BDC TABLES WE_BDCDATA
                       USING ' ' 'V-03' 'I'.
  ELSE.
    REFRESH W_BDCDATA.
  ENDIF.

...


* closing of bi  session if created
  IF W_COMPT_ERR > '0'.
    PERFORM TREAT_BDC TABLES WE_BDCDATA
                          USING ' ' 'V-03' 'C'.
  ENDIF.



*-------------------------------------------------------*
*       FORM TREAT_BDC
**------------------------------------------------------
*     Error treatment creating a Bacth Input session
*------------------------------------------------------
*- wf_bdcdata: internal table type BDCDATA,       
*- wf_dossier:  Batch Input session name wf_trans:   
* transaction code    
*     - wf_mode: O, I, OR C. 
*----------------------------------------------------*
FORM TREAT_BDC TABLES WF_BDCDATA
                     USING WF_DOSSIER WF_TRANS WF_MODE.


* Open Batch Input
  IF WF_MODE = 'O'.
    CALL FUNCTION 'BDC_OPEN_GROUP'
       EXPORTING
              CLIENT              = SY-MANDT
*         DEST                = FILLER8
              GROUP               = WF_DOSSIER
*         HOLDDATE            = FILLER8
*         KEEP                = FILLER1
              USER                = SY-UNAME
*         RECORD              = FILLER1
*    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 E016 WITH WF_DOSSIER.
    ENDIF.

  ENDIF.


* Call BDC_INSERT
  IF WF_MODE = 'I'.
    CALL FUNCTION 'BDC_INSERT'
         EXPORTING
              TCODE            = 'V-03'
*         POST_LOCAL       = NOVBLOCAL
*         PRINTING         = NOPRINT
         TABLES
              DYNPROTAB        = W_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 E017 WITH WF_TRANS.
    ENDIF.
    REFRESH W_BDCDATA.
  ENDIF.


* Closing Batch Input
  IF WF_MODE = 'C'.
    CALL FUNCTION 'BDC_CLOSE_GROUP'
         EXCEPTIONS
              NOT_OPEN    = 1
              QUEUE_ERROR = 2
              OTHERS      = 3.

    IF SY-SUBRC <> 0.
      MESSAGE E018.
    ENDIF.
  ENDIF.
ENDFORM.

Hope it helps,

Erwan.

Read only

0 Likes
878

Thank you Erwin. I really appreciate your help.

Read only

Former Member
0 Likes
878

Hi Chandu,

After calling the call transaction i.e.

<b> call transaction tcode using bdcdata

mode ctumode

update cupdate

messages into messtab.</b>

Then perform this,

<b>loop at messtab.

if messtab-msgtyp ne 'S'.

<i>< call BDC_INSERT to create a session.></i>

endif.

endloop.</b>

When messtab-msgtyp is not equal to 'S' the recors have failed and hence a session will be created.

Hope that solves your problem.

Cheers

Kathir~