OBS/Makros und Scripting/Anwendungsbereiche/Customize OpenTRANS: Unterschied zwischen den Versionen

Aus OBS Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „{{Makros und Scripting}} Der Import von OpenTRANS-Dateien findet sich besonders in Shop-Schnittsellen. Mehrere Shop-Schnittstelle unterstützen den Import von…“)
Zeile 110: Zeile 110:
         oAuftPos.cAusdruckJN := '1'; //Drucken=Nein
         oAuftPos.cAusdruckJN := '1'; //Drucken=Nein


         cCHECKOUT_NOTES      := '';
         cZusatznotiz        := '';
     end;
     end;


Zeile 163: Zeile 163:
         oAuftPos.cStatus      := 'V000';
         oAuftPos.cStatus      := 'V000';


         cSHIPPING_COST := '';
         cKosten_Fracht        := '';
     end;
     end;


Zeile 182: Zeile 182:
         oAuftPos.cStatus      := 'V000';
         oAuftPos.cStatus      := 'V000';


         cINSURANCE_COST := '';
         cKosten_Versich        := '';
     end;
     end;
end;
end;
</syntaxhighlight>
</syntaxhighlight>

Version vom 27. Juni 2022, 14:54 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[]]>) 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

//OpenTRANS_Order_Import_Shop

var cKosten_Fracht  : string;
    cKosten_Versich : string;
    cZusatznotiz    : string;

//------------------------------------------------------------------------------

function LeseXML(cXML: string; cElement: string; var cWert: string): boolean;
begin
    GetXMLToken(cXML, cElement, cWert);
    GetXMLCDataValue(AllTrim(cWert), cWert);
    Result := True;
end;

//------------------------------------------------------------------------------

function ReadHeader(oMyDB: TxDB; cOrderHeaderXML: string): boolean;
begin
    //insert customize code here
    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;

    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;

    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;