Zur Homepage www.HI-Tier.de Batch-Abfragen
Zurück Home Nach oben Weiter
Öffentlicher Bereich für Entwickler

 

Inhalt

bulletKurzbeschreibung Hit-Abfragen
bulletAbfragen im HitBatch
bulletAllgemeiner Aufbau einer CSV-Datei für Abfragen
bulletAntwortformat des HitBatch
bulletBeispiele Hit-Abfragen und dazugehörige CSV-Dateieinträge
bulletAbfragen im ADIS-Format

Weitere konkrete fachliche Abfragemuster siehe auch hier unter 'weitere Beispiele'

horizontal rule

Kurzbeschreibung Hit-Abfragen

Eine Hit-Abfrage wird über den R(etrieve)-Befehl ausgeführt. Man gibt die Tabelle an, die abgefragt werden soll, dann die Felder, die ausgegeben werden sollen und schließlich noch die Abfragebedingung. Diese vier Teile gibt man wie folgt an (siehe auch Hit-Protokoll):

*x:<BEFEHL>:<TABELLE>/<AUSGABEFELDER>:<BEDINGUNG>

Die Ausgabefelder können zudem Abfragefunktionen wie $ALPHALOM() oder #BESTREG() enthalten (mehr dazu bei den Hit-Abfragefunktionen).

Abfragen im HitBatch

Der HitBatch ist eigentlich für Abfragen nicht gedacht, da er nur das Melden von Daten vereinfachen soll. Es lassen sich aber dennoch Abfragen damit ausführen, jedoch mit den Formaten, die zum Melden gedacht sind.

Die Ini-Datei muß dazu in einem Set analog zu den Meldungen den Parameter MELDUNG passend setzen, als COMMAND entweder einen Stern '*' (nur wenn der COMMAND in der Datendatei INFILE dabei ist) oder ein 'RS' (evtl. incl. Subcodes) und OUFILE kann auf eine Ausgabedatei verweisen, in das das Ergebnis der Abfrage geschrieben wird.

Beispiel:

[SET-3]
MELDUNG=BETRD
COMMAND=RS/I;R100
INFILE=.\Daten\betriebe.CSV
OUFILE=.\Daten\betriebe.OUT
LOGFILE=.\Daten\betriebe.LOG
CSVIN=1
CSVOUT=1
CSVLOG=1

Auch hier ist CSVIN, CSVOUT und CSVLOG auf 0, 1 oder 2 zu setzen, um anzuzeigen, in welchem Modus der HitBatch arbeiten soll:

0 Strict CSV-Format
1 Readable CSV-Format
2 ADIS-Format

Allgemeiner Aufbau einer CSV-Datei für Abfragen

Eine CSV-Datei enthält für Meldungen in der ersten Zeile die Feldnamen und in den weiteren Datenzeilen die Daten analog zur Feldnamenzeile. Diese Struktur muß bei Abfragen auch beibehalten werden, d.h.:

bulletdie Feldnamen geben an, welche Spalten ins OUFILE ausgegeben werden sollen
bulletdie danach folgenden Zeilen enthalten Zeile für Zeile eine Bedingung für je eine Abfrage

Die Abfragezeile

*x:<BEFEHL>:<TABELLE>/<AUSGABEFELDER>:<BEDINGUNG>

wird in einer CSV-Datei in dieser Form angegeben:

Zeile 1:
*;<AUSGABEFELDER>
Zeile 2:
<BEFEHL>;<BEDINGUNG>
weitere analog Zeile 2

oder wenn in der Ini-Datei der <BEFEHL> in COMMAND angegeben wird:

Zeile 1:
<AUSGABEFELDER>
Zeile 2:
<BEDINGUNG>
weitere analog Zeile 2

 

Beispiel:

*
BNR15;BW;276091100000000;276091100050000

'*' steht für die Ausgabe aller Spalten der entsprechenden Tabelle, die 'BW'-Bedingung schränkt die Abfrage auf den Betriebsnummernbereich ein.

Abfragefunktionen wie $ALPHALOM() oder #BESTREG() werden in die erste Zeile eingetragen und zwar immer hinter eine Feldliste, d.h.:

<AUSGABEFELDER> = <FELDLISTE>;<ABFRAGEFUNKTIONEN>

Wird die COMMAND-Spalte in die CSV-Datei übernommen (d.h. COMMAND im Ini-File ist auf * gesetzt), dann steht sie wie bei Meldungen immer in der ersten Spalte. Der Name der Spalte ist auch '*'. Das Beispiel könnte demnach auch so aussehen:

*;*
"RS/I;R100";BNR15;BW;276091100000000;276091100050000

oder in Strict-CSV:

*;*
RS/I%3DR100;BNR15;BW;276091100000000;276091100050000

WICHTIG: Enthält der Befehl mehrere Subcodes, dann muß er bei Strict-CSV (CSVIN=0) hex-codiert werden, d.h. die darin auftretenden Semicolons müssen als '%3B' geschrieben werden, damit diese nicht als normale Feldtrenner aufgefaßt werden. Analog dazu muß bei Readable-CSV (CSVIN=1) der gesamte Befehl einschließlich der Subcodes in doppelte Hochkomma eingeschlossen werden (wie im Beispiel). Bei einem einzelnen Subcode ist dies nicht nötig.

Besonder Hinweis

bulletDer Befehl RETRIEVE mit einem einzelnen leeren Elemement in der Datenliste "*n:RS:<entity>/*:" wird akzeptiert. Um also einen RETRIEVE ohne Einschränkungen auf eine Entität abzusetzen ist, in der Inputdatei eine Leerzeile einzufügen. Beim Strict-CSV enthält die Zeile nur ein Zeilenende, beim Rreadable-CSV ist der Leerstring mittels Hochkomma, Hochkomma i.d.F. "" anzugeben. Weitere Hinweise bei Problemen mit RETRIEVE siehe Software-FAQ#Retrieve

Antwortformat des HitBatch

Der HitBatch unterscheidet hier zwischen zwei Ausgabearten.

Einfache Ausgabe

Wird nur eine einfache Abfrage ohne Abfragefunktionen oder Abfragen mit Inline-Funktionen verwendet, dann erhält man eine CSV-Liste mit Feldnamenzeile und den ermittelten Daten, z:B.:

BNR15;LOM;GEB_DATR
2760911987654321;276000918273645;15.01.2000
2760911987654321;276000918273646;15.01.2000
2760911987654321;276000918273647;16.01.2000

oder mit Inline-Funktion:

BNR15;$ALPHALOM(LOM);GEB_DATR
2760911987654321;DE 09 1827 3645;15.01.2000
2760911987654321;DE 09 1827 3646;15.01.2000
2760911987654321;DE 09 1827 3647;16.01.2000

Semi-komplexe Ausgabe

Abfragen mit Abfragefunktionen (also mit Newline- und Mixline-Funktionen) erzeugen eine gestaffelte Ausgabe, die eine teilweise normalisierte Form hat.

Beispielabfrage:

*1:RS:BETRD/$ALPHABNR(BNR15);#BESTREG(01.11.1999;30.11.1999);#BESTREG(04.01.2000;04.01.2000/GEB_DATR;GESCHL_R):
BNR15;EQ;276090000000002

Diese soll zur Betriebsnummer 276090000000002 die BNR15 in aufbereiteter Form ausgeben und zu dieser Betriebsnummer den Bestand im Zeitraum von 1.11.99 mit 30.11.99 mit allen Spalten und den Bestand am 4.1.2000 mit den Spalten GEB_DATR und GESCHL_R ausgeben. (Die Beispielabfrage muß für den HitServer natürlich in einer Zeile stehen; sie wurde nur wegen ihrer Länge aufgeteilt.)

Die zwei Zeilen in einer CSV-Inputdatei sehen dann wie folgt aus (die drei Teile farblich gekennzeichnet):

*;$ALPHABNR(BNR15);#BESTREG(01.11.1999;30.11.1999);#BESTREG(04.01.2000;04.01.2000/GEB_DATR;GESCHL_R)
RS;BNR15;EQ;276090000000002

Im Ini-File muß dann COMMAND auf * stehen, weil der Befehl (hier rot) als eigene Spalte vorkommt und MELDUNG ist BETRD. Das selbe Ergebnis der Abfrage liefert folgende CSV-Datei, wenn COMMAND im Ini-File auf RS steht:

$ALPHABNR(BNR15);#BESTREG(01.11.1999;30.11.1999);#BESTREG(04.01.2000;04.01.2000/GEB_DATR;GESCHL_R)
BNR15;EQ;276090000000002

Das Ergebnis zum Beispiel liefert der HitBatch in die bei OUFILE definierte Datei (oder in die Konsole, wenn OUFILE nicht definiert ist), wenn CSVOUT=1 ist:

$ALPHABNR(BNR15);#BESTREG;#BESTREG;BNR15;BNR15_X;DAT_VON;DAT_BIS;LOM;LOM_X;GEB_DATR;RASSE;RASSE_X;GESCHL_R;GESCHL_X;LOM_MUT;...
"09 000 000 0002";"*) s.u.";;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;276090000000002;"09 000 000 0002";01.11.1999;30.11.1999;276000110663605;"DE 01 106 63605";01.01.1994;1;"1=SBT";2;"2=W";0;...
;;;276090000000002;"09 000 000 0002";01.11.1999;30.11.1999;276000340352692;"DE 03 403 52692";"k.A.";;"k.A.";;"k.A.";;...
;;;276090000000002;"09 000 000 0002";01.11.1999;30.11.1999;276000342242974;"DE 03 422 42974";"k.A.";;"k.A.";;"k.A.";;...
;;;276090000000002;"09 000 000 0002";01.11.1999;30.11.1999;276001268062948;"DE 12 680 62948";"k.A.";;"k.A.";;"k.A.";;...
;;;276090000000002;"09 000 000 0002";01.11.1999;30.11.1999;276001600739581;"DE 16 007 39581";"k.A.";;"k.A.";;"k.A.";;...
;;;;;;;;;01.01.1994;;;2;;;;;;;;;;;;;;;;
;;;;;;;;;"k.A.";;;;;;;;;;;;;;;;;;;
;;;;;;;;;"k.A.";;;;;;;;;;;;;;;;;;;

(Die langen Zeilen wurden gekürzt und hinten mit '...' versehen)

Wie zu erkennen ist, besteht die Ausgabedatei aus der Feldnamenzeile und drei Blöcken gleichartigen Inhalts. Jede Abfragefunktion erzeugt dabei einen eigenen Ausgabeblock. Die Funktion $ALPHABNR(BNR15) lieferte die erste Zeile nach der Feldnamenzeile und füllte die entsprechende Spalte mit einer aufbereiteten BNR15, die als Zeichenkette interpretiert werden soll. Die zweite Funktion #BESTREG(01.11.1999;30.11.1999) liefert den nächsten Block mit fünf Datenzeilen mit allen Spalten, die #BESTREG ausgibt. Der letzte Block lieferte zur Funktion #BESTREG(04.01.2000;04.01.2000/GEB_DATR;GESCHL_R) drei Zeilen, bei denen nur die Spalten GEB_DATR und GESCHL_R gefüllt sind. Der HitBatch erzeugt dabei nie doppelte Spalten, sondern nutzt bereits vorhandene aus. Davon ausgenommen sind die Funktionsnamen-Spalten selbst (im Beispiel #BESTREG), die der HitServer als Spalten mitliefert.

Um diese teilweise normalisierten Daten in einer eigenen Datenbank weiterzuverwenden, genügt es, die Datei blockweise einzulesen und jeweils die Spalten in den entsprechenden Feldern der Tabelle zu füllen. Ein kleines Programm kann diese Datendatei auch vollständig denormalisieren, so dass jede Spalte in jeder Zeile mit Daten gefüllt ist.

Beispiele Hit-Abfragen und dazugehörige CSV-Dateieinträge

bulletAbfrage aller Spalten zu einem BNR15-Bereich:
*1:RS/R100:BETRD/*:BNR15;BW;276091100000000;276091100050000
=>
*;*
RS/R100;BNR15;BW;276091100000000;276091100050000

 

bulletAbfrage bestimmter Spalten zu einem BNR15-Bereich:
*1:RS/R100:BETRD/BNR15;NAME;STR_NR;PLZ;ORT:BNR15;BW;276091100000000;276091100050000
=>
*;BNR15;NAME;STR_NR;PLZ;ORT
RS/R100;BNR15;BW;276091100000000;276091100050000

 

bulletBestandsregister zum 4.1.2000 abfragen und Ausgabe aller Spalten der Betriebsdaten:
*1:RS/I;R100:BETRD/*;#BESTREG(04.01.2000):BNR15;EQ;276091187654321
=>
*;*;#BESTREG(04.01.2000)
"RS/I;R100";BNR15;EQ;276091187654321

 

bulletNur das Bestandsregister zum 18.1.2000 abfragen:
*1:RS/I;R100:BETRD/#BESTREG(18.01.2000):BNR15;EQ;276091187654321
=>
*;#BESTREG(04.01.2000)
"RS/I;R100";BNR15;EQ;276091187654321

 

bulletNur das Bestandsregister zum 18.1.2000 abfragen und davon nur bestimmte Spalten ausgeben:
*1:RS/I;R100:BETRD/#BESTREG(18.01.2000/BNR15;LOM_X;DAT_EIN):BNR15;EQ;276091187654321
=>
*;#BESTREG(04.01.2000/BNR15;LOM_X;DAT_EIN)
"RS/I;R100";BNR15;EQ;276091187654321

 

Zurück zum Anfang