Erweiterung SQUE0001: Private Ablage von Daten 

SAP Query verfügt über mehrere Möglichkeiten, die von einer Query ermittelten Daten an andere Software-Produkte weiterzugeben. Zum Beispiel können diese Daten

In allen Fällen ist die Vorgehensweise ähnlich. Die ermittelten Daten werden in einer internen Tabelle (Datentabelle) bereitgestellt, deren Felder in Reihenfolge und Typ den Feldern entsprechen, die in der Liste ausgegeben werden. Eine weitere interne Tabelle (Beschreibungstabelle) enthält eine Beschreibung der einzelnen Felder der Datentabelle. Neben Typ und Position in der Liste sind z.B. Informationen über die Feldnamen enthalten. Diese beiden Tabellen werden an die oben genannten Produkte übergeben und von ihnen weiter verarbeitet.

SAP Query stellt diese Schnittstelle auch allgemein zur Verfügung, so daß jeder Kunde die Möglichkeit hat, eigene Software-Produkte anzuschließen. Dies ist das Ziel der Erweiterung SQUE0001.

Mit der Einführung der Erweiterten Ablage (siehe Erweiterte Ablage) ist die Funktionalität der Privaten Ablage ersetzt worden. Die Funktion Private Ablage wird jedoch aus Kompatibilitätsgründen auch weiterhin unterstützt. Es wird allerdings empfohlen die in der privaten Ablage enthaltenen Funktionen neu zu fassen und als Funktionen in die Erweiterte Ablage einzubringen.

Beachten Sie, daß die Funktionen der Erweiterten Ablage nur im online abgearbeitet werden können und demzufolge bei der Hintergrundverarbeitung nicht aufgerufen werden können. Die private Ablage kann dagegen auch bei der Hintergrundverarbeitung angesprochen werden.

Die Erweiterung SQUE0001 besteht aus zwei Komponenten:

Die Aktivierung der Erweiterung im Rahmen eines Projektes (Transaktion CMOD) bewirkt, daß in jedem von der Query erzeugten Report eine zusätzliche interaktive Funktion Private Ablage (Funktionscode: +DAT) zur Verfügung steht, durch deren Aktivierung der oben genannte Funktionsbaustein gerufen wird. Im wesentlichen werden dem Funktionsbaustein die oben erwähnten Tabellen (Datentabelle und Beschreibungstabelle) übergeben. Außerdem erscheint auf dem Selektionsbild ein zusätzlicher Parameter, der wie bei den anderen interaktiven Funktionen (EXCEL, Grafik, EIS, Dateiablage, Sichern usw.) die Möglichkeit bietet, die zusätzliche Funktion Private Ablage direkt auszuführen, d.h. ohne vorherige Anzeige der Liste. Da der Parameter auf dem Selektionsbild Private Ablage heißt, wird empfohlen, die Menüerweiterung ebenso zu benennen (entspricht dem Vorschlag von SAP).

Nach Aktivierung der Erweiterung sollten alle Queries neu generiert werden, da ansonsten der zusätzliche Parameter auf dem Selektionsbild nicht erscheint. Dies kann am einfachsten mit Hilfe der Funktion Springen ® Queryverzeichnis in der Komponente zur Pflege von InfoSets erreicht werden.

Funktionsbaustein EXIT_RSAQEXCE_001

Im folgenden wird beschrieben, welche Parameter dem Funktionsbaustein EXIT_RSAQEXCE_001 übergeben werden und wie die Werte dieser Parameter zu interpretieren bzw. zu verarbeiten sind. Dazu wird auf folgendes Beispiel zurückgegriffen:

Ein Nutzer hat im Mandanten 03 in der Benutzergruppe RX eine Query X1 angelegt, die aus einer einzeiligen Grundliste, einer Statistik und einer Rangliste besteht. In der Grundliste werden die Felder

KNA1-KUNNR

Debitorennummer

KNA1-NAME1

Name

KNC1-GJAHR

Geschäftsjahr

KNC1-UM01U

Umsatz in der Buchungsperiode 1

T001-WAERS

Währungsschlüssel

in dieser Reihenfolge ausgegeben. In der Statistik werden die Felder

KNA1-LAND1

Länderschlüssel

KNC1-UM01U

Umsatz in der Buchungsperiode 1

in dieser Reihenfolge ausgegeben, wobei für das Feld KNC1-UM01U außerdem Angaben über die Anzahl der gelesenen Sätze, den prozentualen Anteil und den Mittelwert gefordert werden. In der Rangliste werden die Felder

KNA1-KUNNR

Debitorennummer

KNA1-NAME1

Name

KNC1-UM01U

Umsatz in der Buchungsperiode 1

in dieser Reihenfolge ausgegeben.

Parameter des Funktionsbausteins EXIT_RSAQEXCE_001

Der Funktionsbaustein EXIT_RSAQEXCE_001 besitzt folgende Parameter:

PROGRAM

Programm, das die Übergabe veranlaßt hat

LIST_ID

Id der übergebenen Teilliste

LISTTEXT

Titel der übergebenen Teilliste

DATATAB

Datentabelle

LISTDESC

Beschreibungstabelle für die Felder der Datentabelle

Parameter PROGRAM

Dieser Parameter enthält den Namen des Query-Reports, der den Aufruf des Funktionsbausteines veranlaßt hat. Aus diesem Namen kann ermittelt werden, welche Query abgearbeitet wurde, da er stets folgenden Aufbau hat.

Aqmmb...bq...q

mm

= Mandant bzw. ZZ im Globalen Bereich

b…b

= Name der Benutzergruppe

q…q

= Name der Query

Im vorliegenden Beispiel lautet der Reportname deshalb AQRX==========X1============ .

Parameter LIST_ID

Dieser Parameter LIST_ID enthält ein dreistelliges Kürzel zur Identifizierung der übergebenen Datentabelle. Jede von einer Query erzeugte Liste kann aus mehreren Teillisten bestehen (eine Grundliste, mehrere Statistiken, mehrere Ranglisten). Die an den Funktionsbaustein übergebene Datentabelle (DATATAB) enthält jeweils nur die Daten einer Teilliste. Die Beschreibungstabelle (LISTDESC) enthält jedoch stets die Beschreibung für die Felder aller Teillisten.

Die möglichen Werte des Parameters sind

G00

wenn DATATAB die Daten der Grundliste enthält

Txx

wenn DATATAB die Daten der Statistik xx (01,02,...) enthält

Rxx

wenn DATATAB die Daten der Rangliste xx (01,02,...) enthält

Damit besitzt der Parameter LIST_ID zwei Funktionen. Einerseits kann über ihn ermittelt werden, welchen Typ die übergebene Teilliste hat, und andererseits können in der Beschreibungstabelle die zutreffenden Einträge bestimmt werden.

Im vorliegenden Beispiel enthält der Parameter LIST_ID den Wert G00 , falls die Daten der Grundliste übergeben werden. Werden die Daten der Statistik übergeben, ist der Wert T01 . Der Parameter enthält den Wert R01 , falls die Daten der Rangliste übergeben werden.

Parameter LISTTEXT

Dieser Parameter enthält einen Text, der bei der Definition der Query der entsprechenden Teilliste zugeordnet wurde.

Parameter DATATAB

Diese Tabelle enthält die Daten der übergebenen Teilliste. Die Felder dieser Tabelle entsprechen in Reihenfolge und Typ den Feldern, die in der Teilliste ausgegeben wurden. Jeweils eine Tabellenzeile entspricht einer Listenzeile. Dabei werden eventuell vorhandene Zeilenumbrüche in Zeilen von Grundlisten nicht berücksichtigt, d.h. solche umgebrochenen Zeilen bilden trotzdem eine Tabellenzeile.

Da der Aufbau der Datentabelle von der Definition der übergebenen Teilliste abhängig ist, kann ihre Struktur nicht mit übergeben werden, sondern muß im Funktionsbaustein selbst bestimmt werden. Dazu kann die Beschreibungstabelle LISTDESC mit zu Hilfe genommen werden. Der Zugriff auf einzelne Felder der Datentabelle ist mit Hilfe von Feldsymbolen und der Anweisung ASSIGN COMPONENT möglich.

Wird im vorliegenden Beispiel die Grundliste übergeben, so besteht eine Zeile der Datentabelle aus 5 Feldern mit folgenden Typen, Längen und Dezimalstellen:

1. Feld: Typ C, Länge 10

(KNA1-KUNNR)

2. Feld: Typ C, Länge 35

(KNA1-NAME1)

3. Feld: Typ N, Länge 04

(KNC1-GJAHR)

4. Feld: Typ P, Länge 08, Dez. 02

(KNC1-UM01U)

5. Feld: Typ C, Länge 05

(T001-WAERS)

Wird die Statistik übergeben, so besteht eine Zeile der Datentabelle aus 5 Feldern mit folgenden Typen, Längen und Dezimalstellen:

1. Feld: Typ C, Länge 03

(KNA1-LAND1)

2. Feld: Typ P, Länge 16, Dez. 02

(Summe von KNC1-UM01U)

3. Feld: Typ I, Länge 04

(Anz gelesene Sätze)

4. Feld: Typ P, Länge 04, Dez. 03

(prozentualer Anteil)

5. Feld: Typ P, Länge 16, Dez. 02

(Mittelwert von KNC1-UM01U)

Wird die Rangliste übergeben, so besteht eine Zeile der Datentabelle aus 4 Feldern mit folgenden Typen, Längen und Dezimalstellen:

1. Feld: Typ C, Länge 06

(Rang in der Rangliste)

2. Feld: Typ C, Länge 10

(KNA1-KUNNR)

3. Feld: Typ C, Länge 35

(KNA1-NAME1)

4. Feld: Typ P, Länge 16,Dez. 2

(Summe von KNC1-UM01U)

Die Angaben über Typ, Länge und Dezimalstellenzahl können entweder mit Hilfe der ABAP-Anweisung DESCRIBE FIELD oder mit Hilfe der Beschreibungstabelle LISTDESC (siehe unten) ermittelt werden.

Parameter LISTDESC

Die Beschreibungstabelle LISTDESC enthält eine Beschreibung der Felder der Datentabelle DATATAB, die neben Typ, Länge und Dezimalstellenzahl auch Informationen umfaßt, die nicht mit Hilfe der ABAP-Anweisung DESCRIBE FIELD ermittelt werden können. Wenn eine Query aus mehreren Teillisten besteht (wie im vorliegenden Beispiel), so enthält die Beschreibungstabelle immer die Beschreibung für die Felder aller Datentabellen (aller Teillisten), die von dieser Query übergeben werden können. Über den Parameter LIST_ID können dann die passenden Einträge aus der Beschreibungstabelle besorgt werden.

Im vorliegenden Beispiel würde also die Beschreibungstabelle stets die Beschreibung für die Felder der Datentabelle der Grundliste, die Felder der Datentabelle der Statistik und die Felder der Datentabelle der Rangliste enthalten.

Die Beschreibungstabelle besitzt die Struktur RSAQLDESC. Diese Struktur besteht aus folgenden Feldern:

FNAMENEW

TYP C, Länge 70

Feldname (Quellfeld)(Rel.4.0)

FNAMEINT

TYP C, Länge 30

Feldname (Datentabelle)

FKEY

TYP C, Länge 1

Flag für Schlüsselspalte

FGTYPE

TYP C, Länge 1

Flag für Grafiktyp

FNZERO

TYP C, Länge 1

Flag für Nullenausgabe

FSUM

TYP C, Länge 1

Summationsflag

FSONLY

TYP C, Länge 1

Sortierflag

FSORT

TYP N, Länge §

Sortierstufe

FSODS

TYP C, Länge 1

Sortierrichtung

FSUBT

TYP C, Länge 1

Flag für Zwischensummen

FLPOS

TYP N, Länge 4

Position des Felds (wie FPOS)

FNUMB

TYP C, Länge 2

Kürzel der Feldgruppe

FNUMBT

TYP C, Länge 24

Feldgruppentext

LID

TYP C, Länge 03

Id der Teilliste

FPOS

TYP N, Länge 02

Position des Feldes

FCONT

TYP N, Länge 01

Nummer der Folgezeile

FCURPOS

TYP N, Länge 03

Listenposition des Feldes

FGRAF

TYP C, Länge 01

Textflag für Grafik

FTYP

TYP C, Länge 01

ABAP-Typ des Feldes

FLEN

TYP N, Länge 03

Länge des Feldes

FDEC

TYP N, Länge 02

Dezimalstellenzahl des Feldes

FOLEN

TYP N, Länge 03

Ausgabelänge des Feldes

FCUR

TYP C, Länge 01

Währungsflag

FADD

TYP C, Länge 01

Flag für internes Feld

FDESC

TYP C, Länge 40

Feldbeschreibung (Langtext)

FNAME

TYP C, Länge 30

Feldname (Quellfeld)

FCOL

TYP C, Länge 30

Spaltenüberschrift für Feld

LID

kennzeichnet, zu welcher Teilliste der Query das beschriebene Feld gehört. Es sind die gleichen Werte wie beim Parameter LIST_ID möglich (vgl. oben)

FPOS

beschreibt die Position des Feldes in der durch LID gekennzeichneten Teilliste. Die Positionen werden fortlaufend ab 1 gezählt (01, 02,...).

FCONT

beschreibt die Nummer der Fortsetzungzeile, in der das Feld ausgegeben wird (0, 1,...). Dies kann nur bei Grundlisten auftreten, die aufgrund einer zu geringen Listenbreite (LINE-SIZE) umgebrochen werden. Die Numerierung der Felder (gemäß FPOS) wird davon nicht betroffen, d.h. diese Numerierung erfolgt fortlaufend und unabhängig vom Wert des Feldes FCONT. Normalerweise wird dieses Feld für die private Ablage nicht benötigt.

FCURPOS

beschreibt die Anfangsposition des Feldes in der Listenzeile, falls das Feld ein numerisches Feld ist (FTYP = P, I, F). Ansonsten hat FCURPOS den Wert 000. Normalerweise wird dieses Feld für die private Ablage nicht benötigt.

FGRAF

besitzt den Wert X, falls der Wert des beschriebenen nichtnumerischen Feldes als Erläuterungstext für die Grafik verwendet werden soll. Normalerweise wird dieses Feld für die private Ablage nicht benötigt.

FTYP

beschreibt den ABAP-Typ des Feldes und kann die Werte C, D, F, I, N, P, T oder X annehmen.

FLEN

beschreibt die Länge des Feldes in Byte.

FDEC

beschreibt die Anzahl der Dezimalstellen des Feldes. Diese Angabe ist nur von Interesse, wenn FTYP den Wert P besitzt. In allen anderen Fällen hat FDEC den Wert 00.

FOLEN

beschreibt die Ausgabelänge des Feldes in der Teilliste, wie sie bei der Definition der Query festgelegt wurde.

FCUR

kennzeichnet ein Feld als

F Währungsbetragsfeld

W Währungsschlüssel bzw. Währungsfeld

M Mengenfeld

E Einheitenfeld

FADD

beschreibt, ob das Feld ein zusätzliches, von der Query selbst erzeugtes Feld ist. Folgende Werte sind möglich:

R Rangangabe (nur in Ranglisten)

C Anzahl der gelesenen Sätze (nur in Statistiken)

P Prozentangabe (nur in Statistiken)

M Mittelwert (nur in Statistiken)

FDESC

enthält die Feldbeschreibung, d.h. die Bezeichnung für das Feld, die der Nutzer auch bei der Definition der Query zur Verfügung gestellt bekommt.

FNAME

enthält den Namen des Feldes im Query-Report, aus dem die Information für die Datentabelle gewonnen wurde (bis Release 4.0)

FCOL

enthält eine einzeilige Spaltenüberschrift für das Feld der Datentabelle, das durch einen Eintrag in der Tabelle LISTDESC beschrieben wird.

FNAMENEW

wie FNAME (ab Release 4.0)

FNAMEINT

enthält den Namen des Feldes in der Datentabelle. Dieser Name kann verwendet werden, um mit der Anweisung ASSIGN COMPONENT dynamisch auf das Feld in der Datentabelle zuzugreifen

FKEY

besitzt den Wert X, falls das Feld in der Liste als Schlüsselfeld (Schlüsselspalte) ausgegeben wurde.

FGTYPE

kennzeichnet den Inhalt des Feldes als
S   Symbol
I    Ikone

FNZERO

besitzt den Wert X, falls das Feld in der Liste mit der Option NO-ZERO ausgegeben wurde.

FSUM

besitzt den Wert X, falls über das Feld in der Liste summiert wurde

FSONLY

besitzt den Wert X, wenn in der Liste nach diesem Feld sortiert wurde, das Feld selbst aber nicht ausgegeben wurde

FSORT

enthält die Sortiernummer, falls nach dem Feld in der Liste sortiert wurde

FSODS

besitzt den Wert X, wenn in der Liste nach dem Feld absteigend sortiert wurde

FSUBT

besitzt den Wert X, wenn in der Listenach dem Feld sortiert wurde und bei dieser Sortierung Zwischensummen gebildet wurden

FLPOS

wie FPOS

FNUMB

Feldgruppe des Feldes, dessen Name in FNAMENEW steht

FNUMBT

Langtext der Feldgruppe