Hilfe für das PIM Action Skript

Diese Hilfeseite beschreibt die Basisfunktionen des neuen PIM Action Skripts. Die Skriptsprache ermöglicht gezielte und auch massenhafte Bearbeitung von Objektdaten im PIM-System.

Grundlegende Konzepte

Funktionen

Objekt Daten ausgeben

PIM:Print(PIM.EventDataCollection);

Gibt alle aktuell im Kontext befindlichen Objekte im Log aus. Dabei werden keine Daten verändert. Die Ausgabe dient ausschließlich zur Überprüfung der Ereignisdefinition.

Zugriff auf einzelne Objekt-Daten

Mit PIM.EventDataCollection:List() kann über alle erfassten Objekte iteriert werden. Dies ist besonders hilfreich, wenn man gezielt einzelne Objektwerte auslesen oder verändern möchte:

for pimObject in Each(PIM.EventDataCollection:List()) do
    local wert1 = PIM:Object(pimObject):GetAttributeValue("Art_Ref_Nummer", "")
    local wert2 = PIM:Object(pimObject):GetAttributeValue("BN", "")
    
    PIM:Object(pimObject):SetTextValue("Nr, Code", "", wert1 .. "  " .. wert2)
end

Zum Zusammenfassen von Textwerten wird im Lua-Code der Operator .. verwendet.

Das Attribut Nr, Code wird im nächste Beispiel nur gesetzt, wenn der Wert von Art_Ref_Nummer gleich 5 ist.

for pimObject in Each(PIM.EventDataCollection:List()) do
    local wert1 = PIM:Object(pimObject):GetAttributeValue("Art_Ref_Nummer", "")
    local wert2 = PIM:Object(pimObject):GetAttributeValue("BN", "")
    
    if wert1 == "5" then
        PIM:Object(pimObject):SetTextValue("Nr, Code", "", wert1 .. "  " .. wert2)
    end
end

Bei diesem Beispiel wird gesamte Attributwert wird geprüft. Wenn im Attributwert gezielt nach einer “5” im Attributwert gesucht werden soll, kann folgender Lua-Code verwendet werden: Wenn bei GetAttributeValue ein Leerwert (“”) für die Sprache angegeben wird, wird bei sprachabhängigen Werten standardmäßig Sprache 2 (in der Regel Deutsch) verwendet.

for pimObject in Each(PIM.EventDataCollection:List()) do
    local wert1 = PIM:Object(pimObject):GetAttributeValue("Untertitel", "de")

    if string.find(wert1, "5") then
        PIM:Print("Gefunden!")
        PIM:Modul(PIM.EventDataCollection):Start("SpecialWorkflow")
    else
        PIM:Print("Nicht gefunden.")
    end
end

Im Gegensatz dazu bieten die Bulk-Operationen eine einfache Möglichkeit, Attributwerte für alle Objekte gleichzeitig zu setzen.

Bulk-Attributänderungen

PIM:Object(PIM.EventDataCollection):SetTextValue('attributename', 'de', 'text attribut wert')
PIM:Object(PIM.EventDataCollection):SetTextValue('attributename', 'de', [[<p>Formatierter  Text <b>Fett,</b><i>Kursiv</i></p>
			<p>Absatz Zwei</p>
			<ul>
				<li>Liste 1</li>
				<li>Liste 2</li>
				<li>Liste 3</li>
			</ul>]])
PIM:Object(PIM.EventDataCollection):SetIntegerValue('attributename', 'en', 2025)
PIM:Object(PIM.EventDataCollection):SetFloatValue('attributename', '', 2025.22)
PIM:Object(PIM.EventDataCollection):SetTextconserve('attributename', 'textconserveGroupKey')
  • SetTextValue: Setzt einen Textwert. Ein einzeiliger Text muss in Anführungszeichen angegeben werden – entweder ' oder ". Diese dürfen jedoch nicht gemischt verwendet werden. Zum Beispiel ist "falsch' nicht erlaubt. Falls im Text ein Anführungszeichen vorkommt, muss es mit einem Backslash escaped werden – also ' oder ". Beispiel: ‘Test's’ oder “Ein "Zitat" im Text”.
  • Ein Mehrzeiliger Text kann mit [[ ]] angegeben werden.
  • SetIntegerValue: Setzt einen ganzzahligen Wert. Der Wert muss in Anführungszeichen stehen.
  • SetFloatValue: Setzt einen numerischen (Fließkomma-)Wert. Bitte das englische Zahlenformat verwenden – ohne Tausendertrennzeichen und mit Punkt statt Komma (z. B. 1234.56).
  • SetTextconserve: Setzt einen Textwert aus einer TextConserve-Gruppe. Den entsprechenden textconserveGroupKey findest du in der TextConserve-Liste in der Spalte Gruppen-ID.

Hinweise

  • Für gezielte Attributanpassungen empfiehlt sich die Nutzung von PIM.EventDataCollection:List().
  • Sprachcodes wie “de”, “en” usw. müssen gemäß den Sprachdefinitionen im System verwendet werden.
  • Bei Sprachangabe "" wird der Attributwert für alle Sprachen bzw. den neutralen Wert gesetzt.

Module starten

PIM:Modul(PIM.EventDataCollection):Start('moduleName')

Startet ein Modul für alle im Kontext befindlichen Objekte.

Externe Prozesse starten

Mit dieser Funktion können vordefinierte Windows-Prozesse (Programme) ausgeführt werden. Aus Sicherheitsgründen sind nur Programme im folgenden Verzeichnis zulässig:

C:\ProgramData\mediaSolution3\PIM\EbAScriptProcess

Bitte den Ordner erstellen wenn er nicht existiert. Sie können in diesem Ordner beliebig viele Unterverzeichnisse anlegen. Der WorkingPath (erster Parameter von Start und StartAndWait) muss den vollständigen Pfad zum Ordner der ausführbaren Datei enthalten.

Fire-and-Forget

Startet einen Prozess, ohne auf dessen Ende zu warten. Ideal für asynchrone Aufgaben:

PIM:Process(PIM.EventDataCollection):Start(
   [[C:\ProgramData\mediaSolution3\PIM\EbAScriptProcess\NotificationApp]],
  'Notification.exe',
  '-e "info@example.com" -s "Test" -b "Daten sind ok."'
)

Damit man Backslashes nicht escapen muss, verwenden wir Long-Bracket-Strings [[ … ]].

Start-and-Wait

Startet einen Prozess und hält die Ausführung an, bis er beendet ist.

Vorsicht: Da ereignisbasierte Aktionen sequenziell abgearbeitet werden, kann dieser Aufruf bei lang laufenden Prozessen die Queue verlangsamen.

local ausgabe = PIM:Process(PIM.EventDataCollection):StartAndWait(
   [[C:\ProgramData\mediaSolution3\PIM\EbAScriptProcess\Importer]],
  'SpecialImport.exe',
  'parameter'
)

Die Variable ausgabe enthält anschließend den kompletten Standard- und Error-Output des Prozesses.

PIMO KI Funktionen

PIMO-Unterstützung ab Version 6.8.1

Ab Version 6.8.1 kann PIMO auch innerhalb eines EventBasedAction-Skripts verwendet werden.

Hierfür steht die Funktion PIM:Pimo(pimObject):Prompt zur Verfügung. Ein PIM-Datenobjekt dient dabei als Informationsquelle, und PIMO kann auf Basis eines von Ihnen definierten Prompts eine entsprechende Ausgabe generieren – ähnlich wie bei bekannten Chatbot-Systemen.

Im Folgenden sind zwei typische Anwendungsbeispiele beschrieben:

Automatischer SEO-Text

In diesem Beispiel wird für jedes Objekt in der Ereignisdatenliste automatisch ein SEO-Text generiert und im Attribut “KI SEO Text” gespeichert:

PIM:Print('KI-SEO-Prozess wird gestartet');
for pimObject in Each(PIM.EventDataCollection:List()) do
   local pimoDescription = PIM:Pimo(pimObject):Prompt('Erstelle eine Bildbeschreibung.')
   PIM:Object(pimObject):SetTextValue("KI SEO Text", "", pimoDescription)
   PIM:Print(pimoDescription);
end
PIM:Print('KI-SEO-Prozess abgeschlossen');

iMAM-Bildbeschreibung

Wenn im Bereich iMAM die gleiche Funktion verwendet wird, kann PIMO auf das Vorschaubild eines Objekts zugreifen und z. B. eine automatische Bildbeschreibung erzeugen:

PIM:Print('KI-Vision-Prozess wird gestartet');

for pimObject in Each(PIM.EventDataCollection:List()) do
   local pimoDescription = PIM:Pimo(pimObject):Prompt('Erstelle mir eine Bildbeschreibung.')
   PIM:Object(pimObject):SetTextValue("KI Bildbeschreibung", "", pimoDescription)
   PIM:Print(pimoDescription);
end

PIM:Print('KI-Vision-Prozess abgeschlossen');

Hinweis zur Kontrolle und Sicherheit

Sie behalten stets die volle Kontrolle, wann PIMO in Ihren Prozessen zum Einsatz kommt: Nur wenn die Funktion PIM:Pimo(pimObject):Prompt explizit verwendet wird, greift PIMO auf KI-Funktionalitäten zu. Wird die Funktion nicht aufgerufen, kommt keine KI-Verarbeitung zum Einsatz.

KI-generierte Inhalte können fehlerhaft, unvollständig oder unangemessen sein. Eine manuelle Prüfung ist daher unerlässlich, bevor die Inhalte weiterverwendet oder publiziert werden.

Geplante Funktionen

Das EventBasedAction-Skript wird kontinuierlich weiterentwickelt. Vorschläge für neue Funktionen bitte direkt an den jeweiligen Goodson-Projektleiter weitergeben.

Objekte suchen (geplant)

Über eine einfache Suchfunktion können bestehende PIM-Objekte geladen werden. Die Ergebnisliste lässt sich anschließend wie gewohnt auslesen und bearbeiten:

local artikelListe = PIM:Search("Sortiment1", "Artikel", "ArtikelNr", "GS*")

for pimObject in Each(artikelListe) do
    local bnWert = PIM:Object(pimObject):GetAttributeValue("BN", "")
    -- Weitere Bearbeitungen hier durchführen
end

E-Mail senden (geplant)

Versendet Objektinformationen via E-Mail:

PIM:Notifier(objectCollection):Send('info@test.at')

Eine Templatenutzung wird zusätzlich vorgesehen.

Funfact: eMail Adressen können auch aus PIM Datensätze stammen.

Daten zwischen Datenpools verschieben (geplant)

Verschiebt Datenobjekte in einen Zielpool:

PIM:Datapool(objectCollection):Drop('ArchivePool', '/Produkte/Archiv')

Ermöglicht strukturiertes Datenmanagement zwischen unterschiedlichen Pools.