0

I have an oData service for File Download functionality. I have to include $value parameter to oData call to trigger GET_Stream at backend. I see with an external breakpoint on get_stream method, that the method is triggered. But the file download doesn't work. I get a HTTP response 200 which means it is all OK but I don't see any data or row of information. The response in /IWFND/GW_CLIENT is empty. So I debug and see that at the end of the get_stream method there is a parameter changing with these lines:

COPY_DATA_TO_REF( 
EXPORTING IS_DATA = LS_STREAM 
CHANGING CR_DATA = ER_STREAM)

In ls_stream there should be two columns (column1 and column2). One of the columns is set and the other is empty. No matter what value I give to column2, it is still empty. Maybe I don't get any information at /IWFND/GW_CLIENT request because the parameter column2 is empty? Can you give me a suggestion?

My redefined methods are:

  • _DPC_EXT:
    • /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_STREAM
    • ATTACHMENTSET_GET_ENTITYSET
  • _MPC_EXT:
    • DEFINE
Sandra Rossi
  • 11,934
  • 5
  • 22
  • 48
Kirve
  • 13
  • 2
  • 8
  • 3
    Can you share more detail? What is your logic for fill ls_stream? How are you calling get_stream URL? What is your mpc_ext content? – Eray Dec 17 '21 at 10:25
  • Hey firstly my Data Model. – Kirve Dec 19 '21 at 13:24
  • Hey firstly my Data Model: 1 entity type called file and few properties. 1 property is ther important filename which is a key field. I call a https GET request with gwclient with the following uri: https://hostname/sap/opu/odata/sap/service/fileset?$filter=salesorder eq '65556'. This request works and I get some Data regarding to te salesorder. After that I make another GET request: /.../fileset('filename')/$value. Here I should get a pdf file in text format. But I get no error and there is only a empty page in gwclient – Kirve Dec 19 '21 at 13:36
  • Get stream method in .dpc_ext class. There is some data dexlarations and read and select queries. After select there is a call function 'scms_binary_to_xstring'. And in the end there is a COPY_DATA_TO_REF( EXPORTING IS_DATA = LS_STREAM CHANGING CR_DATA = ER_STREAM) – Kirve Dec 19 '21 at 13:41
  • In mpc_ext there is only one redefined method called DEFINE. It has some sample code snippet that I find in internet. – Kirve Dec 19 '21 at 13:42
  • all these details you should put in the question formatted properly, it is hard to read it in comments. Also, why do you have both EXPORTING and CHANGING parameters of the same type (I assume). you can use changing param both for passing input and returning result – Suncatcher Dec 20 '21 at 12:52
  • You can check your steps from this [link](https://answers.sap.com/questions/10892561/generate-pdf-file-in-backend-and-send-it-to-sap-ga.html). Sorry but your explanation too complicated. I couldn't understand it. – Eray Dec 21 '21 at 11:18

1 Answers1

0

I'm not sure what are these two components column1 and column2 you are referring to...

To return a PDF, you must define the entity type as being "Media" (checkbox), and transfer the PDF through the type /iwbep/if_mgw_appl_types=>ty_s_media_resource (components value of type XSTRING and mime_type).

More information in SAP Library > SAP Gateway Foundation Developer Guide > Media Links.

Example:

  • OData service ZGETPDF, with entity type File of type "Media" (and entity set FileSet)
  • URL to query the PDF: https://server.company.com:44322/sap/opu/odata/sap/ZGETPDF_SRV/FileSet('notused.pdf')/$value
  • ZCL_ZGETPDF_DPC_EXT class:
    • GET_STREAM method:
        METHOD /iwbep/if_mgw_appl_srv_runtime~get_stream.
          DATA: ls_stream TYPE /iwbep/if_mgw_appl_types=>ty_s_media_resource.
          ls_stream-value = get_dummy_pdf( ).
          ls_stream-mime_type = 'application/pdf'.
          copy_data_to_ref( EXPORTING is_data = ls_stream
                            CHANGING  cr_data = er_stream ).
        ENDMETHOD.
      
    • Code to get a dummy PDF (any PDF, just for demo):
        METHODS get_dummy_pdf RETURNING VALUE(result) TYPE xstring.
      ...
      METHOD get_dummy_pdf.
        " PDF from http://www.tagg.org/pdftest.pdf University of Liverpool
        DATA(base64_string) =
               'JVBERi0xLjIgDQol4uPP0w0KIA0KOSAwIG9iag0KPDwNCi9MZW5ndGggMTAgMCBSDQovRmlsdGVyIC9GbGF0ZURlY29kZSANCj4+'
            && 'DQpzdHJlYW0NCkiJzZDRSsMwFIafIO/we6eyZuckTZPtbtIWBi0UjYKQGxFbJmpliuLb26QM8X6CJBfJyf99ycmFF6xJagWrrMxz'
            && 'wJeCEMd+gFjWBC1dLPeCJFkbl/fTKfwnTqt1CK0xIZyEwFYZ2T+fwT8KnmIxUmJinNKJyUiyW7mZVEQ6I54m2K3ZzFiupvgPaee7'
            && 'JHFuZqyDvxuGBbZdu8D1y+7jYf+2e//C2KOJm9dxfEqqTHMRXZlR0hRJuKwZau6EJa+MOdjpYN/gprq8xVW7aRp0ZY162ySbktoW'
            && 'vxpPZULGxJLSr+G4UuX+QHrcl/rz/2eqvPgGPPWhqg0KZW5kc3RyZWFtDQplbmRvYmoNCjEwIDAgb2JqDQoyNDYNCmVuZG9iag0K'
            && 'NCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDUgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YwIDYgMCBS'
            && 'IA0KL0YxIDcgMCBSIA0KPj4NCi9Qcm9jU2V0IDIgMCBSDQo+Pg0KL0NvbnRlbnRzIDkgMCBSDQo+Pg0KZW5kb2JqDQo2IDAgb2Jq'
            && 'DQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UcnVlVHlwZQ0KL05hbWUgL0YwDQovQmFzZUZvbnQgL0FyaWFsDQovRW5jb2Rp'
            && 'bmcgL1dpbkFuc2lFbmNvZGluZw0KPj4NCmVuZG9iag0KNyAwIG9iag0KPDwNCi9UeXBlIC9Gb250DQovU3VidHlwZSAvVHJ1ZVR5'
            && 'cGUNCi9OYW1lIC9GMQ0KL0Jhc2VGb250IC9Cb29rQW50aXF1YSxCb2xkDQovRmlyc3RDaGFyIDMxDQovTGFzdENoYXIgMjU1DQov'
            && 'V2lkdGhzIFsgNzUwIDI1MCAyNzggNDAyIDYwNiA1MDAgODg5IDgzMyAyMjcgMzMzIDMzMyA0NDQgNjA2IDI1MCAzMzMgMjUwIA0K'
            && 'Mjk2IDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAwIDUwMCAyNTAgMjUwIDYwNiA2MDYgNjA2IA0KNDQ0IDc0NyA3'
            && 'NzggNjY3IDcyMiA4MzMgNjExIDU1NiA4MzMgODMzIDM4OSAzODkgNzc4IDYxMSAxMDAwIDgzMyANCjgzMyA2MTEgODMzIDcyMiA2'
            && 'MTEgNjY3IDc3OCA3NzggMTAwMCA2NjcgNjY3IDY2NyAzMzMgNjA2IDMzMyA2MDYgDQo1MDAgMzMzIDUwMCA2MTEgNDQ0IDYxMSA1'
            && 'MDAgMzg5IDU1NiA2MTEgMzMzIDMzMyA2MTEgMzMzIDg4OSA2MTEgDQo1NTYgNjExIDYxMSAzODkgNDQ0IDMzMyA2MTEgNTU2IDgz'
            && 'MyA1MDAgNTU2IDUwMCAzMTAgNjA2IDMxMCA2MDYgDQo3NTAgNTAwIDc1MCAzMzMgNTAwIDUwMCAxMDAwIDUwMCA1MDAgMzMzIDEw'
            && 'MDAgNjExIDM4OSAxMDAwIDc1MCA3NTAgDQo3NTAgNzUwIDI3OCAyNzggNTAwIDUwMCA2MDYgNTAwIDEwMDAgMzMzIDk5OCA0NDQg'
            && 'Mzg5IDgzMyA3NTAgNzUwIA0KNjY3IDI1MCAyNzggNTAwIDUwMCA2MDYgNTAwIDYwNiA1MDAgMzMzIDc0NyA0MzggNTAwIDYwNiAz'
            && 'MzMgNzQ3IA0KNTAwIDQwMCA1NDkgMzYxIDM2MSAzMzMgNTc2IDY0MSAyNTAgMzMzIDM2MSA0ODggNTAwIDg4OSA4OTAgODg5IA0K'
            && 'NDQ0IDc3OCA3NzggNzc4IDc3OCA3NzggNzc4IDEwMDAgNzIyIDYxMSA2MTEgNjExIDYxMSAzODkgMzg5IDM4OSANCjM4OSA4MzMg'
            && 'ODMzIDgzMyA4MzMgODMzIDgzMyA4MzMgNjA2IDgzMyA3NzggNzc4IDc3OCA3NzggNjY3IDYxMSANCjYxMSA1MDAgNTAwIDUwMCA1'
            && 'MDAgNTAwIDUwMCA3NzggNDQ0IDUwMCA1MDAgNTAwIDUwMCAzMzMgMzMzIDMzMyANCjMzMyA1NTYgNjExIDU1NiA1NTYgNTU2IDU1'
            && 'NiA1NTYgNTQ5IDU1NiA2MTEgNjExIDYxMSA2MTEgNTU2IDYxMSANCjU1NiBdDQovRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZw0K'
            && 'L0ZvbnREZXNjcmlwdG9yIDggMCBSDQo+Pg0KZW5kb2JqDQo4IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnREZXNjcmlwdG9yDQovRm9u'
            && 'dE5hbWUgL0Jvb2tBbnRpcXVhLEJvbGQNCi9GbGFncyAxNjQxOA0KL0ZvbnRCQm94IFsgLTI1MCAtMjYwIDEyMzYgOTMwIF0NCi9N'
            && 'aXNzaW5nV2lkdGggNzUwDQovU3RlbVYgMTQ2DQovU3RlbUggMTQ2DQovSXRhbGljQW5nbGUgMA0KL0NhcEhlaWdodCA5MzANCi9Y'
            && 'SGVpZ2h0IDY1MQ0KL0FzY2VudCA5MzANCi9EZXNjZW50IDI2MA0KL0xlYWRpbmcgMjEwDQovTWF4V2lkdGggMTAzMA0KL0F2Z1dp'
            && 'ZHRoIDQ2MA0KPj4NCmVuZG9iag0KMiAwIG9iag0KWyAvUERGIC9UZXh0ICBdDQplbmRvYmoNCjUgMCBvYmoNCjw8DQovS2lkcyBb'
            && 'NCAwIFIgXQ0KL0NvdW50IDENCi9UeXBlIC9QYWdlcw0KL01lZGlhQm94IFsgMCAwIDYxMiA3OTIgXQ0KPj4NCmVuZG9iag0KMSAw'
            && 'IG9iag0KPDwNCi9DcmVhdG9yICgxNzI1LmZtKQ0KL0NyZWF0aW9uRGF0ZSAoMS1KYW4tMyAxODoxNVBNKQ0KL1RpdGxlICgxNzI1'
            && 'LlBERikNCi9BdXRob3IgKFVua25vd24pDQovUHJvZHVjZXIgKEFjcm9iYXQgUERGV3JpdGVyIDMuMDIgZm9yIFdpbmRvd3MpDQov'
            && 'S2V5d29yZHMgKCkNCi9TdWJqZWN0ICgpDQo+Pg0KZW5kb2JqDQozIDAgb2JqDQo8PA0KL1BhZ2VzIDUgMCBSDQovVHlwZSAvQ2F0'
            && 'YWxvZw0KL0RlZmF1bHRHcmF5IDExIDAgUg0KL0RlZmF1bHRSR0IgIDEyIDAgUg0KPj4NCmVuZG9iag0KMTEgMCBvYmoNClsvQ2Fs'
            && 'R3JheQ0KPDwNCi9XaGl0ZVBvaW50IFswLjk1MDUgMSAxLjA4OTEgXQ0KL0dhbW1hIDAuMjQ2OCANCj4+DQpdDQplbmRvYmoNCjEy'
            && 'IDAgb2JqDQpbL0NhbFJHQg0KPDwNCi9XaGl0ZVBvaW50IFswLjk1MDUgMSAxLjA4OTEgXQ0KL0dhbW1hIFswLjI0NjggMC4yNDY4'
            && 'IDAuMjQ2OCBdDQovTWF0cml4IFswLjQzNjEgMC4yMjI1IDAuMDEzOSAwLjM4NTEgMC43MTY5IDAuMDk3MSAwLjE0MzEgMC4wNjA2'
            && 'IDAuNzE0MSBdDQo+Pg0KXQ0KZW5kb2JqDQp4cmVmDQowIDEzDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDIxNzIgMDAwMDAg'
            && 'bg0KMDAwMDAwMjA0NiAwMDAwMCBuDQowMDAwMDAyMzYzIDAwMDAwIG4NCjAwMDAwMDAzNzUgMDAwMDAgbg0KMDAwMDAwMjA4MCAw'
            && 'MDAwMCBuDQowMDAwMDAwNTE4IDAwMDAwIG4NCjAwMDAwMDA2MzMgMDAwMDAgbg0KMDAwMDAwMTc2MCAwMDAwMCBuDQowMDAwMDAw'
            && 'MDIxIDAwMDAwIG4NCjAwMDAwMDAzNTIgMDAwMDAgbg0KMDAwMDAwMjQ2MCAwMDAwMCBuDQowMDAwMDAyNTQ4IDAwMDAwIG4NCnRy'
            && 'YWlsZXINCjw8DQovU2l6ZSAxMw0KL1Jvb3QgMyAwIFINCi9JbmZvIDEgMCBSDQovSUQgWzw0NzE0OTUxMDQzM2RkNDg4MmYwNWY4'
            && 'YzEyNDIyMzczND48NDcxNDk1MTA0MzNkZDQ4ODJmMDVmOGMxMjQyMjM3MzQ+XQ0KPj4NCnN0YXJ0eHJlZg0KMjcyNg0KJSVFT0YN'
            && 'CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
            && 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
            && 'AAAAAAAAAAAAAAAAAAAA'.
        CALL TRANSFORMATION ID SOURCE x = base64_string RESULT x = result.
      ENDMETHOD.
      

Question also discussed there.

Sandra Rossi
  • 11,934
  • 5
  • 22
  • 48
  • Hey thx, I know about the prerequisites. I have a entity type that is set as media. Then I have entityset and have already redefined the entitiset method. After that I had redefine the define method in mpc_ext class. My query in gw client is similar to yours. I found the problem but I dont understand it. The problem is that my variable ls_stream-value doesnt filled up in my getstream method. Doesnt matter what I code it still empty. E.g. – Kirve Jan 13 '22 at 22:24
  • My coding: METHOD /iwbep/if_mgw_appl_srv_runtime~get_stream. DATA: ls_stream TYPE /iwbep/if_mgw_appl_types=>ty_s_media_resource, ls_entity TYPE zcl_ebi_billing_doc_mpc=>ts_attachment, ls_images TYPE toa01, lt_images TYPE TABLE OF toa01, l_wa_document_data TYPE sofolenti1, lt_cont_hex TYPE TABLE OF solix, lv_xstring TYPE xstring, ls_lheader TYPE ihttpnvp, lv_filename TYPE string, lv_length TYPE i, lt_data TYPE TABLE OF tbl1024, ls_archive TYPE toa01, lv_attachment TYPE saeardoid, lv_doctype TYPE saearoname, wa_test TYPE toa01. – Kirve Jan 13 '22 at 22:30
  • FIELD-SYMBOLS: TYPE /iwbep/s_mgw_name_value_pair. READ TABLE it_key_tab ASSIGNING INDEX 1. lv_attachment = -value. SELECT SINGLE * FROM toa01 INTO CORRESPONDING FIELDS OF ls_archive WHERE arc_doc_id = lv_attachment. if ls_archive is not initial. "Now copy the binary data ls_stream-value = ls_archive-arc_doc_id. ls_stream-mime_type = ls_archive-reserve. copy_data_to_ref( exporting is_data = ls_stream changing cr_data = er_stream ) . – Kirve Jan 13 '22 at 22:30
  • Please ask a new question, it's not related to SAP Gateway. – Sandra Rossi Jan 14 '22 at 06:27
  • I get a error that I have reavhed my question limit – Kirve Jan 14 '22 at 10:09
  • Not sure about the question limit rules. Only 1 of 5 of your questions is marked as answered. Either you forgot to mark them "answered", or they are asked such a way they cannot be answered precisely (as per Stack Overflow rules). Maybe you can select one best answer or delete one of unanswered questions? – Sandra Rossi Jan 14 '22 at 13:13