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

1 line
12 KiB
Plaintext
Raw Permalink 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;