Funktion |
Der Funktionsbaustein
/guixt/select
bietet eine komfortable Möglichkeit, Datenbankzugriffe in GuiXT Scripten
durchzuführen. Der Baustein wird im Script über Call aufgerufen. Sowohl Einzelsatzzugriffe als auch Mengenzugriffe sind unterstützt. Voraussetzung:
Hinweis: Bitte auch den Baustein /guixt/dbselect beachten; dieser Baustein erlaubt die Angabe von beliebig vielen Rückgabefeldern und ist bei insbesondere bei grossen Datenmengen schneller als /guixt/select. |
Import des Funktionsbausteins |
Falls Sie den Funktionsbaustein ohne Einspielen des Transportauftrags direkt mit SE37 anlegen möchten, können Sie die Datei Sourcecode /guixt/select nutzen. |
Benutzerberechtigungen |
Sie können für den Aufruf des
Funktionsbausteins entweder den im GuiXT Profile hinterlegten
RFC-Benutzer oder den aktuell angemeldeten Benutzer (Call-Anweisung
mit Zusatzoption -currentUser) für
die RFC-Verbindung verwenden. Die folgenden Berechtigungen sind erforderlich (entweder für den RFC-Benutzer oder bei Option -currentUser für den angemeldeten Benutzer):
Berechtigung zum RFC-Aufruf
der Funktionsgruppe /GUIXT/DB01: Dabei ist XXXX die Berechtigungsgruppe der zu lesenden Tabelle (abgelegt in SAP-Tabelle TDDAT). Hinweis: Die
Tabellen-Lese-Berechtigung S_TABU_DIS wird in gleicher Weise in den SAP-Transaktionen
SE16, SM30 und im Standard-Funktionsbaustein RFC_READ_TABLE geprüft. |
Parameter |
Folgende Parameter stehen zur
Verfügung:
|
in.table= |
Name der Tabelle oder des
Tabellenviews, der gelesen werden soll. Beispiel: ... in.table="T001"
Hilfreich sind auch die zu den
Suchhilfen generierten Views M_... (z.B. M_MAT11) sowie Views, die einen
Join mehrerer Tabellen darstellen. Zum Beispiel liefert der View "VBAKUK"
zu einem Kundenauftrag sowohl allgemeine Informationen aus Tabelle VBAK
als auch Statusinformationen aus Tabelle VBUK.
|
in.Condition= |
Suchbedingung im ABAP-Format
der Select-Anweisung. Beispiel: ... in.Condition="BUKRS = '1000' ". Bitte beachten, daß Strings in ABAP in einfache Hochkommata eingeschlossen werden. Variablen wie üblich mit &V[varname] angeben: ... in.Condition="BUKRS = '&V[mybukrs]' ". Falls Sie eine Spalte mit dem Inhalt einer zweiten Spalte vergleichen möchte, geht das über die Notation table~spalte, z.B.: ... in.Condition="PARVW = 'RE' AND KUNNR <> KNVP~KUNN2" Weitere Details siehe Dokumentation der ABAP-Select-Anweisung.
Eine Suchbedingung muß immer angegeben sein, entweder über in.Condition= oder über table.Conditiontable=. Bei
in.Condition=
ist die Gesamtlänge der Bedingung auf 4000 Byte beschränkt. Wenn Sie
sehr viele Schlüssel übergeben wollen, z.B. 1000 Kundennummern,
verwenden Sie bitte
table.Conditiontable=. |
in.Fields= |
Optionale Liste von Feldnamen,
durch Komma voneinander getrennt. Nur die angegebenen Felder werden aus
der Datenbank gelesen. Beispiel: ... in.Fields="KUNNR,NAME1,NAME2,ORT01,STRAS,PSTLZ,LAND1". Bei Verwendung von out.V1= out.V2= ... oder out.V1Table= out.V2Table= ... ist die Feldliste erforderlich; die Felder der Feldliste werden dann in die angegebenen Variablen bzw. Langtexte gestellt. Im Fall von out.Result= oder table.Resulttable= wird der gesamte Satz zurückgegeben, aber nur die angegebenen Felder sind gefüllt. |
in.Orderby= |
Optionale Liste von Feldnamen,
durch Komma voneinander getrennt, nach denen die Resultattabelle
aufsteigend sortiert wird. Beispiel: ... in.Orderby="ORT01,NAME1".
Hinter jedem Feldnamen kann
durch den Zusatz "DESCENDING" eine absteigende Sortierung erreicht
werden. Beispiel: |
in.Distinct= | Mit Wert "X" wird ein "Select Distinct" ausgeführt. |
out.Found= | Erhält den Wert "X", wenn mindestens ein Satz zurückgeliefert wurde, sonst "". |
out.Reccount= | Anzahl der zurückgelieferten Sätze |
out.Result= |
Enthält den ersten
zurückgelieferten Satz, oder "" falls nichts gefunden wurde. Falls
in.Fields
angegeben ist, sind nur die dort angegebenen Felder gefüllt. Beispiel: // Testkonto Call /guixt/select in.table="KNA1" in.fields="NAME1,ORT01" in.condition="KUNNR = '&V[mykunnr]'" out.result="kwa"// Testausgabe |
out.V1= out.V2= ... out.V10= |
Nur sinnvoll in Verbindung mit
in.Fields.
Die dort angegebenen Felder werden für den ersten gefundenen Satz in die
jeweils angegebenen Variablen gesetzt. Beispiel: // Testkonto Call /guixt/select in.table="KNA1" in.fields="NAME1,ORT01" in.condition="KUNNR = '&V[mykunnr]'" out.V1="name" out.v2="city"// Testausgabe
|
table.Resulttable= |
Enthält die zurückgelieferten
Sätze. Falls
in.Fields
angegeben ist, sind nur die dort angegebenen Felder gefüllt. Beispiel: Lesen aller Kunden in Ort "Heidelberg" Call /guixt/select in.table="KNA1" in.fields="KUNNR,NAME1" in.condition="ORT01 = 'Heidelberg'" table.resulttable="r"// Testausgabe label next CopyText fromText="r" toString="kwa" line="&V[i]"if Q[ok] Message "&V[kwa](KNA1-KUNNR) &V[kwa](KNA1-NAME1)" Set V[i] &V[i] + 1 goto next endif
|
table.V1table= table.V2table= ... table.V10table= |
Nur sinnvoll in Verbindung mit
in.Fields.
Die dort angegebenen Felder werden in die jeweiligen Langtexte gestellt,
eine Zeile pro gefundenem Satz. Beispiel: Lesen aller Kunden in Ort "Heidelberg": Call /guixt/select in.table="KNA1" in.fields="KUNNR,NAME1" in.condition="ORT01 = 'Heidelberg'" table.v1table="r1" table.v2table="r2"// Testausgabe label next CopyText fromText="r1" toString="account" line="&V[i]"if Q[ok] CopyText fromText="r2" toString="name" line="&V[i]" Message "&V[account] &V[name]" Set V[i] &V[i] + 1 goto next endif
|
table.Conditiontable= |
Suchbedingung im ABAP-Format
der Select-Anweisung. Im Unterschied zu
in.Condition=
übergeben
Sie hier eine Langtextvariable, die beliebig viele Zeilen enthalten
kann.
Beispiel: Aus einer Liste von Kontonummern in einer Langtextvariablen "kns" wird die Bedingung für den Select-Aufruf in einer Langtextvariablen "ctab" zusammengestellt: Set text[ctab] ""Set V[i] 1 label nextCopyText fromText="kns" toString="kn" line="&V[i]" if Q[ok] if V[i=1] Set V[condline] "KUNNR = '&V[kn]'" else Set V[condline] "OR KUNNR = '&V[kn]'" endif CopyText fromString="condline" toText="ctab" -appendLine Set V[i] &V[i] + 1 goto next endif Call /guixt/select in.table="KNA1" in.fields="KUNNR,NAME1,ORT01" table.conditiontable="ctab" ... |
Komponente | GuiXT + InputAssistant |