Neu interne Artikelnummer in Workflows - Aufträge

gboehm

Sehr aktives Mitglied
30. Januar 2011
1.057
87
Moin zusammen,
ich möchte für einen Workflow herausfinden, ob ein Artikel innerhalb eines Auftrages ein bestimmtes Artikelatribut - hier "Freitext" - gesetzt hat.

Folgendes Gerüst habe ich mir zusammengebaut:

Code:
{% for IntNr in Vorgang.AuftragsPositionen.Positionen -%}
   {% assign = IntArtikelNummer = Vorgang.AuftragsPositionen.Positionen.InterneArtikelnummer %}
    {% assign result = "SELECT cName FROM tArtikelAttribut, tAttributSprache Where  tArtikelAttribut.kAttribut = tAttributSprache.kAttribut AND tArtikelAttribut.kArtikel = IntArtikelNummer AND tAttributSprache.cName  = 'Freitext'" | DirectQuery %}
    {% for item in result.Daten %}
      {{ item.cName }}
   {% endfor %}
 {% endfor %}

Aber wie komme ich an die interne Artikelnummer?
Mit Vorgang.AuftragsPositionen.Positionen.InterneArtikelnummer bekomme ich nichts zurück. Es gibt in den vorgegebenen Variablen zwar "Vorgang.AuftragsPositionen.Positionen.ErstesObjekt.InterneArtikelnummer", aber diese liefert sie ja nur für die 1. Position im Auftrag und lässt alle weiteren aussen vor.

Das eigentliche SQL Statement funktioniert zwar, das habe ich im SQL-Management Studio getestet. Jedoch liefert es im Workflow nichts zurück, auch wenn ich die Interne Artikelnummer testweise fest eintrage.

Wer kann etwas Licht in mein Dunkel bringen?

Besten Dank im Voraus,

Guido
 

gboehm

Sehr aktives Mitglied
30. Januar 2011
1.057
87
Ok, das SQL statement konnte ich insofern fixen, als dass es zumindest mit einer fixen internen Artikelnummer funktioniert. Statt DirectQuery muss es DirectQueryScalar heißen.
Code:
{% assign result = "SELECT cName FROM tArtikelAttribut, tAttributSprache Where  tArtikelAttribut.kAttribut = tAttributSprache.kAttribut AND tArtikelAttribut.kArtikel = '507' AND tAttributSprache.cName  = 'Freitext'" | DirectQueryScalar %}

Bleibt noch die interne Artikelnummer....
 

Uwe Jaksties

Sehr aktives Mitglied
13. Mai 2014
571
117
Hallo.

Ich verstehe ehrlich gesagt den Aufwand nicht. Wenn Du tatsächlich nur prüfen willst, ob eine Auftragsposition ein bestimmtes Attribut + Wert enthält, musst Du keine SQL Query erstellen.

Bedingung: Auftrag\Auftragspositionen\Artikelpositionen\enthält\Attribute\Global\"Attributgruppe"\"Attribut" -> "gleich" -> Wert

Oder habe ich Dich falsch verstanden?
 

gboehm

Sehr aktives Mitglied
30. Januar 2011
1.057
87
nein, ist schon richtig.
Aber ich finde diesen Pfad nicht. Bei mir startet es mit Vorgang. Dann geht es noch bis einschließlich Artikelpositionen. Aber "enthält" ist dann schon nicht mehr vorhanden.
 

Uwe Jaksties

Sehr aktives Mitglied
13. Mai 2014
571
117
Okay.

Welche Wawi-Version benutzt Du denn? Wahrscheinlich liegt es daran.
Und Du befindest Dich bei den Workflows im Bereich Auftrag?
 

gboehm

Sehr aktives Mitglied
30. Januar 2011
1.057
87
ja, ist der Workflow für Aufträge. Die Wawi Version ist 1.1.4.7. Werde mal auf die neueste Updaten und schauen, ob der Pfad dann vorhanden ist
 

gboehm

Sehr aktives Mitglied
30. Januar 2011
1.057
87
Ja, in den erweiterten Eigenschaften. In den normalen Bedingungen nützt es mir nichts. Es reicht nicht festzustellen, ob es Artikel mit diesem Attribut gibt, ich muss auch wissen wieviele.
Hintergrund ist, dass der Konfigurator im Shop keine Abhängigkeiten kann. So wollte ich dann mit einem Workflow prüfen, ob und wieviele Konfig-Artikel mit einem bestimmten Attribut in der Positionsliste vorhanden sind. Dann prüfe ich auf weitere Artikel, die dann zwingend vorhanden sein müssen. Wenn nicht -> E-Mail.

Ein weiteres Problem, auf das ich gestoßen bin, ist eine Variable - hier die IntArtNr - in das SQL Statement zu übernehmen. Das scheint nicht zu gehen.
 

Uwe Jaksties

Sehr aktives Mitglied
13. Mai 2014
571
117
Okay. Verstehe. Das ist natürlich sehr komplex.
Erstmal zu Deiner ursprünglichen Query:

Code:
{% for IntNr in Vorgang.AuftragsPositionen.Positionen -%}
   {% assign = IntArtikelNummer = Vorgang.AuftragsPositionen.Positionen.InterneArtikelnummer %}
    {% assign result = "SELECT cName FROM tArtikelAttribut, tAttributSprache Where  tArtikelAttribut.kAttribut = tAttributSprache.kAttribut AND tArtikelAttribut.kArtikel = IntArtikelNummer AND tAttributSprache.cName  = 'Freitext'" | DirectQuery %}
    {% for item in result.Daten %}
      {{ item.cName }}
   {% endfor %}
 {% endfor %}

Folgende Korrekturen würde ich ungetestet vorschlagen:

Code:
{% for position in Vorgang.AuftragsPositionen.ArtikelPositionen -%}
{% assign IntArtikelNummer = position.Artikel.InterneArtikelnummer %}
{% capture itemquery -%}SELECT cName FROM tArtikelAttribut, tAttributSprache Where  tArtikelAttribut.kAttribut = tAttributSprache.kAttribut AND tArtikelAttribut.kArtikel = IntArtikelNummer AND tAttributSprache.cName  = 'Freitext'
{% endcapture -%}
{% assign result = itemquery | DirectQuery %}
{% for item in result.Daten %}
{{ item.cName }}
{% endfor %}
{% endfor %}

In der Query prüfst Du übrigens auf den Namen des Attributs, nicht auf den Wert. Ist das so gewollt?
 

gboehm

Sehr aktives Mitglied
30. Januar 2011
1.057
87
Vielen Dank für den Ansatz.
Ja, es reicht, wenn ich nur auf das Vorhandensein dieses Attributes prüfe. Der Wert ist egal.

Mit dem Code komme ich schon mal an die interne Artikelnummer. Aber IntArtikelNummer scheint nicht richtig an das SQL Statement übergeben zu werden. item.cName ergibt keine Ausgabe. Ersetzte ich die Variable IntArtikelNummer im SQL Statement durch '507', die eigentliche interne Artikelnummer, dann geht es.
 

Uwe Jaksties

Sehr aktives Mitglied
13. Mai 2014
571
117
Ah. Mach mal in der SQL-Query um die Variable IntArtikelNummer die geschweiften Klammern {{ }}. Das muss natürlich eine Ausgabe sein.
 

Ähnliche Themen