ABAP - Office integratie via OPEN XML API



Vergelijkbare documenten
MS-Office documenten integratie via SAP PI

Work item exits in SAP Workflow

Eigen Widgets in CRM. Introductie. Limitering. Widgets beschikbaar stellen. Tips & Tricks Eigen Widgets in CRM

Documenten in en uit Apex

Rapporten. Labels en Rapporten in Atlantis 1. Atlantis heeft twee manieren om output te genereren: 1. labels 2. rapporten (reports)

CRM en MS Excel. VNSG Magazine september 2014

Blog-Het gebruik van variabelen in Excel VBA

Tips & Tricks: Tip van de maand November Office Integratie

Dynamiek met VO-Script

Nog even snel kleine issues oplossen

ZOEKHULPEN EN SELECTIEVARIANTEN

Organiseer uw verschillende SOAP services in één scenario

LSP Connect en HL7v3

Specialisatie RTES - Project FunnyScreens. Installatie en gebruik van JUnit

Het opzetten van deze applicatie

Kleine cursus PHP5. Auteur: Raymond Moesker

Conceptenbibliotheek & Technisch register. Frank Terpstra

TiC Narrow Casting Querykoppeling

Voor de database wordt een Access 2000 bestand gebruikt, met voorlopig 1 tabel:

VNSG Magazine September 2014

Je maakt dus een eigen custom theme i.p.v. de standaard van SAP aan te passen.

De Kleine WordPress Handleiding

2. Ga naar Prestashop Admin > Modules en zoek naar Kassa Compleet.

1. HOE MAAK IK EEN IPART EN PLAATS IK DEZE IN HET CONTENT CENTER?

Forensics in Office365. Christian Prickaerts 12 juni 2014, Amsterdam

Update Globis Koppelingen DMS, WMS en Mail 1 MEI 2007 Willem den Boer

Efficy Mobile Efficy Mobile is een nieuwe interface van Efficy voor mobiele toestellen ter intentie van gebruikers die met Efficy werken onderweg.

FostPack Importeren verpakkingsfiches via Excel

CMS Ronde Tafel. Cloud Continuity. Ir. Jurian Hermeler Principal Consultant

Javascript oefenblad 1

Tips & Trucs Werkmethodieken 100 : Overstappen van de Simatek werkmethodiek naar KUBUS KeyMember Projecten overzetten

Is APEX a worthy substitute for Oracle Forms?

Beknopte handleiding remote werken met Novell Virtual office

Handleiding Aanbieders

Pythoncursus. Eindopdracht L-systemen. Joost, Koen, Marein en Ramon december 2015

De maker van deze pagina aanvaard geen enkele aansprakelijkheid voor de inhoud ervan, wel is deze met de grootste zorg samengesteld

Snel gegevens importeren en updaten met Importeren uit Excel voor SAP Business One

DataFlex 19.0 SQL Server

Sick Beard installeren en configureren voor gebruik in combinatie met SABnzbd+...

vbg.vbnet.beginner Omgaan met files en directories binnen Visual Basic.NET

Design Automation & Rules Based Design

Aan de slag met MailChimp!

Boe-Bots - Arduino robots

File Uploads met standaard ASP.NET

Frontend ontwikkeling

Handleiding website Pax Christi

Office 365 voor leerlingen

Dynamische gebruikersbeslissingen in SAP Workflow

VBA voor Doe het Zelvers Deel 13

ETIM UP Handleiding Ketenstandaard Bouw en Installatie Versie:

Werken in de Cloud. Prijzen.xls. Geschikt voor. Werken in de cloud

Handleiding Wordpress

NSPYRE LEGO MINDSTORMS UITDAGING (JAVA) INLEIDING. DOEL: SIMULATOR:

1. Milieuklacht Handleiding opladen XML in mkros Werken met Refertes... 5

Design Data Management voor FPGA ontwikkeling

Programmeren 1 23 januari 2013 Prof. T. Schrijvers

Inhoud. Endnote X7 Handleiding Mediacentrum maart 2015 Page 2

In opdracht van Rijkswaterstaat-RIKZ. Koppeling WADI- MARIA, Functioneel Ontwerp

MICROSOFT EDU. handleiding. Datum: januari Versie: 1.1.0

Blackboard Assignment tool

Web Application Security Hacking Your Way In! Peter Schuler & Julien Rentrop

Security web services

SAPLink plugin voor workflow objecten

Dag 12: Extensies installeren

WordPress Handleiding

BIM-validatietool Toetst data bij aanlegprojecten

Handleiding OpenCart - factuursturen.nl

Een fragment wordt afgeleid van de basis klasse "Fragment".

MobiDM App handleiding voor ios

sportadministratie Hoe werken met de aanwezigheden

Stappenplannen MailPlus SOAP API

INTRODUCTIE MAVIM BPM ONZE SOFTWARE DEMONSTRATIE

Release notes Swing 5.0.8

OTL-IMBOR. COINS IMGeo integratie met linked data. Dr.ir. Hans Schevers

HTML in Outlook Hoe zorgt u ervoor dat uw goed in beeld komt?

Oefeningenexamen Informatica: juni 2015

De werkelijke namen en beschikbaarheid van menuopdrachten kunnen per mobiel platform verschillen. De stappen kunnen ook verschillen.

App onderdelen. Source files. Android app onderdelen 1/6

Deel 1: Hoe Download ik Scenery en een Vliegtuig in Flight Simulator

Handleiding voor het maken van GPS routes met behulp van Mapy.cz

JOOMLA! GEBRUIKSVRIENDELIJKHEID IN DE PRAKTIJK. Tips en hulpmiddelen voor gebruiksvriendelijkheid

Automatisering voor Financiële Dienstverleners. Werken met Queries en Merge Documenten. For more information visit our website at

ondersteunde platforms...5 Installatie en activering...7 Integratie met SAP BusinessObjects-platform...11 Integratie met SAP-systemen...

Knowledgeable Referenceable Personable Accountable Scalable

Courbois Software WebDesignEditor. Werken met MailThem 2.0

Installatiehandleiding

7. Het Klussen logboek

Aanmaken 3D riool mbv Generative Components

Tentamen Inleiding Programmeren (IN1608WI), 2 februari 2012, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

SHAREPOINT ONLINE (SAMEN-)WERKEN IN DE WOLKEN. - Workshop SharePoint 1

Transcriptie:

1 VNSG magazine 2014 ABAP - Office documenten en met name Excel sheets vormen een algemeen middel om data in SAP systemen te krijgen, of er uit te rapporteren. Al eeuwen biedt SAP mogelijkhedenheden om met OLE vanuit SAP te communiceren met MS-Office. In de SCN community zijn ABAP2XLSX en XLSX2ABAP libraries gepubliceerd. In de 7.02 nw releases van SAP zit echter standaard een API om te integreren met Excel, Word en Powerpoint. In deze tip een korte introductie. We richten ons om het behapbaar te houden uitsluitend op Excel import met behulp van de SAP class CL_OPENXML_PACKAGE. XLSx, PPTx, DOCx, zijn ZIP bestanden Uitgangspunt van dit document is dat we de te lezen Excel sheet in binaire form hebben. Of dat nu met een upload, als payload in een bericht, als attachment in een mail of wat dan ook binnenkomt. Van belang is nu om te weten dat een XLSx bestandje eigenlijk een ZIP file is. We nemen bijvoorbeeld het volgende XLSx bestandje VNSG.xlsx, met daarin één sheet: Zes cellen dus, A1, A2 en A3 met de waarde van 1, 2 resp 3, en B1, B2 en B3 met de (string!) waarde 1, 2 en 3. Hernoemen we de extensie van het bestand dat we hebben opgeslagen van *.xlsx naar *.zip, dan ziet het er als we het openen met ZIP (of als je het parset in Java, of wat dan ook) als volgt uit:

2 VNSG magazine 2014 Als we het simpel houden (kan altijd complexer) zitten de voor ons interessante gegevens in de bestanden /xl/worksheets/sheet1.xml: en xl/sharedstrings.xml... Concreet: we vinden in worksheets\sheet1.xml elementen met naam row/c met attribute r="<cellid>" terug. Als attribute "s" van dit element gelijk is aan "1" dan betekent dit een verwijzing naar element volgnummer(row/c/v) in xl/sharedstrings (nb! element 0 is het eerste voorkomen van...). Daar kunnen we dus wat mee als we inkomende XLSx bestanden ontzippen en de waarde op deze wijze uitlezen.

3 VNSG magazine 2014 Voor we verder gaan even een proof of concept voor DOCx bestanden. Bronbestand is HelloWord.docx (vindt FOO lekker): Is als ZIP gelezen: Lezen we word/document.xml Dan toont dat dus hetzelfde concept...

4 VNSG magazine 2014 Verwerking in ABAP Uitgangspunt hebben we al genoteerd, namelijk een binary xstring (iv_excel in code hieronder) met de gehele XLSx. De basis begint nu met de factory cl_xlsx_document=>load_package( <xstring> ), die een object teruggeeft van het type CL_OPENXML_PACKAGE. data objxlsx type ref to CL_OPENXML_PACKAGE. objxlsx = cl_xlsx_document=>load_package( iv_excel ). objxlsx is een object met een iterator die de parts teruggeeft, en die parts zijn inderdaad de files die we al eerder terugzagen bij het openen van de zipfile. data lr_part type ref to cl_openxml_part. data lr_parts type ref to cl_openxml_partcollection, data lv_partcount type i. lr_parts = objxlsx->get_parts( ). lv_partcount = lr_parts->get_count( ). lv_partcount = lr_workbook->get_parts( )->get_count( ). do lv_partcount times. sv_index = sy-index - 1. lv_uri = lr_workbook->get_parts( )->get_part( sv_index )-> get_uri( )->get_uri( ). lv_uri is nu een string die het pad naar het bestand geeft. Er waren er meerdere, maar we waren vooralsnog alleen geïnteresseerd in '/xl/sharedstrings.xml' en '/xl/worksheets/sheet1.xml'. Daar moeten we door te loopen over de iterator de index van bepalen, en dan kunnen we ze lezen. xxmlsheet1 = lr_workbook->get_parts( )->get_part( <gevondenindex> ) ->get_data( ). xxmlsharedst = lr_workbook->get_parts( )->get_part( <gevondenindex> ) ->get_data( ). xxmlsheet1 en xxmlsharedst zijn hierbij xstrings die we kunnen parsen met de ixml classes. Zonder hier vervelend te willen worden in volledigheid (het is een tip, geen werkinstructie) een snippet voor het lezen van de shared string XML: lr_ixml = cl_ixml=>create( ). lr_ixml_document = lr_ixml->create_document( ). lr_ixml_stream_factory = lr_ixml->create_stream_factory( ). lr_ixml_istream = lr_ixml_stream_factory ->create_istream_xstring( xxmlsharedst ). lr_ixml_parser = lr_ixml->create_parser( document = lr_ixml_document istream = lr_ixml_istream stream_factory = lr_ixml_stream_factory ).

5 VNSG magazine 2014 lr_ixml_parser->parse( ). lr_ixml_istream->close( ). if lr_ixml_node_sst is bound. lr_ixml_node_silist = lr_ixml_node_sst->get_children( ). if lr_ixml_node_silist is bound. lv_nrof_sinodes = lr_ixml_node_silist->get_length( ). do lv_nrof_sinodes times. lv_sstidx = sy-index - 1. try. lv_value = lr_ixml_node_silist->get_item( lv_sstidx ) -get_first_child( )->get_value( ). // There it is!! catch cx_root. // any endtry. enddo. endif. endif. Voor de worksheet zelf is het van hetzelfde laken, maar vergeet niet de waarde te vervangen door de gevonden sharedstring (als er een attribuut 's' was...)! Finally Het voorbeeld heb ik teasing en simpel gehouden, maar kan natuurlijk zo complex worden als je zelf wil. En zijn de ABAP2XLSX/XLSX2ABAP libraries hiermee nu overbodig geworden? Het antwoord daarop is dat die een compleet framework bieden, en bijvoorbeeld ook een uitgewerkt concept van styles ondersteunen. Dat kan je natuurlijk zelf gaan maken (kost tijd), en het leren (lees: doorgronden) van een library vergt ook tijd. Het charmante van de CL_OPENXML_PACKAGE is echter de uniformiteit van de oplossing, en de wijze waarop dat een maatwerkoplossing ondersteunt. Ik zou echter niet meer met OLE koppelingen aan de slag gaan. Al was het alleen maar om de specifieke ondersteuning van de SAPGUI die dat vereist. Hans Gmelig Meyling, September 2014 Literatuur, links en notes ABAP2XLSX library van Ivan Femia: SCN Startpage: http://wiki.scn.sap.com/wiki/display/abap/abap2xlsx GitHub: https://github.com/ivanfemia/abap2xlsx SCN blog van Benu Mariantony SCN: http://scn.sap.com/docs/doc-33578