std.edi.messages
Infrastruktur-Nachrichten für den EDIFACT-Austausch: Empfangsquittungen, Fehlermeldungen und Freitext. Diese Nachrichten sind kein Geschäftsinhalt, sondern die technische Kommunikationsebene zwischen zwei EDI-Partnern.
CONTRL — Syntax-Quittung (positiv oder negativ). Jeder empfangene Interchange wird quittiert.
APERAK — Anwendungsebenen-Fehlermeldung. Wird nach erfolgreicher Syntax-Prüfung gesendet, wenn eine Nachricht inhaltlich abgelehnt wird.
GENRAL — Freitext-Nachricht für alles, was kein eigenes Message-Format hat.
import std.edi.messages;
// Positive Quittung auf Interchange "ICR-2026-001" senden
var out: int64 := alloc(4096);
var n: int64 := EdiContrlOk(
"ICR-2026-001" as int64,
"MYCOMPANY" as int64,
"PARTNER01" as int64,
out, 4096);
// n = Byte-Länge des CONTRL-Segments
free(out, 4096);
Imports
Structs
EdiContrl (EDI_CONTRL_SIZE = 40 Bytes)
| Offset-Konstante | Inhalt |
EDI_CONTRL_STATUS | Status: 7=akzeptiert, 4=abgelehnt (Gruppen-Ebene), 5=abgelehnt (Nachrichten-Ebene) |
EDI_CONTRL_ERRCODE | UN/EDIFACT-Fehlercode (0 = kein Fehler) |
EDI_CONTRL_SEGPOS | Position des fehlerhaften Segments (0 = Interchange-Ebene) |
EDI_CONTRL_ICREF / EDI_CONTRL_ICREFLEN | Zeiger auf die ICR des quittierten Interchange |
Status-Konstanten:
| Konstante | Wert | Bedeutung |
EDI_CONTRL_ACCEPTED | 7 | Interchange vollständig akzeptiert |
EDI_CONTRL_REJECTED4 | 4 | Funktionale Gruppe abgelehnt |
EDI_CONTRL_REJECTED5 | 5 | Nachricht abgelehnt |
Standard-Fehlercodes (UN/EDIFACT S005):
| Konstante | Wert | Bedeutung |
EDI_ERR_SYNTAX_VER | 2 | Syntax-Version nicht unterstützt |
EDI_ERR_TEST_FLAG | 7 | Testflag-Mismatch |
EDI_ERR_INVALID_VALUE | 14 | Ungültiger Wert |
EDI_ERR_MISSING_SEG | 25 | Pflicht-Segment fehlt |
EdiAperak (EDI_APERAK_SIZE = 40 Bytes)
| Offset-Konstante | Inhalt |
EDI_APERAK_ERRCODE | Anwendungs-Fehlercode |
EDI_APERAK_REFMSG / EDI_APERAK_REFLEN | Zeiger auf referenzierte Nachrichten-ID |
EDI_APERAK_TEXT / EDI_APERAK_TEXTLEN | Zeiger auf Fehlertext |
EdiGenral (EDI_GENRAL_SIZE = 48 Bytes)
| Offset-Konstante | Inhalt |
EDI_GENRAL_SUBJECT / EDI_GENRAL_SUBJLEN | Betreff (aus BGM/C002) |
EDI_GENRAL_BODY / EDI_GENRAL_BODYLEN | Textkörper — alloziert, Caller muss freigeben |
EDI_GENRAL_REFMSG / EDI_GENRAL_REFLEN | Referenz auf die zugrundeliegende Nachricht |
Achtung GENRAL-Body: EdiGenralRead alloziert einen Puffer für den zusammengesetzten FTX-Inhalt. Nach der Verarbeitung freigeben mit:
free(peek64(result + EDI_GENRAL_BODY), peek64(result + EDI_GENRAL_BODYLEN));
Funktionen
CONTRL — Syntax-Quittung
| Signatur | Beschreibung |
EdiContrlOk(icRef: int64, senderId: int64, receiverId: int64, out: int64, outMax: int64): int64 | Schreibt positive CONTRL-Quittung (UCI-Status 7) |
EdiContrlErr(icRef: int64, segPos: int64, errCode: int64, out: int64, outMax: int64): int64 | Schreibt negative CONTRL-Quittung mit Fehlerposition und -Code |
EdiContrlRead(buf: int64, bufLen: int64, result: int64): int64 | Parst CONTRL; befüllt result (EDI_CONTRL_SIZE). Gibt EDI_OK oder Fehlercode. |
APERAK — Anwendungs-Fehlermeldung
| Signatur | Beschreibung |
EdiAperakWrite(refMsgId: int64, errCode: int64, errText: int64, out: int64, outMax: int64): int64 | Schreibt APERAK-Nachricht; errText ist null-terminiert (oder 0 für kein Text) |
EdiAperakRead(buf: int64, bufLen: int64, result: int64): int64 | Parst APERAK; befüllt result (EDI_APERAK_SIZE) |
GENRAL — Freitext-Nachricht
| Signatur | Beschreibung |
EdiGenralWrite(subject: int64, body: int64, refMsgId: int64, out: int64, outMax: int64): int64 | Schreibt GENRAL; body wird als FTX-Segmente eingebettet |
EdiGenralRead(buf: int64, bufLen: int64, result: int64): int64 | Parst GENRAL; alloziert Puffer für Body — nach Gebrauch freigeben |
Codebeispiel — CONTRL-Fehler senden
import std.edi.messages;
// Interchange "ICR-XYZ" ablehnen: Segment 5 hat ungültigen Wert
var out: int64 := alloc(4096);
var n: int64 := EdiContrlErr(
"ICR-XYZ" as int64,
5, // Segment-Position
EDI_ERR_INVALID_VALUE, // Fehlercode 14
out, 4096);
// n Bytes EDIFACT-Daten in out senden ...
free(out, 4096);
import std.edi.messages;
// Eingehende CONTRL-Quittung auswerten
var result: int64 := alloc(EDI_CONTRL_SIZE);
EdiContrlRead(inBuf, inBufLen, result);
if (peek64(result + EDI_CONTRL_STATUS) == EDI_CONTRL_ACCEPTED) {
PrintLn("Interchange akzeptiert.");
} else {
PrintLn("Interchange abgelehnt, Fehlercode: " +
IntToStr(peek64(result + EDI_CONTRL_ERRCODE)));
}
free(result, EDI_CONTRL_SIZE);
Quelldatei
| Unit | Datei |
std.edi.messages | std/edi/messages.lyx |
Letzte Aktualisierung: 2026-06-16