AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
04.06.20 - 18:31:41
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Lotus Notes / Domino Sonstiges
| |-+  OLE/COM-Programmierung
| | |-+  Feldvalidierung über SAP
« vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: Feldvalidierung über SAP  (Gelesen 12355 mal)
Tannibal
Aktives Mitglied
***
Offline Offline

Geschlecht: Männlich
Beiträge: 231



« am: 12.06.14 - 14:02:32 »

Hallo ihr,

in einer Notes-Datenbank werden Felder gefüllt und sollen dann mit SAP-Tabellen verglichen werden (ob Wert vorhanden ist etc).

Nun ist die wohl schnellste Methode dies über CreateObject("SAP.Functions.Unicode") und RFC_READ_TABLE zu machen.
Hat hierfür jemand ein funktionierenden Beispiel-Code?
Wenn ich die VBA-Syntax übernehme erhalte ich bei  tblFields(1, "FIELDNAME") = "LIFNR" einen Type-Missmatch.
Ein Beispiel für einen anderen BAPI hier im Forum hatte funktioniert.


Alternativ haben wir auch einen LEI/SAP-Connector-Server im Einsatz, womit ich über Agent.RunOnServer an die Daten kommen könnte.
Jedoch ist dies deutlich langsamer, da mit Temporären Dokumenten gearbeitet werden muss. (besonders für Tochter-Firmen)
Gespeichert

Gruß, Daniel
----------------
14x Domino 9FP10/10FP3
inkl. Traveler , LEI, Sametime, Connections
1,2k Notes-Clients 9.0.1 FPx
Tannibal
Aktives Mitglied
***
Offline Offline

Geschlecht: Männlich
Beiträge: 231



« Antworten #1 am: 07.11.14 - 10:05:32 »

Ich habe dieses Problem mittlerweile gelöst. Mit tblFields.Value(1, "FIELDNAME") = "LIFNR"  funktionierts.

Ich versuche die nächsten Tage eine kleine Doku zu schreiben, wie man die verschiedenen Arten von RFC-Bausteinen aufzurufen hat.
Gespeichert

Gruß, Daniel
----------------
14x Domino 9FP10/10FP3
inkl. Traveler , LEI, Sametime, Connections
1,2k Notes-Clients 9.0.1 FPx
Tannibal
Aktives Mitglied
***
Offline Offline

Geschlecht: Männlich
Beiträge: 231



« Antworten #2 am: 10.11.14 - 16:16:22 »

Ich hoffe jemand kann das Nachfolgende brauchen  Evil
Wenn jemand einen Fehler findet oder Verbesserungsvorschläge hat, immer her damit.


Inhalt

1. Grundsätzliches
2. Initialisierung des SAP-Objects
3. Anmeldung am SAP-System
4. SAP-Baustein initialisieren
5. Übergabe von Werten
6. verschiedene Arten von Bausteinen
6.1 Rückgabewerte über Export-Parameter
6.2 Rückgabewerte über Tabelle(n)
6.3 RFC_Read_Table



1. Grundsätzliches
Voraussetzung für nachfolgende Skripte ist eine installierte SAP-GUI Version 7.20 Patch 2 oder höher. (zumindest für Unicode-Systeme)
Getestet wurde alles mit Notes 9.0.1 FP2 und SAP-GUI 7.30 Patch 9.
SAP-GUI 7.40 enthält aktuell noch Fehler, wodurch einige RFC-Calls nicht sauber funktionieren!


2. Initialisierung des SAP-Objects
Code:
Dim FunctionCtrl As Variant
Dim SAPConnection As Variant

Set FunctionCtrl = CreateObject("SAP.Functions.Unicode")
Set SAPConnection = FunctionCtrl.Connection


3. Anmeldung am SAP-System
Code:
SAPConnection.Client = "010" 'Mandant
SAPConnection.User = "BENUTZER" 'Benutzername GROß
SAPConnection.Password = "Passwort" 'Passwort
SAPConnection.Language = "DE" 'Sprache
SAPConnection.HostName = "10.1.100.200" 'IP
SAPConnection.SystemNumber = "80" 'System Nummer
SAPConnection.System = "P01" 'SID
SAPConnection.UseSAPRFCIni = False

If Not SAPConnection.logon(0, True) Then
MsgBox("Anmeldung fehlgeschlagen")
Else
MsgBox("Anmeldung OK")
End If


4. Remote-Baustein initialisieren

Der SAP-Baustein muss Remote-fähig sein!
Code:
Dim rfc As Variant
Set rfc = FunctionCtrl.Add("RFC_SYSTEM_INFO")


5. Übergabe von Werten
Code:
Dim rfcExport As Variant
rfc.exports("I_MATNR") = "00324188"
rfc.exports("I_WERKS") = "1000"
rfc.exports("I_LGORT") = "340L"


6. verschiedene Arten von Bausteinen
   Mir sind bisher drei Arten von Bausteinen über den Weg gelaufen:
-   Rückgabewerte sind Export-Parameter
-   Rückgabewerte sind Tabellen
-   Spezialfall RFC_Read_Table


6.1 Rückgabewerte über Export-Parameter

Folgender Code zeigt ein Beispiel am Baustein RFC_SYSTEM_INFO, welches über Export Parameter die System-Infos zurückliefert.
Code:
'Zuweisung des Export-Felds aus SAP in Import-Variable
Set rfcExport = rfc.Imports("RFCSI_EXPORT")

'Zusätzliches Export Feld Current_Resources
Dim rfcExport2 As Varaint
Set rfcExport2 = rfc.Imports("CURRENT_RESOURCES")

'Baustein ausführen
If rfc.call = False Then
MsgBox("Fehler beim rfc-Call")
Exit Sub
Else
'Wenn Export-Paramter in mehrere Werte unterteilt ist, wie bei RFCSI_EXPORT (rfcExport)
MsgBox(rfcExport.value("RFCDEST"))

'Wenn Export-Parameter ein einzelner Wert ist -> rfcExport2
MsgBox(rfcExport2.value)
End If


6.2 Rückgabewerte über Tabelle(n)

Beispiel mit Baustein BAPI_USER_GETLIST und Tabelle USERLIST
Code:
Set rfc = FunctionCtrl.Add("BAPI_USER_GETLIST")

'Rückgabe-Tabelle
Set rfcExport = rfc.Tables("USERLIST")

'RFC aufrufen
If Not rfc.Call() Then
Error 1000, rfc.Exception
End If

'Überprüfen, ob Werte zurückgeliefert wurden
If (rfcExport.RowCount = 0) Then
MsgBox "No records returned by ECC"
Exit Sub
End If

'Tabelle Loopen und zwei Werte auslesen
Dim index As Long
index = 0

Do While index < 2
index = index + 1
MsgBox(rfcExport(index,"USERNAME"))
Loop


6.3 RFC_Read_Table

Mit diesem Baustein können beliebige Tabellen ausgelesen werden. Übergeben werden muss die Tabelle und ein Trennzeichen.
Außerdem müssen im Vorfeld die Rückgabe-Tabellen definiert werden.

   OPTIONS      beschreibt ein SELECT-Statement
   FIELDS      beschreibt die Übergabe-Felder
   DATA      enthält die Datensätze

Beispiel mit Tabelle QALS (Prüflose)
Code:
Set rfc = FunctionCtrl.Add("RFC_READ_TABLE")

'Übergabe-Parameter
rfc.exports("QUERY_TABLE") = "QALS"
rfc.exports("DELIMITER") = "~"

'Tabellen initialisieren
Dim tblData As Variant
Dim tblOptions As Variant
Dim tblFields As Variant

Set tblFields = rfc.Tables("FIELDS")
Set tblData = rfc.Tables("DATA")
Set tblOptions = rfc.Tables("OPTIONS")

'Tabelle FIELDS definieren
tblFields.AppendRow
tblFields.Value(1, "FIELDNAME") = "PRUEFLOS"
tblFields.AppendRow
tblFields.Value(2, "FIELDNAME") = "WERK"

'RFC aufrufen
If Not rfc.Call() Then
Error 1000, rfc.Exception
End If

If (tblData.RowCount = 0) Then
MsgBox "No records returned by ECC"
Exit Sub
End If

'Die MsgBox gibt nun den Datensatz bei Index x zurück
'Die Werte der Spalten sind durch das vorher definierte Trennzeichen getrennt. „WA“ ist die (einzige) Spalte der Tabelle DATA
Dim index As Long
index = 0

Do While index < 2
index = index + 1
MsgBox(tblData.Value(index,"WA"))
Loop
« Letzte Änderung: 12.11.14 - 14:52:42 von Tannibal » Gespeichert

Gruß, Daniel
----------------
14x Domino 9FP10/10FP3
inkl. Traveler , LEI, Sametime, Connections
1,2k Notes-Clients 9.0.1 FPx
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: