OpenXE/userdata/wiki/XentralHandbuch/default/TransferSmarty
2021-05-21 08:49:41 +02:00

1 line
12 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<strong><span style="font-size:28px;">Smarty</span></strong><h1>Features</h1>Mit Hilfe der integrierten Template-Engine Smarty k&ouml;nnen einfach und flexibel zeichenbasierte Ausgabestrukturen von Datenformaten wie CSV, XML oder JSON an die Bed&uuml;rfnisse des Kunden angepasst werden. Im Grunde muss lediglich das vorhandene Zielformat in eine Textdatei kopiert und mit den entsprechenden Variablen gef&uuml;llt werden. Diese k&ouml;nnen dabei noch umformatiert werden.<br />Belegdaten finden sich z.B. in der Smarty-Variable $beleg und werden in gewohnter PHP-Objektschreibweise angesprochen, z.B. $beleg-&gt;kundennummer oder $beleg-&gt;belegnr. Die Namensgebung gleicht der Benennung von Datenbank-Spaltennamen. Auch ein Zugriff auf komplexere Strukturen ist m&ouml;glich (je nach Beleg). So kann im Lieferschein auf den zu Grunde liegenden Auftrag zugegriffen werden: $beleg-&gt;auftrag-&gt;lieferdatum.Verk&uuml;rztes Beispiel mit fiktivem Format<p>&nbsp;{* Beleg-Stammdaten -------------------------------- *}<br />{$beleg-&gt;status}<br />{$beleg-&gt;datum|date_format:&#39;%d.%m.%Y&#39;}<br />{$beleg-&gt;belegnr}<br />{$beleg-&gt;kundennummer}<br />{$beleg-&gt;name}<br />{* Zugriff auf Daten des zugrundeliegenden Auftrages *}<br />{$beleg-&gt;auftrag-&gt;lieferdatum}<br />{* Weitere Felder entfernt *}</p><p>{* Positionen - Beginn ------------------------------ *}<br />&nbsp;&nbsp; {* Schleife durchl&auml;uft alle verf&uuml;gbaren Positionen *}<br />&nbsp;&nbsp; {foreach from=$beleg-&gt;positionen key=keypos item=position}<br />&nbsp;&nbsp;&nbsp;&nbsp; {$position-&gt;nummer}<br />&nbsp;&nbsp;&nbsp;&nbsp; {$position-&gt;bezeichnung}<br />&nbsp;&nbsp;&nbsp;&nbsp; {$position-&gt;beschreibung}<br />&nbsp;&nbsp;&nbsp;&nbsp; {$position-&gt;menge}<br />&nbsp;&nbsp;&nbsp;&nbsp; {$position-&gt;preis}<br />&nbsp;&nbsp;&nbsp;&nbsp; {* Weitere Felder entfernt *}&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp; {/foreach}<br />{* Positionen - Ende -------------------------------- *}</p><h1>Datenmanipulation und Strukturen</h1><h2>Formatumwandlung</h2> Datumswerte k&ouml;nnen nach Anforderung ausgegeben werden:<ul><li>Int. Datumsformat (ISO 8601): {$beleg-&gt;datum|date_format:&#39;%Y-%m-%d&#39;}</li><li>Deutsches Datumsformat (DIN 5008): {$beleg-&gt;datum|date_format:&#39;%d.%m.%Y&#39;}</li></ul>Zahlen k&ouml;nnen nach Bedarf umformatiert werden. Hier am Beispiel der Spalte &quot;Menge&quot;:<ul><li>Ausgabe ohne Nachkommastellen (als Ganzzahl): {$position-&gt;menge|string_format:&#39;%d&#39;}</li><li>Ausgabe mit einer Nachkommastelle: {$position-&gt;menge|string_format:&#39;%.1f&#39;}</li><li>Ausgabe mit zwei Nachkommastellen: {$position-&gt;menge|string_format:&#39;%.2f&#39;}</li></ul>Grunds&auml;tzlich k&ouml;nnen alle Formate ausgegeben werden, die durch die Funktion <a href="https://www.php.net/manual/de/function.sprintf.php" target="_blank">sprintf in PHP</a> verf&uuml;gbar sind.<h2>Anrufen komplexerer Strukturen</h2><h3>ArtikelStammdaten aus Positionen anprechen</h3><p>&Uuml;ber die Belegpositionen k&ouml;nnen auch &quot;darunterliegende&quot; Strukturen abgerufen werden, die nicht direkt im Beleg gespeichert sind. Ein Beispiel daf&uuml;r ist das Gewicht eines Artikels. Dieses kann &uuml;ber {$position-&gt;articledata-&gt;gewicht} abgerufen werden. So kann, z.B. durch eine Multiplikation mit der Menge der Position und dem Aufaddieren aller Gewichte, auch das Gesamtgewicht aller Artikel eines Beleges berechnet und &uuml;bertragen werden.<br />&Uuml;ber $position-&gt;articledata k&ouml;nnen alle Spalten aus der Tabelle artikel angesprichen werden. Dabei sollte immmer beachtet werden ob Informationen aus den Artikel-Stammdaten evtl. in der Auftragsposition beereirts ver&auml;ndert worden sein k&ouml;nnten. Im Zweifelsfall sollte der Wert aus dem Beleg verwendet werden.</p><h1>Beispiele</h1> Im Folgenden haben wir Ihnen einige Beispiele zusammengefasst, die die Ausgabe verschiedener Lieferscheinformate in den Formaten EDI, CSV und XML erm&ouml;glichen. Bitte pr&uuml;fen Sie bei eigener Anwendung die Spaltenbeschriftungen (CSV), Tagnamen (XML) und EDI-Spezifikationen. Nat&uuml;rlich sind auch weiteere Ausgabeformate (wie z.B. JSON) denkbar.<h2>Beispiel Lieferschein CSV (ausf&uuml;hrlich)</h2> Das folgende Beispiel listet ein ausf&uuml;hrliches Beispiel f&uuml;r einen Export eines Lieferscheines in verschiedenen Formaten.<h3>Format EDI</h3>- wird erg&auml;nzt -<h3>Format CSV</h3>&quot;tracking&quot;;&quot;beleg_status&quot;;&quot;beleg_datum&quot;;&quot;beleg_lieferdatum&quot;;&quot;beleg_tatsaechlicheslieferdatum&quot;;&quot;beleg_versandart&quot;;&quot;beleg_zahlungsweise&quot;;&quot;beleg_belegnr&quot;;&quot;beleg_hauptbelegnr&quot;;&quot;beleg_kundennummer&quot;;&quot;beleg_name&quot;;&quot;beleg_abteilung&quot;;&quot;beleg_unterabteilung&quot;;&quot;beleg_adresszusatz&quot;;&quot;beleg_ansprechpartner&quot;;&quot;beleg_telefon&quot;;&quot;beleg_email&quot;;&quot;beleg_land&quot;;&quot;beleg_strasse&quot;;&quot;beleg_plz&quot;;&quot;beleg_ort&quot;;&quot;beleg_projekt&quot;;&quot;beleg_aktion&quot;;&quot;beleg_internebemerkung&quot;;&quot;beleg_internebezeichnung&quot;;&quot;beleg_freitext&quot;;&quot;beleg_ihrebestellnummer&quot;;&quot;beleg_lieferbedingung&quot;;&quot;beleg_art&quot;;&quot;artikel_nummer&quot;;&quot;artikel_bezeichnung&quot;;&quot;artikel_beschreibung&quot;;&quot;artikel_menge&quot;;&quot;artikel_preis&quot;;&quot;artikel_rabatt&quot;;&quot;artikel_waehrung&quot;;&quot;artikel_lieferdatum&quot;;&quot;artikel_sort&quot;;&quot;artikel_umsatzsteuer&quot;;&quot;artikel_einheit&quot;;&quot;artikel_zolltarifnummer&quot;;&quot;artikel_herkunftsland&quot;;&quot;artikel_artikelnummerkunde&quot;;&quot;wunschlieferdatum&quot;;&quot;artikel_freifeld1&quot;;&quot;artikel_freifeld2&quot;;&quot;artikel_freifeld3&quot;;&quot;artikel_freifeld40&quot;{foreach from=$beleg-&gt;positionen key=keyrow item=position}{* Positionen *}\&quot;{$position-&gt;tracking}&quot;;\&quot;{$beleg-&gt;status}&quot;;\&quot;{$beleg-&gt;datum|date_format:&#39;%d.%m.%Y&#39;}&quot;;\&quot;{$beleg-&gt;lieferdatum}&quot;;\&quot;{$beleg-&gt;tatsaechlicheslieferdatum}&quot;;\&quot;{$beleg-&gt;versandart}&quot;;\&quot;{$beleg-&gt;zahlungsweise}&quot;;\&quot;{$beleg-&gt;belegnr}&quot;;\&quot;{$beleg-&gt;hauptbelegnr}&quot;;\&quot;{$beleg-&gt;kundennummer}&quot;;\&quot;{$beleg-&gt;name}&quot;;\&quot;{$beleg-&gt;abteilung}&quot;;\&quot;{$beleg-&gt;unterabteilung}&quot;;\&quot;{$beleg-&gt;adresszusatz}&quot;;\&quot;{$beleg-&gt;ansprechpartner}&quot;;\&quot;{$beleg-&gt;telefon}&quot;;\&quot;{$beleg-&gt;email}&quot;;\&quot;{$beleg-&gt;land}&quot;;\&quot;{$beleg-&gt;strasse}&quot;;\&quot;{$beleg-&gt;plz}&quot;;\&quot;{$beleg-&gt;ort}&quot;;\&quot;{$beleg-&gt;projekt}&quot;;\&quot;{$beleg-&gt;aktion}&quot;;\&quot;{$beleg-&gt;internebemerkung}&quot;;\&quot;{$beleg-&gt;internebezeichnung}&quot;;\&quot;{$beleg-&gt;freitext}&quot;;\&quot;{$beleg-&gt;ihrebestellnummer}&quot;;\&quot;{$beleg-&gt;lieferbedingung}&quot;;\&quot;{$beleg-&gt;art}&quot;;\&quot;{$position-&gt;nummer}&quot;;\&quot;{$position-&gt;bezeichnung}&quot;;\&quot;{$position-&gt;beschreibung}&quot;;\&quot;{$position-&gt;menge|string_format:&#39;%.2f&#39;}&quot;;\&quot;{$position-&gt;preis}&quot;;\&quot;{$position-&gt;rabatt}&quot;;\&quot;{$position-&gt;waehrung}&quot;;\&quot;{$position-&gt;lieferdatum}&quot;;\&quot;{$position-&gt;sort}&quot;;\&quot;{$position-&gt;umsatzsteuer}&quot;;\&quot;{$position-&gt;einheit}&quot;;\&quot;{$position-&gt;zolltarifnummer}&quot;;\&quot;{$position-&gt;herkunftsland}&quot;;\&quot;{$position-&gt;artikelnummerkunde}&quot;;\&quot;{$beleg-&gt;auftrag-&gt;lieferdatum}&quot;;\&quot;{$position-&gt;freifeld1}&quot;;\&quot;{$position-&gt;freifeld2}&quot;;\&quot;{$position-&gt;freifeld3}&quot;;\{* Ggf. weitere Freifelder *}&quot;;\&quot;{$position-&gt;freifeld40}&quot;;\<br />{/foreach}<h2>Format XML</h2><p>{$beleg-&gt;status}<br />{$beleg-&gt;datum|date_format:&#39;%d.%m.%Y&#39;}<br />{$beleg-&gt;lieferdatum}<br />{$beleg-&gt;tatsaechlicheslieferdatum}<br />{$beleg-&gt;versandart}<br />{$beleg-&gt;zahlungsweise}<br />{$beleg-&gt;belegnr}<br />{$beleg-&gt;hauptbelegnr}<br />{$beleg-&gt;kundennummer}<br />{$beleg-&gt;name}<br />{$beleg-&gt;abteilung}<br />{$beleg-&gt;unterabteilung}<br />{$beleg-&gt;adresszusatz}<br />{$beleg-&gt;ansprechpartner}<br />{$beleg-&gt;telefon}<br />{$beleg-&gt;email}<br />{$beleg-&gt;land}<br />{$beleg-&gt;strasse}<br />{$beleg-&gt;plz}<br />{$beleg-&gt;ort}<br />{$beleg-&gt;projekt}<br />{$beleg-&gt;aktion}<br />{$beleg-&gt;internebemerkung}<br />{$beleg-&gt;internebezeichnung}<br />{$beleg-&gt;freitext}<br />{$beleg-&gt;ihrebestellnummer}<br />{$beleg-&gt;lieferbedingung}<br />{$beleg-&gt;art}<br />{foreach from=$beleg-&gt;positionen key=keypos item=position}<br />&nbsp; {$position-&gt;nummer}<br />&nbsp; {$position-&gt;bezeichnung}<br />&nbsp; {$position-&gt;beschreibung}<br />&nbsp; {$position-&gt;menge}<br />&nbsp; {$position-&gt;preis}<br />&nbsp; {$position-&gt;rabatt}<br />&nbsp; {$position-&gt;waehrung}<br />&nbsp; {$position-&gt;lieferdatum}<br />&nbsp; {$position-&gt;sort}<br />&nbsp; {$position-&gt;umsatzsteuer}<br />&nbsp; {$position-&gt;einheit}<br />&nbsp; {$position-&gt;zolltarifnummer}<br />&nbsp; {$position-&gt;herkunftsland}<br />&nbsp; {$position-&gt;artikelnummerkunde}<br />&nbsp; {$position-&gt;freifeld1}<br />&nbsp; {$position-&gt;freifeld2}<br />&nbsp; {$position-&gt;freifeld3}<br />&nbsp; {* Ggf. weitere Freifelder *}<br />&nbsp; {$position-&gt;freifeld40}<br />{/foreach}<br />{if $beleg-&gt;versand}<br />{foreach from=$beleg-&gt;versand key=keyversand item=tracking} {* Versand *}<br />&nbsp; {$tracking-&gt;tracking}<br />{/foreach}<br />{/if}</p><h2>Beispiel Lieferschein mit MHD</h2> Im Folgenden werden Beispiele als Erg&auml;nzung zu obigen Code-Beispielen gezeigt, die nur die Besonderheiten in Bezug auf MHDs in einer Position ber&uuml;cksichtigen.<h3>Format CSV</h3>- wird erg&auml;nzt -<h3>Format XML</h3>- wird erg&auml;nzt -<br />&nbsp;<h2>Beispiel Lieferschein mit Charge</h2> Im Folgenden werden Beispiele als Erg&auml;nzung zu obigen Code-Beispielen gezeigt, die nur die Besonderheiten in Bezug auf Chargen in einer Position ber&uuml;cksichtigen.<h3>Format CSV</h3>- wird erg&auml;nzt -<h3>Format XML</h3>- wird erg&auml;nzt -<br />&nbsp;<h2>Beispiel Lieferschein mit Charge und MHD</h2> Im Folgenden werden Beispiele als Erg&auml;nzung zu obigen Code-Beispielen gezeigt, die nur die Besonderheiten in Bezug auf MHDs und Chargen in einer Position ber&uuml;cksichtigen.<h3>Format CSV</h3>- wird erg&auml;nzt -<h3>Format XML</h3>- wird erg&auml;nzt -<br />&nbsp;<h2>Beispiel Auftrag</h2> Anwendbar nur bei direktem Fulfillment ohne Autoversand. Diese Option sollte genau gepr&uuml;ft werden, meistens ist die &Uuml;bertragung von Lieferscheinen der optimale Weg.<h3>Format EDI</h3>- wird erg&auml;nzt -<h3>Format CSV</h3>- wird erg&auml;nzt -<h3>Format XML</h3>- wird erg&auml;nzt -<h2>Eingehende Datenkonvertierung</h2><h3>Es stehen folgende Objekte zur Verf&uuml;gung</h3>$csv ein Array aus Objekten mit dem Headerspalten als Keys<br />$xml ein Object das aus einem Xml gaparst wurde<br />$object ist ein $xml falls Ursprungsdaten ein g&uuml;ltiges xml waren, sonst das $csv Objekt<br />$original ist der Original-String des Eingangs<h3>Operationen</h3>{&quot;Der Auftrag enth&auml;lt keine Positionen&quot;|error}<br />gibt einen Fehler an Smarty aus das in den &Uuml;bertragungsmonitor geloggt wird<br /><br />{&quot;SELECT nummer FROM artikel&quot;|assignsql assign=&quot;artikelnummern&quot;}<br />speichert das Ergebnis der Sqlabrfage in die Variable $artikelnummern<br /><br />{$original|replace:&quot;1.0&quot;:&quot;2.0&quot;|getxml assign=&quot;neuesxml&quot;}<br />Ersetzt alle Strings 1.0 zu 2.0 und speichert wandelt es in ein neues Objekt $neuesxml um<br /><br />{$position-&gt;nummer|pregreplace:&#39;/[^0-9]/&#39;:&#39;&#39;}<br />f&uuml;ht eine Requl&auml;re Ers&auml;tzung auf das ein Objekt aus<br />&nbsp;