cancel
Showing results for 
Search instead for 
Did you mean: 

File UploadDownload from webdynpro to R/3.

Former Member
0 Kudos

Hi Vallery,

We have a scenario where we need to upload/download files of any type from webdynpro to Solution manager and viceversa. Our NWDS Version is 7.0.10. We are using file upload and file download UI Elements to achieve this. We have used the following test code to check uploading and dowloading an image file in an action.It works fine.

public void onActionuploadfile(com.sap.tc.webdynpro.progmodel.api.IWDCustomEvent wdEvent )

{

//@@begin onActionuploadfile(ServerEvent)

try

{

InputStream in=wdContext.currentContextElement().getFileup().read(true);

int i=0;

int size=in.available();

byte b[]=new byte[size];

//upload

in.read(b);

//get file uploaded values for download

IWDResource resource = WDResourceFactory.createResource(b, "sample", WDWebResourceType.GIF_IMAGE);

wdContext.currentContextElement().setFileResource(resource);

}

catch(Exception e)

{

wdComponentAPI.getMessageManager().reportException(""+e,true);

}

//@@end

}

There is a problem in sending the read byte content to R/3 as a string.So we tried to give the path of the uploaded file to GUI UPLOAD RFC.We couldn't execute the RFC from Web dynpro.From ABAP side the RFC can be executed successfully.

Kindly help me to enter the right content into the database(Raw data type) or to execute the GUI UPLOAD RFC.

Kindly also let us know ,what content should be passed to the RFC which accepts Raw data type.

Thanks in advance,

Krishnaveni.

Accepted Solutions (0)

Answers (2)

Answers (2)

sid_sunny
Contributor
0 Kudos

Hi Valery,

I think i am facing a some what similar problem i have 30KB of binary data which i want to pass to R3 i am successful in executing my BAPI but at the R3 end we are recieving only 1KB of data due to which we are unable to generate the file properly we are using <b>BAPI CONTENT TYPE 255</b> as the datatype at the R3 end to catch the binary content we have tried with XSTRING too still we are not able to get the complete data. can you tell what can be the issue.

Regards

Siddharth

Former Member
0 Kudos

Hi Sidhart,

I solved thi problem using XSTRING parameter in BAPI on ABAP side.

I have defined View for attachment input - File Upload element (binary type), File description field (string type), submit button.

All works - I import files grater than 20MB.

Here is source code of Save method -

public void mSaveFile( )

{

//@@begin mSaveFile()

//Sestavení záznamu pro zápis do R/3

// File_Content, File_Name, File_Extension, File_MIME, File_Description - do ZC4LIV_BAPI_INSERT_ATTACHMENT_INPUT

//IFilesElement row = wdContext.nodeFiles().createFilesElement();

IWDAttributeInfo attributeInfo1 = wdContext.getNodeInfo().getAttribute(IPrivateAddAttachment.IContextElement.TEMP__FILE__RESOURCE);

// get modifiable binary type from the attribute info, requires type cast.

IWDModifiableBinaryType binaryType1 = (IWDModifiableBinaryType) attributeInfo1.getModifiableSimpleType();

IPrivateAddAttachment.IContextElement element = wdContext.currentContextElement();

// if a file in the 'FileResource' attribute exists

if (element.getTemp_file_resource() != null) {

String mimeType = binaryType1.getMimeType().toString();

byte[] file = element.getInsertFile_BinContent();

// Set parameters for transfer to the R/3

wdContext.nodeZc4Liv_Bapi_Insert_Attachment_Input().moveFirst();

IPrivateAddAttachment.IZc4Liv_Bapi_Insert_Attachment_InputElement insertFileElement = wdContext.currentZc4Liv_Bapi_Insert_Attachment_InputElement();

if(element.getInsertFile_Description() == null)

{

element.setInsertFile_Description(binaryType1.getFileName());

}

insertFileElement.setIv_File_Bin_Content(element.getTemp_file_resource()); // File content

insertFileElement.setIv_File_Extension(binaryType1.getMimeType().getFileExtension()); // Extension

insertFileElement.setIv_File_Mimetype(binaryType1.getMimeType().getHtmlMime()); // Mime Type

insertFileElement.setIv_File_Name(binaryType1.getFileName()); // File name

insertFileElement.setIv_File_Description(element.getInsertFile_Description()); // File description

insertFileElement.setIv_Action("SAVE");

try {

wdThis.wdGetTMCZInvApprCustController().executeZC4LIV_BAPI_INSERT_ATTACHMENT();

if (wdContext.currentOutputElement().getEv_Retcode() == 0)

{

// Execute GetInvoice

wdThis.wdGetTMCZInvApprCustController().executeZC4LIV_BAPI_GETINVOICE_INPUT();

}

else

{

IWDMessageManager manager = wdComponentAPI.getMessageManager();

manager.reportException(wdThis.wdGetTMCZInvApprCustController().mgetMessageText("AttNotSaved"), true);

}

} catch (Exception e) {

//throw new WDRuntimeException(e);

// Nepoda&#345;ilo se p&#345;ílohu uložit (Save Error)

IWDMessageManager manager = wdComponentAPI.getMessageManager();

manager.reportException(e.getMessage(), true);

}

}

else

{

// No file inserted

// Message

IWDMessageManager manager = wdComponentAPI.getMessageManager();

manager.reportException(wdThis.wdGetTMCZInvApprCustController().mgetMessageText("AttNoFile"), true);

}

//@@end

}

good luck

Ondrej

0 Kudos

Hi Ondrej,

We are having the similar requirement and trying to send the document as a mail to the SAP Inbox from the Webdynpro.

Can you please post your BAPI Structure --> Import / Export / Table Parameters

Also the Context Elements of the Webdynpro Project --> Controller.

Appreciate your great help.

Regards

Sumanth

Former Member
0 Kudos

Hello Ondrej,

Could you please post the BAPI'S code? I need it to continue with your solution.

Thanks a lot,

Hernan Restrepo

Former Member
0 Kudos

Hi Hermann,

here is BAPI code, I hope it helps to you.

Ondrej

FUNCTION zc4liv_bapi_insert_attachment.

*"----

-


""Lokální rozhraní:

*" IMPORTING

*" VALUE(IV_OBJTYP) TYPE ORG_OBJTYP DEFAULT 'BUS2081'

*" VALUE(IV_OBJKEY) TYPE SWO_TYPEID OPTIONAL

*" VALUE(IV_WI_ID) TYPE SWW_WIID OPTIONAL

*" VALUE(IV_UNAME) TYPE SYUNAME DEFAULT SYST-UNAME

*" VALUE(IV_LANGU) TYPE LANGU DEFAULT SYST-LANGU

*" VALUE(IV_ACTION) TYPE TEXT40 DEFAULT 'Save'

*" VALUE(IV_FILE_BIN_CONTENT) TYPE XSTRING OPTIONAL

*" VALUE(IV_FILE_NAME) TYPE ZC4LIV_FILE_NAME OPTIONAL

*" VALUE(IV_FILE_EXTENSION) TYPE SAEDOKTYP OPTIONAL

*" VALUE(IV_FILE_MIMETYPE) TYPE W3CONTTYPE OPTIONAL

*" VALUE(IV_FILE_DESCRIPTION) TYPE ZC4LIV_FILE_DESCRIPTION

*" OPTIONAL

*" VALUE(IV_GET_FROM_DB) TYPE XFELD DEFAULT SPACE

*" EXPORTING

*" VALUE(EV_RETCODE) TYPE SYSUBRC

*" TABLES

*" ET_ARCHIVE_DOC_STRUCTURE STRUCTURE ZC4LIV_LN_TOAV0 OPTIONAL

*" ET_RETURN STRUCTURE BAPIRET2 OPTIONAL

*"----

-


DATA: lv_action TYPE text40,

ls_key_bus2081 TYPE zc4in_key_bus2081,

lt_toadd TYPE TABLE OF toadd,

ls_toadd TYPE toadd,

lt_toaom TYPE TABLE OF toaom,

ls_toaom TYPE toaom,

lt_toadv TYPE TABLE OF toadv,

ls_toadv TYPE toadv,

ls_toav0 TYPE toav0,

lv_url TYPE saeuri,

ls_attach TYPE zc4liv_attach,

lv_archiv_id LIKE toaar-archiv_id,

lv_arc_doc_id LIKE toav0-arc_doc_id,

lv_document_type LIKE toadd-doc_type,

lv_length LIKE sapb-length,

lv_length_i TYPE i,

lv_archiv_doc_id LIKE sapb-sapadokid,

lt_archivobject TYPE TABLE OF docs,

lv_doc_type TYPE saedoktyp,

lv_mime_type TYPE w3conttype.

gv_msg_objtyp = iv_objtyp.

gv_msg_objkey = iv_objkey.

  • gv_msg_state = '_APPR'.

gv_msg_funcname = 'ZC4LIV_BAPI_INSERT_ATTACHMENT'.

  • Break-point?

CALL FUNCTION 'ZC4SR_SUPPORT_BREAKPOINT'

EXPORTING

iv_bor = 'BUS2081'

iv_funcname = gv_msg_funcname

iv_rfc_call = abap_true.

  • Get invoice from DB

IF iv_get_from_db EQ abap_true.

CALL FUNCTION 'ZC4LIV_BAPI_GETINVOICE'

EXPORTING

iv_objtyp = iv_objtyp

iv_objkey = iv_objkey

iv_wi_id = iv_wi_id

iv_uname = iv_uname

iv_langu = iv_langu

iv_lock = abap_false

IMPORTING

ev_retcode = ev_retcode

TABLES

et_return = et_return.

CHECK ev_retcode EQ 0.

ENDIF.

  • Get invoice

IF iv_wi_id IS NOT INITIAL.

READ TABLE gt_invoice_data INTO gs_invoice_data

WITH KEY wi_id = iv_wi_id.

IF syst-subrc NE 0.

fill_message zc4in_msgid zc4in_msgty_error '028'

iv_wi_id space space space.

SET EXTENDED CHECK OFF.

IF 1 EQ 2.

MESSAGE e028.

ENDIF.

SET EXTENDED CHECK ON.

set_retcode.

ENDIF.

MOVE-CORRESPONDING gs_invoice_data-s_rbkpv TO ls_key_bus2081.

gv_msg_objtyp = 'BUS2081'.

gv_msg_objkey = ls_key_bus2081.

ELSE.

MOVE iv_objkey TO ls_key_bus2081.

READ TABLE gt_invoice_data INTO gs_invoice_data

WITH KEY s_rbkpv-belnr = ls_key_bus2081-belnr

s_rbkpv-gjahr = ls_key_bus2081-gjahr.

IF syst-subrc NE 0.

fill_message zc4in_msgid zc4in_msgty_error '011'

ls_key_bus2081-belnr

ls_key_bus2081-gjahr

space space.

SET EXTENDED CHECK OFF.

IF 1 EQ 2.

MESSAGE e011.

ENDIF.

SET EXTENDED CHECK ON.

set_retcode.

ENDIF.

ENDIF.

  • Get customizing

REFRESH: lt_toadd, lt_toadv.

SELECT * FROM toadd

INTO ls_toadd.

TRANSLATE ls_toadd-mimetype TO LOWER CASE.

APPEND ls_toadd TO lt_toadd.

ENDSELECT.

SELECT * FROM toaom

INTO TABLE lt_toaom

WHERE sap_object EQ gv_msg_objtyp

AND ar_status EQ abap_true.

SELECT * FROM toadv

INTO TABLE lt_toadv

FOR ALL ENTRIES IN lt_toaom

WHERE ar_object EQ lt_toaom-ar_object.

  • Process action

MOVE iv_action TO lv_action.

TRANSLATE lv_action TO UPPER CASE.

CASE lv_action.

WHEN 'SAVE'.

  • Insert Attachment

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

  • Tato &#269;ást kódu musí provést vytvo&#345;ení p&#345;ílohy v IXOSu

  • a navrátit zp&#283;t v tabulce ET_ARCHIVE_DOC_STRUCTURE

  • &#345;ádek s odkazem na p&#345;ílohu. Struktura &#345;ádku je totožná

  • se strukturou v ZC4LIV_BAPI_GET_INVOICE

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

  • Parameter IV_BIN_CONEXT have to exist!

IF iv_file_bin_content IS INITIAL

OR iv_file_name IS INITIAL

OR iv_file_mimetype IS INITIAL.

fill_message zc4in_msgid zc4in_msgty_error '057'

space space space space.

SET EXTENDED CHECK OFF.

IF 1 EQ 2.

MESSAGE e057.

ENDIF.

SET EXTENDED CHECK ON.

set_retcode.

ENDIF.

  • Get document type

MOVE iv_file_extension TO lv_doc_type.

TRANSLATE lv_doc_type TO UPPER CASE.

READ TABLE lt_toadd INTO ls_toadd

WITH KEY doc_type = lv_doc_type.

IF syst-subrc NE 0.

MOVE iv_file_mimetype TO lv_mime_type.

TRANSLATE lv_mime_type TO LOWER CASE.

READ TABLE lt_toadd INTO ls_toadd

WITH KEY mimetype = lv_mime_type.

IF syst-subrc NE 0.

READ TABLE lt_toadd INTO ls_toadd

WITH KEY doc_type = 'BIN'.

ENDIF.

ENDIF.

IF syst-subrc NE 0.

fill_message zc4in_msgid zc4in_msgty_error '055'

iv_file_extension

iv_file_mimetype

space space.

SET EXTENDED CHECK OFF.

IF 1 EQ 2.

MESSAGE e055.

ENDIF.

SET EXTENDED CHECK ON.

set_retcode.

ENDIF.

  • Get archive document type

READ TABLE lt_toadv INTO ls_toadv

WITH KEY doc_type = ls_toadd-doc_type.

IF syst-subrc NE 0.

fill_message zc4in_msgid zc4in_msgty_error '056'

ls_toadd-doc_type

gv_msg_objtyp

space space.

SET EXTENDED CHECK OFF.

IF 1 EQ 2.

MESSAGE e056.

ENDIF.

SET EXTENDED CHECK ON.

set_retcode.

ENDIF.

  • Get archive document type connection to archive

READ TABLE lt_toaom INTO ls_toaom

WITH KEY sap_object = gv_msg_objtyp

ar_object = ls_toadv-ar_object.

IF syst-subrc NE 0.

fill_message zc4in_msgid zc4in_msgty_error '056'

ls_toadd-doc_type

gv_msg_objtyp

space space.

SET EXTENDED CHECK OFF.

IF 1 EQ 2.

MESSAGE e056.

ENDIF.

SET EXTENDED CHECK ON.

set_retcode.

ENDIF.

  • Fill attachment content

REFRESH lt_archivobject.

CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'

EXPORTING

buffer = iv_file_bin_content

IMPORTING

output_length = lv_length_i

TABLES

binary_tab = lt_archivobject.

  • Add attachment to archive

lv_archiv_id = ls_toaom-archiv_id.

lv_document_type = ls_toadd-doc_type.

lv_length = XSTRLEN( iv_file_bin_content ).

CLEAR lv_archiv_doc_id.

CALL FUNCTION 'ARCHIVOBJECT_CREATE_TABLE'

EXPORTING

archiv_id = lv_archiv_id

document_type = lv_document_type

length = lv_length

IMPORTING

archiv_doc_id = lv_archiv_doc_id

TABLES

archivobject = lt_archivobject

EXCEPTIONS

error_archiv = 1

error_communicationtable = 2

error_kernel = 3

OTHERS = 4.

IF syst-subrc NE 0.

fill_message syst-msgid syst-msgty syst-msgno

syst-msgv1 syst-msgv2

syst-msgv3 syst-msgv4.

set_retcode.

ENDIF.

  • Save link to attachment

CLEAR ls_toav0.

ls_toav0-sap_object = gv_msg_objtyp.

ls_toav0-object_id = gv_msg_objkey.

ls_toav0-archiv_id = ls_toaom-archiv_id.

ls_toav0-arc_doc_id = lv_archiv_doc_id.

ls_toav0-ar_object = ls_toaom-ar_object.

ls_toav0-ar_date = syst-datum.

  • ls_toav0-DEL_DATE =

ls_toav0-reserve = ls_toadd-doc_type.

INSERT (ls_toaom-connection) FROM ls_toav0.

CLEAR ls_attach.

ls_attach-archiv_id = ls_toav0-archiv_id.

ls_attach-arc_doc_id = ls_toav0-arc_doc_id.

ls_attach-sap_object = ls_toav0-sap_object.

ls_attach-object_id = ls_toav0-object_id.

ls_attach-file_name = iv_file_name.

ls_attach-file_mimetype = iv_file_mimetype.

ls_attach-file_uname = iv_uname.

ls_attach-file_date = syst-datum.

ls_attach-file_time = syst-uzeit.

ls_attach-file_description = iv_file_description.

INSERT zc4liv_attach FROM ls_attach.

COMMIT WORK.

REFRESH et_archive_doc_structure.

CLEAR et_archive_doc_structure.

MOVE-CORRESPONDING ls_toav0 TO et_archive_doc_structure.

MOVE-CORRESPONDING ls_attach TO et_archive_doc_structure.

et_archive_doc_structure-xfile = abap_true.

PERFORM fill_ar_object_desrc USING et_archive_doc_structure-ar_object

iv_langu

CHANGING et_archive_doc_structure-descr.

CALL FUNCTION '/IXOS/OA_X_DISPLAY_JAVA_VIEWER'

EXPORTING

pi_doc_id = et_archive_doc_structure-arc_doc_id

pi_archive_id = et_archive_doc_structure-archiv_id

pi_sapgui_for_html = abap_false

pi_start_browser = abap_false

IMPORTING

pe_url = lv_url

EXCEPTIONS

its_not_available = 1

url_generation = 2

OTHERS = 3.

IF syst-subrc NE 0.

CLEAR lv_url.

ENDIF.

MOVE lv_url TO et_archive_doc_structure-java_url.

APPEND et_archive_doc_structure.

  • end of when 'SAVE'

WHEN 'DELETE'.

  • Action 'DELETE'

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

  • Provede výmaz soubor&#367; podle ID dokumentu v tabulce ET_ARCHIVE_DOC_STRUCTURE

  • Bude použito jak pro akci smazání jediné p&#345;ílohy (Uživatel si rozmyslel, že ji chce smazat),

  • tak i pro smazání všech uživatelem vložených p&#345;íloh po akci 'EXITWITHOUTSAVE'

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

LOOP AT et_archive_doc_structure.

SELECT SINGLE * FROM toaom

INTO ls_toaom

WHERE sap_object EQ et_archive_doc_structure-sap_object

AND ar_object EQ et_archive_doc_structure-ar_object.

IF syst-subrc NE 0.

fill_message zc4in_msgid zc4in_msgty_error '056'

et_archive_doc_structure-ar_object

et_archive_doc_structure-sap_object

space space.

SET EXTENDED CHECK OFF.

IF 1 EQ 2.

MESSAGE e056.

ENDIF.

SET EXTENDED CHECK ON.

CONTINUE.

ENDIF.

DELETE FROM (ls_toaom-connection)

WHERE sap_object EQ et_archive_doc_structure-sap_object

AND object_id EQ et_archive_doc_structure-object_id

AND archiv_id EQ et_archive_doc_structure-archiv_id

AND arc_doc_id EQ et_archive_doc_structure-arc_doc_id.

ENDLOOP.

set_retcode.

  • end of when DELETE

WHEN OTHERS.

  • end of when OTHERS

ENDCASE.

ENDFUNCTION.

Former Member
0 Kudos

Hi Sumanth,

sorry about my delay,

here is FM structure and Context Elements

Function module ZC4LIV_BAPI_INSERT_ATTACHMENT Activ

Import parameters

IV_OBJTYP TYPE ORG_OBJTYP 'BUS2081' Typ organiza&#269;ního objektu SAP

IV_OBJKEY TYPE SWO_TYPEID Klí&#269; objektu

IV_WI_ID TYPE SWW_WIID Identifikace workitem

IV_UNAME TYPE SYUNAME SYST-UNAME Systém R/3, jméno uživatele z

IV_LANGU TYPE LANGU SYST-LANGU Jazykový klí&#269;

IV_ACTION TYPE TEXT40 'Save' Text délky 40

IV_FILE_BIN_CONTENT TYPE XSTRING Binární obsah souboru

IV_FILE_NAME TYPE ZC4LIV_FILE_NAM LIV: Název souboru

IV_FILE_EXTENSION TYPE SAEDOKTYP SAP ArchiveLink: Typ dokumentu

IV_FILE_MIMETYPE TYPE W3CONTTYPE Typ HTML-Content

IV_FILE_DESCRIPTION TYPE ZC4LIV_FILE_DES LIV: Ozna&#269;ení souboru

IV_GET_FROM_DB TYPE XFELD SPACE Na&#269;te FA z DB

Export parameters

EV_RETCODE TYPE SYSUBRC Návratový parametr

Tables

ET_ARCHIVE_DOC_STRUCLIKE ZC4LIV_LN_TOAV0 LIV: SAP ArchiveLink: Spojovac

ET_RETURN LIKE BAPIRET2 Návratový parametr

Structure ZC4LIV_LN_TOAV0

.INCLUDE TOAV0 0 0 SAP ArchiveLink: Link table

MANDT MANDT CLNT 3 0 Client

SAP_OBJECT SAEANWDID CHAR 10 0 SAP ArchiveLink: Object type of business object

OBJECT_ID SAEOBJID CHAR 50 0 SAP ArchiveLink: Object ID (object identifier)

ARCHIV_ID SAEARCHIVI CHAR 2 0 Content Repository Identification

ARC_DOC_ID SAEARDOID CHAR 40 0 SAP ArchiveLink: Document ID

AR_OBJECT SAEOBJART CHAR 10 0 Document type

AR_DATE SAEABADATE DATS 8 0 SAP ArchiveLink: Storage date

DEL_DATE SAEDELDATE DATS 8 0 Expiry Date

RESERVE SAERESERVE CHAR 27 0 SAP ArchiveLink: Reserved for future application

JAVA_URL TEXT255 CHAR 255 0 Text, 255 characters

DESCR SAEARONAME CHAR 40 0 SAP ArchiveLink: Document type

XFILE XFELD CHAR 1 0 Checkbox

FILE_NAME ZC4LIV_FILE_NAME CHAR 255 0 LIV: Filename

FILE_MIMETYPE W3CONTTYPE CHAR 128 0 HTML content type

FILE_UNAME UNAME CHAR 12 0 User Name

FILE_DATE DATE_ DATS 8 0 Date

FILE_TIME TIME_ TIMS 6 0 Time

FILE_DESCRIPTION ZC4LIV_FILE_DESCRIPTION CHAR 255 0 LIV: File description

Former Member
0 Kudos

Krishnaveni,

Typically RFC-s that accepts uploaded files has table parameter. Each line in this table is used to store part of file and has fixed length, typically about 1K.

So after accepting uploaded file just read it chunk by chunk and populate RFC table with lines per every chunk. Then execute RFC.

Valery Silaev

SaM Solutions

http://www.sam-solutions.net

Former Member
0 Kudos

Valery,

Thanks a lot for your reply.

Could you please help me by giving the code to separate the uploaded file with a

chunk of size 255.

We are not able to set the values correctly.Wrong data is getting entered into the RFC.

Thanks in advance.

Krishnaveni.

Former Member
0 Kudos

krishnaveni,

Could you post code that was generated during import for table line item?

VS