OBS/Makros und Scripting/Anwendungsbereiche/Customize OpenTRANS: Unterschied zwischen den Versionen
Nimz (Diskussion | Beiträge) |
Nimz (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
Zeile 58: | Zeile 58: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===GetXMLCDataValue=== | ===GetXMLCDataValue=== | ||
Unter Umständen sind die Daten in einem CDATA (<![CDATA[]]>) angegeben. Um an den eigentlichen Wert als Text zu kommen, kann diese Funktion verwendet werden. | Unter Umständen sind die Daten in einem [https://de.wikipedia.org/wiki/CDATA CDATA] (<![CDATA[]]>; kurz für ''character data'') angegeben. Um an den eigentlichen Wert als Text zu kommen, kann diese Funktion verwendet werden. | ||
<syntaxhighlight lang="Delphi"> | <syntaxhighlight lang="Delphi"> | ||
// Parameter: | // Parameter: | ||
Zeile 70: | Zeile 70: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=Beispiel= | =Beispiel= | ||
Das folgende Beispiel soll veranschaulichen, wie aus benutzerdefinierten OpenTRANS-Feldern für Frachtkosten und Versicherungspauschale Artikelpositionen im Auftrag werden. | |||
<syntaxhighlight lang="Delphi"> | <syntaxhighlight lang="Delphi"> | ||
//OpenTRANS_Order_Import_Shop | //OpenTRANS_Order_Import_Shop | ||
Zeile 81: | Zeile 82: | ||
function LeseXML(cXML: string; cElement: string; var cWert: string): boolean; | function LeseXML(cXML: string; cElement: string; var cWert: string): boolean; | ||
begin | begin | ||
//Liest den Wert für das Element cElement aus der XML-Struktur cXML aus | |||
//und gibt diesen in cWert zurück | |||
GetXMLToken(cXML, cElement, cWert); | GetXMLToken(cXML, cElement, cWert); | ||
//Entfernt aus dem Wert cWert die CDATA-Syntax | |||
GetXMLCDataValue(AllTrim(cWert), cWert); | GetXMLCDataValue(AllTrim(cWert), cWert); | ||
Result := True; | Result := True; | ||
Zeile 90: | Zeile 94: | ||
function ReadHeader(oMyDB: TxDB; cOrderHeaderXML: string): boolean; | function ReadHeader(oMyDB: TxDB; cOrderHeaderXML: string): boolean; | ||
begin | begin | ||
// | //Auslesen der Daten aus der XML-Datei | ||
LeseXML(cOrderHeaderXML, 'UDX.KOSTEN_FRACHT' , cKosten_Fracht ); | LeseXML(cOrderHeaderXML, 'UDX.KOSTEN_FRACHT' , cKosten_Fracht ); | ||
LeseXML(cOrderHeaderXML, 'UDX.KOSTEN_VERSICH', cKosten_Versich); | LeseXML(cOrderHeaderXML, 'UDX.KOSTEN_VERSICH', cKosten_Versich); | ||
Zeile 147: | Zeile 151: | ||
Result := True; | Result := True; | ||
//Wenn Frachtenkosten ungleich 0 Euro angegeben sind, diese als Position übernehmen | |||
if (not Empty(fVal(cKosten_Fracht))) then begin | if (not Empty(fVal(cKosten_Fracht))) then begin | ||
oAuftPos := oAuftrag.NeuePosition('OTSHP00002'); | oAuftPos := oAuftrag.NeuePosition('OTSHP00002'); | ||
Zeile 166: | Zeile 171: | ||
end; | end; | ||
//Wenn eine Versicherungspauschale berechnet wird (ungleich 0 Euro), dann eine Position anlegen | |||
if (not Empty(fVal(cKosten_Versich))) then begin | if (not Empty(fVal(cKosten_Versich))) then begin | ||
oAuftPos := oAuftrag.NeuePosition('OTSHP00003'); | oAuftPos := oAuftrag.NeuePosition('OTSHP00003'); |
Aktuelle Version vom 29. Juni 2022, 15:17 Uhr
Der Import von OpenTRANS-Dateien findet sich besonders in Shop-Schnittsellen. Mehrere Shop-Schnittstelle unterstützen den Import von Auftragsdateien (OpenTRANS-Order). Neben besonderem Verhalten für bestimmte Aufträge können per Customize auch Daten aus benutzerdefinierten Datenfeldern (UDX) übernommen werden.
Macro
Anlage
Öffnen Sie die Script-Bibliothek. Diese finden Sie über das Menü System unter J Sonderprogramme Punkt SB - Script-Biliothek. Legen Sie hier ein Script mit dem Namen OpenTRANS_Order_Import an. Ist das Makro für den Import über eine Shop-Schnittstelle gedacht, muss die Nummer der Schnittstelle mit angegeben werden (z. B. Shop-Schnittstelle 001 ergibt OpenTRANS_Order_Import_Shop001).
Funktionen
Die folgenden Funktionen beschreiben die Funktionen, welche im Import aufgerufen werden, sofern im Makro definiert, und Ihnen die Möglichkeit geben die Daten, die letztlich in den Auftrag geschrieben werden zu beeinflussen.
Funktion: ReadHeader
// Parameter:
// oMyDB = Datenbank über die der Import läuft
// cOrderHeaderXML = Enthält den vollständigen Inhalt des Kopfteils der Datei (ORDER_HEADER)
function ReadHeader(oMyDB: TxDB; cOrderHeaderXML: string): boolean;
Funktion: WriteHeader
// Parameter:
// oMyDB = Datenbank über die der Import läuft
// oAuftrag = Auftragsobjekt
function WriteHeader(oMyDB: TxDB; oAuftrag: TAuftrag): boolean;
===Funktion: ReadItem===
<syntaxhighlight lang="Delphi">
// Parameter:
// oMyDB = Datenbank über die der Import läuft
// cOrderItemXML = Enthält den vollständigen Inhalt der jeweiligen Position aus der Datei (ORDER_ITEM)
function ReadItem(oMyDB: TxDB; cOrderItemXML: string): boolean;
Funktion: WriteItem
// Parameter:
// oMyDB = Datenbank über die der Import läuft
// oAuftrag = Auftragsobjekt, enthält die bisher für den Auftrag übernommenen Daten
// oAuftPos = Positionsobjekt, enthält die bisher für die Position übernommenen Daten
function WriteItem(oMyDB: TxDB; oAuftrag: TAuftrag; oAuftPos : TAuftragPos): boolean;
Funktion: ReadSummary
// Parameter:
// oMyDB = Datenbank über die der Import läuft
// cOrderSummaryXML = Enthält den vollständigen Inhalt der Zusammenfassung/Summe der Positionen aus der Datei (ORDER_SUMMARY)
function ReadSummary(oMyDB: TxDB; cOrderSummaryXML: string): boolean;
Funktion: WriteSummary
// Parameter:
// oMyDB = Datenbank über die der Import läuft
// oAuftrag = Auftragsobjekt
function WriteSummary(oMyDB: TxDB; oAuftrag: TAuftrag): boolean;
Interessante Funktionen für die Verwendung im Makro
GetXMLToken
// Parameter:
// cXML = XML-Struktur, au sder ausgelesen werden soll
// cElement = Name des XML-Elements, dessen Wert ausgelesen werden soll
// cWert = Enthält nach Ausführung den Wert aus dem Element
function GetXMLToken(cXML: string; cElement: string; var cWert: string): boolean;
GetXMLCDataValue
Unter Umständen sind die Daten in einem CDATA (<![CDATA[]]>; kurz für character data) angegeben. Um an den eigentlichen Wert als Text zu kommen, kann diese Funktion verwendet werden.
// Parameter:
// cWert = XML-Struktur, au sder ausgelesen werden soll
// cWertNeu = Name des XML-Elements, dessen Wert ausgelesen werden soll
// Beispiel:
// cWert := '<![CDATA[Beispiel Text]]>';
// GetXMLCDataValue(cWert, cWertNeu);
// cWertNeu -> 'Beispiel Text'
function GetXMLCDataValue(cWert: string; var cWertNeu: string): boolean;
Beispiel
Das folgende Beispiel soll veranschaulichen, wie aus benutzerdefinierten OpenTRANS-Feldern für Frachtkosten und Versicherungspauschale Artikelpositionen im Auftrag werden.
//OpenTRANS_Order_Import_Shop
var cKosten_Fracht : string;
cKosten_Versich : string;
cZusatznotiz : string;
//------------------------------------------------------------------------------
function LeseXML(cXML: string; cElement: string; var cWert: string): boolean;
begin
//Liest den Wert für das Element cElement aus der XML-Struktur cXML aus
//und gibt diesen in cWert zurück
GetXMLToken(cXML, cElement, cWert);
//Entfernt aus dem Wert cWert die CDATA-Syntax
GetXMLCDataValue(AllTrim(cWert), cWert);
Result := True;
end;
//------------------------------------------------------------------------------
function ReadHeader(oMyDB: TxDB; cOrderHeaderXML: string): boolean;
begin
//Auslesen der Daten aus der XML-Datei
LeseXML(cOrderHeaderXML, 'UDX.KOSTEN_FRACHT' , cKosten_Fracht );
LeseXML(cOrderHeaderXML, 'UDX.KOSTEN_VERSICH', cKosten_Versich);
LeseXML(cOrderHeaderXML, 'UDX.ZUSATZNOTIZ' , cZusatznotiz );
Result := True;
end;
//------------------------------------------------------------------------------
function WriteHeader(oMyDB: TxDB; oAuftrag: TAuftrag): boolean;
begin
//insert customize code here
if (not Empty(cZusatznotiz)) then begin
//Notizen als Auftragstext übernehmen
oAuftPos := oAuftrag.NeuePosition('OTSHP00001');
oAuftPos.cKundNr := oAuftrag.cKdNr;
oAuftPos.cTyp := '1'; //Auftragstext
oAuftPos.PcMemofeld := cZusatznotiz;
oAuftPos.cAusdruckJN := '1'; //Drucken=Nein
cZusatznotiz := '';
end;
Result := True;
end;
//------------------------------------------------------------------------------
function ReadItem(oMyDB: TxDB; cOrderItemXML: string): boolean;
begin
//insert customize code here
Result := True;
end;
//------------------------------------------------------------------------------
function WriteItem(oMyDB: TxDB; oAuftrag: TAuftrag; oAuftPos : TAuftragPos): boolean;
begin
//insert customize code here
Result := True;
end;
//------------------------------------------------------------------------------
function ReadSummary(oMyDB: TxDB; cOrderSummaryXML: string): boolean;
begin
//insert customize code here
Result := True;
end;
//------------------------------------------------------------------------------
function WriteSummary(oMyDB: TxDB; oAuftrag: TAuftrag): boolean;
var oAuftPos : TAuftragPos;
begin
Result := True;
//Wenn Frachtenkosten ungleich 0 Euro angegeben sind, diese als Position übernehmen
if (not Empty(fVal(cKosten_Fracht))) then begin
oAuftPos := oAuftrag.NeuePosition('OTSHP00002');
oAuftPos.SetPosNr(999);
oAuftPos.lNeuNum := True;
//hier die Artikelnummer des Artikels als Parameter mitgeben
//Wer Leistungen statt Artikel verwendet, kann statt FillArtikel mit FillLeistung
//Parameter ist dann die Leistungsnummer
oAuftPos.FillArtikel('FRACHTKOSTEN');
oAuftPos.nMenge := 1;
oAuftPos.nEPreis := fVal(cKosten_Fracht);
oAuftPos.nGPreis := oAuftPos.nEPreis;
oAuftPos.nRabatt := 0;
oAuftPos.cStatus := 'V000';
cKosten_Fracht := '';
end;
//Wenn eine Versicherungspauschale berechnet wird (ungleich 0 Euro), dann eine Position anlegen
if (not Empty(fVal(cKosten_Versich))) then begin
oAuftPos := oAuftrag.NeuePosition('OTSHP00003');
oAuftPos.SetPosNr(999);
oAuftPos.lNeuNum := True;
//hier die Artikelnummer des Artikels als Parameter mitgeben
//Wer Leistungen statt Artikel verwendet, kann statt FillArtikel mit FillLeistung
//Parameter ist dann die Leistungsnummer
oAuftPos.FillArtikel('VERSICHERUNG');
oAuftPos.nMenge := 1;
oAuftPos.nEPreis := fVal(cKosten_Versich);
oAuftPos.nGPreis := oAuftPos.nEPreis;
oAuftPos.nRabatt := 0;
oAuftPos.cStatus := 'V000';
cKosten_Versich := '';
end;
end;