Update Sales Order Line Items
Zuletzt geändert: 28.05.2026 17:46

Übersicht

Update-SalesOrderLineItems #

ÜBERSICHT #

Aktualisiert die Auftragspositionen eines vorhandenen Auftrags in EULANDA.

SYNTAX #

Update-SalesOrderLineItems [-XmlFile] <string> [-Conn] <__ComObject> [-ReplaceLineItems]
    [-CreateArticle] [<CommonParameters>]

BESCHREIBUNG #

Diese Funktion ersetzt oder ergänzt die Positionen eines bestehenden Auftrags. Sie liest die interne Auftrags-ID automatisch aus der XML-Datei und nutzt dazu zwei mögliche Schlüssel - in dieser Reihenfolge:

  1. (eindeutig, bevorzugt) Falls vorhanden, wird der Auftrag über dbo.Auftrag.KopfNummer ermittelt. Dieser Pfad ist eindeutig und sollte immer verwendet werden, wenn der Auftrag bereits in EULANDA existiert und dessen Nummer bekannt ist (z. B. wenn eine externe App eine vorbereitete Auftrags-XML zurückspielt).

  2. (Käuferbestellnummer, Fallback) Nur wenn im XML fehlt oder leer ist. Achtung: die Bestellnummer ist nicht eindeutig - bei mehr als einem Treffer bricht die Funktion mit einer klaren Fehlermeldung ab, statt stillschweigend einen beliebigen Auftrag zu erwischen.

Der Auftrag muss im System existieren, sonst wird eine Exception geworfen.

Die Funktion wurde ursprünglich für eine Integration mit einer externen Auftragserfassung vorgesehen. Diese bekommt einen leeren Auftrag, der am Handy oder Tablet im Außeneinsatz erfasst wird.

POSITIONS-TEXTE: IDENT, LANGTEXT und KURZTEXT1 #

Das XSD-Schema kennt auf Positionsebene zwei Textfelder: IDENT (Pflicht) und LANGTEXT (optional). EULANDA trennt diese auf Positionsebene in zwei Spalten: AuftragPos.Kurztext1 und AuftragPos.Langtext. Sind die Positions-Spalten leer, zieht EULANDA beim Lesen automatisch die entsprechenden Werte aus dem Artikelstammsatz (Artikel.Kurztext1 bzw. Artikel.Langtext). Nur wenn die Position selbst einen Wert trägt, gewinnt dieser gegenüber dem Stammsatz.

Der Import setzt die Positions-Spalten deshalb so:

  • <LANGTEXT> -> AuftragPos.Langtext: Eins-zu-eins übernommen. Fehlt das Element im XML, bleibt die Spalte leer und der Stammsatz-Langtext gewinnt.
  • <IDENT> -> AuftragPos.Kurztext1: Nur wenn IDENT sich von ARTNUMMER unterscheidet. Sender die IDENT aus der gleichen Quelle wie ARTNUMMER füllen (typisch bei simplen CSV-Integrationen) bekommen damit keinen Kurztext1-Override, und der Stammsatz-Kurztext gewinnt. Nur wenn der Sender bewusst einen eigenen Kurztext in IDENT mitliefert, überschreibt er den Stammsatz.
  • Artikelneuanlage (-CreateArticle): Hier wandert <IDENT> über New-Article -Fields zusätzlich in den neu angelegten Artikelstammsatz.

Damit bleibt die EULANDA-Stammsatz-Mechanik intakt: wer etwas Abweichendes liefern will, kann das - wer nichts liefert, bekommt automatisch die Stammsatz-Werte.

PARAMETER #

-XmlFile #

Type: string

Pfad zur EULANDA-AUFTRAG-XML-Datei.

-Conn #

Type: __ComObject

Eine aktive COM-Verbindung zur EULANDA-Datenbank.

-ReplaceLineItems #

Type: switch

Wenn gesetzt, werden alle vorhandenen Positionen des Auftrags gelöscht, bevor neue Positionen angelegt werden. Dies kann insbesondere dann sinnvoll sein, wenn beim Außeneinsatz ausschließlich tatsächlich erfasste Leistungen berechnet werden sollen, im System jedoch bereits Vorschlagspositionen vorhanden sind.

In einem solchen Szenario könnten die bestehenden Positionen zuvor als Sichtvorlage (z. B. HTML oder PDF) an den Außendienstmitarbeiter übermittelt werden, damit dieser einen Überblick über die vorgesehenen Aufgaben hat.

Hängt am Auftrag bereits ein Lieferschein, dessen Positionen via afp_id auf Auftragspositionen referenzieren, bricht die Funktion mit einer klaren Meldung ab (statt eine FK-Verletzung beim DELETE auszulösen).

-CreateArticle #

Type: switch

Wenn gesetzt, werden Artikel, die in der Datenbank nicht gefunden werden, automatisch neu angelegt. Ohne diesen Schalter wird eine Exception geworfen, sobald ein Artikel nicht zugeordnet werden kann.

AUSGABEN #

[int[]]

Gibt die IDs der neu angelegten Auftragspositionen zurück.

BEISPIELE #

# Alle Positionen neu anlegen und alte löschen
$xml = 'C:\EulandaXtools\orders.xml'
Update-SalesOrderLineItems -Conn $conn -XmlFile $xml -ReplaceLineItems
# Nur zusätzliche Positionen hinzufügen
$xml = 'C:\EulandaXtools\orders.xml'
Update-SalesOrderLineItems -Conn $conn -XmlFile $xml