Word Dokument in Web Dynpro ABAP Appl. hochladen und anzeige

WAS, Netweaver, Fiori

Word Dokument in Web Dynpro ABAP Appl. hochladen und anzeige

Postby Lewin3924 » Fri Jan 30, 2009 11:07 am

Hallo zusammen,
ich habe eine Web Dynpro ABAP Anwendung in der der User ein Word / Excel Dokument hochladen will (vom bspw. lokalen Laufwerk seines Rechners). Das Dokument soll dann im SAP gespeichert werden. Außerdem soll es möglich sein das Dokument später in der Web Dynpro Anwendung wieder anzuzeigen.

Ich habe in meinem View das UI Element Upload eingebaut, um den Pfad zu ermitteln und das Dokument zu laden.
Für die Anzeige habe ich mich für das UI Element office control entschieden.

1. Wenn ich das Dokument "browse", dann sind die Eigenschaften data, filename und Mime Type beim Upload UI gefüllt.
2. Die Eigenschaft DataSource beim OC (office control UI) habe ich an das gleiche Context Element gebunden, das auch an die Eigenschaft data des Upload UI gebunden ist.

Das OC öffnet z.B. ein WordDokument, doch der Inhalt ist leer.

Kann es sein das das Dokument noch nicht richtig hochgeladen wurde?

In einer anderen Applikation habe ich einmal ein PDF hochgeladen, da habe ich folgendes Coding beim Button (UPLOAD) implementiert.

data lo_nd_pdf type ref to if_wd_context_node.
data lo_el_pdf type ref to if_wd_context_element.
data ls_pdf type wd_this->element_pdf.
data lv_pdf like ls_pdf-pdf.



* navigate from <CONTEXT> to <PDF> via lead selection
lo_nd_pdf = wd_context->get_child_node( name = wd_this->wdctx_pdf ).

* get element via lead selection
lo_el_pdf = lo_nd_pdf->get_element( ).

* get single attribute
lo_el_pdf->get_attribute(
exporting
name = `PDF`
importing
value = lv_pdf ).



* Get a reference to the from processing class.
data: l_fp type ref to if_fp.
l_fp = cl_fp=>get_reference( ).

* Get a reference to the PDF Object class.
data: l_pdfobj type ref to if_fp_pdf_object.
l_pdfobj = l_fp->create_pdf_object( ).

* set the pdf in the PDF Object
l_pdfobj->set_document( pdfdata = lv_pdf ).

* set the PDF Object to extract data the Form data.
l_pdfobj->set_extractdata( ).

* execute call to ADS
l_pdfobj->execute( ).


* get the PDF Form data
data: pdf_form_data type xstring.
l_pdfobj->get_data(
importing
formdata = pdf_form_data ).

* convert the xstring from data to string so it can be processed using the iXML classes
data: converter type ref to cl_abap_conv_in_ce,
formxml type string.

converter = cl_abap_conv_in_ce=>create( input = pdf_form_data ).
converter->read(
importing
data = formxml ).

* pull in the iXML type group.
type-pools: ixml.

* get a reference to iXML object
data:l_ixml type ref to if_ixml.
l_ixml = cl_ixml=>create( ).

* get iStream object from StreamFactory
data: streamfactory type ref to if_ixml_stream_factory,
istream type ref to if_ixml_istream.

streamfactory = l_ixml->create_stream_factory( ).

istream = streamfactory->create_istream_string( formxml ).

* create an XML document class that will be used to process the XML
data: document type ref to if_ixml_document.
document = l_ixml->create_document( ).

* create the parser class
data: parser type ref to if_ixml_parser.
parser = l_ixml->create_parser( stream_factory = streamfactory
istream = istream
document = document ).

* parse the XML
parser->parse( ).

* define XML Node type object
data: node type ref to if_ixml_node,
attributes type ref to if_ixml_named_node_map.

* get the psi sales data Node and value.
data ls_psi_sales type wd_this->element_psi_sales.
data: lt_dfies type table of dfies,
ls_defies type dfies.



call function 'DDIF_NAMETAB_GET'
exporting
tabname = 'ZCM_PSI_SALES'
* ALL_TYPES = ' '
* LFIELDNAME = ' '
* GROUP_NAMES = ' '
* UCLEN =
* IMPORTING
* X030L_WA =
* DTELINFO_WA =
* TTYPINFO_WA =
* DDOBJTYPE =
* DFIES_WA =
* LINES_DESCR =
tables
* X031L_TAB =
dfies_tab = lt_dfies
exceptions
not_found = 1
others = 2
.
if sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.

data: lv_fieldname type string.
field-symbols <fs_field> type any.

loop at lt_dfies into ls_defies.
lv_fieldname = ls_defies-fieldname.

node = document->find_from_name( name = lv_fieldname ).

assign component lv_fieldname
of structure ls_psi_sales
to <fs_field>.

if <fs_field> is assigned.
<fs_field> = node->get_value( ).
endif.

endloop.

* WRITE DATA INTO CONTEXT
data lo_nd_psi_sales type ref to if_wd_context_node.
data lo_el_psi_sales type ref to if_wd_context_element.

* navigate from <CONTEXT> to <PSI_SALES> via lead selection
lo_nd_psi_sales = wd_context->get_child_node( name = wd_this->wdctx_psi_sales ).

* get element via lead selection
lo_el_psi_sales = lo_nd_psi_sales->get_element( ).

* set all declared attributes
lo_el_psi_sales->set_static_attributes(
exporting
static_attributes = ls_psi_sales ).

Benötige ich so etwas noch für den Upload eines Word Dokuments?
Welches Interface / Klasse gibt es für Word / Excel Dokumente (für den PDF upload gibt es das inteface IF_FP)?
Wie kann ich außerdem das Dokument im SAP sichern? (als MIME Objekt?)

Ich hoffe es kann mir jemand weiterhelfen?!

Danke und viele Grüße
Lewin3924
..
..
 
Posts: 42
Joined: Fri Nov 04, 2005 12:12 pm

Postby Yagmur1497 » Fri Sep 25, 2009 7:48 am

Ich habe das anders gelöst.
Ich habe einen kleinen Webservice in SICF erstellt, worin der Handler Schlüssel und Content-Type erhält. Dieser liest das Dokument aus dem KPRO und stellt es mit server->response->set_data( ... ) in die response. Dann noch den Content-Type mit server->response->set_header_field(...) einstellen und fertig ist der universelle Dokumenten-Server-Webservice.
Dann habe ich im Webdynpro ein IFRAME Ui-Element genommen, welches ja an eine URL gebunden werden muss. Diese wird fallbezogen berechnet (mapping oder supply) und verweist auf den Docserver-Webservice.
Funktioniert einwandfrei mit jpg doc pdf ppt txt usw.
Yagmur1497
..
..
 
Posts: 93
Joined: Wed Sep 17, 2008 4:09 pm


Return to Web Application Server

Who is online

Users browsing this forum: No registered users and 5 guests