Inhaltsverzeichnis

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.

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