Archiv des Intrexx Live! Forums

Hier sehen Sie die Foreneinträge aus dem Intrexx Live! Forum. Bis November 2016 war es das Forum für alle Fragen rund um die Software Intrexx von United Planet.
Seit November 2016 gibt es ein neues moderiertes Forum, das Intrexx Community Forum. Nutzen Sie bitte unbedingt dieses für aktuelle Fragen, Antworten und Informationen.

Wichtig: Dieses Forum dient als Archiv. Die Einträge beziehen sich oft auf ältere Versionen von Intrexx und entsprechen nicht mehr den aktuellen technischen Gegebenheiten.
Daher sollten alle Inhalte ausschließlich von Experten genutzt werden. Bei unsachgemäßer Anwendung kann es zu zeitaufwändigen Problemen oder Datenverlust kommen.
Übersicht > Intrexx Connectoren und Add-ons: SAPAdapter > How-to (SAP): Dateien aus dem SAP zur Verfügung stellen -> BODOC Konzept

How-to (SAP): Dateien aus dem SAP zur Verfügung stellen -> BODOC Konzept

Oft besteht der Wunsch, über Intrexx Dokumente „so wie sie sind“ auszuliefern. Beispiele sind Auftragsbestätigungen oder Rechnungen als PDF, technische Zeichnungen o.ä.
Im SAP Adapter existiert dafür die BODOC API für das Ausliefern von Dokumenten als Stream. In den webbasierenden Oberflächen verhält sich die Funktion wie ein Download. Falls das Gerät und der verwendete Webbrowser mit dem Dokument umgehen kann, wird es teilweise gleich angezeigt.

Mit dem PDF Format gibt es in der Praxis sehr gute Erfahrungen, da inzwischen alle Desktop- und mobilen Plattformen dieses Format akzeptieren und teilweise sogar in eigene Anwendungen integrieren (z.B. Übernahme in iBooks bei Apple Geräten).Die BODOC API funktioniert objektorientiert der Art „Gib mir das Dokument zum Objekttyp X mit der ID Y in der Sicht Z“. Je Objekttyp (z.B. „Kunde“) können mehrere Sichten existieren (z.B. „Kundenstammblatt“, „Historie“ oder „Besuchsbericht 1“).

Diese Anforderung wird als Velocity Skript auf den entsprechenden Intrexx Ansichtsseiten eingebunden:

#set( $Api = $GSAP.getAddOn("sapbop", "saperp", $Request) )
#if( $Api )
#set($strDocId = $DC.getValueHolder('fr_customer_id').getValue())
$Api.getBoImage("saperp", "KNA1", "DEFAULT", $strDocId)
#end


Das Skript implementiert den Aufruf im SAP System „saperp“ für den Objekttyp „KNA1“ und Sicht „DEFAULT“ für die Kundennummer, die aus dem Feld „fr_customer_id“ ermittelt wird (muss im Expertenattribut „name“ des entsprechenden Feldes anpasst werden).

An der Stelle des VTL Skriptes wird eine Ikone generiert, die den Download des Dokumentes durch Anklicken ermöglicht.


Angehängte Datei:




Je nach Plattform und Browser wird das Dokument evtl. in andere Anwendungen integriert (PDF auf dem iPhone integriert in iBooks).


Angehängte Datei:




Das Aussehen dieser Ikone kann durch die folgenden API Methoden verändert werden:

$Api.setImageNormal("images/assets/common/app_out.gif");
$Api.setImageHover("images/assets/common/app_in.gif");


Falls der Link zum Dokument anders gestaltet werden soll, bietet die API noch die folgenden Methoden an:

$Api.getBoLink("saperp", "KNA1", "DEFAULT", $strDocId , "Text","")
$Api.getBoURL("saperp", "KNA1", "DEFAULT", $strDocId);


Im angeschlossenen SAP System befindet sich der entsprechende Teil der BODOC API. Hier müssen den verwendeten Objekttypen und deren Sichten Funktionen zugeordnet werden, welche die entsprechenden Dokumente ermitteln und daraus binäre Datenströme für die BODOC API erzeugen.

Das enstprechende Customizing befindet sich unter „SAP Customizing Einführungsleitfaden -> Anwendungsübergreifende Komponenten -> init.all Intrexx Portal Plugin (POPI) -> Erweiterungen -> POPI Addon Business Objekt Dokumente“:


Angehängte Datei:




Im Customizingpunkt „Handler für Business Objekt Dokumente pflegen“ wird die Funktion registriert, welche für die Beschaffung der Dokumente verwendet werden soll.


Angehängte Datei:




Solche Funktionen sind als Erben der ABAP Objektsklasse /IATL/POPI_CL_IXAPI_BUSDOC zu implementieren. Die Methode EXIT_GET_FILE ist entsprechend anzupassen.
Für die Verwendung von Reports und SmartForms existieren bereits angepasste Handler, die eine Implementierung weiter vereinfachen.
Die Zuordnung, welcher Handler für welches Objekt/Sicht verwendet werden soll, erfolgt im Customizing unter „Business Objekt Dokumente – Konfiguration“.


Angehängte Datei:




Durch die Parameter, können Steuerparameter an den Handler übergeben werden. Die BODOC API kann Dokumente auch zwischenspeichern (Cache), um die Performance zu erhöhen.
Über den Customizingpunkt „Test Business Objekt Dokument“ können die Handler bereits im SAP getestet werden. Damit wird auch das Debugging für die Fehlersuche vereinfacht.

Prinzipiell lässt sich die BODOC API auch für SAPGUI Anwendungen benutzen. Dazu ist das Coding des Testtools in die bestimmten Transaktionen einzubinden. Damit hätte an den Vorteil, dass bestimmte Formulare und Stammblätter im SAP einmal implementiert werden müssten und danach auf allen Plattformen (SAPGUI, Intrexx Desktop und allen mobilen Geräten) zur Verfügung stehen könnten.

Zusatzinformationen:
Grundsätzlich ist es möglich, Dokumente auch integriert in die Seite darzustellen. Dies setzt eine bestimmte Konfiguration des Servers voraus und ist hier nicht beschrieben.
In Projekten wurden außer den Handlern für Reports und Smartforms auch Handler für den Zugriff auf Archivdokumente oder auf die SD Druckfunktionen (NAST) entwickelt. Letztere können SD Dokumente so anzeigen, wie sie gedruckt aussehen würden, ohne dass die Dokumente im Archiv abgelegt sein müssen. Ein Nachteil ist allerdings, dass der "Druck" immer zum Zeitpunkt des Aufrufs erfolgt und sich Daten und Formular über die Zeit ändern. Eine Ablage solcher Dokumente im Archiv ist deshalb immer zu bevorzugen.
Die BODOC API kann auch zum Einchecken von Dokumenten und Zuordnen zu SAP Objekten verwendet werden.
24.10.2011 08:45 von Jörg Müller
Dieses Beispiel beschreibt das Vorgehen, wenn man über einen Report ein PDF erzeugen und dieses auf Desktop- und mobilen Webseiten anzeigen möchte.

Dies erfolgt in den folgenden Schritten:
[list=1]
  • Erstellen einer BODOC Konfiguration
  • Einbinden der BODOC API auf den entsprechenden Intrexx Seiten
  • Erstellen des Reports[/list]
    zu 1)
    Als Erstes muss die BODOC API auf der SAP Seite konfiguriert werden. Dazu sollte man sich im Vorfeld überlegen, welches SAP Objekt angezeigt werden soll (z.B. "Kunde", "Material", "Auftrag", "Maschine", usw.) und dafür eine Technische ID für den Objekttyp überlegen. Diese ID kann in Anlehnung an das SAP Business Object Repository (Transaktion SWO1) gefunden werden. Für viele SAP Objekte existieren bereits technische ID, die im Beratungsumfeld durchaus bekannt sind (z.B. "BUS2032" für SD Auftrag).

    Falls man nur eine Sicht für dieses Objekt benötigt, kann die Sicht "DEFAULT" verwendet werden. Ansonsten sollte man sich hier auch entsprechende Technische Namen überlegen.

    Das Objekt und die entsprechende Sicht wird in der BODOC Konfiguration registriert (siehe How-to BODOC API). Für Reports, auf deren Parameterschnittstelle man Einfluss nehmen kann (eigene Reports), existiert bereits ein entsprechender Handler.


    Angehängte Datei:




    In diesem Beispiel wird das Objekt "DEMO" mit der Sicht "OWN_REPORT" registriert.

    Zu 2)
    Der nächste Schritt bindet dieses Objekt im Intrexx ein. Das VTL Mustercoding aus dem How-to BODOC (s.o.) wird dazu in eine Intrexx Seite eingebunden und leicht angepasst (die ID wurde hier hart codiert und muss später wieder aus dem Kontext bzw. Datenfeldinhalt ermittelt werden).

    #set( $Api = $GSAP.getAddOn("sapbop", "saperp", $Request) )
    #if( $Api )
    $Api.getBoImage("saperp", "DEMO", "OWN_REPORT", "123456")
    #end


    Nach dem Speichern der Intrexx Applikation erscheint durch das Skript eine Ikone, die beim Anklicken ein PDF öffnet.


    Angehängte Datei:




    Zu 3)
    Im letzten Schritt wird der bisher verwendet Vorlagereport /IATL/POPI_IXAPI_BODOC_REP kopiert und zugeordnet.

    Kopieren Sie daher mithilfe der SAP Transaktion SE38, SE80 o.ä. den Report /IATL/POPI_IXAPI_BODOC_REP in einen entsprechenden Z-Report oder anderen Namensraum.


    Angehängte Datei:





    Angehängte Datei:




    Im Ändernmodus kann der Report angepasst werden. Einzig die Parameterschnittstelle darf nicht verändert werden.
    Die Objekt ID wird im Parameter "id" übergeben. Dieser Parameter ist als Tabelle ausgelegt, da die BODOC API die Übergabe mehrerer ID ermöglicht. Die Standard Verwendung ist allerdings der Aufruf mit nur einer ID.


    REPORT zbodoc_demo_own_report NO STANDARD PAGE HEADING.

    * =========== INTERFACE
    TABLES: /iatl/popi_ixapi_bob_in.
    SELECT-OPTIONS: id FOR /iatl/popi_ixapi_bob_in-bo_id NO INTERVALS.


    START-OF-SELECTION.

    * =========== OUTPUT
    ULINE.
    WRITE: / 'Beispiel BODOC API für eigene Reports'.
    ULINE.
    SKIP.
    IF id[] IS NOT INITIAL.
    LOOP AT id.
    WRITE: / id-low.
    ENDLOOP.
    ELSE.
    IF id-low NE space.
    WRITE: / id-low.
    ENDIF.
    ENDIF.


    Für das Beispiel anzuzeigende Text im WRITE-Befehl verändert. Nach dem Einbringen Ihrer Änderungen wird der Report gespeichert und aktiviert.

    Danach muss die zuvor angelegte Konfiguration nochmal geändert werden. Als Parameter 1 wird jetzt der soeben kopiert eigene Report angegeben.


    Angehängte Datei:




    Danach sollte im Intrexx der neue Report angezeigt werden. Die nächsten Schritte wären weitere Änderungen innerhalb des Reports durch das Anzeigen zusätzlicher Objektinformationen. Alle Layoutfunktionen des Reports werden unterstützt. Man sollte allerdings darauf achten, dass die Breite so verwendet wird, um im typischen A4 Format eines PDF die optimale Ausnutzung zu erhalten.

    Bekannte Probleme:
    Für die Erzeugung des PDF werden die Druckfunktionen im SAP verwendet. Dazu sind entsprechende SAP Berechtigungen notwendig.
    Weiterhin muss bei den SAP Benutzern, die in der Schnittstelle verwendet werden, ein Standarddrucker zugeordnet sein.
  • 24.10.2011 09:48 von Jörg Müller
    Dieses Beispiel erweitert das Beispiel "BODOC Beispiel: Eigenen Report als PDF generieren" für die Fälle, wenn bereits ein Report mit einer definierten Schnittstelle existiert.
    Das ist zum Beispiel bei SAP Standard Reports der Fall, bei denen die Schnittstelle nicht verändert werden kann. Eigene bereits existierende Reports können genau so behandelt werden.

    Bevor dieser Report für Intrexx verwendet werden kann, sollte die "Batchfähigkeit" des gewünschten Reports geprüft werden. Wenn der Report "Im Hintergrund ausführen" unterstützt und im Spool eine vernünftige Darstellung der Ergebnisse zu finden ist, kann dieser Report auch für Intrexx eingesetzt werden.

    Die Implementierung erfolgt in den folgenden Schritten:
    [list=1]
  • Erstellen eines BODOC Handlers und Registrierung
  • Erstellen der individuellen Report Schnittstelle
  • BODOC Konfiguration
  • Test und Einbinden auf der Intrexx Oberfläche[/list]Im folgendem ist die Erstellung eines BODOC Handler beschrieben, welcher den SAP ERP Report "VC/2" ("Kundenstammblatt") implementiert. Im Vorfeld ist hier zu prüfen, ob der Report richtig konfiguriert wurde. Beispielsweise setzt die Transaktion VC/2 Customizing der Sichten und eine Benutzerzuordnung voraus. Stellen Sie sicher, dass der im Intrexx verwendete Benutzer diesen Report im SAP aufrufen kann und vernünftige Ergebnisse erhält.

    Zu 1)
    Die BODOC API des SAP Adapters stellt die ABAP Objects Klasse /IATL/POPI_CL_IXAPI_BUSDOC_REP zur Verfügung, mit der Reports als PDF generiert werden können. Für eine eigene Implementierung wird als Erstes eine neue Klasse angelegt, die von /IATL/POPI_CL_IXAPI_BUSDOC_REP erbt. Diese Klasse wird danach als BODOC Handler im SAP Einführungsleitfaden (Transaktion SPRO) unter "Anwendungsübergreifende Komponenten -> init.all Intrexx Portal Plugin (POPI) -> Erweiterungen -> POPI Addon Business Objekt Dokumente -> Handler für Business Objekt Dokumente pflegen" registriert.


    Angehängte Datei:





    Angehängte Datei:




    Tipp: bei der späteren Konfiguration stehen Eingabemöglichkeiten für Parameter zur Verfügung. Der Handler kann diese Möglichkeiten nutzen und die Verwendung im Feld "Info Parameter" dokumentieren.


    Zu 2)
    Die Methode REPORT_MODIFY_PARAMETERS übernimmt die Erstellung des Report-Interfaces. Hier müssen die extern übergebenen Informationen mit weiteren Parametern so aufbereitet werden, wie es der gewünschte Report erwartet.
    Für das Beispiel VC/2 bedeutet dies, dass die Methode redefiniert und durch folgendes Coding ersetzt wird:

    method report_modify_parameters.

    * -------- local data
    data: ls_params like line of ct_params.
    data: lv_vkorg type vkorg.
    data: lv_kunnr type kunnr.
    data: lt_knvv type table of knvv.
    data: ls_knvv like line of lt_knvv.

    * -------- call super
    call method super->report_modify_parameters
    changing
    cv_program = cv_program
    cv_variant = cv_variant
    ct_params = ct_params
    exceptions
    failed = 1
    others = 2.
    if sy-subrc <> 0.
    raise failed.
    endif.

    * -------- set defaults for customer factsheet
    cv_program = 'RVKUSTA1'.


    * -------- map id to kunnr
    loop at ct_params into ls_params
    where selname = 'ID'.
    ls_params-selname = 'KUNNR'.
    lv_kunnr = ls_params-low.
    modify ct_params from ls_params.
    endloop.


    * -------- get vkorg
    lv_vkorg = me->cust_doc-param_1.
    select * from knvv
    into table lt_knvv
    where kunnr eq lv_kunnr.

    if lv_vkorg ne space.
    read table lt_knvv into ls_knvv
    with key vkorg = lv_vkorg.
    if sy-subrc ne 0.
    clear lv_vkorg.
    endif.
    endif.

    if lv_vkorg eq space.
    read table lt_knvv into ls_knvv index 1.
    if sy-subrc ne 0.
    raise failed.
    endif.
    lv_vkorg = ls_knvv-vkorg.
    endif.


    * -------- set vkorg
    clear ls_params.
    ls_params-selname = 'VKORG'.
    ls_params-kind = 'P'.
    ls_params-sign = 'I'.
    ls_params-option = 'EQ'.
    ls_params-low = lv_vkorg.
    append ls_params to ct_params.


    endmethod.



    Da der Report eine Verkaufsorganisation (kurz VKORG) zur Kundenummer erwartet, findet man im Coding eine Implementierungsmöglichkeit. Entweder die VKORG wird aus der BODOC Konfiguration fest mitgegeben oder sie wird aus dem View KNVV ermittelt. In jedem Fall wird die VKORG gegen den View KNVV geprüft.

    Zu 3)
    Im nächsten Schritt wird der soeben erstellte und registrierte BODOC Handler einem Objekt zugeordnet (Customizing: "Business Objekt Dokumente - Konfiguration"). Da der Report das SAP Objekt "Kunde" im Fokus hat, wird in der BODOC Konfiguration eine zusätzliche Sicht "VC2" (Achtung: keine Sonderzeichen wie "/" verwenden!) angelegt.


    Angehängte Datei:




    Zu 4)
    Im SAP Customizing existiert die Funktion "Test Business Objekt Dokument", die ein Testen der Funktionalität direkt aus dem ABAP ermöglicht. Falls Probleme auftreten, können die Fehler durch ABAP Debugging einfacher gefunden werden. Aktivieren Sie dann beispielsweise einen Breakpoint in der redefinierten Methode.

    Die Augabe des neuen BODOC Handlers kann für die gepflegte Konfiguration "KNA1"-"VC2" des Beispiels und eine entsprechende Kundennummer getestet werden. Mit der Funktion "als Popup" werden die SAP-internen Aufbereitungsfunktionen verwendet.


    Angehängte Datei:




    Ist die Checkbox nicht aktiviert, werden die Streamingfunktionen verwendet. Die Testfunktion speichert den erzeugten Binärstream mit SAPGUI Mitteln auf dem Client in der Form, wie er später auch im Web verfügbar wäre. In diesem Beispiel sollte sich dann ein PDF mit dem VC/2 Reportdaten öffnen.


    Angehängte Datei:




    Ist der Test erfolgreich, kann der neue Handler auch extern auf Intrexx Seiten verwendet werden. Dazu bindet man BODOC in der entsprechenden Variante auf Intrexx Ansichtsseiten (Desktop oder Mobil) ein (siehe auch vorherige Beispiele):


    #set( $Api = $GSAP.getAddOn("sapbop", "saperp", $Request) )
    #if( $Api )
    $Api.getBoImage("saperp", "KNA1", "VC2", "123456")
    #end


    Dieser Code ist natürlich noch anzupassen (z.B. Kundennummer; siehe vorherige Beispiele).
  • 05.12.2011 10:42 von Jörg Müller
    Häufig möchte man den externen Anwendern attraktive Dokumente bereitstellen, die zwar auf SAP Daten basieren, aber nicht im SAP-typischen Layout dargestellt werden. Das vorherige Beispiel über die SAP Reports kann für interne Anwender verwendet werden, die diese Darstellung bereits kennen. Die Transaktion VC/2 für externe Anwender ohne SAP Erfahrung ist dagegen kaum zuzumuten. Oft benötigt man auch Informationen über Objekte, die es weder als Dokument noch als Report im SAP gibt. Das betrifft beispielsweise solche Anforderungen wie "Maschinenstammblätter", "Begleitdokumentation zum Serviceauftrag", usw.

    Für solche Anforderungen bietet das BODOC Konzept eine Integration von SAP Smartforms an. Das Design (inkl. Logos u.ä.) und die Datenbeschaffung erfolgt dabei mit den Werkzeugen der SAP. Smartforms können bereits im SAP Standard als PDF gerendert werden. Damit müssen diese Dokumente nur noch an die Externe Anwendung übergeben werden.

    Die Implementierung eigener Smartform-basierender BODOC Dokumente erfolgt in den folgenden Schritten:

    [list=1]
  • Anlegen eines eigenen Smartform-Formulars aus einer BODOC Kopiervorlage
  • Erstellen der BODOC Konfiguration
  • Test und Einbinden auf der Intrexx Oberfläche
  • Anpassen des Smartforms
    [/list]Mit diesen Schritten kann man sehr schnell eigene Smartforms erstellen und extern zur Verfügung stellen. Je nach Projektanforderungen kann es zusätzlich sinnvoll sein, die Datenbeschaffung (Business Logik) nicht im Smartform sondern ausgelagert im wiederverwendbaren Handler zu implementieren. Am Ende dieses Beispiels sind dazu die notwendigen Erweiterungen aufgeführt.


    Zu 1)
    Über die SAP Transaktion SMARTFORMS wird die Kopiervorlage "/IATL/POPI_IXAPI_SMARTFORM" in ein eigenes Smartform kopiert (z.B. "ZBUSDOC_DEMO").


    Angehängte Datei:





    Angehängte Datei:




    Das kopierte Smartform kann ohne weitere Änderungen aktiviert werden.


    Zu 2)
    Danach wird im BODOC Customizing (SAP Einführungsleitfaden unter "Anwendungsübergreifende Komponenten -> init.all Intrexx Portal Plugin (POPI) -> Erweiterungen -> POPI Addon Business Objekt Dokumente -> Business Objekt Dokumente - Konfiguration" eine BODOC Konfiguration erstellt.


    Angehängte Datei:




    Beispiel für die Anzeige eines Materialstammblattes: "MARA" - "FACTSHEET":


    Angehängte Datei:





    Zu 3)
    Über die BODOC Testfunktion kann das Smartform getestet werden.


    Angehängte Datei:




    Mit aktiviertem Parameter "als Popup" sollte jetzt ein aus dem Smartform generiertes PDF erscheinen.


    Zu 4)
    Der nächste Schritt wäre das Anpassen des Smartforms an die eigenen Wünsche. Da dies zu 100% dem SAP Standard entspricht, ist dies hier nicht weiter beschrieben.


    In den Projekten kann es Vorteile bringen, die Datenbeschaffung nicht im Smartform sondern bereits im aufrufenden Handler zu hinterlegen.
    Wenn dies gewünscht wird, sind folgende Schritte notwendig (die einzelnen Schritte erfolgen analog zum Beispiel "BODOC Beispiel: Existierenden SAP Report als PDF zur Verfügung stellen"):

    [list=1]
  • Anlegen einer eigenen Handlerklasse, die von /IATL/POPI_CL_IXAPI_BUSDOC_SF vererbt wird.
  • Registrieren als BODOC Handlerklasse
  • Anpassen der BODOC Konfiguration: neuen Handler verwenden
  • Anlegen eine Struktur für die Aufnahme der außerhalb des Smartforms erzeugten Daten. Diese kann auch komplex sein und Tabellen oder Strukturen inkludieren.
  • Redefinieren der Methode GET_DOC_DATA und implementieren der Datenbeschaffung in Abhängigkeit von den übergebenen Daten in den Attributen CURRENT_ID bzw. CURRENT_BO_TAB (mehrere Objekte). Die Übergabe an den Parameter erfolgt im Typ der zuvor angelegten eigenen Datenstruktur.
  • Anpassen des Smartforms:
    In "Globale Einstellungen -> Globale Definitionen -> Globale Daten" ist für das Attribut GS_DATA auf den Typ der angelegten eigenen Struktur zu ändern.
    Im Initialisierungsteil wird die redefinierte Methode GET_DOC_DATA bereits aufgerufen und werden in der Variable GS_DATA gesichert.
    Für die Darstellung der Informationen kann dann mit Smartform-typischen Mitteln auf GS_DATA und seinen Unterobjekten zugegriffen werden (z.B. loopen über Tabellen usw.).[/list]
  • 05.12.2011 12:39 von Jörg Müller
    Archivdokumente können über das BODOC Konzept extern zur Verfügung gestellt werden. Da solche Dokumente als Binärstream übertragen werden, ist es sehr wichtig, dass die Clients die jeweiligen Dokumenttypen verarbeiten können.
    Beispielsweise ist das PDF Format auf fast allen Plattformen verbreitet und kann direkt verarbeitet werden. Bei anderen Formaten (z.B. TIF, technische Zeichnungen) kann es zu Problemen kommen, weil ein entsprechendes "Anzeigeprogramm" fehlt. In diesen Fällen wird vom Endgerät meistens der Download angeboten.

    Prinzipiell sind für die Verwendung von Archivdokumenten in BODOC Handlerklassen die gleichen Schritte durchzuführen wie im Beispiel "BODOC Beispiel: Existierenden SAP Report als PDF zur Verfügung stellen":

    [list=1]
  • Erstellen eines BODOC Handlers und Registrierung
  • Implementierung der Datenbeschaffung aus dem Archiv
  • BODOC Konfiguration
  • Test und Einbinden auf der Intrexx Oberfläche[/list]Zu 1)
    Als Klasse für die Vererbung ist hier /IATL/POPI_CL_IXAPI_BUSDOC zu verwenden.

    Zu 2)
    Als Methode für die Datenbeschaffung muss EXIT_GET_FILE redefiniert und implementiert werden.

    Beispiel für die Beschaffung von Auftragsbestätigungen:

    METHOD exit_get_file.

    * ---------- local data
    DATA: lt_doc_sel TYPE TABLE OF bapi_doc_selnr.
    DATA: ls_doc_sel LIKE LINE OF lt_doc_sel.
    DATA: lt_doc_list TYPE TABLE OF bapi_doc_draw.
    DATA: ls_doc_list LIKE LINE OF lt_doc_list.
    DATA: lt_doc_files TYPE TABLE OF bapi_doc_files2.
    DATA: ls_doc_files LIKE LINE OF lt_doc_files.
    DATA: lt_doc_content TYPE TABLE OF drao.
    DATA: ls_doc_content LIKE LINE OF lt_doc_content.

    DATA: BEGIN OF ls_bin,
    orblk TYPE orblk,
    END OF ls_bin.
    DATA: lt_bin LIKE TABLE OF ls_bin.
    DATA: lv_bin_len type i.

    DATA: ls_bodoc LIKE LINE OF it_input.
    DATA: lv_lin TYPE i.
    DATA: lv_id TYPE string.
    DATA: lv_id2 TYPE string.


    * ----------- get import
    DESCRIBE TABLE it_input LINES lv_lin.
    IF lv_lin NE 1.
    RAISE failed.
    ELSE.
    READ TABLE it_input INTO ls_bodoc INDEX 1.
    lv_id = ls_bodoc-bo_id.

    IF lv_id CS '~'.
    SPLIT lv_id AT '~' INTO lv_id lv_id2.
    ENDIF.
    ENDIF.


    * ----------- get list
    ls_doc_sel-sign = 'I'.
    ls_doc_sel-option = 'EQ'.
    ls_doc_sel-documentnumber_low = lv_id.
    APPEND ls_doc_sel TO lt_doc_sel.

    CALL FUNCTION 'BAPI_DOCUMENT_GETLIST'
    EXPORTING
    documenttype = '125'
    * DOCUMENTPART = ' '
    * DOCUMENTVERSION = ' '
    * DESCRIPTION = ' '
    * LANGUAGE = SY-LANGU
    * LANGUAGEISO = ' '
    * USERNAME = ' '
    * AUTHORITYGROUP = ' '
    * ECNUMBER = ' '
    * LABORATORY = ' '
    * DELETEINDICATOR = ' '
    * DATACARRIER = ' '
    * CADINDICATOR = '*'
    * WSAPPLICATION = ' '
    * STATUSEXTERN = ' '
    * STATUSINTERN = ' '
    * MAXROWS = 0
    * IMPORTING
    * RETURN =
    * FOUNDROWS =
    TABLES
    docnumberselection = lt_doc_sel
    documentlist = lt_doc_list
    .

    IF lt_doc_list[] IS INITIAL.
    RAISE failed.
    ELSE.
    READ TABLE lt_doc_list INTO ls_doc_list INDEX 1.
    ENDIF.


    * ---------- get details for object
    CALL FUNCTION 'BAPI_DOCUMENT_GETDETAIL2'
    EXPORTING
    documenttype = ls_doc_list-documenttype
    documentnumber = ls_doc_list-documentnumber
    documentpart = ls_doc_list-documentpart
    documentversion = ls_doc_list-documentversion
    getobjectlinks = ' '
    getcomponents = ' '
    getstatuslog = ' '
    getlongtexts = ' '
    getactivefiles = 'X'
    getdocdescriptions = ' '
    getdocfiles = 'X'
    getclassification = ' '
    getstructure = ' '
    getwhereused = ' '
    hostname = ' '
    inherited = 'X'
    * IMPORTING
    * DOCUMENTDATA =
    * RETURN =
    TABLES
    * OBJECTLINKS =
    * DOCUMENTDESCRIPTIONS =
    * LONGTEXTS =
    * STATUSLOG =
    documentfiles = lt_doc_files
    * COMPONENTS =
    * CHARACTERISTICVALUES =
    * CLASSALLOCATIONS =
    * DOCUMENTSTRUCTURE =
    * WHEREUSEDLIST =
    .
    DESCRIBE TABLE lt_doc_files LINES lv_lin.
    IF lv_lin EQ 0.
    RAISE failed.
    ELSE.
    IF lv_id2 NE space.
    READ TABLE lt_doc_files INTO ls_doc_files
    WITH KEY file_id = lv_id2.
    ELSE.
    READ TABLE lt_doc_files INTO ls_doc_files INDEX 1.
    ENDIF.
    ENDIF.


    * ---------- get content
    DATA: ls_phio_id TYPE sdokobject.

    ls_phio_id-class = 'DMS_PCD1'.
    ls_phio_id-objid = ls_doc_files-file_id.

    CALL FUNCTION 'CV120_KPRO_CHECKOUT_TO_TABLE'
    EXPORTING
    ps_phio_id = ls_phio_id
    * PF_COMP_GET = ' '
    TABLES
    * PT_COMPONENTS =
    ptx_content = lt_doc_content
    EXCEPTIONS
    error = 1
    no_content = 2
    OTHERS = 3
    .
    IF sy-subrc <> 0.
    RAISE failed.
    ENDIF.


    * ---------- map content
    CLEAR lv_bin_len.
    LOOP AT lt_doc_content INTO ls_doc_content.
    lv_bin_len = ls_doc_content-orln.
    ls_bin-orblk = ls_doc_content-orblk.
    APPEND ls_bin TO lt_bin.
    ENDLOOP.
    IF lv_bin_len EQ 0.
    RAISE failed.
    ENDIF.

    CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
    EXPORTING
    input_length = lv_bin_len
    * FIRST_LINE = 0
    * LAST_LINE = 0
    IMPORTING
    buffer = ev_file
    TABLES
    binary_tab = lt_bin
    EXCEPTIONS
    failed = 1
    OTHERS = 2
    .
    IF sy-subrc <> 0.
    RAISE failed.
    ENDIF.


    * ---------- final export preparation
    ev_extension = ls_doc_files-wsapplication.
    TRANSLATE ev_extension TO LOWER CASE.
    CONCATENATE 'application/' ev_extension INTO ev_mimetype.
    ev_filesize = lv_bin_len.


    ENDMETHOD.

    Alle anderen Schritte wie Test und externen Einbinden ist wie in den vorherigen Beispielen durchzuführen.
    Dieser Ansatz, Archivdokumente extern anzuzeigen funktioniert nur, wenn die vom SAP verwendeten Programme für den Archivzugriff vollständig RFC-fähig sind. Je nach Konfiguration und Archivsystem ist dies nicht immer der Fall.

    Mit der Methode EXIT_PUT_FILE ist auch ein Einchecken von Dokumenten ins Archiv möglich. Die Methode ist entsprechend zu redefinieren und mit dem notwendigen Aufrufen des Archivsystems zu versehen.
  • 05.12.2011 12:55 von Jörg Müller
    Zurück | Alles über Intrexx | Impressum | Datenschutzerklärung

    Über United Planet
    © 2019 United Planet GmbH
    Schnewlinstraße 2
    79098 Freiburg