Connector für SAP Business Suite - Entwicklerhandbuch Teil 2 - Integrationsszenario SAP-Fremddatengruppe

Überblick CRM-Szenario mit SAP-ERP

In diesem Beispiel werden in Echtzeit die Daten eines SAP-ERP- bzw. R/3-Systems mit Fremddatengruppen in ein Intrexx-CRM integriert. Dafür wird mindestens eine View Only-Lizenz des Connectors für SAP Business Suite benötigt. Schreibende Szenarien benötigen die Lizenzen View & Write (z.B. funktionale Aufrufe) oder Developer API (vollständige Datengruppenfunktionen wie Anlegen, Ändern, Löschen). Das hier vorgestellte ERP-Mini-CRM wird folgende Funktionen enthalten:

  • Recherche im SAP-Kundenstamm

  • Detailinformationen zum Kunden

  • Angebote zum Kunden

  • Ansprechpartner zum Kunden

  • Korrespondenzverwaltung

Applikation erstellen

Unsere Beispielapplikation können Sie hier herunterladen. Öffnen Sie die Applikation zur Bearbeitung. Der Applikationstitel kann mit einem Doppelklick auf den Applikationsknoten in "Demo SAP Mini CRM" abgeändert werden. Speichern Sie die Applikation und ordnen Sie sie in der Menüstruktur des Portals ein. Öffnen Sie dann die Applikation im Browser.

Auf der Seite "Verwaltung" werden die Kategorien

  • Angebot

  • Information

  • Vertrag

hinzugefügt.

Ansicht SAP-Kundenstamm

Fremddatengruppe anlegen

Nun wird eine neue Fremddatengruppe angelegt. Im Eigenschaftendialog der Fremddatengruppe wird die Datenbankverbindung "saperp", die in unserem Beispiel bereits konfiguriert ist, ausgewählt. Da hier lediglich Daten aus SAP gelesen und nicht geschrieben werden, kann die SAP-Tabelle "KNA1" über den Datahandler "Generic View" eingebunden werden.

Auf dem Reiter Datenfelder können jetzt die folgenden Datenfelder aus SAP ausgewählt werden:

  • LID

  • KUNNR

  • NAME1

  • ORT01

Das Datenfeld "LID" ist ein generiertes Hilfsfeld, das den kompletten SAP-Schlüssel des Datensatzes (ohne Mandant) enthält. Dieses Feld sollte immer ausgewählt werden. Die Texte für alle im Intrexx-Portal konfigurierten Sprachen werden in diesem Schritt in SAP ermittelt und die Titel entsprechend übernommen. Mit Klick auf "OK" wird die SAP-Fremddatengruppe erstellt.

Kunden-Ansichtsseite erstellen

Über das Kontextmenü des Applikationsknotens wird nun eine neue Ansichtsseite erzeugt und der Titel in "Kunden" geändert. Auf der neuen Seite wird eine Ansichtstabelle angelegt. Wählen Sie im Eigenschaftendialog der Tabelle die SAP-Fremddatengruppe aus und nehmen Sie die Datenfelder als Spalte auf, deren Werte in der Tabelle angezeigt werden sollen. Sortieren Sie die Tabellenspalten nach Name. Mit Klick auf "OK" wird die Tabelle erstellt.

Die neue Ansichtsseite soll im Browser über das Applikationsmenü erreichbar sein. Mit einem Doppelklick auf den Applikationsknoten wird der Eigenschaftendialog der Applikation geöffnet. Auf dem Reiter Applikationsmenü kann die Seite "Kunden" ausgewählt und angeordnet werden. Mit Klick auf "OK" ist die neue Einstellung gespeichert. Nun kann auch die Applikation gespeichert und veröffentlicht werden. Nach dem Speichern der Applikation ist der SAP Kundenstamm im Portal verfügbar.

Recherche im Kundenstamm

Mit Filtern wird die Suche nach Kundennummer und Anfangsbuchstaben des Namens eingerichtet.

Filter Operator - Suche nach der Kundennummer

Legen Sie oberhalb der Tabelle einen Operator-Filter an. Wechseln Sie im Eigenschaftendialog auf den Reiter "Vergleich". Hier wird der Operator "Beginnt mit", die Datengruppe "SAP" und das Datenfeld "Debitor" ausgewählt.

Auf dem Reiter "Sonstiges" kann die Einstellung "Liste mit Operatoren anzeigen" deaktiviert werden. Mit Klick auf "OK" wird der Filter erstellt. Nun muss noch die Abhängigkeit in der Tabelle definiert werden. Wechseln Sie im Eigenschaftendialog der Tabelle auf den Reiter "Abhängigkeiten". Fügen Sie eine neue Abhängigkeit hinzu. Im Eigenschaftendialog der Abhängigkeit kann nun ein Ereignis hinzugefügt werden. Wählen Sie als Kontrolle "Operator" und das Ereignis "onchange" aus.

Fügen Sie dann den neuen Filterausdruck "Debitor ist enthalten in Operator" hinzu. Dazu wird das Feld "Debitor", die Operation "Ist enthalten in", die Kontrolle "Operator", die als Suchfeld dient, und das Vergleichsfeld "Debitor" ausgewählt. Mit Klick auf "OK" werden die neuen Einstellungen übernommen.

Bestätigen Sie alle geöffneten Dialoge mit OK, um die neue Abhängigkeit zu erstellen.

Filter Alphaindex - Suche nach dem Anfangsbuchstaben des Kunden

Nun wird der zweite Filter für die Suche nach dem Anfangsbuchstaben des Kunden eingerichtet. Dazu wird der Filter "Alphaindex" verwendet.

Die Einstellungen hier können so, wie sie sind, mit Klick auf "OK" übernommen werden. Der zusätzliche Filterausdruck kann mit einem Doppelklick auf die Ansichtstabelle erstellt werden.

Klicken Sie hier auf "Abhängigkeit bearbeiten".

Als auslösende Kontrolle wird hier der Alphaindex-Filter aufgenommen. Der neue Filterausdruck lautet: Name beginnt mit Alphaindex. Hier sehen Sie die Eigenschaften des Filterausdrucks im Detail:

Die neuen Einstellungen können mit Klick auf "OK" übernommen und die Anwendung gespeichert werden.

Im Browser kann nun auch nach einer Kombination aus Kundennummer und Kundenname gesucht werden, wie hier z.B. nach Kundennummern, die mit "0000" beginnen und Kundennamen von A bis D. Natürlich gibt es für die Filterung nach Kundennamen auch andere Möglichkeiten. Sie könnten sie z.B. auch so konfigurieren wie die Filterung nach Kundennummer, um alle Kundennamen zu finden, die z.B. mit einer bestimmten Zeichenfolge beginnen.

Detailsicht Kundenstammblatt

Detailsicht erstellen

Im nächsten Schritt wird eine Detailsicht zum Kunden erstellt, die von der Ansichtstabelle auf der Kunden-Seite aus geöffnet werden kann. Übrigens: die Kunden-Seite kann über das Hauptmenü Bearbeiten / Startseite als Startseite der Applikation eingestellt werden, wenn sie gerade in der Applikationsstruktur markiert ist.

Mit dem Kontextmenü "Neu / Ansichtsseite mit Elementen" kann eine Ansichtsseite erzeugt werden, die alle eingebundenen Datenfelder der SAP-Fremddatengruppe anlegt. Der Titel wird hier in "Kundenstammblatt" abgeändert.

Nicht benötigte Ansichtselemente können gelöscht werden. Wenn Sie weitere Daten auf der Seite anzeigen möchten, wie z.B. Postleitzahl und Ort, so müssen zuerst die entsprechenden Datenfelder in der SAP-Fremddatengruppe aufgenommen werden.

In den Eigenschaften der Ansichtstabelle auf der Seite "Kunden" wird mit Klick auf "Spalte hinzufügen" eine Schaltfläche aufgenommen, die die Detailseite lädt. Das Sprungziel "Kundenstammblatt" ist hier bereits richtig ausgewählt. Klicken Sie auf "Spalte bearbeiten", während die Schaltflächen-Spalte markiert ist.

Hier kann auf dem Reiter "Aktionen" eingestellt werden, dass das Kundenstammblatt im Tooltip geladen wird, wenn ein Anwender auf die Schaltfläche in der Tabelle klickt. Schließen Sie alle offenen Dialoge mit Klick auf "OK" und speichern Sie die Anwendung.

Im Browser wird das Kundenstammblatt nun bei Klick auf die Schaltfläche im Tooltip eingeblendet.

Aufträge im Kundenstammblatt anzeigen

Um die Aufträge von Kunden im Kundenstammblatt anzuzeigen, wird eine weitere Fremddatengruppe angelegt, die die SAP-Tabelle VBAK (SAP Auftragsinformationen) einbindet.

Wechseln Sie auf den Reiter "Datenfelder".

Hier können die gewünschten Datenfelder des Auftragkopfes ausgewählt werden. Übernehmen Sie alle neuen Einstellungen mit Klick auf "OK".

Die Fremddatengruppe "SAP Aufträge" ist erstellt. Nun soll eine eine gefilterte Ansichtstabelle auf die Kundenaufträge im Kundenstammblatt erstellt werden.

In den Eigenschaften der Ansichtstabelle wird die Fremddatengruppe "SAP Aufträge" ausgewählt. Wählen Sie dann die gewünschten Datenfelder für die Tabellenspalten mit Klick auf "Spalte hinzufügen" aus und ordnen Sie sie mit Hilfe der Pfeilschaltflächen an. Anschließend kann der Filter-Dialog mit Klick auf "Filter" eingerichtet werden.

Klicken Sie hier auf "Neuen Filterausdruck hinzufügen". Das Datenfeld "Auftraggeber" wird hier mit dem Operator "Gleich" mit dem aktuell auf der Seite geladenen Wert des Datenfeldes "Debitor" verglichen. Stimmt der Wert überein, zeigt die Tabelle die Aufträge an, bei denen im Feld "Auftragggeber" die Kundennummer des aktuell angezeigten Kundendatensatzes gespeichert ist. Klicken Sie auf "OK".

Der erste Teil des Filterausdrucks ist erstellt. Nun soll die Sicht noch auf den Vertriebsbelegstyp C eingeschränkt werden. Dieser Typ wird für Aufträge verwendet. Ohne Einschränkung würden im Moment noch alle Belege angezeigt werden, bei denen der Kunde als Auftraggeber eingetragen ist. Klicken Sie dazu auf "Neuen Filterausdruck hinzufügen".

Der zweite Teil des Filterausdrucks muss mit einer Und-Verknüpfung erstellt werden. Eine Oder-Verknüpfung würde alle Belegtypen des Auftraggebers ODER alle Belegtypen C anzeigen. Bei der UND-Verknüpfung werden beide Bedingungen kombiniert auf die vorhandenen Daten angewendet, also nur alle Belege angezeigt, bei denen der Kunde als Auftraggeber eingetragen UND der Belegtyp C ist. Das Datenfeld "Belegtyp" wird hier mit dem Operator "Gleich" mit dem Zeichen C - als benutzerdefinierte Option - eingetragen. Klicken Sie auf "OK".

Der Filterausdruck ist nun fertig gestellt. Bestätigen Sie alle neuen Einstellungen mit Klick auf "OK" und speichern Sie die Anwendung.

Die Aufträge werden jetzt im Kundenstammblatt angezeigt.

Ansprechpartner anzeigen

SAP-Fremddatengruppe für Customizingtabelle

Über den Applikationsknoten wird eine neue SAP-Fremddatengruppe, die die Customizingtabelle für das Feld "Abteilung" des Ansprechpartners enthält, angelegt.

Auch hier ist wieder die SAP-Datenbank-Verbindung ausgewählt. Als Tabelle wird die Customizingtabelle "TSAB" eingebunden.

Das SAP Portal Plugin löst Customizingtabellen sofort in die verbundenen Texttabellen auf. Informationen dazu, wie dieses Verhalten vermieden werden kann, finden Sie im SAP API Entwicklerhandbuch.

Auf dem Reiter "Datenfelder" können wie gewohnt die gewünschten Datenfelder ausgewählt werden.

SAP-Fremddatengruppe für Ansprechpartner mit Referenz

Nun wird die Stammdatentabelle "KNVK", die die SAP-Ansprechpartner-Daten enthält, in die Applikation eingebunden.

Auf dem Reiter "Datenfelder" können die gewünschten Datenfelder ausgewählt werden.

Klicken Sie auf "OK".

Das Feld "ABTNR" bzw. "Abteilung" wird jetzt als Referenz auf die zuvor erzeugte Datengruppe "SAP Abteilungen" angelegt. Öffnen Sie dazu die Eigenschaften der neuen Datengruppe "SAP Ansprechpartner" mit einem Doppelklick und wechseln Sie auf den Reiter "Referenzen".

Mit einem Klick auf "Referenz hinzufügen" kann die Referenz angelegt werden. Der Titel der Referenz lautet "Abteilung". Mit einem Klick auf "Mehrsprachigkeit" kann dieser auch in den weiteren Portalsprachen eingetragen werden. Referenziert wird die Datengruppe "SAP Abteilungen" (entspricht der SAP Customizingtabelle). Klicken Sie "Weiter".

Klicken Sie hier auf "Zuordnung treffen". Anschließend kann das Datenfeld "ABTNR", das die SAP-Kodierung enthält, ausgewählt werden. Klicken Sie "OK".

Die Zuordnung ist nun erstellt. Klicken Sie "Weiter".

Hier kann ausgewählt werden, welche Felder der Customizingtabelle für den Anwender sichtbar sein sollen. Wählen Sie das Feld aus, das den Beschreibungstext zur Kodierung enthält. Klicken Sie "Fertig stellen".

Die Referenz ist nun erstellt. Allgemeine Informationen zum Thema "Referenzen" finden Sie hier.

Erweiterung des Kundenstammblattes um Ansprechpartner

Das Kundenstammblatt wird jetzt um eine zusätzliche Ansichtstabelle erweitert.

Hier kann nun auch die referenzierte Abteilung als Tabellenspalte eingebunden werden. Wenn Sie die Titel der Tabellenspalten ändern möchten, klicken Sie einfach jeweils auf "Spalte bearbeiten". Die Reihenfolge der Spalten kann mit den Pfeilschaltflächen geändert werden. Der Zugriff auf die SAP Ansprechpartner muss jetzt mit einem Filter auf den aktuellen Kunden (Datenfeld "Debitor") eingeschränkt werden. Klicken Sie dazu auf "Filter".

Klicken Sie hier auf "Neuen Filterausdruck hinzufügen". Das Datenfeld "Debitor" soll mit dem Operator "Gleich" mit dem aktuellen Wert des Feldes "Debitor" aus der Datengruppe "SAP" verglichen werden. Damit lädt die Tabelle die Datensätze, bei denen in beiden Feldern die selbe Kundennummer eingetragen ist. Bestätigen Sie alle Änderungen mit "OK" und speichern Sie die Anwendung.

Um die Tabellen im Browser besser unterscheiden zu können, können Sie im Eigenschaftendialog jeweils noch den Tabellentitel eintragen und die Einstellung "Titel anzeigen" aktivieren.

Nach dem Speichern der Anwendung wird der Titel im Browser angezeigt.

Kundenkorrespondenz

Erweiterung der Applikationsvorlage

Auf der Eingabeseite "Neues Dokument" wird ein neues Eingabefeld und damit auch gleich ein neues Datenfeld erstellt. Klicken Sie "Weiter".

Dieses Feld wird später für die Kundensuche verwendet. Der Titel lautet Kunde. Der Kontrolltyp ist Text, Datentyp ist String.

Klicken Sie "Weiter" durch die folgenden Dialoge und behalten Sie alle folgenden Einstellungen bei, bis das Element fertiggestellt und angelegt ist.

Ein weiteres Eingabefeld wird für die SAP-Kundennummer angelegt. In dieses Feld dürfen vom Anwender keine Daten eingetragen werden. Ein Datensatz ist aber nur dann gültig, wenn eine Kundennummer in diesem Feld vorhanden ist.

Hier wird der Titel eingetragen. Der Kontrolltyp ist Text, Datentyp ist String. Klicken Sie "Weiter" und im nächsten Dialog "Fertig stellen".

Hier werden die Einstellungen "Schreibgeschützt" und "Eingabe erforderlich" gesetzt. Klicken Sie "OK".

Kundensuche per Data Picker-Schaltfläche

Der Anwender soll Kunden suchen können, indem er den Namen vollständig oder teilweise im Kunden-Feld einträgt und ihn dann aus einer Vorschlagsliste auswählt. Das Element Schaltfläche übernimmt diese Aufgabe mit der Aktion Data Picker. Damit wird nach der Auswahl des Kunden auch automatisch die Kundennummer in das Kundennummer-Feld geschrieben.

Der Schaltflächentyp wird hier als Bild eingestellt. Mit Klick auf "Bearbeiten" kann hier ein geeignetes Bild für die Darstellung der Schaltfläche mit und ohne Mauskontakt ausgewählt werden.

Klicken Sie "OK".

Der Verweis auf das Bild ist nun hier eingetragen. Wechseln Sie auf den Reiter "Aktionen".

Hier kann der Aktionstyp "Data Picker" ausgewählt werden. Als Suchfeld wird das Kunden-Feld ausgewählt. Gesucht werden soll in der aktuellen Applikation in der Datengruppe "SAP", die die Kundendaten enthält. Als Datenfeld wird das Feld "Name" ausgewählt. Im unteren Bereich kann das Feld "Kundennummer" dem Feld "Debitor" aus der SAP-Fremddatengruppe zugeordnet werden. Damit wird die Kundennummer der SAP-Fremddatengruppe entnommen und in das Eingabefeld "Kundennummer" auf unserer Eingabeseite kopiert. Die Datengruppe, die für die Suche ausgewählt ist, kann mit Klick auf "Filter" eingeschränkt werden, um unerwünschte Treffer zu vermeiden (z.B. Ausschluss von zum Löschen vorgemerkten Daten). Ein Klick auf "Erweitert" öffnet einen weiteren Dialog, in dem das Aussehen der Liste, die die Suchergebnisse zur Auswahl einblendet, eingestellt werden kann. Hier kann im oberen Bereich, angegeben werden, welche Felder später für den Anwender in der Suchliste sichtbar sein sollen, um eine Auswahl treffen zu können. Die Anzahl der angezeigten Treffer kann im unteren Bereich eingeschränkt werden. Mit der Einstellung "Navigationselement anzeigen" kann der Anwender in einer größeren Trefferliste navigieren. Alle Informationen zu den Einstellungen in diesem Dialog erreichen Sie mit der Taste F1. Im Normalfall muss der Anwender auf die Schaltfläche des Data Pickers klicken, um die Suchfunktion auszulösen. Die Suchfunktion kann auch automatisch ausgelöst werden, wenn eine ausreichende Anzahl von eingegebenen Zeichen vorhanden ist. Dieses Verhalten wird über die Einstellung "Ergebnisse ab einer Eingabelänge von ... Zeichen" ausgelöst. In SAP kann diese Einstellung performancerelevant sein und ist besser zu hoch zu wählen und ggfs. mit Filtern weiter einzuschränken. Bestätigen Sie alle neuen Einstellungen mit Klick auf "OK".

Die Abmessung der Schaltfläche kann mit dem Kontextmenü "Originalgröße setzen" automatisch der Größe des ausgewählten Bildes angepasst werden.

Aufnehmen der neuen Felder in Ansichtsseite und Suche

Im vorhergehenden Schritt wurden mit den entsprechenden Eingabefelder die neuen Datenfelder "Kunde" und "Kundennummer" in der Intrexx-Datengruppe "Dokumente" angelegt. Die enthaltenen Daten werden jetzt in der Ansichtsseite "Alle Dokumente" eingeblendet und auch in der Suchkonfiguration für die Suche aufgenommen.

Öffnen Sie auf der Ansichtsseite "Alle Dokumente" die Eigenschaften der Ansichtstabelle mit einem Doppelklick.

Mit Klick auf "Spalte hinzufügen" können die beiden Felder in die Tabelle aufgenommen werden. Speichern Sie die Änderungen mit Klick auf "OK" und wechseln Sie dann auf die Seite "Suche".

Öffnen Sie auf der Seite "Suche" die Eigenschaften der Schaltfläche mit einem Doppelklick. Klicken Sie dann auf "Suchkonfigurationen bearbeiten" und im Folgedialog auf "Suchkonfiguration bearbeiten". Aktivieren Sie bei den beiden Feldern "Kunde" und "Kundennummer" die Einstellung "Suchen" im unteren Bereich des Dialogs. Bestätigen Sie alle neuen Einstellungen mit "OK" und speichern Sie die Anwendung.

Test der Applikation

Auf der Seite "Neues Dokument" kann nun ein Testdatensatz angelegt werden. Im Kundenfeld wird nach "Mega" eingetragen und dann auf die Data-Picker-Schaltfläche geklickt. Da es mehrere Suchtreffer gibt, wird eine Liste eingeblendet, aus der der Kunde ausgewählt werden kann.

Ist der Kunde ausgewählt, so wird der korrekte Name automatisch im Kunden- und die Kundennummer im Kundennummern-Feld eingetragen. Mit Klick auf "OK" wird der neue Datensatz gespeichert.

Auf der Seite "Alle Dokumente" wird der neue Datensatz jetzt angezeigt.

Auf der Seite "Suche" kann nun z.B. nach einer Kundennummer gesucht werden. Treffer werden nach dem Klick auf "Suchen" unterhalb des Suchfeldes angezeigt. Mit Klick auf den Titellink eines Treffers wird der Datensatz in der Seite "Dokument aufrufen" zur Ansicht geladen.

Einfache Stammblätter mit SAP Reports erstellen

Eine einfache Möglichkeit, SAP-Informationen als Stammblätter darzustellen, bietet die Report-Integration des Connectors für SAP Business Suite. Gehen Sie dazu genauso vor, wie in den vorhergehenden Kapiteln gezeigt und legen Sie eine eigene Fremddatengruppe für SAP Reports an.

In den Eigenschaften der Fremddatengruppe wählen Sie wie gewohnt Ihre SAP-Verbindung aus. Verwenden Sie hier den Datahandler "Generic Report" und tragen Sie als Tabelle/Ansicht den technischen Namen des Reports (im Codebeispiel unten z.B. "zz_demo_ixapi_report") ein. Intrexx greift dann über den Generic-Report-Datenhandler auf SAP zu und überträgt die Parameter und die erzeugten Textzeilen. Das Grundgerüst der SAP-Reports enthält einfache PARAMETERS-Anweisungen, die dann in Intrexx als Filterkriterien zur Verfügung stehen. Das folgende Beispiel enthält als Parameter die Materialnummer, für die dann im START-OF-SELECTION-Teil Informationen in SAP beschafft werden.

report zz_demo_ixapi_report no standard page heading line-size 256.
* ------- interface
parameters matnr type matnr.
start-of-selection.

Das vollständige Coding dieses Beispiels finden Sie hier.

Mögliche Erweiterungen

Filterkriterien aus dem Benutzerkontext

In einigen Szenarien ist es sinnvoll, aus Berechtigungsgründen zusätzliche Filterkriterien zur Einschränkung der Treffermenge zu verwenden. Beispiele für solche Filterwerte aus dem Benutzerkontext sind

  • Kundennummer

  • Personalnummer

  • Kostenstelle

  • Verkaufsorganisation

Im Modul "Benutzer" des Portals können zusätzliche Attribute definiert werden. Die in den Attributen erfassten Werte werden dann im jeweiligen Benutzerkonto zugeordnet.

In einem Kundenportal könnte damit beispielsweise die Sicht auf die eigenen Aufträge automatisch auf die Kundennummer aus dem Benutzerkonto eingeschränkt werden (Filterausdruck: Auftraggeber = aktueller Benutzer - Kundennummer).

Personalisierter Zugriff

Der Zugriff auf ein SAP-System erfolgt mindestens mit einem System-Benutzer, der in den Einstellungen der SAP-Datenquelle konfiguriert wird. Es ist aber auch möglich, mit dem SAP-Benutzer des Portalanwenders zu arbeiten. Dazu ist der Loginmodus als Expert-Attribut in den Eigenschaften der SAP-Fremddatengruppe einzutragen.

Verbesserte Suche

Die Suche über den SAP-Kundenstamm, wie sie in der Beispiel-Applikation umgesetzt wurde, ist bislang case-sensitiv (Groß- und Kleinschreibung werden unterschieden). Wird dies beim Suchbegriff nicht beachtet, oder ist der gesuchte Begriff in einem anderen Feld zu finden, z.B. bei einer Suche nach der Postleitzahl statt dem Namen des Kunden, so werden keine Treffer erzielt. Um diesen Zustand zu optimieren, kann ein eigener Handler im SAP-Portal-Plugin implementiert werden. Ein Mustercoding finden Sie hier.

8.3 Anzeigen einer optimierten internen SAP-Tabelle

SAP-typische Codes wie im vorhergehenden Beispiel per Referenz aufzulösen, ist nicht immer auf diese Art und Weise technisch lösbar. Die Auflösung von Texten für eine große Anzahl von Feldern kann auch zu einem Performanceproblem führen. In einigen Fällen sind die Daten in SAP über mehrere abhängige Tabellen verteilt, so dass es kaum möglich ist, einen Join über alle benötigten Tabellen zu bilden. In solchen Fällen ist es durchaus möglich, die Daten in SAP als typische interne Tabelle aufzubauen und erst dann in das Portal einzubinden. Für den Nur-Lese-Zugriff sind dann die API-Methoden GET_LIST und GET_DETAIL zu implementieren. Ein Beispiel, wie interne SAP-Tabellen zur Verfügung gestellt werden können, finden Sie hier.

Replizieren von SAP-Daten in Intrexx-Datengruppen

SAP-Daten können alternativ zur Verwendung von Fremddatengruppen auch per Prozess in Intrexx-Datengruppen geschrieben werden.

Dafür wird in unserer Beispiel-Applikation eine neue Intrexx-Datengruppe angelegt. Die Daten aus der SAP-Fremddatengruppe SAP, in die die Kundendaten aus SAP eingebunden sind, sollen per Prozess in die neue Intrexx-Datengruppe repliziert werden. Bevor die Anwendung gespeichert wird, muss hier noch der Datentyp des Schlüsselfeldes "LID" in "string" geändert werden, um die SAP-Kundennummer als Primärschlüssel in der Intrexx-Datengruppe verwenden zu können. Wechseln Sie dazu auf den Reiter "Datenfelder".

Klicken Sie hier auf "Datenfeld bearbeiten". Im nächsten Dialog wechseln Sie auf den Reiter Expert. Ändern Sie dort den Wert des Attributs "datatype" auf "string". Speichern Sie die Applikation. Wechseln Sie in das Modul Prozesse und legen Sie einen Neuen Prozess mit einem zeitgesteuerten Ereignis an.

Klicken Sie "Weiter".

Der Timer soll so eingestellt werden, dass alle Datensätze in der Intrexx-Datengruppe zu einer festgelegten Zeit (7.00 Uhr) gelöscht werden. Klicken Sie "Weiter".

Hier wird die Intrexx-Datengruppe "Kunden" ausgewählt. Klicken Sie "Weiter", ohne einen Filter zu definieren, und behalten Sie alle folgenden Einstellungen bei, bis Sie die neuen Einstellungen mit "OK" bestätigen können. Der Timer ist nun bereits im Prozess-Element Timerereignis eingebunden.

Nun wird eine Datengruppen-Aktion mit dem Timerereignis verbunden. Die Aktion führt das Löschen der Datensätze aus. Klicken Sie "Weiter".

Hier wird die Applikation und die Intrexx-Datengruppe "Kunden" ausgewählt. Klicken Sie "Weiter" und behalten Sie alle folgenden Einstellungen bei.

Legen Sie nach dem selben Prinzip einen zweiten Globalen Timer an und stellen Sie hier die automatische Ausführung auf 8.00 Uhr ein.

Hier wird die SAP-Fremddatengruppe "SAP" ausgewählt.

Legen Sie ein neues Timerereignis an und wählen Sie hier den zweiten Timer aus.

Nun wird die Datengruppen-Aktion angelegt, die die Daten aus der SAP-Fremddatengruppe in die Intrexx-Datengruppe überträgt. Hier wird die Option "Datensatz hinzufügen" ausgewählt.

Als Zieldatengruppe wird die Intrexx-Datengruppe "Kunden" ausgewählt.

Hier wird der Primärschlüssel und die restlichen Felder zugeordnet. Nachdem der Prozess gespeichert ist, ist er auch sofort aktiviert. Um zu vermeiden, dass er ungetestet ausgeführt wird, kann der Prozess zunächst deaktiviert werden. Die beiden Timer können manuell gestartet werden.

Im Modul Werkzeuge, dort in der Aufgabenplanung, sind unter anderen Aufgaben auch alle Timeraktionen aufgelistet. Über das jeweilige Kontextmenü können die Timer auch von hier aus gestartet werden.

Generisches Schreiben in eine Z-Tabelle

Es gibt oft die Anforderung, für SAP ein neues Business-Objekt umzusetzen. Das bedeutet, dass in SAP im Kundennamensraum Z-Tabellen und eine Benutzeroberfläche (z.B. einfache Tabellenpflege) realisiert werden. Der hier beschriebene Weg ist eine Möglichkeit, das Datenmodell in SAP zu implementieren und die Benutzeroberfläche komplett in Intrexx abzubilden. Ein Mustercoding für den dazugehörigen Datahandler (abgeleitet von Generic View Handler) finden Sie hier. Der Datahandler wird als "GENERIC_WRITE" registriert. Voraussetzung ist eine Tabelle mit einem GUID-Schlüsselfeld vom technischen Typ RAW(16). Dieses kann beispielsweise auf das Datenelement "ZIA_IXA_GUID" oder "SYSUUID_X" verweisen. Die Verwendung einer GUID lässt sich leichter handhaben als Nummernkreise, da die mit dem SAP-Funktionsbaustein "GUID_CREATE" erzeugten Global Unique IDs (GUID) weltweit eindeutig sind. Ab der SAPPOPI Version 2010 gehört der Datahandler "GENERIC_WRITE" zum Paket. Mit dieser Version ist auch die Beschränkung des GUID-Schlüsselfeldes aufgehoben. Es können dann Datensätze mit einfachem Schlüssel geändert und gelöscht werden. Das Einfügen von neuen Datensätzen bleibt ohne Anpassung des Handlers aber unmöglich, da der Handler kein Wissen über die Logik von neuen Schlüsseln hat.

Haben Sie eine solche Tabelle mit dem GUID-Schlüsselfeld (und dem Mandantenfeld) angelegt, muss die Tabelle im Mapping des SAP Portal Plugins registriert werden. Die Registrierung muss ab SAPPOPI 2010 nicht mehr durchgeführt werden.

Danach kann die Tabelle sofort als Fremddatengruppe der Developer-API mit vollem Zugriff in Intrexx verwendet werden.

Für die Objekte der Developer-API und den Handler "Generic Write" sind alle Funktionen wie Anlegen, Ändern und Löschen verfügbar.

Anzeigen von Dokumenten im Portal

In SAP sind Dokumente (z.B. Zeichnungen, Korrepondenz, Rechnungen) auf drei verschiedene Weisen verfügbar:

  1. als Dokument im Archivsystem (bzw. im KPro)

  2. als Dokument im Dateisystem oder erreichbar über einen FTP-Server

  3. als Dokument in der SAP-Datenbank (z.B. Cluster Tabellen, BLOB Felder)

Möchte man diese Dokumente dem Portalanwender zur Verfügung stellen, muss erst generell geklärt sein, ob der direkte Zugriff externer Anwender auf die Dokumente aus Punkt 1 und 2 ermöglicht werden kann und darf. Punkt 3 ist hier ausgenommen, da ein direkter Lesezugriff auf die SAP-Tabellen hier generell nicht möglich ist. Wenn ein direkter Zugriff von aussen technisch möglich ist, kann über eine URL gearbeitet werden. Dabei ist es egal, ob die Daten aus dem Archivsystem kommen oder bereits im Dateisystem liegen. Wichtig ist nur, dass ein Webserver, der die Dokumente ausliefert, vorhanden und für den Portalanwender erreichbar ist. Die Aufgabe des SAP-Systems besteht einzig und allein darin, die entsprechenden URLs zu erzeugen, die dann im Portal als Schaltfläche oder Link dargestellt werden. Ein Mustercoding zum Erzeugen der URL für Archivdokumente finden Sie hier. Befinden sich die Dateien auf einem Netzlaufwerk (Punkt 2), so ist das Coding ähnlich. Hier muss dann allerdings die URL generiert werden, die dem Netzlaufwerk aus Sicht des Portals entspricht. Dazu kann der Datahandler GENERIC_ARCLINK verwendet werden. Wenn technisch möglich (z.B. unter Unix), kann das Netzlaufwerk in einen Unterpfad zum Portal eingebunden werden, z.B. als Verzeichnis "docs" unter dem Portalverzeichnis "external/htmlroot". Die Dokumente sind dann für den Anwender unter "https://<host>:<port>/<portal>/docs/*" verfügbar. Kann aus Sicht des Anwenders nicht direkt auf die Dokumente zugegriffen werden, müssen die Dokumente auf einem für den Webserver zugänglichen Pfad bereitgestellt werden. Technisch gesehen müssen die Dokumente dann auf dem SAP-Applikationsserver gelesen und auf den extern zugänglichen Pfad kopiert werden. Das erfolgt am einfachsten mit dem SAP-ABAP-Befehl "OPEN DATASET … TRANSFER". Steht nur FTP für die Dateiübertragung zur Verfügung, demonstrieren die SAP-Programme "RSFTP*" den Umgang mit dem FTP-Protokoll. Über die Remote Services ist es ebenfalls möglich, Dateien zwischen SAP-Applikationsserver und Portal-Server über das RFC-Protokoll auszutauschen. Bei vielen Dokumenten (z.B. alle Rechnungen zu einem Anwender) sollen natürlich nicht immer alle Dokumente repliziert werden. Hier eignet sich die Trennung der Handler-Methoden in "GET_LIST" und "GET_DETAIL". Die Listenansicht würde auf Basis der Filterkriterien eine Übersicht zu den verfügbaren Dokumenten erzeugen. Erst das Verzweigen in die Detailsicht muss danach die Replikation zum Webserver auslösen. Dazu muss das Mustercoding um die API-Methode "GET_DETAIL" erweitert werden, die zusätzlich zur Aufbereitung der Daten auch die Replikation initiiert.--> Aus Sicherheitsgründen können die Dateinamen verschlüsselt werden. Hierfür eignet sich der SAP-Funktionsbaustein "GUID_CREATE". Eine Rechnung "1204387.pdf" wird dadurch zu "81C0C8484EB3A637E1000000C0A8DEE6.pdf". Die Sicherheit wird noch erhöht, wenn diese Dateien nach einer gewissen Zeit wieder automatisch gelöscht werden.

Ändern von SAP-Objekten

Der ändernde Zugriff auf Tabellenebene wäre zwar technisch möglich, wird aber vom SAP-Portal-Plugin nicht unterstützt. Im Entwicklerhandbuch zum Plugin ist anhand eines Beispiels beschrieben, wie mit SAP-Objekten zu verfahren ist. Prinzipiell muss das SAP-Objekt in einer Transferstruktur darstellbar sein. Dann sind alle gewünschten Methoden (z.B. auch Modify, Delete) in der API zu implementieren. In diesen Methoden wird die Transferstruktur bevorzugt auf verfügbare BAPI-Funktionen gemappt und verarbeitet. Die BAPI-Funktionen beinhalten immer auch das Sperrkonzept.

Belegfluss auf Portalobjekte

Eine Abbildung von Belegflüssen in Intrexx ist ohne Probleme möglich. Sollen allerdings auch im SAP-System Belegflüsse auf externe Objekte abgebildet werden, muss hier anders vorgegangen werden. Prinzipiell lassen sich auch in SAPGUI-Transaktionen Seiten des Portals einbinden. Dazu wird eine spezielle URL aufgerufen, die auf eine Detailseite zum Objekt verzweigt. Der Schlüssel des Objektes wird in der URL verschlüsselt. Damit externe Objekte aus den SAPGUI-Transaktionen heraus (z.B. Belegfluss) aufgerufen werden können, wird ein Business-Objekt benötigt, das eine Methode "DISPLAY" implementiert und bei der Erzeugung durch den SAP-Standard eine Sicht auf das Portal erzeugt. Der Belegfluss zwischen SAP und Nicht-SAP-Objekten wird über SAP-Standardfunktionen erzeugt. In den SAP-Transaktionen wird meistens ein Doppelklick über die Methode "DISPLAY" des Business-Objektes unterstützt.

Spezielle Konzepte

Expert-Attribute für SAP-Fremddatengruppen

Expert-Attribute werden in Intrexx-Applikationen verwendet, um zusätzliche Konfigurationsmöglichkeiten zur Verfügung zu stellen, die nicht bzw. noch nicht im Eigenschaftendialog zur Verfügung stehen. Informationen zum Expert-Modus finden Sie hier. Das Expert-Attribut "bia-handler" gibt z.B. den zu verwendenden SAP-Datahandler an (z.B. "GENERIC_VIEW"). Mit dem zusätzlichen Expert-Attribut "bia-loginuser" wird z.B. gesteuert, ob der Zugriff auf das SAP-System personalisiert erfolgen soll. Eine Auflistung von weiteren, verfügbaren Attributen und deren Verwendung finden Sie hier. Eingesetzt werden diese Expert-Aattribute mit Bezug zur Datengruppe (z.B. erzwingt "bia-forcefilter = <true|false>" einen oder mehrere Filterkriterien) oder zum enthaltenen Datenfeld (z.B. mappt "bia-KUNNR-numkeylen = <len>" die Daten je nach Richtung mit und ohne führende Nullen in der angegebenen Länge). Soll sich eine Einstellung auf ein Datenfeld beziehen, muss das Expert-Attribut in der Namenskonvention "bia-<Name des Feldes>-<option>" eingegeben werden. Das Expert-Attribut heisst dann "bia-<option>", da der Datenfeldname jeweils gegeben ist.

Generic View: Variante nolangtab

Der am häufigsten eingesetzte Datahandler "Generic View" wurde so implementiert, dass beim Zugriff auf Customizingtabellen automatisch die angebundene Texttabelle ermittelt wird und beim Selektieren der Daten nur die Texte in der Portalanmeldesprache übertragen werden. In den meisten Fällen war dies eine Arbeitserleichterung. Manche Customizingtabellen enthalten allerdings interessante Zusatzinformationen, die damit nicht mehr zur Verfügung standen. Es gab zwar einen Workaround, um diese führenden Tabellen trotzdem zu nutzen, dieser war allerdings umständlich und musste auf dem SAP-System konfiguriert werden. Erschwerend kommt hier hinzu, dass einige sehr wichtige Tabellen des SAP-Systems technisch wie Customizingtabellen aussehen (z.B. Tabelle "MARA"). Deshalb den Handler "Generic View" in der Variante "nolangtab". Mit dieser Variante wird der Zugriff auf die Texttabellen unterbunden und so der Zugriff auf Tabellen wie z.B. "MARA" ohne größeren Aufwand möglich.

Generic F4

Mit dem Expert-Attribut "mapcodefield" kann bei bestimmten SAP-Feldern die verwendeten Codierungen in sprechende Texte der SAP-F4-Hilfen gemappt werden. Der Datahandler "Generic F4" stellt diese F4-Hilfen als einfache Code-Text-Tabelle in der Anmeldesprache des Portals zur Verfügung. Damit können dann z.B. Listboxen von dynamischen Filtern ohne größere Probleme gefüllt werden. Als Tabelle wird hier "<SAP DDIC Struktur oder Tabelle>-<Tabellenfeld>" erwartet. Leider ist die Ermittlung der F4-Texte nicht immer einfach. Deshalb kann dies auch nicht für jedes Feld unterstützt werden. Über das Vererbungskonzept der SAP-Datahandler-Klasse kann man aber besondere Fälle auch unterstützen.

Dieser Handler ermöglicht den Zugriff auf Archivdokumente, die einem SAP-Objekt zugeordnet sind. Der SAP-Datahandler würde die Archivdokumente für das angegebene SAP-Business-Objekt und die zugehörige Objekt-ID ermitteln und diese als Tabelle zur Verfügung stellen. In dieser Tabelle existiert ein Feld " URL", das die URL zum Archivsystem (SAP Server oder externe Lösung) enthält. Dieses URL-Feld kann über das Expert-Attribut "bia-mapurl" in eine andere (z.B. versteckte oder externe) Darstellung überführt werden. Sinn dieses Handlers ist es auf jeden Fall, den einfachen Zugriff auf Dokumente (z.B. Auftragsbestätigung als PDF) über den direkten Weg der URL zur Verfügung zu stellen.

Der Handler erwartet als Tabelle das SAP-Business-Objekt (z.B. VBAK) oder für den generischen Zugriff das Zeichen *. In jedem Fall muss die ID des SAP-Objektes (für "VBAK" also die Belegnummer "VBELN") im Filter mitgegeben werden. Beim generischen Zugriff (*) wird außerdem auch das SAP-Business-Objekt erwartet. Die Id des SAP-Objektes kann man über dynamische Filter sehr einfach mitgeben. In den Expert-Attributen ist hier außerdem zusätzlich eingestellt, dass:

  • Die Objekt-ID automatisch in einen 10-stelligen numerischen Key konvertiert wird (Option "bia-OBJECT_ID-numkeylen = 10")

  • die Datengruppe einen Filter voraussetzt ("bia-forcefilter = true")

Generic Text

Dieser Datahandler stellt den generischen Zugriff auf Langtexte im SAP (Tabelle STXH) zur Verfügung. Das Textobjekt muss dabei als Tabellenname angegeben werden (z.B. BUS2032). Ein generischer Zugriff mit dem Zeichen * ist hier möglich, wenn das Textobjekt über Filter zur Verfügung steht. Der Datahandler liefert die Tabelle "STXH", ergänzt mit zwei Feldern, die den eigentlichen Text enthalten, zurück. Es wird automatisch ein Langtext mit dem Text ohne Formatierung (Feld "TEXT_NORMAL") und mit HTML-Formatierung ("TEXT_HTML") erzeugt. Diese Felder können dann auf einer Ansichtsseite normal eingebunden werden.

Berechtigungen auf eigene Datensätze für SAP-Fremddatengruppen

In Verbindung mit externen Daten ist es nicht einfach, festzustellen, wann die verfügbaren Datensätze eigene Datensätze sind. Am Beispiel der SAP-Auftragskopfdaten (Tabelle "VBAK") soll diese Problematik und die Lösung demonstriert werden. Je nach Kontext des Portalanwenders gibt es in dieser SAP-Tabelle Felder, die für die Identifizierung eigener Datensätze verwendet werden können. Aus der Sicht eines Kunden ist das z.B. das SAP-Feld "KUNNR", das für "eigene Datensätze" mit der eigenen Kundennummer gefüllt sein muss. Aus der Sicht eines internen Mitarbeiters allerdings könnte es das SAP-Feld "ERNAM" sein, das den SAP-Benutzer des Erfassers des Auftrags enthält. Die zweite Herausforderung besteht darin, die in SAP zu prüfenden Werte (z.B. Kundennummer, SAP Benutzername oder Personalnummer) zu ermitteln. Das erforderliche Mapping zwischen dem im Portal angemeldeten Anwender und dem zu prüfenden SAP-Wert kann auf vielfältige Weise erfolgen. Die einfachste Möglichkeit ist die Anlage eines eigenen Attributwertes über den Schemamanager im Modul "Benutzer" und die Pflege solcher Werte wie der SAP-Kundennummer an dieser Stelle.

Ein solches Attribut kann z.B. als Filterwert für Ansichtstabellen verwendet. Damit kann die Berechtigung auf SAP-Daten in Listen geregelt werden. Allerdings findet hier noch keine Auswertung der Applikationsberechtigungen auf Datengruppen statt. Eine direkte Navigation auf eine nicht erlaubte Detailseite kann damit nicht verhindert werden. Hier kommt ein Konzept zum Einsatz, das "Permission Filter" genannt wird. Vorstellen kann man sich die Wirkung wie einen permanenten Filter direkt auf der Fremddatengruppe, der auch bei der Anzeige der Detailseiten verwendet wird und damit das Laden von nicht erlaubten Seiten verhindert. Als Beispiel wird hier eine einfache Applikation verwendet, die einen Zugriff auf die SAP-Tabelle "VBAK" implementiert. Der Zugriff wird über Applikationsberechtigungen wie oben dargestellt eingeschränkt. Eigene Datensätze werden als "SAP-Datensätze, die im Feld Auftraggeber (KUNNR) den Wert aus dem Benutzerattribut BIASAP_KUNNR besitzen", interpretiert.

Auf der Seite "Alle Einträge" wird hier die SAP-Tabelle "VBAK" angezeigt. Dazu werden in den Eigenschaften der Ansichtstabelle die Fremddatengruppe SAP-Auftragsdaten und die gewünschten Datenfelder ausgewählt. Legen Sie dann einen Filter an, der das Datenfeld "Auftraggeber", das die Kundennummer in SAP enthält, mit dem Wert aus dem Benutzerattribut "BIASAP_KUNNR" vergleicht.

Speichern und veröffentlichen Sie die Applikation in der Menüstruktur. Ermitteln Sie dann die folgenden GUIDs:

  • GUID der Applikation

  • GUID der Seite, auf der sich die Tabelle mit dem soeben definierten Filter befindet

  • GUID der Tabelle, in der der Filter definiert wurde

  • GUID der SAP-Fremddatengruppe

Mit der Taste F4 können die GUIDs ganz einfach ermittelt werden, wenn das jeweilige Element (bzw. der Applikationsknoten) markiert ist.

Navigieren Sie im Intrexx-Portalverzeichnis in den Ordner "internal/application/store". Öffnen Sie den Ordner, der die GUID der Applikation als Ordernamen trägt. Navigieren Sie dann in den Ordner "structure/pages". Öffnen Sie dort die XML-Datei, die die GUID der Seite als Dateinamen trägt, in einem geeignetem Editor (z.B. Notepad++). Schließen Sie jetzt die Applikation. Ohne das Schließen der Anwendung können die Änderungen, die im nächsten Schritt durchgeführt werden, nicht gespeichert werden. Suchen Sie im Abschnitt "viewpage" nach dem gerade erzeugten Filter. Sie finden ihn unterhalb des "tablecontrol"-Abschnitts.

Schneiden Sie den kompletten Bereich <filter>...</filter> aus und behalten Sie diesen in der Zwischenablage. Speichern und schließen Sie die geänderte Datei. Wechseln Sie in den Ordner "structure/datagroups" und öffnen Sie dort die XML-Datei, die die GUID der SAP-Fremddatengruppe als Dateinamen trägt. Fügen Sie hier vor dem "datafield"-Abschnitt fügen Sie den neuen Abschnitt "<permission></permission>" ein. Fügen Sie innerhalb der Permission-Sektion den kopierten Filter ein.

Speichern und schließen Sie die geänderte XML-Datei. Öffnen Sie dann die die Applikation wieder in Intrexx. Der Filter in den Eigenschaften der Ansichtstabelle sollte jetzt nicht mehr existieren. Blenden Sie die Datenfelder über das Kontextmenü der Fremddatengruppe "SAP Auftragsdaten" ein.

Der Permission-Filter sollte jetzt unterhalb der Datengruppe sichtbar sein.

Öffnen Sie die Eigenschaften der Applikation mit einem Doppelklick auf den Applikationsknoten und wechseln Sie auf den Reiter "Berechtigungen". Setzen Sie hier das Recht "Datensatz lesen (eigene)". Speichern Sie die Applikation. Nach dem Speichern werden alle Zugriffe auf die Datengruppe mit allen Detailseiten entsprechend eingeschränkt.

Weitere Informationen

Entwicklerhandbuch Teil 3
API Entwicklerhandbuch