EDI - Interface

 

1. Grundlagen
2. Beispiele
3. Auftrags-Edi

 

1. Grundlagen

PRODAT-SQL verfügt über ein universelles EDI-Interface. Man kann in den Systemprogrammen -> EDI eine Edi-Konfiguration mittels Regulärer Ausdrücke programmieren. Damit kann jedes beliebige Textfile geparst und importiert werden.

-------

Grundsätzlich ist die EDI-Konfiguration ähnlich einer INIFILE aufgebaut. Es gibt Sektionen und unterhalb dieser Konfigurationen

BSP

KillLine1 in der ersten Zeile bewirkt das Löschen der ersten Zeile der Übergabedatei. so oft KillLine1 untereinander schreiben wie Zeilen gelöscht werden sollen

Hinweis: für true und false immer 1 und 0 schreiben

[BestellNr] Sektion und gleichzeitig Variablenname
Start=  Zeichen oder Zeichenkette
End=  Zeichen oder Zeichenkette (alternativ : length) wird dieses Segment nicht angegeben und auch kein Length, wird die komplette Zeile verwendet.
   
EmptyString für Leerzeichen
length= Alternativ zu End, gibt an wie lang der zu verwendende String ab dem ermittelten Start ist. (z.Bsp. bei einem Datum {20071002} 8)

MultiLine=T (es ist ein Zeilenumbruch im Wert möglich, das EDI geht solange über die Folgezeilen bis entweder die in Length angegebene Zeichenanzahl erreicht, oder das EndeZeichen gefunden wird. Es bleibt für das EDI eine Zeile und geht nach dem Langtext direkt weiter (Siehe Bsp unten))
LineBreak=T (Extra Zeilenumbruch bei Zeilenwechsel einfügen)
delete= true(1) oder false(0), ist delete=1 wird der gefundene Abschnitt aus der Zeile entfernt. Wichtig für semikolonseparierte Zeilen
goback=Zahl, soweit zurückgehen um Schlüssel oder Einleitungswerte auch zu bekommen
deletesectionid= true(1) oder false(0), ist =1 wird der Header zum gefundene Abschnitt aus der Zeile entfernt.
over=  true oder false; wird bei mehrmaleigen vorkommen innerhalb einer Pos überschrieben (true) oder addiert (false) !true=1, false=0
default=  standardwert. vor allem wenn bei sich wiederholenden positionen nicht immer alle daten angegeben sind (eine Bestellung mit 5 Positionen, 3* mit und 2* ohne Änderungsindex, dann kann hier der Standardwert für den Änderungsindex angegeben werden.)
ClearNewPos=T Parameter wird bei neuer Position zurückgesetzt. z.Bsp. Position 1 enthält einen Ansprechpartner, Position 2 nicht. Fehlt das Segment dann in Pos 2 noch gänzlich, muß das zurücksetzen aktiviert werden um zu vermeiden das der Ansprechpartner aus Position 1 auch in Position 2 übernommen wird.

[SQLSTART]
SQL-Script das einmal zum beginn des EDI ausgeführt wird
[SQLSTARTEND]

für jede Position des EDI wird folgender SQL-Abschnitt (muß am Ende stehen, ab SQL wird alles ausgewertet bis zum Ende der Konfiguration

[SQL]
INSERT INTO edi_transfer_table () VALUES (Variableninhalte);
WEITERE SQL STATEMENTS

Zum Abgrenzen von Positionen wird ein Trennkennzeichen in der Oberfläche eingegeben, was ebenfalls einem regulären Ausdruck entspricht.
(Bsp. Mehrere Positionen eines Auftrags in einem EDI-File)

In den Systemeinstellungen wird eingestellt ob eine EDI-Konfiguration aktiv ist, oder nicht; das Verzeichnis in dem nach Files gesucht wird und zuletzt die DateinamensErweiterung der Datei. Diese wird dann vom Application-Server abgearbeitet. Also auf den Pfad vom Application aus achten.

Startzeichen : das Startzeichen ist ein Regulärer Ausdruck. Dieser enthält den gewollten Inhalt nicht mit.

EndZeichen :

    Das Endezeichen bis zu dem herauskopiert wird. Es wird ab dem Ende des Resultates des Regulären Ausdrucks bis zu dem Zeichen hier herauskopiert. Das wird dann der Inhalt der Variable. Soll ein Leezeichen den Abschluß bilden, muß hier EmptyString stehen, ansonsten das Zeichen das den Abschluss darstellt. (Zeichen oder Zeichenkette)

Vorgehen

EDI - Konfiguration erstellen.
EDI in den Systemeinstellungen einschalten.
In der Oberfläche in der Antenne ein Übergabe-F2 bauen, welches aus der Transfertabelle die Daten in die Oberfläche übergibt.
Einen Trigger an die Tabelle in die Daten übergeben werden hängen, welcher für den aktuell übergebenen Datensatz den Satz in der EDI-Transfertabelle löscht. Oder Tabelle im [SQL] leeren.
 

Oberfläche

 

          Syntax - Hinweise:

Escape - Char : \ (schaltet den Regulären Ausdruck für das nächste Zeichen ab)
^ Zeilenanfang
.{X} x beliebige Zeichen (. steht für beliebig)
^ANFANG.*XY (Sucht nach dem Zeilenanfang ANFANG bliebige Zeichen bis XY und danache wir losgelegt)

Semmikolon - separiert:
    arbeiten mit deltete=1
    start=;
    end=;

 

2. Beispiele

Beispiel direkter Zugriff per Zeichenposition:

Bietet sich an bei Datensätzen mit fixer Satzlänge und festen Feldbreiten. Das Löschen gefundener Variablen per "delete" sollte unterbleiben, damit Zeichenposition mit EDI-Spezifikation übereinstimmend bleibt.

Direkter Zugriff per Zeichenposition - Zeilenanfang, dann Konstante "2018435", dann 38 beliebige Zeichen. Die nächsten 15 Zeichen dann einlesen. Die Konstante hat 7 Zeichen. Es wird also vom 45. Zeichen bis zum 60. Zeichen gelesen.

[farbbez]
Start=^2018435(.{38})
Length=15
 

Direkter Zugriff per Zeichenposition - Zeilenanfang, dann Konstante "DATA", dann 3 "|", dann 102 beliebige Zeichen. Die nächsten 160 Zeichen dann einlesen. Die Konstante hat 4 Zeichen, dann 3 "|" und 102 beliebige Zeichen. Es wird also vom 109. Zeichen bis zum 269. Zeichen gelesen.

[txt]
Start=^Data(|3)(.{102})
Length=160

 

Beispiel direkter Zugriff auf Spalte-Nr. N:

Bei einfach per Trennzeichen separierten Dateien ist ein direkter Zugriff auf eine bestimmte Spalte möglich, indem die Trennzeichen gezählt werden. Im Beispiel ist "," das Spaltentrennzeichen. Es werden Zeilenanfänge mit "^" gesucht und definiert, das als erstes Zeichen ein $-Zeichen (Escaped mit "\") folgen muss. Danach werden 5 Einträge erwartet, die aus 0 bis N beliebigen Zeichen bestehen und mit "," abschließen. Das "?" sorgt dafür, das die kürzestmögliche Variante gewählt wird. Gelesen wird bis zum nächsten ",". Der einzulesende Satz sieht beispielsweise so aus:

$n-zeichen1,n-zeichen2,n-zeichen3,n-zeichen4,n-zeichen5,menge,n-zeichen6 ....

[menge]
Start=^\$(.*?,){5}
End=,

Obiger Ausdruck würde also die Spalte 6 als Menge einlesen.

Beispiel Oder-Verknüpfung:

Ermöglicht das Interpretieren von Daten in Abhängigkeit von der Satzart. Das Trennzeichen für die Alternativen einer Oder-Verküpfung ist "|". Der 1. Ausdruck "\$P(.*?,){11}" trifft zu, wenn die Zeile mit $P beginnt. Die Alternative, wenn die Zeile mit $B beginnt. Bei allen Datensätzen, die mit $P beginnen, würde der stkpreis also aus der 12. Spalte gelesen werden, bei $B-Datensätzen dagegen wird er in 13. Spalte vermutet.

[stkpreis]
Start=^(\$P(.*?,){11}|\$B(.*?,){12})
End=,

 

Beispiele Langtext:

BEISPIEL 1###################################################################################################
[aknr]
start=^
length=10
delete=1

[text]
start=^
length=36
multiline=T
delete=1

[Ende]
start=^
length=4
-------------------------------------EINGABE
0000001000Stück im
AVO 5  Vector
AVO 10 VectorEnde
0000007000Zeiss CymerAVO  
Vordrehen         Ende

BEISPIEL 2##############################################
[aknr]
start=^
length=10
delete=1

[text]
start=^<
End=>
multiline=T
delete=1

[Ende]
start=^
length=4
--------------------------------------EINGABE
0000001000<Stück im
AVO 5  Vector
AVO 10 Vector>Ende
0000007000<Zeiss CymerAVO  
Vordrehen>Ende

 

-------

3. Auftragsedi

Der Application Server füllt dabei die Tabelle "edi_incomming_auftg" diese wird vom EDI-Modul bearbeitet und geöffnet.

    Edi1.SearchEdi(DM1.OpenResultSql('SELECT edd_edi_name FROM edi_do_edi WHERE edd_edi_name LIKE ''%AUFTG%'' AND edd_active', []));//Auftragsedi

Anschliessend wird mittels ag_bda (optional ag_bdapos) und edi_bestnr (optional edi_bestpos) ein versuch eines edi-changes aufzubauen. wird nix gefunden, wird das edi als Neuauftrag betrachtet.

statische Übertragung:

nur wenn neuer edi eingang

ag_dispo=edi_dispo
ag_bda=edi_bestnr
 wenn vorhanden:
 
ag_bdapos=edi_bestpos
ag_aknr=ak_nr
ag_postxt=edi_txt
ag_lkn=edi_badress
ag_krzl=edi_ladress
ag_krzf=edi_radress
ag_mcv=standard_mgc_id

es wird immer übertragen (neuauftrag sowie order change)

ag_stk=edi_m
ag_vkp=edi_vkp
ag_kdatum=edi_term
 wenn vorhanden:
 ag_ldatum=edi_terml

sowie alle felder die durch das select statement einen gleichen namen haben wie in der auftg

 

siehe auch

Syntax Reguläre Ausdrücke