Neu Workflow - Oberkategorie prüfen

Ahok

Gut bekanntes Mitglied
11. September 2023
330
15
Wie kann ich prüfen, ob ein Artikel eine bestimmte Oberkategorie hat, egal auf welcher Ebene über ihm? Ich könnte bisher nur auf die nächste Oberkategorie prüfen, aber nicht auf die Oberkategorie der Oberkategorie usw.
 

jtldudel

Sehr aktives Mitglied
4. Januar 2018
636
207
Da es hier um Workflows geht hab ich hier zumindest einen Ansatz, wie genau das verbaut werden soll weiß ich ja nicht. Über eine erweiterte Eigenschaft könnt ihr die IDs aller Kategorien abfragen, die ein Artikel in seinem "Kategoriepfad" hat (oder Pfaden).
Mit etwas aufwand könnte man das auch in die Bezeichnungen umwandeln aber IDs sind eh besser, da mehrere Kategorien den gleichen Namen haben könnten.

All diese IDs geben wir dann zurück, und fragen im Workflow ab ob die ID der Kategorie, welche wir nun prüfen wollen, dort enthalten ist.

Hier der Code für die erweiterte Eigenschaft:

Code:
{% capture Kategoriepfade -%}
declare @IDs varchar(500)
set @IDs = ''
select @IDs = @IDs + '|' + vKategorien.Sort
from tkategorieartikel
join vKategorien on tkategorieartikel.kKategorie = vKategorien.kKategorie
where kArtikel = {{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }}
select @IDs = @IDs + '|'
select @IDs
{% endcapture -%}
{% assign IDs = Kategoriepfade | DirectQueryScalar -%}
{{ IDs }}

Als Beispiel, die Kategorien sind:
Shop -> Auto -> Reinigung -> Scheiben
Shop -> Auto -> Zubehör -> Scheibenreiniger


Die IDs in der Datenbank lauten:
Shop = 1
Auto = 2
Reinigung = 3
Scheiben = 4
Zubehör = 5
Scheibenreiniger = 6

Die Rückgabe im Workflow sieht dann z.B. so aus:

|1|2|3|4|1|2|5|6|


Weil du nun wissen willst ob dein Fensterreiniger unterhalb der Auto Kategorie liegt (warum auch immer) fragst du im Workflow ab ob die Rückgabe den Wert |2| enthält.
Die ID einer Kategorie bekommt man in JTL angezeigt wenn man die Kategorie öffnet, heißt dort "interner Schlüssel".

Vielleicht hilft das.
 

Tomka

Aktives Mitglied
10. Mai 2022
79
8
Da es hier um Workflows geht hab ich hier zumindest einen Ansatz, wie genau das verbaut werden soll weiß ich ja nicht. Über eine erweiterte Eigenschaft könnt ihr die IDs aller Kategorien abfragen, die ein Artikel in seinem "Kategoriepfad" hat (oder Pfaden).
Mit etwas aufwand könnte man das auch in die Bezeichnungen umwandeln aber IDs sind eh besser, da mehrere Kategorien den gleichen Namen haben könnten.

All diese IDs geben wir dann zurück, und fragen im Workflow ab ob die ID der Kategorie, welche wir nun prüfen wollen, dort enthalten ist.

Hier der Code für die erweiterte Eigenschaft:

Code:
{% capture Kategoriepfade -%}
declare @IDs varchar(500)
set @IDs = ''
select @IDs = @IDs + '|' + vKategorien.Sort
from tkategorieartikel
join vKategorien on tkategorieartikel.kKategorie = vKategorien.kKategorie
where kArtikel = {{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }}
select @IDs = @IDs + '|'
select @IDs
{% endcapture -%}
{% assign IDs = Kategoriepfade | DirectQueryScalar -%}
{{ IDs }}

Als Beispiel, die Kategorien sind:
Shop -> Auto -> Reinigung -> Scheiben
Shop -> Auto -> Zubehör -> Scheibenreiniger


Die IDs in der Datenbank lauten:
Shop = 1
Auto = 2
Reinigung = 3
Scheiben = 4
Zubehör = 5
Scheibenreiniger = 6

Die Rückgabe im Workflow sieht dann z.B. so aus:

|1|2|3|4|1|2|5|6|

Weil du nun wissen willst ob dein Fensterreiniger unterhalb der Auto Kategorie liegt (warum auch immer) fragst du im Workflow ab ob die Rückgabe den Wert |2| enthält.
Die ID einer Kategorie bekommt man in JTL angezeigt wenn man die Kategorie öffnet, heißt dort "interner Schlüssel".

Vielleicht hilft das.
Hey vielen Dank,

Das ist schon mal ein Ansatz den ich mal weiter verfolgen kann.

Hintergrund ist folgender, ich muss den Kategorien eine eigene ID verpassen. Und wenn ich dort ein Produkt platziere, möchte ich gerne per Workflow die category ID dem Produkt zu weisen.

Die Lösung wäre einfach, wenn nur eine Kategorie zugewiesen wäre, dann würde die Variable erstes Objekt greifen.

Nur leider habe ich mehrere, je nach Shop unterschiedliche Zuweisung.

Warum per Workflow, nun da der Workflow noch weitere Anweisung verarbeitet und sowieso manuell angestoßen werden muss.

Parallel lasse ich vom Dienstleister eine SQL Abfrage prüfen. Persönlich wäre mir aktuell die Workflow Variante lieber.

Ich weiß es geht auch manuell Mit der Ameise, aber da müsste ich Kategorie für Kategorie Import/Export starten.

Gruß Tomka
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
8.596
2.672
Berlin
Firma
css-umsetzung
Ich habe es so verstanden, das er die Oberkategorie haben möchte, also wenn ein Artikel in der dritten Ebene liegt, das er dann wissen möchte was die erste Ebene davon ist?
wenn ich das richtig verstanden habe wäre dein Workflow nicht passend, da der nur schaut in welcher Kategorie der Artikel letztendlich liegt, es würde also in meinem Beschriebenen Fall nur die dritte Ebene angezeigt werden.
 

Tomka

Aktives Mitglied
10. Mai 2022
79
8
Genau für mich ist die letzte Kategorie entscheidend,

Shop -> Auto -> Reinigung -> Scheiben

Nach diesem Beispiel, müsste ich Scheiben herauskriegen. Bei einzelnen Eintrag ist das ja kein Problem. schwierig stellt sich wenn mehrere Pfade hinterlegt sind.
 

Tomka

Aktives Mitglied
10. Mai 2022
79
8
Ich probiere es trotzdem mal aus, dass könnte ich für ein anderes Problem gebrauchen :) und vllt. hilft es ja jemand anderem :)
 

kelvin.

Sehr aktives Mitglied
15. Februar 2023
166
65
Frankfurt
Die Kategorie ist nach der Datenstruktur ein Baum.
Dann müsste es rekursiv möglich sein, sowohl die Wurzel als auch die Blätter zu erreichen.

Das einzige Herausforderung, was ich derzeit sehe ist, dass ein Artikel in mehreren Kategorien sein, also auch in Kategorien, die sich nicht überschneiden. Da müsste man zusätzlich Abfragen.
 

Tomka

Aktives Mitglied
10. Mai 2022
79
8
Hallo Kelvin,

danke für die Antwort. Aus Zeitgründen habe ich am WE dies an einen externen Dienstleister übergeben der uns 2 SQL Abfragen für die Ameise programmiert hat, funktioniert für unsere Zwecke wunderbar.

Gruß Tomka
 

Ähnliche Themen