Eigenschaften der
RFC Select Schnittstelle Die in CIS mobile häufig verwendete "RFC Select Schnittstelle" ist eine Kombination zweier Komponenten des SAP Basis Systems:
In VB.NET bauen Sie eine Select-Anweisung auf (SAP-Syntax). Diese wird über RFC an einen generischen ABAP-Funktionsbaustein im SAP-System übermittelt und dort ausgeführt. Die Resultattabelle des Select stellt die Rückgabe des RFC-Aufrufs dar. In VB.NET verarbeiten Sie dann die zurückgegebenen Daten. Zusätzlich leistet die RFC Select Schnittstelle folgendes:
Vor- und Nachteile:
|
||||||||||||
Beispiel 1: Artikelnummer und Bezeichnung des Kunden lesen Zu einer Materialnummer wollen wir die Artikelnummer und Artikelbezeichnung des Kunden als CIS Add-on zusätzlich anzeigen. Alle Details zur Einbindung des Add-ons finden Sie im Kapitel "Add-ons implementieren" im Abschnitt Beispiel Artikelbezeichnung. Hier konzentrieren wir uns auf die Datenbeschaffung.
Im SAP-System werden diese Informationen in Transaktion VD53 angezeigt:
Die dazugehörige Datenbanktabelle ist die KNMT, hier mit Transaktion SE11 angezeigt, rot umrandet die beiden Felder die wir benötigen:
Mit den Schlüsselfeldern VKORG, VTWEG, KUNNR und MATNR möchten wir die Tabelle KNMT lesen und daraus die Felder KDMAT (Artikelnummer beim Kunden) und POSTX (Artikelbezeichnung beim Kunden) entnehmen. Das VB.NET Coding dazu kann wie folgt aussehen: ![]()
Damit das so funktioniert, insbesondere die Klasse "addonknmt" in VB.NET bekannt ist, legen Sie die Klasse im "S10 Repository" des CIS mobile Projekts an und nehmen in Ihrem VB.NET Projekt "s10cisaddon" die daraus generierten VB.NET-Klassen addonknmt und s10_addonmt auf. Das geht wie folgt: Starten Sie das S10 Repository,
Im S10 Repository die Klasse "addonknmt" aus der SAP -Tabelle KNMT generieren
Als "assembly" bitte Ihr VB.NET Projekt "s10csiaddon" eintragen. Nach der Generierung steht hier zunächst "s10cis", also das CIS mobile Standardprojekt:
Generierte Klasse addonknmt im S10 Repository
Falls Sie außer den Schlüsselfeldern nur die beiden Felder KDMAT und POSTX benötigen, können Sie alle anderen Felder löschen oder mit // am Zeilenanfang auf Kommentar setzen. Das hat den Vorteil, dass die Datenbankschnittstelle nur diese beiden Felder lesen muss, was insbesondere im Fall eines passenden Sekundärindex dann schneller geht. Falls Sie später noch andere Felder benötigen, können Sie diese entweder wieder aufnehmen (falls Sie die zusätzlichen Felder im gleichen Datenbankzugriff brauchen) oder eine zweite Klasse addonknmt2 passend für einen unterschiedlichen Datenbankzugriff anlegen. Das Feld MANDT (Mandant im
SAP-System) können Sie löschen, da es von der SAP-Select-Schnittstelle
automatisch gesetzt wird. Es schadet aber auch nichts, wenn Sie es in
der Klasse lassen. Auf jeden Fall ist es nicht erforderlich, MANDT zum
Lesen der Tabelle mit einem Wert zu versehen.
Klasse addonknmt im S10 Repository nach Löschen nicht benötigter Felder
Aus der Klasse addonknmt werden bei "Generieren" die VB.NET Dateien addonknmt.vb und s10_addonknmt.vb erzeugt. Nehmen Sie beide Dateien in Ihr VB.NET Projekt "s10ciaddon" auf. Dazu am besten die Dateien zunächst aus dem Unterverzeichnis "classes\s10cisaddon" des CIS mobile Ordners kopieren nach config\s10cisaddon:
Die beiden
generierten VB.NET Dateien liegen zunächst in classes/s10cisaddon
Kopieren Sie die beiden Dateien in Ihr Projekt, also nach config/s10cisaddon
Und nehmen Sie schließlich noch beide Dateien mit "Vorhandenes Element hinzufügen" in Visual Studio in Ihr VB.NET Projekt "s10cisaddon" auf :
|
||||||||||||
Generelles Vorgehen zum Lesen einer SAP Tabelle 1. Zu der SAP Tabelle XXXX generieren Sie im S10 Repository eine Klasse addonxxxx 2. Bei assembly= setzen Sie statt des generierten "s10cis" "s10cisaddon" ein 3. Optional: Dort die nicht benötigen Felder (aber nicht die Schlüsselfelder) entfernen 4. Auf "Generieren" klicken 5. Die beiden Dateien addonxxxx.vb und s10_addonxxxx.vb kopieren Sie von classes/s10cisaddon nach config/s10cisaddon 6. In Ihrem VB.NET Project "s10cisaddon" nehmen Sie die beiden Dateien hinzu über Projekt->Vorhandenes Element hinzufügen auf 7. Jetzt können Sie in VB.NET ein Objekt der Klasse addonxxxx anlegen und mit ic.RfcDatabaseRead() oder ic.RfcDatabaSeselect() die SAP-Tabelle lesen |
||||||||||||
Mengenzugriffe Statt einer einzelnen Tabellenzeile können Sie auch eine Menge von Zeilen aus einer Tabelle einlesen, die durch eine WHERE-Bedingung spezifziert wird. Ein ausführliches Beispiel dazu finden Sie bei dem Add-on Reklamationen. Vorgehen: 1. Zu der SAP Tabelle XXXX generieren Sie im S10 Repository eine Klasse addonxxxx2. Bei assembly= setzen Sie statt des generierten "s10cis" den Namen "s10cisaddon" ein 3. Optional: In der Klasse die nicht benötigen Felder (aber nicht die Schlüsselfelder) entfernen 4. Auf "Generieren" klicken 5. Die beiden Dateien addonxxxx.vb und s10_addonxxxx.vb kopieren Sie von classes/s10cisaddon nach config/s10cisaddon 6. In Ihrem VB.NET Project "s10cisaddon" nehmen Sie die beiden Dateien hinzu über Projekt->Vorhandenes Element hinzufügen 7. Im S10 Repository nehmen Sie in der Klasse "addon" einen "folder" auf, der Objekte der Klasse addonxxx enthält: folder all_xxxx class="addonxxxx" 8. Jetzt können Sie in VB.NET mit all_xxxx.RfcDatabaseSelect() die gewünschten Tabellenzeilen einlesen 9. Mit der Schleife For all
x as addonxxxx in all_xxxx |
||||||||||||
Beschreibung von
ic.RfcDatabaseRead
(aus S10 Forum)
|
||||||||||||
Beschreibung von
ic.RfcDatabaseSelect
(aus S10 Forum)
|
||||||||||||
Beschreibung von
folder.RfcDatabaseSelect
(aus S10 Forum)
|
||||||||||||
Bündelung von Zugriffen Wenn Sie z.B. zwei Objekte dim sapxxxx like addonxxxx dim sapyyyy like addonyyyy angelegt haben, zu denen Sie mit ic.RfcDatabaseRead() die Werte aus den SAP-Tabellen xxxx und yyyy lesen: sapxxxx.ic.rfcdatabaseread() sapyyyy.ic.rfcdatabaseread() werden nacheinander zwei RFC-Aufrufe an das SAP-System durchgeführt. Stattdessen können Sie mit
sapxxxx.ic.rfcdatabaseread(deferred:=True) ic.RfcExecuteDeferredCalls(rfcmessages) arbeiten. In diesem Fall werden beide Datenbankzugriffe in ei nem einzigen RFC-Aufruf verarbeitet.Auch Mengenzugriffe über folder.RfcDatabaseSelect können Sie über deferred:=True in die gebündelte Verarbeitung aufnehmen. |
||||||||||||
Verwenden des Cache Unabhängig von einer eventuellen Pufferung der Tabellen auf dem SAP Applikationsserver können Sie einen Zugriffscache auf der Maschine nutzen, auf dem CIS mobile läuft, und damit in vielen Fällen den RFC-Zugriff vermeiden. Das geschieht einfach durch die Zusatzangabe dbcache="yes" in der Klassendefinition im S10 Repository:
Alle gefundenen Einträge werden dann lokal gespeichert und zunächst dort gesucht. Der Cacheinhalt wird am Anfang des Tages weggeworfen und neu gebildet, d.h. die Einträge im Cache sind maximal 24 Stunden lang veraltet. Damit ist der Cache gut nutzbar für Tabellen, bei denen ein Update am nächsten Tag ausreichend ist. Zum Beispiel: Bezeichnungen von Werken, Lagerorten, Auftragsarten, Steuerkennzeichen, Zahlungsbedingungen etc. Die Gesamtgröße des Cache ist im S10 Repository für CIS mobile unter "Eigenschaften" definiert:
Der Cache wird für alle CIS
mobile Benutzer gemeinsam genutzt, d.h. was für einen Benutzer
eingelesen wurde, wird für alle anderen Benutzer verwendet.
|