Import/Export Advanced / Konvertierung / active Feld muss int sein / mainNumber in orderNumber ?

Hallo liebe Community!

Ich habe zwei Anforderungen beim Importieren von XML-Dateien via der Import-Export Advanced Plugins:

  1. In meiner XML-Datei gibt es einen Zweig" namens „ProductOnlineStatus“ der entweder mit „true“ oder „false“ befüllt ist. Dieser Wert wird der Shopware-Variable „active“ zu geordnet und einer Import-Konvertierung zugeteilt. Diese Konvertierung lautet wie folgt:

    {if $active == ‚true‘}1{else}0{/if}

Ist nun besagter Wert „ProductOnlineStatus“ true, klappt der Import und der Artikel wird korrekt importiert.

Ist aber nun der Wert „ProductOnlineStatus“ false, so finde ich im Protokoll eine Meldung „active Feld muss int sein!“

Der selbe Fehler tritt übrigens ebenfalls auf, wenn ich anstelle von

{if $active == 'true'}1{else}0{/if}

ein einfaches

0

in die Konvertierung schreibe.
Auch der Versuch, die Variable active dem Wert 0 via

{assign var="active" value=false} 

zuzuweisen schlägt mit dem selben Fehler fehl.

Ist es möglich, dass 0 tatsächlich ein ungültiger Integer-Wert ist? Oder handelt es sich hierbei um einen Bug?

 

  1. In meiner XML-Datei finde ich einen Wert „ProductID“, dem Wert teile ich das Shopware-Feld orderNumber zu. Nun benötige ich ja zum erfolgreichen Import noch das Feld „mainNumber“ - der Wert „mainNumber“ ist aber nur dann in der XML-Datei in einem Feld „MasterProductID“ vorhanden, wenn es zu dem Artikel Varianten gibt, ansonsten existiert der Wert nicht und mainNumber bleibt leer.

Kann ich die Konvertierungen nutzen, um diesen Wert den Wert aus „orderNumber“ zu zuteilen, wenn mainNumber leer ist oder nicht definiert ist? Wenn ja, wie?

z.B. sowas wie:
erst einmal das Feld „orderNumber“ hinzufügen und als Import-Umwandlung einen ähnlichen Code festlegen:

{if not isset($mainNumber)}{assign var="mainNumber" value=$orderNumber}{/if}

Vielen Dank schon mal vorab für eure Hilfe!

Bei Unklarheiten bitte fragen!

Viele Grüße
Stefan Zwosta

 

Hallo,

das mit dem Active hab ich auf die schnelle auch nicht hinbekommen. Es scheint als wird direkt geprüft, ob das Feld ein INT-Wert ist und dann erst die Konvertierung angewendet. Bei der Mainnumber darf das Feld nicht leer sein, da müsste dann bspw. eine “0” oder sowas drinstehen, dann geht das: 

{if mainNumber == 0}{$orderNumber}{else}{$mainNumber}{/if}

Grundproblem ist wohl, dass die Validierung vor der Konvertierung erfolgt. Entsprechend kann man durch die Konvertierung die Validierung nicht umgehen/geradeziehen. Ich habe da mal ein Ticket für aufgemacht: 

 

 

Guten Morgen Moritz!

Vielen Dank für deinen Input und den Ansatz - ich werde mal damit spielen und Rückmeldung geben.

Was das Ticket angeht, so habe ich einen einen ergänzenden Kommentar hinzugefügt, um das Problem näher zu beschreiben!

Viele Grüße!

sz

Das Problem bei active ist doch ein anderes. Wenn du in Smarty “0” zurückgibst, dann wird dieses IF ignoriert: SwagImportExport/ValuesTransformer.php at master · shopwareLabs/SwagImportExport · GitHub

Du könntest das durch einen Hack ändern:

if ($evalData) {

ersetzen durch

if ($evalData || $evalData == 0) {

Dann sollte auch {if $active == ‘true’}1{else}0{/if} funktionieren.
Das hat also für alles was nicht “0” ist auch funktioniert, da dann irgendwann “false” im Active Feld stand, hat er abgebrochen.

Hallo Moritz!

Ich wollte noch Rückmeldung geben! :smiley: Dein Hack hat funktioniert! Vielen Dank dafür!

Viele Grüße aus Regensburg!

Stefan