Application Development 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: 

write BAPI return messages into text

former_member1302095
Participant
0 Kudos

Dear experts,

              I want to write error messages into a text file. i tried in many ways like, using GUI_DOWNLOAD i converted messages to non sap but it creates only empty text file. Is there any other function module in sap?

14 REPLIES 14

FredericGirod
Active Contributor
0 Kudos

Hi,

did you try function RPY_MESSAGE_COMPOSE  ?

regards

Fred

former_member196651
Contributor
0 Kudos

Hi Remya,

First you have to store the BAPI messages to an internal table of type TDLINE. Then you use the GUI_DOWNLOAD with the file name & location.

CALL FUNCTION 'GUI_DOWNLOAD'

           EXPORTING

             filename                = lv_dfile

             write_field_separator   = 'X'

           TABLES

             data_tab                = t_download

           EXCEPTIONS

             file_write_error        = 1

             no_batch                = 2

             gui_refuse_filetransfer = 3

             invalid_type            = 4

             no_authority            = 5

             unknown_error           = 6

             header_not_allowed      = 7

             separator_not_allowed   = 8

             filesize_not_allowed    = 9

             header_too_long         = 10

             dp_error_create         = 11

             dp_error_send           = 12

             dp_error_write          = 13

             unknown_dp_error        = 14

             access_denied           = 15

             dp_out_of_memory        = 16

             disk_full               = 17

             dp_timeout              = 18

             file_not_found          = 19

             dataprovider_exception  = 20

             control_flush_error     = 21

             OTHERS                  = 22.


Here LV_FILE contains the file name & location to download and T_DOWNLOAD contains the messages. This works fine for me.


Regards,

Abijith

Tomas_Buryanek
Active Contributor

And where exactly you have problem? Getting message text or saving text to file? If your code does not work, we can not tell why if you don't show it to us.

Anyway, message text is usually in field: BAPIRET2-MESSAGE. If not, you can save it to string using syntax MESSAGE ..... INTO l_string. Then it is just simplest file download.

-- Tomas --

former_member1302095
Participant
0 Kudos

it_return like bapiret2 OCCURS 0 WITH HEADER LINE


CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'

   EXPORTING

     headdata                  = BAPIMATHEAD

    CLIENTDATA                 = bapi_mara

    CLIENTDATAX                = bapi_marax

    PLANTDATA                  = BAPI_MARC

    PLANTDATAX                = BAPI_MARCX

    IMPORTING

    RETURN                     = it_RETURN

  TABLES

    MATERIALDESCRIPTION        = IT_BAPI .

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'  .

WRITE : /1 IT_RETURN-ID, 10 IT_RETURN-TYPE, 20 IT_RETURN-NUMBER, 25 IT_RETURN-MESSAGE.

it shows error messages, when am trying to download in text file, it doesn't write anything.

am simply trying to download error messages in text file.

0 Kudos

did you try to convert the it_return using the fm RPY_MESSAGE_COMPOSE, to get a text. and save this text into a file ?

0 Kudos

am trying with it.. progress..

0 Kudos

Hello Remya,

Can you provide us a sample of your code to see where you are actually going wrong?

Thanks.

former_member214915
Participant
0 Kudos

Hi remya,

               You can try with following FM,

Formatting error messages by below FM

LOOP AT it_messtab.

  CALL FUNCTION 'FORMAT_MESSAGE'

    EXPORTING

      id     = it_messtab-msgid

      lang   = it_messtab-msgspra

      no     = it_messtab-msgnr

      v1     = it_messtab-msgv1

      v2     = it_messtab-msgv2

    IMPORTING

    msg    =  g_msg

  EXCEPTIONS

      OTHERS = 0.

 

  IF it_messtab-msgtyp = 'E'.

    it_error-error_rec = g_msg.

    it_error-lifnr         = it_header-lifnr.

    it_error-tabix       = v_lines.

    APPEND it_error.

 

ENDLOOP.

and then use following FM

           CALL FUNCTION 'GUI_DOWNLOAD'

           EXPORTING

             filename                = text_file

             write_field_separator   = 'X'

           TABLES

             data_tab                = it_error

           EXCEPTIONS

             file_write_error        = 1

             no_batch                = 2

             gui_refuse_filetransfer = 3

             invalid_type            = 4

             no_authority            = 5

             unknown_error           = 6

             header_not_allowed      = 7

             separator_not_allowed   = 8

             filesize_not_allowed    = 9

             header_too_long         = 10

             dp_error_create         = 11

             dp_error_send           = 12

             dp_error_write          = 13

             unknown_dp_error        = 14

             access_denied           = 15

             dp_out_of_memory        = 16

             disk_full               = 17

             dp_timeout              = 18

             file_not_found          = 19

             dataprovider_exception  = 20

             control_flush_error     = 21

             OTHERS                  = 22.



Regards,

Shahezad

former_member1302095
Participant
0 Kudos

Thanks Guys, here is my sample code...


tables:bapimathead,

        bapi_makt,

        bapi_mara,

        bapi_marax,

        bapi_marc,

        BAPI_MARCX.

data:begin of itab occurs 0,

       MATERIAL type BAPIMATHEAD-MATERIAL,

       IND_SECTOR TYPE BAPIMATHEAD-IND_SECTOR,

       MATL_TYPE type bapimathead-MATL_TYPE,

       PLANT type BAPI_MARC-PLANT,

       MATL_DESC TYPE BAPI_MAKT-MATL_DESC,

       BASE_UOM TYPE bapi_mara-BASE_UOM,

       MATL_GROUP type bapi_mara-MATL_GROUP,

*      OLD_MAT_NO TYPE BAPI_MARA-OLD_MAT_NO,

*      DIVISION TYPE BAPI_MARA-DIVISION,

*      UNIT_OF_WT TYPE BAPI_MARA-UNIT_OF_WT,

*      NET_WEIGHT TYPE BAPI_MARA-NET_WEIGHT,

*      DOCUMENT TYPE BAPI_MARA-DOCUMENT,

*      DOC_TYPE TYPE BAPI_MARA-DOC_TYPE,

       LANGU TYPE BAPI_MAKT-LANGU,

       PUR_GROUP TYPE BAPI_MARC-PUR_GROUP,

       MRP_TYPE TYPE BAPI_MARC-MRP_TYPE,

       MRP_CTRLER TYPE BAPI_MARC-MRP_CTRLER,

       LOTSIZEKEY TYPE BAPI_MARC-LOTSIZEKEY,

       PLND_DELRY TYPE BAPI_MARC-PLND_DELRY,

       SM_KEY TYPE BAPI_MARC-SM_KEY,

       end of itab.

DATA:    it_RETURN like bapiret2 OCCURS 0 WITH HEADER LINE,

          IT_BAPI LIKE BAPI_MAKT OCCURS 0 WITH HEADER LINE,

          IT_MSG LIKE TLINE OCCURS 0 WITH HEADER LINE.

parameters:p_file TYPE IBIPPARMS-PATH obligatory.

at selection-screen on value-request for p_file.

perform get_f4help.

start-of-selection.

perform upload_file_itab.

perform call_bapi.

*END-OF-SELECTION.

*PERFORM ERROR.

*&---------------------------------------------------------------------*

*&      Form  get_f4help

*&---------------------------------------------------------------------*

form get_f4help .

CALL FUNCTION 'F4_FILENAME'

  EXPORTING

    PROGRAM_NAME        = SYST-CPROG

    DYNPRO_NUMBER       = SYST-DYNNR

  IMPORTING

    FILE_NAME           = P_FILE  .

endform.                    " get_f4help

*&---------------------------------------------------------------------*

*&      Form  upload_file_itab

*&---------------------------------------------------------------------*

form upload_file_itab .

DATA:V_FILE TYPE STRING.

MOVE P_FILE TO V_FILE.

CALL FUNCTION 'GUI_UPLOAD'

   EXPORTING

    filename                      = V_FILE

    FILETYPE                      = 'ASC'

    HAS_FIELD_SEPARATOR           = 'X'

   TABLES

     data_tab                      = ITAB .

endform.                    " upload_file_itab

*&---------------------------------------------------------------------*

*&      Form  call_bapi

*&---------------------------------------------------------------------*

form call_bapi .

loop at itab.

BAPIMATHEAD-material = itab-MATERIAL.

bapimathead-IND_SECTOR = itab-IND_SECTOR.

BAPIMATHEAD-MATL_TYPE = itab-MATL_TYPE.

BAPIMATHEAD-BASIC_VIEW = 'X'.

BAPIMATHEAD-PURCHASE_VIEW = 'X'.

BAPIMATHEAD-MRP_VIEW = 'X'.

bapi_mara-MATL_GROUP = itab-MATL_GROUP.

bapi_mara-base_uom = itab-base_uom.

*BAPI_MARA-OLD_MAT_NO = ITAB-OLD_MAT_NO.

bapi_marax-MATL_GROUP = 'X'.

bapi_marax-BASE_UOM = 'X'.

*BAPI_MARA-DIVISION = ITAB-DIVISION.

*BAPI_MARA-UNIT_OF_WT = ITAB-UNIT_OF_WT.

*BAPI_MARA-NET_WEIGHT = ITAB-NET_WEIGHT.

*BAPI_MARA-DOCUMENT = ITAB-DOCUMENT.

*BAPI_MARA-DOC_TYPE = ITAB-DOC_TYPE.

IT_BAPI-LANGU = ITAB-LANGU.

IT_BAPI-LANGU_ISO = 'EN'.

IT_BAPI-MATL_DESC = ITAB-MATL_DESC.

BAPI_MARC-PLANT = ITAB-PLANT.

BAPI_MARC-PUR_GROUP = ITAB-PUR_GROUP.

BAPI_MARC-MRP_TYPE = ITAB-MRP_TYPE.

BAPI_MARC-MRP_CTRLER = ITAB-MRP_CTRLER.

BAPI_MARC-LOTSIZEKEY = ITAB-LOTSIZEKEY.

BAPI_MARC-PLND_DELRY = ITAB-PLND_DELRY.

BAPI_MARC-SM_KEY = ITAB-SM_KEY.

BAPI_MARCX-PLANT = 'X'.

BAPI_MARCX-PUR_GROUP = 'X'.

BAPI_MARCX-MRP_TYPE = 'X'.

BAPI_MARCX-MRP_CTRLER = 'X'.

BAPI_MARCX-LOTSIZEKEY = 'X'.

BAPI_MARCX-PLND_DELRY = 'X'.

BAPI_MARCX-SM_KEY = 'X'.

APPEND IT_BAPI.

clear it_bapi.

CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'

   EXPORTING

     headdata                  = BAPIMATHEAD

    CLIENTDATA                 = bapi_mara

    CLIENTDATAX                = bapi_marax

    PLANTDATA                  = BAPI_MARC

    PLANTDATAX                = BAPI_MARCX

    IMPORTING

    RETURN                     = it_RETURN

  TABLES

    MATERIALDESCRIPTION        = IT_BAPI .

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'  .

LOOP AT IT_RETURN.

CALL FUNCTION 'RPY_MESSAGE_COMPOSE'

   EXPORTING

    LANGUAGE                = SY-LANGU

     MESSAGE_ID              = IT_RETURN-ID

     MESSAGE_NUMBER          = IT_RETURN-NUMBER

  IMPORTING

    MESSAGE_TEXT            = IT_RETURN-MESSAGE

  TABLES

    LONGTEXT                = IT_MSG

           .

IF SY-SUBRC <> 0.

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

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

ENDIF.

.

ENDLOOP.

CALL FUNCTION 'GUI_DOWNLOAD'

   EXPORTING

*   BIN_FILESIZE                    =

    FILENAME                        = 'D:/DEMO.TXT'

    FILETYPE                        = 'ASC'

*   APPEND                          = ' '

*   WRITE_FIELD_SEPARATOR           = ' '

* IMPORTING

*   FILELENGTH                      =

   TABLES

     DATA_TAB                        = IT_RETURN

*   FIELDNAMES                      =

  EXCEPTIONS

    FILE_WRITE_ERROR                = 1

    NO_BATCH                        = 2

    GUI_REFUSE_FILETRANSFER         = 3

    INVALID_TYPE                    = 4

    NO_AUTHORITY                    = 5

    UNKNOWN_ERROR                   = 6

    HEADER_NOT_ALLOWED              = 7

    SEPARATOR_NOT_ALLOWED           = 8

    FILESIZE_NOT_ALLOWED            = 9

    HEADER_TOO_LONG                 = 10

    DP_ERROR_CREATE                 = 11

    DP_ERROR_SEND                   = 12

    DP_ERROR_WRITE                  = 13

    UNKNOWN_DP_ERROR                = 14

    ACCESS_DENIED                   = 15

    DP_OUT_OF_MEMORY                = 16

    DISK_FULL                       = 17

    DP_TIMEOUT                      = 18

    FILE_NOT_FOUND                  = 19

    DATAPROVIDER_EXCEPTION          = 20

    CONTROL_FLUSH_ERROR             = 21

    OTHERS                          = 22

           .

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 : /1 IT_RETURN-ID, 10 IT_RETURN-TYPE, 20 IT_RETURN-NUMBER, 25 IT_RETURN-MESSAGE.

ENDLOOP.

ENDFORM.

Text file generated and getting message like 0 bytes transferred.

0 Kudos

Hi Remya,

problems in your code:

1) please don´t use internal tables with header lines, they are obsolete! And in your case probably causing problem. You would need probably pass it_return[] to GUI_DOWNLOAD to make it work...

EDIT: I did little test and GUI_DOWNLOAD accepts header line itab (still recommend dont use them), so your it_return is probably empty?

2) As I already wrote here. BAPI returns complete message texts probably in it_return-message (BAPIs usually fill it). So you don't need use RPY_MESSAGE_COMPOSE... please check in debugger.

3) Your logic processing it_return after bapi call seems wrong. You should fill message variables 1-4, nt only MSG id and class. And there should be "modify it_return" in that loop so you actually fill it_return-message... (which is probably already filled as I wrote in 2) )...

4) debugger is best ABAP developer friend

-- Tomas --

0 Kudos

the internal table has no header line error.

0 Kudos

Sorry, I don't understand.

Message "0 bytes transferred" indicates that your data_tab might be empty. Check if you have data in it_return table => breakpoint on CALL FUNCTION 'GUI_DOWNLOAD' and check it_return[] content (not header line)...

This should work without problem:


DATA: lt_data TYPE TABLE OF bapiret2,

          ls_data LIKE LINE OF lt_data.

ls_data-message = 'abc test'.

APPEND ls_data to LT_data.

CALL FUNCTION 'GUI_DOWNLOAD'

   EXPORTING

    FILENAME                        = 'D:/DEMO.TXT'

   TABLES

     DATA_TAB                        = lt_data

  EXCEPTIONS

    OTHERS                          = 22.

-- Tomas --

thangam_perumal
Contributor
0 Kudos

Hi Remya ,

                   Please see execute attached code.. it may give cleared idea to you

REPORT Z_SALESORDERMIKE.

data:begin of it occurs 0,
       grp type c,
       val type i,
      end of it.
data:begin of heading occurs 0,
       TEXT(10) type c,
      end of heading.
DATA  fullpath type string.
DATA  path type string.
DATA  filename type string.
      it-grp = 'A'.
      it-val = 100.
      append it.
      it-grp = 'B'.
      it-val = 200.
      append it.
      heading-text = 'GROUP'.
      append heading.
      heading-text = 'VALUE'.
      append heading.

cl_gui_frontend_services=>file_save_dialog(
        exporting
         window_title          = 'SAVE PDF'

          file_filter          = 'txt|*.txt|(All file)|*.*'
        changing
          filename             = filename
         path                  = path
          fullpath             = fullpath
        exceptions
         cntl_error           = 1
         error_no_gui         = 2
         not_supported_by_gui = 3
         others               = 4
                     ) .
      call function 'GUI_DOWNLOAD'
        exporting
          filename                        = fullpath
          FILETYPE                        = 'DAT'
          WRITE_FIELD_SEPARATOR           = '#'
          SHOW_TRANSFER_STATUS            = 'X'
        tables
          data_tab                        = it[]
         FIELDNAMES                      = heading[]
       EXCEPTIONS
         FILE_WRITE_ERROR                = 1
         NO_BATCH                        = 2
         GUI_REFUSE_FILETRANSFER         = 3
         INVALID_TYPE                    = 4
         NO_AUTHORITY                    = 5
         UNKNOWN_ERROR                   = 6
         HEADER_NOT_ALLOWED              = 7
         SEPARATOR_NOT_ALLOWED           = 8
         FILESIZE_NOT_ALLOWED            = 9
         HEADER_TOO_LONG                 = 10
         DP_ERROR_CREATE                 = 11
         DP_ERROR_SEND                   = 12
         DP_ERROR_WRITE                  = 13
         UNKNOWN_DP_ERROR                = 14
         ACCESS_DENIED                   = 15
         DP_OUT_OF_MEMORY                = 16
         DISK_FULL                       = 17
         DP_TIMEOUT                      = 18
         FILE_NOT_FOUND                  = 19
         DATAPROVIDER_EXCEPTION          = 20
         CONTROL_FLUSH_ERROR             = 21
         OTHERS                          = 22
                .
      if sy-subrc <> 0.
          MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      endif.




Regards,


   Thangam.P

former_member1302095
Participant
0 Kudos

thanks to all. its resolved now.