| |
Verbale Beschreibung
Vorbemerkungen
| Das HIT-Protokoll dient zur Kommunikation zwischen Programmen der Außenstellen
(HIT-Clients) mit der Zentralen Datenbank (HIT-Server). |
| Hauptzweck des Protokoll ist das Senden und Abrufen von Meldungen mit Datenelemente,
analog zu Datensätze mit Datenfeldern |
| Es benutzt eine bidirektionale Sockets über eine permanente TCP/IP-Verbindung. |
| Zeichensatzkodierung auf dem Socket (Details siehe "Normierung")
| Standard: ISO 8859-1 ("Latin1"), weitgehend identisch zu ANSI
aka Windows Codepage 1251 (aka Cp1251) |
| Alternativ: Unicode-Zeichensatz in der Form UTF-8 ohne "Byte Order
Mark" (BOM) |
|
| Die Clients erteilen Befehle der Server gibt Antworten. |
| Befehle gliedern sich in 4 Gruppe und dienen zum
| Execute - Ausführen von Kommandos, wie z.B. Logon,
Logoff, Parameter setzen sowie Ausführen von Meldungen bei denen der Sender nicht weiß,
ob Insert oder Update nötig, insbesondere bei Betriebsdaten-Meldungen mit automatischer
Historisierung; |
| Insert, Update, Storno,
Delete - Übertragen oder Pflegen von Datensätzen der
einzelnen Meldungsarten; |
| Retrieve - Abholen von verschiedenen Daten vom Server. |
| Confirm - Bestätigen bereits abgespeicherter
Sätze insbesondere im Konfliktfall (früher XS/S). |
|
| Logon, Logoff und Parameter sind Spezialformen von Meldungen. |
| Zu Befehlen existieren Subcodes:
| zum Beenden, Abbrechen und Bestätigen usw. |
|
| Antworten gliedern sich in 2 Gruppe dienen zum:
| Mitteilen von Befehlsergebnissen, wie ReturnCodes, Hinweise,
Fehlermeldungen
(Eine Liste der möglichen konkreten Fehlermeldungen siehe Plausi-Prüfungen im Data-Dictionary) |
| Übertragen von Datensätzen bei Abfragen. |
|
| Befehle und Antworten können aus mehreren zusammengehörigen Teilen bestehen. |
| In der Antwort ist Meldung und Feld, auf das sich z.B. eine Fehlermeldung bezieht,
erkennbar. |
| Befehle und Antworten bzw. ihre Teile sind zeilenorientiert, d.h. sie beginnen am
Zeilenanfang und enden mit Zeilenende (nach Windows-Konvention CR/LF also
0x0d, 0x0A). |
| Das 1. Zeichen einer Zeile kennzeichnet Befehle und Antworten, es ist auch erkennbar ob
mehrere Teile vorliegen. |
| Die Verbindung ist synchron, zu jedem Client-Befehl erfolgt eine Server-Antwort. |
| Optimiert für die verschiedenen Clienttypen (IVR, Online ...) können Datenmeldungen
verschieden strukturiert werden:
| Feldweise - die Datenelemente einer Meldung werden
als Folge von mehreren Befehls-Antwort-Sequenzen übertragen, |
| Satzweise - alle Datenelemente einer Meldung werden
mit einer Befehls-Antwort-Sequenzen übertragen, |
| Blockweise - mehrere Meldung werden mit einer
Befehls-Antwort-Sequenzen übertragen. |
|
| Da ein Kommunikationspartner unvermittelt ausfallen kann, wird mit Timeouts gearbeitet. |
| In der Anmeldephase verkürzte Timeouts zur Abwehr von DoS-Attacken (Denial of service). |
| Als Codeset ist standardmäßig ISO 8859-1 "Latin-1" vorgesehen, optional
kann UTF-8 gewählt werden. |
| Als Dezimaltrenner wird nur
'.' (Punkt) akzeptiert, Exponentialdarstellung wird nicht unterstützt.. |
| Beim Datum ist grundsätzlich die Form TT.MM.JJJJ also z.B. 31.01.1999 zu verwenden, siehe Datums-Format, analog siehe Timestamp-Format
- hier werden Kurzschreibweisen toleriert etwas der Form 31.2.22. |
| Sonderzeichen, insbesondere die Befehls- und Antwort-Trennzeichen ':' (Doppelpunkt) und
';' (Semikolon) sind analog zur Kodierung im HTTP-Protokoll als quoted-hex umzusetzen,
siehe Quoted-Hex |
| Behandlung von Leerzeichen:
| Nachfolgende Leerzeichen (trailing Blanks) in Strings werden abgeschnitten (RTrim), |
| Führende und eingebettete Leerzeichen in String sind signifikant und bleiben erhalten, |
| Führende und nachfolgende Leerzeichen (leading and trailing Blanks) bei Zahlen werden
abgeschnitten (Trim). |
|
Allgemeiner Ablauf
Verbindungsaufbau (mandatory)
| Öffnen einer Socketverbindung
| auf dem definierten Port 2222, |
| mit dem HIT-Server hitserver.hi-tier.de , |
| oder falls der nicht verfügbar ist, auf dem selben Port 2222 mit dem
Backup-Server hitbackup.hi-tier.de , |
| für Testzwecke steht auf den selben Servern der Test-Port 2223
allgemein zur Verfügung gestellt. |
|
| Namensauflösung und Erreichbarkeit
| die Namen sind über Standard-DNS-Dienste aufzulösen. |
| Im Internet sind unter diesen Namen Proxyserver zu erreichen. |
| Die Proxyserver leiten automatisch zu den internen Server weiter. |
| Im geschlossenen Intranet sind unter den angegeben Namen die Server direkt zu
erreichen. |
|
| Die jeweils aktuellen Internet-Adressen, -Namen und Ports zu HI-Tier
finden Sie hier. |
Anmeldung (mandatory)
| Logon mit Betriebsnummer als Userid |
| und PIN als Paßwort |
| nach 3 fehlerhaften PIN-Eingaben wird die Verbindung getrennt und für eine definierte
Zeit gesperrt |
| die Angabe des Meldeweges ist verpflichtend, insbesondere ob Daten von einer RS kommen |
| AktionsCode ist "X" für Execute |
| Partitionierung (Stückelung) ist "S" (satzweise) oder "F" (feldweise) |
| der Ablauf ist analog zu Meldungen mit Meldeart "LOGON" |
| Beispiel: *1:XS:LOGON/BNR15;PIN;MELD_WG:276091234567890;123456;1
(Erklärung siehe Befehlsaufbau) |
Parameter festlegen (optional) , Erweiterung zum LOGON
| eine Reihe von Parametern können festgelegt werden, Liste siehe Parameter-Liste |
| erfolgt keine explizite Festlegung, so werden sinnvolle Defaultwerte angenommen |
| Parameter-Festlegung erfolgen mit der LOGON-Meldung |
| die Einstellungen gelten nur für den aktuell angemeldeten Benutzer |
| die Einstellungen können nur durch erneutes LOGON geändert werden |
| bei einem erneuten LOGON werden nicht angegebene Parameter wieder auf Default zurück
gesetzt |
| Partitionierung (Stückelung) ist i.d.R "S" (satzweise) aber auch "F" (feldweise) ist
möglich |
| es wird empfohlen die eigene benutzte Protokoll-Version anzugeben |
| die Parameteränderungen werden mit dem erfolgreichen Abschluß der LOGON-Meldung
wirksam |
| Beispiel:
*1:XS:LOGON/BNR15;PIN;MELD_WG;VERSION;VERBOSE;TIMEOUT:276091234567890;123456;1;1;1;120 |
Daten senden (optional)
| Daten für die verschiedenen Meldungsarten, z.Zt. definierte Arten siehe HIT-Meldungen |
| AktionsCode ist "X" für Execute (Ausführen einer Datenmeldung) oder in
definierten Situationen "I" für Insert (Einfügen neuer Sätze) oder
"U" für Update, "S" für Storno oder "D" für Delete (eine
genauere Erläuterung, wann welche Aktion zu verwenden siehe HIT-Aktionen
und Melden und Korrigieren) |
| Partitionierung (Stückelung) ist "F" (feldweise), "S" (satzweise) oder "B"
(blockweise) |
| Antwort in Form von OK-Meldung, Hinweisen, Nachfragen, Fehlermeldungen oder Abbruch |
Daten abrufen (optional)
| Daten für die verschiedenen Meldungsarten oder variable Definitionen |
| gespeicherte Abfragen |
| geänderte Daten ab Timestamp |
| Fehlermeldungen aus früheren Sendungen |
| i.d.R. Satzweise |
| Antwort beinhalten Daten, Hinweise und Meldungen |
Abmeldung (recommened)
| LOGOFF-Befehl beendet die Sitzung und Benutzeridentifikation |
| die geänderten Parameter werden nicht zurück gesetzt |
| LOGON-Befehl für neuen Benutzer bewirkt implizites LOGOFF des angemeldeten Benutzers |
Verbindungsabbau (mandatory)
| schließen der Socketverbindung |
Zustände und Ereignisse
Zustände
- NC (=NOT-CONN)
- NA (=NOT-AUTH)
- RE (=READY)
- FM (=FIELD-MODE)
- RM (=ROW-MODE)
- BM (=BLOCK-MODE)
Ereignisse
- open-Socket
- Logon
- Logoff
- Aktion-Feld
- Input-Feld
- Aktion-Satz
Grobstruktur
Das HIT-Protokoll kennt verschiedene Zustände und Ereignisse.
Zustands-Ereignis-Diagramme können in verschiedene Detailgenauigkeit betrachtet werden.
(Diagramm fehlt nocht)
Befehls- und Antwortsyntax
Vorbemerkungen und Definitionen
| Pflicht- und Nichtpflicht-Bestandteile
| Mandatory - bestimmte Elemente von Befehlen oder Befehle in einer Dialogsequenz werden
unbedingt benötigt |
| Recommended - bestimmte Teile sind empfohlen, wie z.B. explizites LOGOFF um
Resourcen wieder freizugeben |
| Optional - Teile können fehlen und werden ggf. sinnvoll ergänzt, z.B. Feldliste einer
satzweisen Meldung muß nur beim 1.Satz übertragen werden. |
| fehlende Betriebsnummern in Meldungen werden durch BNR der Anmeldung ergänzt, wenn BNR
aber als Datenfeld in der Meldung angegeben wird, darf sie nicht leer sein. |
|
| Die Protokoll-Beispiele haben folgende Darstellung:
S: <Server-Output>
// Kommentar
C: <Client-Output>
// Kommentar |
Ein Befehl besitzt eine fortlaufende BefehlsNummer. Der 1.Befehl der Connection hat
die Nummer 1. Ein Befehl kann aus einer oder mehreren Teilbefehlen bestehen. Jeder
Teilbefehl ist eine eigene Zeile. Wenn weitere Teilbefehle folgen ist die Zeile mit dem
Befehlskennzeichen "+" zu beginnen, beim letzten Befehlsteil oder wenn der
Befehl nur aus einem Teil besteht ist die Zeile mit dem Befehlskennzeichen "*"
zu beginnen. Jeder Teilbefehl hat die gleiche BefehlsNummer. Teilbefehle werden ohne
dazwischen liegende Antworten versendet. Befehlsteile dienen zur blockorientierten
Übertragung.
Neue Befehle dürfen erst gesendet werden, wenn die Antwort für den letzten Befehl
vollständig empfangen wurde. Die Teile eines Befehles werden ebenfalls beginnend mit 1
durchnummeriert.
Syntax und Bestandteile
Token |
Definition |
Bemerkung |
<Befehl> |
<Einleitung>:<Aktion>:<Objekt>:<Datenelemente> |
4 Haupt-Elemente, mit Doppelpunkt getrennt |
<Einleitung> |
<BefehlsKenner><BefehlsNummer> |
|
<BefehlsKenner> |
* (Stern) | + (Pluszeichen) |
kennzeichnet Befehlsbeginn, + wenn weitere Befehlsteile folgen, * beim letzten oder
einzigen Befehlsteil |
<BefehlsNummer> |
<HauptNummer>[+<UnterNummer>][#<Rowkeys>] |
Achte auf Trennung der UnterNummer durch '+' |
<HauptNummer> |
Fortlaufende Nummer des Befehl |
dient zur richtigen Zuordnung des Ergebnisses und Sicherung der Reihenfolge und
Vollständigkeit, beginnt bei 1 für die Connection |
<UnterNummer> |
Fortlaufende Nummer des Teilbefehls, wenn der Befehl aus mehreren Zeilen besteht |
dient zur Sicherung der Reihenfolge und Vollständigkeit wenn Teilbefehle vorliegen,
beginnt bei 1 für jede neue HauptNummer |
<Rowkeys> |
<Rowkey>[;<Rowkeys>] |
Liste von benutzerdefinierten Keys |
<Rowkey> |
benutzerdefinierten Key (String-Konstante) |
dient zur Identifikation des Befehls |
<Aktion> |
<AktionsCode><Partitionierung>[/<SubCodes>] |
|
<AktionsCode> |
X | I | U | S | D | R |
X (=Execute) | I (=Insert) | U (=Update) | S (=Strono) | D (=Delete) | R (=Retrieve) |
C (=Confirm) |
<Partitionierung> |
F | S | B | T |
F (=Feld) | S (=Satz) | B (=Block) | T (=Transaktion) |
<SubCodes> |
<SubCode>[;<SubCodes>] |
ein SubCode oder mit Semikolon getrennt mehrere SubCodes |
<SubCode> |
T | E | S | A | P | O | ... |
T (=Trotzdem) | E (=ENDE) | S (=SICHER) | A (=Abbruch) |
P (=Panik) | O (=NOOP) ... siehe SubCodes, für RETRIEVE gibt es noch weitere SubCodes, siehe HIT-QL |
<Objekt> |
[<Meldung>][/<Feldnamen>] |
Meldung kann bei nachfolgenden Feldern der selben Meldung fehlen |
<Meldung> |
LOGON | BETRD | GEBURT | .... |
Feste Strings, siehe Meldung |
<Feldnamen> |
<Feldname>[;<Feldnamen>] |
ein Feld oder mit Semikolon getrennt mehrere Felder |
<Feldname> |
BNR15 | PIN | ... |
komplette Liste je nach Meldung, siehe Meldungselemente |
<Datenelemente> |
<Datenelement>[;<Datenelemente>] |
ein Datenwert oder mit Semikolon getrennt mehrere Datenwerte |
Schematische Darstellung
*<Nr>:<AktionsCode><Partitionierung>/<SubCode>:<Meldung>/<Feldliste>:<Datenliste>
AktionsCodes
Token |
Definition |
Bemerkung |
X |
EXECUTE |
Ausführen von Meldungen. Der Server entscheidet selbsttätig ob Insert
oder Update mit Historisierung vorzunehmen ist. |
I |
INSERT |
Normales Senden von neuen Meldung. Wenn eine Meldung mit identischen
Schlüssel vorliegt, wird Speichern abgelehnt. |
U |
UPDATE |
Für Sonderfälle reserviert wenn gezielt nur ein Update erfolgen soll (fast
nur im Adressdatenbereich implementiert). Analog zu EXECUTE wird über
die Werte der Schlüssel der Satz gesucht, alle im Update-Datenteil nicht
gelieferten Felder werden aus dem letzten aktuellen Satz übernommen,
mitgelieferte Datenfelder führen damit zu einem selektiven Update. |
S |
STORNO |
Meldung widerrufen, stornieren |
D |
DELETE |
Meldung löschen, für Sonderfälle reserviert wenn gezielt ohne
Historisierung gelöscht werden soll. |
R |
RETRIEVE |
Abrufen von Daten mit der HIT-Query Language (HIT-QL) |
C |
CONFIRM |
Nochmaliges Senden von Daten die bereits in der Datenbank abgespeichert
sind um sie zu bestätigen (SYS_STAT wird dann entsprechend gesetzt). Dies
wird bei der Fehlervorgangsbearbeitung, insbesondere bei zweifelhaften
oder widersprüchlichen Meldungen verwendet. Der Befehl hat auch noch die zweite Bedeutung CHECK für Meldungen bei denen eine Folgeberechnung möglich ist,
z.B. bei Zahlungten (TP_ZAHLUNG) für der Check zum Berechnen der Veröffentlichngsergebnisse (TP_VEROEFF). |
SubCodes bei Übertragung feldweise
Token |
Definition |
Bemerkung |
T |
TROTZDEM |
Force für Feldprüfung, d.h. bei Fehlern der Schwere 2 mit Schwere 0
fortfahren, also Wert akzeptieren. Kann präventiv angegeben werden, d.h. Nachfragen
werden gar nicht gestellt sondern dürfen automatisch als bestätigt angesehen werden.
Oder /T kann zur Wiederholung einer Feldübertragung verwendet werden wenn die
Feldübertragung zuvor eine Nachfrage ergeben hat und diese positiv bestätigt werden
soll. |
E |
ENDE |
ENDE der feldweisen Meldung mit Speichern. Der Subcode /E sollte als separater Befehl,
d.h. ohne eine Datenfeld übertragen werden da sonst im Falle eines Fehlers der Schwere 2
(Nachfrage) nicht klar ist ob mittels /T eine "Feld-Nachfrage" oder mittels /S
eine "Satz-Nachfrage" bestätigt werden soll. |
S |
SICHER |
ENDE der feldweisen Meldung mit Speichern, Force für Meldungsprüfung d.h. bei
Fehlern der Schwere 2 mit Schwere 0 fortfahren, also Meldung akzeptieren. Kann
bei der feldweisen Übertragung präventiv statt /E zum Abschließen und Speichern des
Satzes und Unterdrücken von Nachfragen verwendet werden. Oder /T kann zur Wiederholung
der Speicheraufforderung verwendet werden wenn die vorhergehende Speicheraufforderung mit
/E eine Nachfrage ergeben hat und diese positiv bestätigt werden soll. |
A |
ABBRUCH |
Abbruch der feldweisen Meldung ohne Speichern, weitere Datenelemente in Befehlszeile
werden ignoriert. |
P |
PANIK |
sofortiger Verbindungsabbruch |
O |
NOOP |
Keine Aktivität, weitere Datenelemente in Befehlszeile werden ignoriert, setzt
Timeout-Zähler wieder zurück |
SubCodes bei Übertragung satzweise
Token |
Definition |
Bemerkung |
T |
TROTZDEM |
Force für Feld- und Satzprüfung, d.h. bei Fehlern der Schwere 2 mit
Schwere 0 fortfahren, also Wert akzeptieren. Kann präventiv angegeben werden, d.h.
Nachfragen werden gar nicht gestellt sondern dürfen automatisch als bestätigt angesehen
werden. Oder /T kann zur Wiederholung einer Satzübertragung verwendet werden wenn die
Übertragung zuvor eine Nachfrage ergeben hat und diese positiv bestätigt werden soll. |
E |
ENDE |
Bei "Übertragung satzweise" nicht erlaubt. |
S |
SICHER |
Bei "Übertragung satzweise" ist /S analog zu /T. |
A |
ABBRUCH |
Bei "Übertragung satzweise" ohne Wirkung. |
P |
PANIK |
sofortiger Verbindungsabbruch |
O |
NOOP |
Keine Aktivität, weitere Datenelemente in Befehlszeile werden ignoriert, setzt
Timeout-Zähler wieder zurück |
U<z> |
UNTERST. |
Unterstützung bei komplexen Ändern von Daten mit fachlicher
Historisierung (wie Betriebsdaten) oder Intervallsemantik (wie
Zahlungsansprüche) mit Level z = 1 bis 6, Details siehe "Intelligentes
Update". Oder z = 0 als "update ähnliches Verhalten" bei der
Aktion X, Details siehe unten bei /U0. |
I<z> |
Historisierung |
Bei einzelnen Entitäten wie z.B: USR_COOKIES kann die Historisierung
mittels /I0 deaktiviert werden. |
SubCodes bei Übertragung blockweise
Blöcke werden als Transaktion verarbeitet. Normalerweise erfolgt am
Blockende ein COMMIT, d.h. die Änderungen werden in der Zentralen
Datenbank festschrieben. Außer ein Systemfehler erzwingt Abbruch, dann
erfolgt ein ROLLBACK, d.h. alle Änderungen des Blocks werden widerrufen.
Durch Angabe der SubCodes K oder L im letzten Befehl des Blocks kann
dieses Standardverhalten geändert und der Transaktionsabschluss gesteuert
werden.
Token |
Definition |
Bemerkung |
T,P,O |
analog oben |
analog zum Satzmodus |
K[Schwere|Pausi]
(mehrfache Verwendung möglich z.B. XS/K1023;K1024;K3)
|
COMMIT |
SubCode K ohne Angabe von Schwere oder Plausi führt zu unbedingten
Commit. Bei Angabe von Schwere oder Plausi (i.d.R. dann Mehrfachangabe
sinnvoll) führt zu Commit wenn diese Schwere oder Plausis im Block
gegeben andernfalls zum Rollback!
|
L[Schwere|Pausi]
(mehrfache Verwendung)
|
ROLLBACK |
SubCode L ohne Angabe von Schwere oder Plausi führt zu unbedingten
Rollback. Bei Angabe von Schwere oder Plausi (i.d.R. dann Mehrfachangabe
sinnvoll) führt zu Rollback wenn diese Schwere oder Plausis im Block
gegeben andernfalls zum Commit!
Bei gemischter Angabe von K- und L-SubCodes ist die genaue
Vorgehensweise noch offen, wahrscheinlich werden die Bedingungen der Reihe
nach abgearbeitet bis eine passt. Wenn keine passt bestimmt die letzte das
Verhalten des "andernfalls..."
|
SubCodes (speziell für Aktion RS "RETRIEVE"),
Details zu RS siehe HIT-QL
Token |
Definition |
Bemerkung |
M |
MODIFIED |
Nach Erzeugen der Abfrage, wird in einer System-Protokoll-Tabelle überprüft, ob und
wann der angemeldete Betrieb diese Abfrage das letzte mal ausgeführt hat. Wenn die
Entität Timestamp-Abfragen unterstützt erhält werden nur Datensätze deren
Änderungs-Zeitstempel neuer als der Zeitpunkt der letzten Ausführung ist zurückgegeben. |
D |
DELTA |
Wie /M , aber anschließend wird der aktuelle Ausführungszeitpunkt in der
Protokolltabelle gespeichert. |
I |
INCLUSIVE |
Normalerweise werden bei Tabellen, die Historisierung unterstützen, nur aktuelle
Sätze angezeigt (BIS-Timestamp offen, bzw. 31.12.2100). Mit dem Subcode I erhält man
alle Sätze, inklusive der Stornierten. |
Z<TS> |
TIMESTAMP |
Zeitpunktabfrage mit Angabe eines Timestamps i.d.F. T.M.J/H.N[.S[.X]]
(siehe Timestamp-Format ) zur Abfrage von Werten die genau zu
diesem Wissensstand (also dem technischen Zeitpunkt) aktuell und gültig waren.
Im Data-Dictionary sind die betrachteten Feldnamen in "FELDVON" / "FELDBIS"
angegeben. |
F[TS] |
TIMESTAMP |
fachliche Zeitpunktabfrage aktuell oder Angabe eines Timestamps i.d.F. T.M.J/H.N[.S[.X]] zur Abfrage von Werten die
aktuell jetzt oder zu dem gegebenen Zeitpunkt fachlich aktuell. Wir nur von
Entitäten/Meldungen mit fachlichen Gültigkeitszeitpunkten unterstützt, z.B.
Betriebsstammdaten BTR_D mit DBET_VON/DBET_BIS. Im Data-Dictionary sind die
betrachteten Feldnamen in "FELDVON2" / "FELDBIS2" angegeben. |
T, S, N, H ... |
weitere Subcodes siehe
Erläuterungen zu HIT-QL |
|
|
|
Token |
Definition |
Bemerkung |
#FKTONLY
#FUNCONLY |
Function only |
nur Funktionen ausgeben wenn die Zeile der Führungsentität sonst leer
ist |
#BTRCHECK |
Betriebsprüfung |
überschreibt den Parameter BtrCheck (Landes-Einstellung wie
Betriebsprüfer online laufen soll) |
#FLAECHECK |
Flächenprüfung |
überschreibt den Parameter FlaeCheck (Landes-Einstellung wie
Flächenprüfer online laufen soll) |
#DELTAINFO |
Delta-Information |
bei RS-Delta zusätzliche Ausgaben |
#DELTAFKT |
Delta-Funktion |
bei RS-Delta Funktionen prüfen ob sich was geändert 0:keine Prüfung,
immer ausgeben, 1:Prüfung ob sich seit der letzen Ausführung irgendetwas
geändert - dann alle, sonst nichts ausgeben |
#DEL_METH=<x> |
Löschmethode |
bei DS-Befehl Methode der Löschung: #DEL_METH=FINAL (endgültiges
SQL-Delete), #DEL_METH=BLANK (schwärzen, Infos durch -- / -1 ersetzen) |
#RONLYF |
Restrict F.Entity |
bei RS/R restrikt nur auf Führungsentität, 0:nein (default), 1:ja -
Abbruch est wenn ggf. Anzahl von Zeilen der Führungsentität erreicht |
#PK |
Primary Key |
bei XS kann mit #PK(<name>)=<wert> der alte primary
Key (PK) mitgegeben werden, damit ist Update auf Key-Spalten möglich (analog
zu GUID), z.B: XS/#PK(LOM)=DE0912345678;#PK(BNR15)=09 000 000 0001;#PK(ZUGA_DAT)=1.3.2017:ZUGANG/... |
#COLL_ADD=n |
Collection Add |
an Kollektion #n mit n=0..9, also #0 - #9 Betriebe oder Ohrmarken
hinzufügen |
#COLL_SUB=n |
Collection Sub |
Betriebe oder Ohrmarken aus Kollektion entfernen |
#COLL_CLR=n |
Collection Clear |
Vor Beginn leeren |
#COLL_DEL=n |
Collection Delete |
Am Ende Löschen |
#COLL_HAS(<col>)=n |
Collection Has |
Nehme Satz nur wenn Key in Collection existiert |
#COLL_NOT(<col>)=n |
Collection Not |
Nehme Satz nur wenn Key nicht in Collection existiert |
#UTF8 |
UTF8 |
Beim ersten Befehl auf UTF8 umschalten. Nur sinnvoll wenn erster Befehl
nicht LOGON. |
#KEEPCONN=<sec> |
Keep Connection |
Set Socket-Timeout nach Abmeldung auf XXX Sekunden, Default 60 |
#KOMPEV2=x |
Kompetenzbedingung |
Verhalten bei Anhängen der Kompetenzbedingung, X=
-1 |
standardmäßig neues Verhalten mit alternativen Kompetenzspalten,
aber für DELTA-Abfragen nur primäre Kompetenzspalte (sonst Bedingung
geändert) |
0 |
nur primäre Kompetenzspalte, um altes Verhalten zu erzwingen |
1 |
auch alternative Kompetenzspalten anhängen (besserer Zugriff, aber
Delta-Bedingung geändert) |
2 |
nach Mandantenwechsel können zusätzlich Daten des ursprüglich angemeldten
Betriebs gelesen und bearbeitet werden (sinnvoll z.B. für USR_COOKIE) |
Grundlagen zur Kompetenz-Steuerung siehe
Konzept / ... / Kompetenz |
#DELTASUB=<sec> |
Delts-Subtract |
Sekunden vom aktuellen Timestamp abgezogen, um Reserve für DELTA zu
bekommen |
#ERROR_IF(<plausinr>) |
Fehler bei Plausinr |
Soll bei der Plausi-Nummer X (i.d.R. Hinweis oder Nachfrage) ein Fehler
erzeugt und die Verarbeitung entsprechend nicht durchgeführt werden |
Hinweise zu SubCodes
Die SubCodes /T und /S können
| zur Bestätigung der zuvor übermittelten Daten dienen nachdem der HIT-Server einen
Fehler der Schwere 2 gemeldet hat und zur Bestätigung oder Korrektur aufgefordert
hat |
| oder sie können präventiv verwendet werden, d.h. daß die Daten im aktuellen Befehl
oder Meldung keiner Bestätigungsabfrage für Fehler der Schwere 2 bedürfen und
stattdessen Schwere 0 als OK geantwortet wird. |
| Wenn /T oder /S angegeben sind, wird kein Hinweis mehr ausgegeben und Schwere ist
0, d.h. OK |
Der SubCodes /U0 für Aktion X "Execute"
| übernehmen der Datenwerte aus dem vorhandenen Datensatz für nicht
angegebene Felder |
Beispiel
C: *1:XF/T:LOGON/BNR15:276091234567890 C: *87:IS:ABGANG/LOM;BNR15;ABGA_DAT:276123456789012;091234567890;01.04.1999 C: *88:IS::276111156789012;091234567890;01.05.1999 C: +89+1:IB:ABGANG/LOM;BNR15;ABGA_DAT:276123456789012;091234567890;01.04.1999
C: +89+2:::276123456789012;091234567890;01.04.1999
C: ...
C: *89+413:::276123456789012;091234567890;01.04.1999
Eine Antwort wird vom HIT-Server generiert und bezieht sich, über die Befehlsnummer
erkennbar, auf den letzten vom HIT-Client gesendeten Befehl.
Eine Antwort kann aus einer oder mehreren Teilantworten bestehen. Jede Teilantwort ist
eine eigene Zeile. Wenn weitere Teilantworten folgen ist die Zeile mit dem
Antwortkennzeichen "%" zu beginnen, beim letzten Antwortteil oder wenn die
Antwort nur aus einem Teil besteht ist die Zeile mit dem Antwortkennzeichen "="
zu beginnen.
Eine Antwort resultiert aus den Ergebnissen von Plausibilitätsprüfungen der
Datenelemente und Meldungen oder als positive Bestätigung wenn ein Befehl erfolgreich
ausgeführt wurde.
Syntax und Bestandteile
Token |
Definition |
Bemerkung |
<Antwort> |
<Einleitung>:<Result>:<Objekt>:<Textelemente> |
4 Haupt-Elemente, mit Doppelpunkt getrennt |
<Einleitung> |
<AntwortKenner><BefehlsNummer>[%<AntwortTeilnr>] |
Achte auf Trennung der AntwortTeilnr durch '%' |
<AntwortKenner> |
= (Gleichheitszeichen) | % (Prozent) |
kennzeichnet Antwortbeginn, % wenn weitere Antwortteile folgen, = beim letzten oder
einzigen Antwortteil |
<BefehlsNummer> |
<HauptNummer>[+<UnterNummer>][#<Rowkeys>] |
Achte auf Trennung der Befehls-Unternummer durch '+' |
<HauptNummer> |
Nummer des Befehl auf den geantwortet wird |
dient zur richtigen Zuordnung des Ergebnisses |
<UnterNummer> |
Fortlaufende Nummer des Teilbefehls |
wenn der Befehl aus mehreren Zeilen besteht und direkt auf Teilbefehl geantwortet wird |
<Rowkeys> |
<Rowkey>[;<Rowkeys>] |
Liste von benutzerdefinierten Keys, die aus dem Befehl
in die Antwort übernommen werden |
<Rowkey> |
benutzerdefinierten Key (String-Konstante) |
dient zur Identifikation des Befehls |
<AntwortTeilnummer> |
Fortlaufende Nummer der Teilantwort, wenn die Antwort aus mehreren Zeilen besteht |
dient zur Sicherung der Reihenfolge und Vollständigkeit wenn Teilantworten vorliegen,
beginnt bei 1 für jede Antwort |
<Result> |
<Schwere>/<AntwortCode> |
|
<Schwere> |
0 | 1 | 2 | 3 | 4 | -1 | -2 | -3 |
Return-Wert: 0 (=OK) | 1 (=Hinweis) | 2 (=Nachfrage) | 3 (=Fehler)
| 4 (=sofortiger Abbruch) | -1 (=Datensätze als Antwort auf Retrieve) |
-2 und -3 (Datensätze bei komplexeren Funktionen) |
<AntwortCode> |
Nummer der Fehlermeldung (Plausi) laut Texttabelle |
siehe Fehler-Tabelle:
PLAUSI |
<Objekt> |
[<Meldung>][/<Feldelemente>] |
Auf welche Meldungsart und ggf. welche Felder sich Antwort bezieht |
<Meldung> |
LOGON | BETRD | GEBURT | .... |
Meldungsart des Befehls |
<Feldelemente> |
<Feldname>[;<Feldelemente>] | * (Stern) |
ein Feld oder mit Semikolon getrennt mehrere Felder, Stern bedeutet:
Antwort bezieht
sich auf Meldung und nicht auf Feld |
<Feldname> |
BNR15 | PIN | ... |
komplette Liste je nach Meldung, siehe Meldungselemente |
<Textelemente> |
<Textelement>[;<Textelemente>] |
der Textteil besteht i.d.R. nur aus einem Textelement, bei Datenübertragung mehrere
Elemente durch Semikolon getrennt |
<Textelement> |
Text der Antwort |
aus Tabelle, ggf. etwas detaillierter |
Schematische Darstellung
=<Nr>:<Schwere>/<AntwortCode>:<Meldung>/<Feldliste>:<Textliste>
%<Nr>:<Schwere-1>/<AntwortCode-1>:<Meldung>/<Feldliste>:<Text-1>
%...
=<Nr>:<Schwere-N>/<AntwortCode-N>:<Meldung>/<Feldliste>:<Text-N>
Beispiele
Einfache Antwort, Kurzform
S: =87:0/0::
Einfache Antwort, Langform
S: =117:1/1013:LOGON/PIN:Hinweis - PIN von Erstinstallation, bitte bald ändern
Antwort mit 2 Teilen auf einen Befehl
S: %87%1:1/1002:ABGANG/*:Abgang vor Zugang
S: =87%2:1/1003:ABGANG/*:Abgang 10 Tage verspätet
Antwort mit 2 und 1 Teilen auf Befehl mit 9 Unterbefehlen
S: %87+1%1:1/1002:ABGANG/*:Abgang vor Zugang
S: %87+1%2:1/1003:ABGANG/*:Abgang 10 Tage verspätet
S: =87+9:1/1003:ABGANG/*:Abgang 10 Tage verspätet
Besondere Hinweise
Mehrere Antwortteile
Die Plausibilitätsprüfung eines einzelnen Feldes oder einer gesamten Meldung kann zu
mehreren Antwortteilen führen, denn Hinweise (Schwere 1) und Fehler der
Schwere 2 führen nicht zum Abbruch der Feldprüfung, d.h. die restlichen Prüfungen
für das Feld werden fortgesetzt. Fehler der Schwere 3 dagegen brechen die Prüfung
des Feldes ab und Fehler der Schwere 4 brechen sogar den gesamten Prüfprozess und
die Dialogsitzung ab.
Beim Befehl zum Beenden und Speichern einer feldweise übertragenen Meldung
("*nr:IF/E::") werden weitere Plausibilitätsprüfungen für die Meldung als
ganzes (Querchecks) durchgeführt. Auch diese werden erst bei einem Fehler der
Schwere 3 abgebrochen, d.h. es können mehrere Antwortteile mit Schwere 1 und
Schwere 2 sowie maximal ein Antwortteil mit Schwere 3 oder 4 entstehen.
Bei der satzweisen Übertragung werden alle Felder nacheinander geprüft, bricht die
Prüfung eines einzelnen Feldes mit Schwere 3 ab, werden dennoch die Prüfungen aller
anderen Felder weiter durchgeführt. Somit können in beliebiger Reihenfolge mehrere
Antwortteile mit Schwere 1 , 2 oder 3 sowie maximal ein Antwortteil mit
Schwere 4 entstehen.
Bei der satzweisen Übertragung werden diese Querchecks nach den Prüfungen aller
Einzelfelder durchgeführt wenn diese Feldprüfungen Antworten maximal bis zu
Schwere 2 erzeugt haben. Bei max. Schwere 3 werden die Querchecks nicht mehr
durchgeführt. Bei max. Schwere 2 werden die Querchecks zwar durchgeführt um ggf.
noch weitere Hinweise oder Nachfragen für die Gesamt-Meldung zu erzeugen, ein Abspeicher
erfolgt aber nicht ! Sinn dieser Vorgehensweise ist, dass alle Fehler der Schwere 2
die nach Bestätigung durch den Client akzeptiert werden könnten gemeinsam und nur einmal
bestätigt werden müssen, ein /T (=TROTZDEM, FORCE) für einzelne Feld ist bei der
satzweisen Meldung nicht möglich. Stattdessen muß der Client bei max. Schwere 2 den
ganzen Satz mit /S (=SICHER) bestätigen oder mit /A (=ABBRUCH) verwerfen.
Der HIT-Client muß aus allen Antwortteilen die maximale Schwere ermitteln und daraus
erkennen ob die Meldung nun tatsächlich gespeichert wurde (maximale Schwere 1) oder
nicht (Schwere 2,3,4)
Positive Antwort: Schwere 0
Antworten der Schwere 0, d.h. dass ein bestimmter Befehl fehlerfrei ist, z.B. die
Übertragung eines einzelnen Feldes oder die Abspeicherung des Satzes werden nicht mehr
genauer spezifiziert. Der Antwortcode ist immer 0, Objekt- und Textteil sind leer,
Beispiel: "=<nr>:0/0::" .
Bei satzweisen Übertragung werden zwar alle Felder nachinander geprüft und ggf.
mehrere Hinweise und Fehlerantworten ausgegeben, aber fehlerfreie Felder werden nicht
einzeln mit Antwortsätzen der Schwere 0 bestätigt.
Befehls - Antwort Abfolge
F/A - Einleitung der Übertragung
Client |
Befehl mit Einleitung der feldweisen Übertragung und dem 1. Datenelement |
|
C: *87:IF:ABGANG/LOM:276123456789012 |
Server |
Bereitstellen bzw. leeren der Datenstruktur , prüfen und annehmen oder
ablehnen des 1. Datenelements.
Fortsetzung je nach Prüfungsergebnis mit F/B/0 , F/B/1 , F/B/2 , F/B/3 oder F/B/4 |
F/B/0 - Fortsetzung der Übertragung, wenn Feld OK
Server |
Antworten mit OK-Meldung, der Wert wird akzeptiert |
|
S: =87:0/0:: |
Client |
Befehl mit Fortsetzung der feldweisen Übertragung und dem nächsten
Datenelement (die Meldungsart darf fehlen, der Schrägstrich muß angegeben werden)
oder Beenden siehe F/C |
|
C: *88:IF:/BNR15:091234567890 |
Server |
prüfen und annehmen oder ablehnen des nächsten Datenelements.
Fortsetzung je nach Prüfungsergebnis mit F/B/0 , F/B/1 , F/B/2 , F/B/3 oder F/B/4 |
F/B/1 - Fortsetzung der Übertragung, wenn Feld mit Hinweis
Server |
Antworten mit Hinweis, aber der Wert wird akzeptiert |
|
S: =87:1/2234:ABGANG/LOM:Alte LOM-Serie, bitte nicht weiter verwenden |
Client |
Fehlerhinweis sollte dem Benutzer ohne weiteren Interaktionsbedarf
einfach mitgeteilt werden. Befehl mit Fortsetzung der feldweisen Übertragung und dem
nächsten Datenelement (die Meldungsart darf fehlen, der Schrägstrich muß angegeben
werden) oder Beenden siehe F/C |
|
C: *88:IF:/BNR15:091234567890 |
Server |
prüfen und annehmen oder ablehnen des nächsten Datenelements.
Fortsetzung je nach Prüfungsergebnis mit F/B/0 , F/B/1 , F/B/2 , F/B/3 oder F/B/4 |
F/B/2 - Wiederholen oder korrigieren, wenn Nachfrage
Server |
Antworten mit Nachfrage, der Wert wird noch nicht akzeptiert |
|
S: =87:2/2234:ABGANG/LOM:Alte LOM-Serie, wirklich verwendet? |
Client |
Fehlerhinweis sollte dem Benutzer mit Bestätigungsabfrage mitgeteilt
werden. Je nach Benutzerverhalten weiter mit F/B/2a , F/B/2b oder F/C |
F/B/2a - Wenn der Benutzer den Wert unverändert bestätigt
Client |
Befehl mit neuer Nr mit Wiederholung des beanstandeten Datenelement aber
SubCode T (=Trotzdem) |
|
C: *88:IF/T:ABGANG/LOM:276123456789012 |
Server |
prüfen und annehmen oder ablehnen des nächsten Datenelements (durch den
SubCode T wird jetzt aber auch bei Fehlern der Schwere 2 mit Schwere 0
fortgefahren, d.h. der Wert akzeptiert !). Fortsetzung je nach Prüfungsergebnis mit F/B/0 , F/B/1 , (nicht
F/B/2) , F/B/3 oder F/B/4 |
F/B/2b - Wenn der Benutzer den Wert korrigiert
Client |
Befehl mit neuer Nr und neuem Wert für beanstandetes Datenelement |
|
C: *88:IF:ABGANG/LOM:276111111119012 |
Server |
prüfen und annehmen oder ablehnen des nächsten Datenelements.
Fortsetzung je nach Prüfungsergebnis mit F/B/0 , F/B/1 , F/B/2 , F/B/3 oder F/B/4 |
F/B/3 - Korrigieren, wenn nicht akzeptierbarer Fehler
Server |
Antworten mit Fehler, der Wert wird nicht akzeptiert |
|
S: =87:3/2234:ABGANG/LOM:LOM nicht an Betrieb gegeben,korrigieren.. |
Client |
Fehlermeldung wird an Benutzer ausgegeben und er wird zum Wiederholen
bzw. Korrigieren des Wertes
aufgefordert. Befehl mit neuer Nr und neuem Wert für beanstandetes Datenelement oder
Beenden siehe F/C |
|
C: *88:IF:ABGANG/LOM:276111111119012 |
Server |
prüfen und annehmen oder ablehnen des nächsten Datenelements.
Fortsetzung je nach Prüfungsergebnis mit F/B/0 , F/B/1 , F/B/2 , F/B/3 oder F/B/4 |
F/B/4 - Abbrechen der Verbindung, wenn kritischer Fehler
Server |
Antworten mit Fehler und Meldung über Sitzungsende |
|
S: =87:4/2299:ABGANG/LOM:LOM gestohlen, Verbindung beendet
S: <DISCONNECT> |
Client |
Fehlermeldung wird an Benutzer ausgegeben und er wird aufgefordert sich
an die zuständige RS zu wenden. Weitere Befehle werden mit <CONNECTION NOT
AVAILABLE> abgelehnt |
F/C - Ende mit Speichern oder Abbruch der Meldung
Client |
Befehl mit neuer Nr und entsprechendem SubCode (/E , /S, /A oder /P)
ohne Datenfeld bedeutet: Aktuelle feldweise Eingabe beenden (Meldungsart ist
überflüssig) |
oderoder
oder |
C: *88:IF/E:: (ENDE, mit Speichern zurück in Ready-Status)
C: *88:IF/S:: (SICHER, mit Speichern, Schwere 2 akzeptieren) C: *88:IF/A:: (ABBRUCH, ohne Speichern zurück in Ready-Status)
C: *88:IF/P:: (PANIK, ohne Speichern Verbindung unterbrechen) |
Server |
prüfen des gesamten Datensatzes und speichern oder ablehnen der Meldung.
Fortsetzung je nach Prüfungsergebnis mit F/D/0 , F/D/1 , F/D/2 , F/D/3 oder F/D/4 |
F/D/0 - Status Ready, wenn Meldung OK
Server |
Antworten mit OK-Meldung, die Meldung wird gespeichert |
|
S: =88:0/0:: |
Client |
Neue Übertragung siehe F/A oder LOGOFF |
F/D/1 - Status Ready, wenn Meldung mit Hinweis
Server |
Antworten mit einem oder mehreren Hinweisen, aber die Meldung wird
gespeichert |
|
S: %88%1:1/2234:ABGANG/*:Abgang gespeichert, Hinweis der _
Käufer hat den Zugang bereits vor 10 gemeldet
S: =88%2:1/2237:ABGANG/*:Abgang gespeichert, es liegen _
mehrere Zugänge bei anderen Betrieben vor |
Client |
Fehlerhinweis sollte dem Benutzer ohne weiteren Interaktionsbedarf
einfach mitgeteilt werden. Neue Übertragung siehe A oder LOGOFF |
F/D/2 - Wiederholen oder korrigieren, wenn Nachfrage
Server |
Antworten mit Nachfrage, die Meldung wird noch nicht gespeichert |
|
S: =88:2/2277:ABGANG/*:Abgang 2 Monate her, ist das OK ? |
Client |
Fehlerhinweis sollte dem Benutzer mit Bestätigungsabfrage mitgeteilt
werden. Je nach Benutzerverhalten weiter mit F/D/2a
, F/D/2b oder F/C |
F/D/2a - Wenn der Benutzer die Meldung unverändert bestätigt
Client |
Befehl mit neuer Nr aber Befehls SubCode S (=Sicher, Force) |
|
C: *89:IF/S:: |
Server |
prüfen und annehmen oder ablehnen der Meldung (durch den SubCode S wird
jetzt aber auch bei bei Fehlern der Schwere 2 mit Schwere 0 fortgefahren,
d.h. die Meldung akzeptiert). Fortsetzung je nach Prüfungsergebnis mit D/0 , D/1 , (nicht D/2) ,
D/3 oder D/4 |
F/D/2b - Wenn der Benutzer die Meldung korrigieren möchte
Client |
Im aktuellen Feld-Modus können einzelne Feldwerte korrigiert werden |
|
C: *89:IF:/LOM:276111144449012 |
Server |
prüfen und annehmen oder ablehnen des nächsten Datenelements, analog
oben |
oder
Client |
Da aber i.d.R. nicht eindeutig ein Feld für die Ablehnung verantwortlich
ist und bei der feldweiser Meldung Querbezüge schlecht korrigiert werden können muß die
Meldung meist verworfen werden, d.h. mittels Abbruch-SubCode wird der Feld-Modus
verlassen und zum Ready-Status zurückgekehrt. |
|
C: *89:IF/A:: |
Server |
gesamte Meldung wird verworfen und in Ready-Status von neuem begonnen |
F/D/3 - Korrigieren, wenn nicht akzeptierbarer Fehler
Server |
Antworten mit Fehler, der Wert wird nicht akzeptiert |
|
S: =89:3/3299:ABGANG/*:Abgang über 1 Jahr her |
Client |
analog zu D/2b |
F/D/4 - Abbrechen der Verbindung, wenn kritischer Fehler
Server |
Antworten mit Fehler und Meldung über Sitzungsende |
|
S: =89:4/2299:ABGANG/*:Abgangsdatum läßt schweren Unterschleif _
vermuten, das System bendet die Verbindung
S: <DISCONNECT> |
Client |
Fehlermeldung wird an Benutzer ausgegeben und er wird aufgefordert sich
an die zuständige RS zu wenden. Weitere Befehle werden mit <CONNECTION NOT
AVAILABLE> abgelehnt |
S/A - Einleitung der Übertragung
Client |
Befehl mit Einleitung der satzweisen Übertragung , d.h. Meldungsart und
alle Datenelementen und allen Datenwerten der 1.Meldung |
|
C: *87:XS:ABGANG/LOM;BNR15;ABGA_DAT:27789012;0912890;01.04.1999 |
Server |
Bereitstellen bzw. leeren der Datenstruktur , prüfen und annehmen oder
ablehnen aller Datenwerte und speichern der Meldung, Fortsetzung je nach Prüfungsergebnis
mit S/B/0 , S/B/1 , S/B/2 , S/B/3 oder S/B/4 |
S/B/0 - Status Ready, wenn Meldung OK, weitere Meldungen der
selben Art verkürzt möglich
Server |
Antworten mit OK-Meldung, die Meldung wird gespeichert, der Server geht
wieder in den Ready-Status, merkt sich aber die Datenelemente der Meldung wenn eine
weitere Meldung dieser Art folgt |
|
S: =87:0/0:: |
Client |
Fortsetzung mit Befehl zur satzweisen Übertragung der nächsten
Meldung(Angabe der Meldungsart und Datenelemente ist optinal), oder sonstigen Aktionen im
Ready-Modus |
|
C: *88:XS::276123456789012;0914444;07.06.1999 |
Server |
prüfen und annehmen oder ablehnen der nächsten Meldung, Fortsetzung je
nach Prüfungsergebnis mit S/B/0 , S/B/1 , S/B/2 , S/B/3 oder S/B/4 |
S/B/1 - Status Ready, wenn Meldung mit Hinweis, weitere Meldungen
der selben Art verkürzt möglich
Server |
Antworten mit einem oder mehreren Hinweisen, aber die Meldung wird
gespeichert |
|
S: %87%1:1/2234:ABGANG/*:Der Käufer hat _
den Zugang bereits vor 10 gemeldet
S: =87%2:1/2237:ABGANG/*:Es liegen mehrere Zugänge _
bei anderen Betrieben vor |
Client |
Hinweise sollte dem Benutzer ohne weiteren Interaktionsbedarf einfach
mitgeteilt werden. Fortsetzung mit Befehl zur satzweisen Übertragung und der nächsten
Meldung, Fortsetzung analog zu S/B/0 |
|
C: *88:XS::276123012;091234444;07.06.1999 |
Server |
prüfen und annehmen oder ablehnen der nächsten Meldung, Fortsetzung je
nach Prüfungsergebnis mit S/B/0 , S/B/1 , S/B/2 , S/B/3 oder S/B/4 |
S/B/2 - Wiederholen oder korrigieren, wenn Nachfrage
Server |
Antworten mit Nachfrage, die Meldung wird noch nicht akzeptiert. Es
können zusätzlich noch Hinweise der Schwere 1 existieren ! |
|
S: =87:2/2277:ABGANG/*:Abgang 2 Monate her, sicher ? |
Client |
Fehlerhinweis sollte dem Benutzer mit Bestätigungsabfrage mitgeteilt
werden. Je nach Benutzerverhalten weiter mit S/B/2a , S/B/2b oder S/C |
S/B/2a - Wenn der Benutzer die Meldung unverändert bestätigt
Client |
Befehl mit neuer Nr aber Befehls SubCode S (=Sicher, Force), alle Daten
müssen wiederholt werden. |
|
C: *88:IS/S::2761289012;091267890;01.04.1999 |
Server |
prüfen und annehmen oder ablehnen der gesamten Meldung |
S/B/2b - Wenn der Benutzer die Meldung korrigieren möchte
Client |
Befehl mit neuer Nr und neuen Datenwerten analog zu einer neuen Meldung
senden |
|
C: *88:XS::2761239012;09124444;07.05.1999 |
Server |
prüfen und annehmen oder ablehnen der gesamten Meldung |
S/B/3 - Korrigieren, wenn nicht akzeptierbarer Fehler
Server |
Antworten mit Fehler, die Meldung wird akzeptiert. Es können zusätzlich
noch Hinweise der Schwere 1 existieren ! |
|
S: =87:3/3299:ABGANG/*:Abgang 1 Jahr her, korrigieren |
Client |
Fehlermeldung mitteilen, Befehl mit neuer Nr und neuen Datenwerten analog
zu einer neuen Meldung senden |
S/B/4 - Abbrechen der Verbindung, wenn kritischer Fehler
Server |
Antworten mit Fehler, die Meldung wird akzeptiert. Es können zusätzlich
noch Hinweise der Schwere 1 existieren ! |
|
S: =87:4/2299:ABGANG/*:Abgangsdatum läßt schweren Unterschleif _
vermuten,das System bendet die Verbindung
S: <DISCONNECT> |
Client |
Fehlermeldung wird an Benutzer ausgegeben und er wird aufgefordert sich
an die zuständige RS zu wenden. Weitere Befehle werden mit <CONNECTION NOT
AVAILABLE> abgelehnt |
B/A - Übertragung von mehreren Aktionen als Befehl mit
Unterbefehlen
Client |
Befehl mit mehreren Teilen zur blockweisen Übertragung. In den einzelnen
Befehlsteilen kann anlalog zur satzweisen Übertragung ein identischer Objektteil
weggelassen werden. |
|
C: +87+1:XB:ABGANG/LOM;BNR15;ABGA_DAT:27789012;0912890;01.04.1999
C: +87+2:XB::27789014;0923456;31.01.1999
C: +87+3:XB::27789017;0911111;11.11.1999
C: *87+4:XB:ZUGANG/LOM;BNR15;ZUGA_DAT:27789012;0888888;01.04.1999 |
Server |
Prüfen und annehmen oder ablehnen aller Datenwerte und speichern der
Meldung. Ablauf je nach schwerstem Fehler im Block mit B/B/0
, B/B/1. Alle Aktionen laufen innerhalb einer einzigen
Datenbank-Transaktion, d.h. alle Aktionen werden erst am Ende des Blocks tatsächlich
weggeschrieben ("COMMIT") oder bei schwerem Fehler verworfen
("ROLLBACK"). |
B/B/0 - Alle Teilbefehle werden abgearbeitet
Server |
Alle Teilbefehle werden gelesen und zwischengespeichert. Anschließend
werden alle Teilbefehle analog zur satzweisen Vorgehensweise abgearbeitet. Für jeden
Teilbefehl kann es 0, 1 oder mehrere Antworten geben. Es wird auf den jeweiligen
Befehl/Unterbefehl Bezug genommen. Da in diesem Beispiel der maximale SchwereCode < 4
(Panik) ist, werden die einzelnen Meldungen (Teilbefehle) mit maximaler Antwortschwere 1
in die Datenbank gespeichert. Sätze mit Schwere 2 oder 3 sind fehlerhaft und werden nicht
gespeichert. Wenn präventiv mit Forcs "XB/S" gesendet wird werden alle Fehler
der Schwere 2 unterdrückt und die betroffenen Sätze werden ohne Fehlermeldungsausgabe
akzeptiert. Am Ende der Übertragung erfolgt ein "COMMIT". |
|
S: %87+2:3/3299:ABGANG/*:Abgang 1 Jahr her, korrigieren
S: %87+2%1:1/234:ABGANG/ABGA_DAT:Meldefrist überschritten
S: %87+2%2:1/333:ABGANG/*:Hinweis ... |
B/B/1 - Wegen schwerer Fehler "Panik" wird Verarbeitung
abgebrochen
Server |
Alle Teilbefehle werden gelesen und zwischengespeichert. Da in diesem
Beispiel der maximale SchwereCode = 4 (Panik) ist wird die Übertragung abgebrochen und
derzeitig ein "ROLLBACK" ausgeführt, d.h. alle Sätze dieses
Blocks werden unabhängig von der schon übermittelten Schwere des Teilbefehls verworfen. |
|
S: %87+2:3/3299:ABGANG/*:Abgang 1 Jahr her, korrigieren
S: %87+2%1:1/234:ABGANG/ABGA_DAT:Meldefrist überschritten
S: %87+2%2:4/1000:SYSTEM/*:Datenbank z.Zt. nicht verfügbar |
Weitere Beispiele
Fehlerhafte Befehle
C: *1:AF:LOGON:27609123456789
S: =1:3/3001:LOGON/*:Syntax - Falscher Befehl // Nicht akzeptierbarer Fehler C: *1:XF:LOGON:27609123456789
S: =1:3/3002:LOGON/*:Syntax - Feld feht
Logon feldweise
C: *1:XF:LOGON/BNR15:27609123456789 // feldweises Logon mit 1.Feld
S: =1:3/1001:LOGON/BNR15:NR nicht vorhanden // Antwort: Fehler ..
C: *2:XF:LOGON/BNR15:276099100010001
S: =2:0/0::
C: *3:XF:/PIN:123 // Meldung darf fehlen
S: =3:1/104:LOGON/PIN:Nur 3 Stellen riskant // OK aber Hinweis
C: *4:XF/E:: // Ende der feldweisen Meldung
S: =4:0/123:LOGON/*:Anmeldung ausgeführt // Antwort 0/1 als Schwere oder - bei Nachfrage in Feld C: *3:XF:/PIN:123456 // Meldung darf fehlen
S: =3:2/105:LOGON/PIN:Noch Start-PIN,sicher ? // Nachfrage
C: *4:XF/T:/PIN:123456 // Wert mit FORCE erneut senden
S: =4:0/0::
C: *5:XF/E:: // Ende der feldweisen Meldung
S: =5:0/123:LOGON/*:Anmeldung ausgeführt // Antwort 0/1 als Schwere
Logon satzweise
C: *1:XS:LOGON/BNR15;PIN:123456789;123456 // satzweises LOGON mit Daten
S: =1:3/1001:LOGON/BNR15:Nr nicht vorhanden // Antwort: Fehler ..
C: *2:XS:LOGON/BNR15;PIN:9100010001;123456
S: =2:0/0::
Logoff satzweise
Spezialfall der satzweisen Übertragung, keine Datenfelder nötig
C: *89:XS:LOGOFF: // Client LOGOFF
S: =89:0/999:LOGOFF/*:Abmeldung OK // Server akzeptiert LOGOFF
// geht in Status NOT-AUTH
// bleibt aber connected
Abgänge satzweise
C: *87:XS:ABGANG/LOM;BNR15;ABGA_DAT:2761234012;091234890;01.04.1999
S: =87:0/100:ABGANG/*:ABGANG OK C: *88:XS::276123456789012;091234567890;01.04.1999
S: %88%1:1/1235:ABGANG/LOM:Tier ist beim Abgang erst 1 Tag alt
S: =88%2:1/1456:ABGANG/*:Weitere Hinweise zum Abgang ... C: *89:XS::276123456789012;091234567890;01.04.1999
S: =89:2/2123:ABGANG/ABGA_DAT:Abgangsdatum gleich Geburtsdatum, sicher?
C: *90:XS/S::276123456789012;091234567890;01.04.1999
S: =90:0/0::
Abgänge blockweise
C: +87+1:XB:ABGANG/LOM;BNR15;ABGA_DAT:27789012;0912890;01.04.1999
C: +87+2:XB::27789014;0923456;31.01.1999
C: +87+3:XB::27789017;0911111;11.11.1999
C: *87+4:XB:ZUGANG/LOM;BNR15;ZUGA_DAT:27789012;0888888;01.04.1999
S: %87+2:3/3299:ABGANG/*:Abgang 1 Jahr her, korrigieren
S: %87+2%1:1/234:ABGANG/ABGA_DAT:Meldefrist überschritten
S: %87+2%2:1/333:ABGANG/*:Hinweis ...
siehe auch HIT-Meld-Elemente zu LOGON
Token |
Definition |
Format |
Default |
Bemerkung |
VERBOSE |
Geschwätzig |
0 oder 1 |
1 |
Ausgabe von mehr Information im HITP |
TIMEOUT |
Timeout |
INT 4 |
120 |
Nach wie vielen Sekunden Inaktivität Verbindung unterbrochen wird |
VERSIONC |
Version Client |
INT 4 |
1 |
Version des HITP-Clients |
... |
|
|
|
|
Sonderzeichen, insbesondere die Befehls- und Antwort-Trennzeichen ':' (Doppelpunkt) und
';' (Semikolon) sowie der Quoting-Charakter '%' (Prozent) sind analog zur Kodierung im
HTTP-Protokoll als quoted-hex umzusetzen. Die Hex-Codierung des jeweiligen Zeichens ist
der Codetabelle ISO 8859-1 zu entnehmen. Im Folgenden werden die wichtigsten Zeichen
aufgelistet. Die Substitution ist nur auf die einzelnen Befehls- und Antwort-Token
anzuwenden, d.h. die Befehls- ('+' und '*') und Antwortkenner ('%' und '=') sowie
die Tokentrenner (':' und ';') selbst werden nicht umgesetzt.
Zeichen die umgesetzt werden müssen
Zeichen |
Bedeutung |
Quoted-Hex Darstellung |
% |
Prozent |
%25 |
; |
Semikolon |
%3B |
: |
Doppelpunkt |
%3A |
<CR> |
Wagenrücklauf |
%0D |
<LF> |
Zeilenvorschub |
%0A |
Zeichen die umgesetzt werden können (Umlaute, Sonderzeichen)
Zeichen |
Quoted-Hex Darstellung |
ä |
%e4 |
ö |
%f6 |
ü |
%fc |
ß |
%df |
Ä |
%c4 |
Ö |
%d6 |
Ü |
%dc |
= |
%3D |
? |
%3F |
° |
%b0 |
§ |
%a7 |
& |
%26 |
/ |
%2F |
( |
%28 |
) |
%29 |
+ |
%2B |
Zeichen die nicht umgesetzt werden müssen
Zeichen |
Bedeutung |
, |
Komma |
. |
Punkt |
- |
Bindestrich |
_ |
Unterstrich |
Quoted-Hex Darstellung |
Bedeutung |
%-- |
NULL-Value |
Erklärung: Es gibt Datenfelder, die optional sind, d.h. keine Werte enthalten müssen,
aber falls sie vorhanden sind keinen Leerstring enthalten düfen (NULLABLE = TRUE and
EMPTY = FALSE). Bei der feldweisen Übertragung kann das Feld einfach nicht übertragen
werden. Bei der satzweisen oder blockweisen Übertragung wenn einzelne Sätze (z.B.
LKV-Betriebe) Werte übertragen sollen andere aber Sätze keinen Wert für dieses Feld
haben und eine Plausiprüfung einen Leertring nicht zulassen würde, kann das fehlen des
Wertes, sprich der NULL-Value mittels Angabe von "%--" übertragen werden.
Weitere Hinweise siehe Darlegung der NULL-Semantik
(Hier erfolgt ggf. noch eine Änderung ??)
Was wird umgesetzt
Von der Umsetzung betroffen sind alle Datenelemente in der Datenliste eines Befehls und
alle Textelemente im Textteil einer Antwort. Jedes Element wird einzeln behandelt und kann
daher auch individuelle NULL-Werte oder Separatoren als Inhalt transportieren.
Wann wird umgesetzt
Beim Bilden der Datenliste eines Befehls, aus externen Quellen wie Benutzereingaben
oder Input-Dateien, wird jedes Datenelement separat mit "QuoteHex" umgesetzt und
durch Semikolon getrennt in der Liste angehängt.
Bei Empfangen eines Befehls wird jedes Datenelement separat mit "UnquoteHex"
wieder zurück in den Originalwert oder einen NULL-Value umgesetzt, vor es dann in der
Datenabnk gespeichert wird.
Beim Verpacken der Textelemente des Textteils in der Antwortstruktur wird ebenfalls mit
"QuoteHex" umgesetzt, so dass auch die Sonderzeichen transportiert werden
können. Insbesondere beim Ausgeben von Datenabfragen wird im Textteil der Antwort jeder
Datenwert als eigenes Textelement behandelt und separat "hex-quoted".
Erst wenn die Antwort wieder in die Einzelbestandteile getrennt werden soll erfolgt die
Rückumsetzung mit "UnquoteHex". Wenn die Antwort insgesamt weiterübermittelt
wird, wie z.B. beim HIT-Batchclient in der LOG-Datei darf noch nicht zurückumgesetzt
werden, da der Empfänger sonst beim Parsen des Antwortstrings Probleme hat.
Bei der Ausgabe von Werten im HIT-Protokoll werden NULL-Values, d.h. Feldern in denen
in der Datenbank nichts gespeichert ist als Quoted-Hex Darstellung "%--"
ausgegeben. Bei alle Textstrings werden rechts alle nachfolgenden Leerzeichen ("trailing blanks")
abgeschnitten, so daß eine Stringvariable, die nicht NULL ist aber nur Blanks enthält,
als leerer String, also i.d.R. ";;" dargestellt wird. (Hier
erfolgt ggf. noch eine Änderung ??)
Beim Senden von Daten im HIT-Protokoll ist nach der restriktiven HIT-CSV Festlegung
vorzugehen. Einzelheiten siehe Klarstellungen zum CSV-Format
NULL vs. Leerstring
Wie Stringsvariablen ohne Inhalt nun tatsächlich zu behandeln sind, als Leerstring
oder NULL, wird separat festgelegt, siehe NULL/Leerstring.
Semantische Feinheiten
Folgende Anmerkungen sind besondere Feinheiten und i.d.R. nicht von Bedeutung. Bei der
Entwicklung eigener HIT-Clients können sie aber zur Klarstellung dienen.
- Da nach dem letzten Element einer CSV-Auflistung kein Separator folgt, ist eine
CSV-Auflistung ohne Elemente nicht von einer Auflistung mit einem Leerstring zu
unterscheiden => es gibt keine Auflistung ohne Elemente.
- Der Befehl RETRIEVE mit einem einzelnen leeren Element in der Datenliste "*n:RS:<entity>/*:"
wird akzeptiert.
- Da die Anzahl der Feldelemente gleich der Anzahl der Datenelemente sein muss (außer bei
RETRIEVE), gibt es keine Entität ohne Elemente. Die Entität LOGOFF wird mit "*n:XS:LOGOFF:"
ausgeführt, dabei wird intern ein Dummy-Feld mit leerem Feldnamen und ein leeres
Datenelement angenommen.
- Wenn in aufeinander folgenden Meldungen die Objekt-Teile (Meldung/Feldliste) identisch
sind, können sie entfallen um Daten auf der Leitung zu sparen. Der Server benutzt dann
automatisch die letzte Objekt-Liste erneut, z.B:
- Meldung "*n:RS:ABGANG/LOM;BNR15;ABGA_DAT:27600..;27609..;1.1.99".
- Meldung "*n:RS::27600..;27609..;2.2.99".
- Eine Verkürzung des Objektteils auf nur die Meldung ohne Schrägstrich ist genauso
zulässig und eindeutig, z.B:"*n:RS:ABGANG:27600..;27609..;3.3.99".
- Nur Meldungsteil und Schrägstrich, z.B. "*n:RS:ABGANG/:27600..;27609..;4.4.99"
heißt eigentlich Feldliste hat ein leeres Element und sollte daher nicht verwendet
werden.
Zum Seitenanfang
|