How To

Benutzerdefinierte Funktionen erstellen und Formeln innerhalb von Formeln verwenden

Dieser Abschnitt enthält folgende Informationen zu benutzerdefinierten Funktionen:


Voraussetzungen


Bevor Sie fortfahren, sollten Sie mit folgendem Thema vertraut sein:


Benutzerdefinierte Funktionen erstellen und Formeln innerhalb von Formeln verwenden


Haben Sie schon einmal mehrere Formeln erstellt, die einander sehr ähnlich sind? So haben Sie vielleicht einmal eine Formel verfasst, die mittels eines regulären Ausdrucks Text aus dem Beschreibungsfeld entfernen soll, und daneben eine weitere Formel, die mit dem gleichen Ausdruck diesen Text aus dem Überschriftsfeld löschen sollte. Oder vielleicht haben Sie eine Formel geschrieben, die Sie gerne in eine andere Formel einbetten möchten. Ein Beispiel wäre eine Formel, gemäß derer Ihr Markenname dem Titel vorangestellt wird. Und Sie möchten nun das Ergebnis DIESER Formel der Artikelbeschreibung voranstellen. In beiden Fällen gibt es Formeln oder Teile davon, die Sie wiederverwenden möchten. Dies tun Sie am geschicktesten mit einer benutzerdefinierten Funktion.

Benutzerdefinierte Funktionen sind spezifische Formeln, die Sie innerhalb von anderen Formeln erstellen und verwenden. Sie funktionieren genauso wie die bereits integrierten und Ihnen bekannten Funktionen, wie etwa IF, CONCATENATE, REPLACE und so weiter. Es gibt also einen oder mehrere Inputs und als Output wird ein Wert ausgegeben. In diesem Artikel erklären wir, wie benutzerdefinierte Funktionen erstellt und angewendet werden.

Sehen Sie sich zum Beispiel folgende Formel an:

cleanup(appendsku($itemtitle))

Beachten Sie, dass diese Formel zwei Funktionen benutzt, die Sie noch nie zuvor gesehen haben: CLEANUP und APPENDSKU . Es sind benutzerdefinierte Funktionen, die für dieses Konto erstellt wurden. Hier die Definition von CLEANUP :

FUNCTION(VARS(@X),REGEXREPLACE(@X, "[^\u0020-\u007e]+", "" ))

(Diese Funktion entfernt Nicht-ANSI-Zeichen.)


Eine benutzerdefinierte Funktion erstellen


  • Normalerweise entschließen Sie sich zum Erstellen einer benutzerdefinierten Funktion deshalb, weil Sie denselben Teil einer Formel ständig neu schreiben. Nehmen wir zum Beispiel an, wir hätten diese beiden Formeln:

REGEXREPLACE($itemtitle,"\{.+?\}","")
REGEXREPLACE($itemdescription,"\{.+?\}","")

  • Beachten Sie, dass der einzige Unterschied zwischen beiden Formeln darin besteht, dass eine $itemtitle und die andere $itemdescription verwendet. Wenn wir diesen Unterschied abstrahieren, entsteht Folgendes:

REGEXREPLACE( x ,"\{.+?\}","")

  • Wir haben ein x , wo $itemtitle und $itemdescription standen. Das ist der Algebra sehr ähnlich: x kann für alles stehen. Jetzt erstellen wir nur noch eine neue Formel mit der korrekten Syntax:

FUNCTION(VARS(@X),REGEXREPLACE(@X,"\{.+?\}",""))

  • Wir haben jetzt das x durch @X ersetzt. Denn so drückt man in einer benutzerdefinierten Funktion einen Parameter aus. Sie müssen hier auch nicht „X“ nutzen, sondern können jede beliebige Kombination von Buchstaben verwenden.
     
  • Speichern Sie Ihre benutzerdefinierte Funktion. Geben Sie ihr einen Namen und tragen Sie in der Beschreibung am Besten kurz ein, was diese Funktion leistet. Nun können Sie Ihre benutzerdefinierte Funktion in jeder Ihrer Formeln verwenden. Sie müssen einfach nur den Namen verwenden. Nehmen wir zum Beispiel an, wir hätten die obige Funktion „Clean Text“ genannt. Dann würden Sie diese Funktion in einer Formel folgendermaßen verwenden:

CLEANTEXT($itemdescription)

Beachten Sie, dass wir das Leerzeichen aus dem Namen entfernt haben.


Technische Infos und Hinweise


Sie sehen also, die Syntax für eine benutzerdefinierte Funktion sieht folgendermaßen aus:

FUNCTION(VARS(@v1,@v2,...@vn),Ausdruck)

  • Ihre benutzerdefinierte Funktion erscheint in der Liste der Formeln wie jede andere Formel auch. JEDOCH zeigen wir nicht an, dass sie eventuell in einer anderen Formel verwendet wird. So könnten Sie also die benutzerdefinierte Funktion in dem Moment löschen, was schlecht wäre.
  • Sie sollten eine benutzerdefinierte Funktion NICHT einem Feld in einer Vorlage zuweisen.
  • Die Funktion muss mindestens einen Parameter enthalten (z. B. @X), es können aber auch mehr sein.
  • Der Ausdruck kann wie bei normalen Formeln jede beliebige Kombination aus Text, Ziffern, Bestandfelder, Funktionsaufrufe und auch Parameter sein.
  • Jedoch DARF der Begriff KEINE Aufrufe für benutzerdefinierte Funktionen enthalten, sondern nur für Standardfunktionen.
  • Sie können die Funktion nennen, wie Sie wollen; Leerzeichen und nicht-alphanumerische Zeichen werden jedoch aus dem Namen entfernt, wie auch bei Namen von Bestandsfeldern.
  • Die benutzerdefinierten Funktionen werden speziell für Ihr Konto angelegt.
  • Sie können in Ihren „regulären“ Formeln so viele benutzerdefinierte Funktionen verwenden, wie Sie möchten. Sie funktionieren genau wie die Standardfunktionen.

Nach oben


Eine Formel innerhalb einer Formel aufrufen


Oft wollen Anwender eine in einer Formel enthaltene Formel aufrufen. Das kann erfolgen, indem man die „innere“ Formel in eine benutzerdefinierte Funktion mit nur einem Parameter umwandelt; der Ausdruck benutzt den Parameter allerdings nicht. Der Nachteil ist, dass die „innere“ Formel nicht länger als Formel verwendet werden kann. Nehmen wir zum Beispiel an, Sie hätten eine Formel mit Namen „Clean Title“, die die Marke aus dem Titel entfernt:

REGEXREPLACE($ITEMTITLE,$BRAND,"")

Sie verwenden diese Formel in mehreren Ihrer Feeds für das Titel-Feld. Außerdem wollen Sie die Formel „Beschreibung plus Titel“ erstellen, die den bereinigten Titel in Ihrer Beschreibung hinzufügt:

JOIN(" ",$ITEMDESCRIPTION, TBD)

Wenn Sie nun die Formel „Clean Title“ folgendermaßen abändern:

FUNCTION(VARS(@X),REGEXREPLACE($ITEMTITLE,$BRAND,""))

könnte Ihre Formel „Beschreibung plus Titel“ so aussehen:

JOIN(" ",$ITEMDESCRIPTION, CLEANTITLE(0))

Jedoch können Sie die Formel „Clean Title“ jetzt nicht mehr für Ihre Vorlagen verwenden. Sie müssten eine neue Formel erstellen, die einfach CLEANTITLE heißt, und diese für Ihre Vorlagen verwenden:

CLEANTITLE(0)

Nach oben


Eval-Funktion, um Markenname unterschiedlich zu manipulieren



Oft gab es Rückfragen mit der Bitte um Hilfe beim Verfassen einer Formel, die etwa so aussieht:

Bei jeder meiner Marken soll die Formel leicht anders agieren. Ich würde eine Verweisliste erstellen, bei der die Marke in der linken Spalte steht und in der rechten eine Formel, die ich für die jeweilige Marke verwenden möchte. Zum Beispiel:

Marke X    JOIN(" ",$title,$brand,$manufacturer)
Marke Y    REPLACE($title,$brand,"")

Die „wirkliche“ Formel würde also folgendermaßen aussehen:

IRGENDWAS(LOOKUP("Die Liste",$brand))

Das Problem dabei war stets, dass die Funktion „IRGENDWAS“ einfach nicht existierte. Bis jetzt!

Wir stellen vor: eine neue Funktion mit Namen „EVAL“. EVAL hat einen einzigen Parameter: einen Textwert. Wie bei allen Funktionen kann dieser Wert seinen Ursprung überall haben: Sie können ihn direkt „hart codieren“, aus einem Bestandsattribut nehmen oder das Ergebnis einer anderen Funktion nutzen. Berücksichtigen Sie nur, dass der Text wie eine Formel funktionieren MUSS.

So muss man sich das vorstellen: Erstellen Sie eine Formel, die eine Formel „schreibt“. Das bedeutet: Erstellen Sie eine Formel, deren Ergebnis ein Text ist, der wie eine Formel „aussieht“. Um beim obigen Beispiel zu bleiben, sieht die regelschreibende Formel so aus:

LOOKUP("Die Liste",$brand)

Nun betten Sie das einfach in ein EVAL ein:

EVAL(LOOKUP("Die Liste",$brand))

Einige technische Anmerkungen:

  • EVAL kann Ihre benutzerdefinierten Funktionen nicht abfragen. Darum sollten Sie diese in Ihrem Input-Text vermeiden.
  • Wenn Ihr Input-Text einen Syntaxfehler hat, entfernt EVAL den Artikel aus den Feeds.

Nach oben

Dieser Abschnitt enthält folgende Informationen zu benutzerdefinierten Funktionen:


Voraussetzungen


Bevor Sie fortfahren, sollten Sie mit folgendem Thema vertraut sein:


Benutzerdefinierte Funktionen erstellen und Formeln innerhalb von Formeln verwenden


Haben Sie schon einmal mehrere Formeln erstellt, die einander sehr ähnlich sind? So haben Sie vielleicht einmal eine Formel verfasst, die mittels eines regulären Ausdrucks Text aus dem Beschreibungsfeld entfernen soll, und daneben eine weitere Formel, die mit dem gleichen Ausdruck diesen Text aus dem Überschriftsfeld löschen sollte. Oder vielleicht haben Sie eine Formel geschrieben, die Sie gerne in eine andere Formel einbetten möchten. Ein Beispiel wäre eine Formel, gemäß derer Ihr Markenname dem Titel vorangestellt wird. Und Sie möchten nun das Ergebnis DIESER Formel der Artikelbeschreibung voranstellen. In beiden Fällen gibt es Formeln oder Teile davon, die Sie wiederverwenden möchten. Dies tun Sie am geschicktesten mit einer benutzerdefinierten Funktion.

Benutzerdefinierte Funktionen sind spezifische Formeln, die Sie innerhalb von anderen Formeln erstellen und verwenden. Sie funktionieren genauso wie die bereits integrierten und Ihnen bekannten Funktionen, wie etwa IF, CONCATENATE, REPLACE und so weiter. Es gibt also einen oder mehrere Inputs und als Output wird ein Wert ausgegeben. In diesem Artikel erklären wir, wie benutzerdefinierte Funktionen erstellt und angewendet werden.

Sehen Sie sich zum Beispiel folgende Formel an:

cleanup(appendsku($itemtitle))

Beachten Sie, dass diese Formel zwei Funktionen benutzt, die Sie noch nie zuvor gesehen haben: CLEANUP und APPENDSKU . Es sind benutzerdefinierte Funktionen, die für dieses Konto erstellt wurden. Hier die Definition von CLEANUP :

FUNCTION(VARS(@X),REGEXREPLACE(@X, "[^\u0020-\u007e]+", "" ))

(Diese Funktion entfernt Nicht-ANSI-Zeichen.)


Eine benutzerdefinierte Funktion erstellen


  • Normalerweise entschließen Sie sich zum Erstellen einer benutzerdefinierten Funktion deshalb, weil Sie denselben Teil einer Formel ständig neu schreiben. Nehmen wir zum Beispiel an, wir hätten diese beiden Formeln:

REGEXREPLACE($itemtitle,"\{.+?\}","")
REGEXREPLACE($itemdescription,"\{.+?\}","")

  • Beachten Sie, dass der einzige Unterschied zwischen beiden Formeln darin besteht, dass eine $itemtitle und die andere $itemdescription verwendet. Wenn wir diesen Unterschied abstrahieren, entsteht Folgendes:

REGEXREPLACE( x ,"\{.+?\}","")

  • Wir haben ein x , wo $itemtitle und $itemdescription standen. Das ist der Algebra sehr ähnlich: x kann für alles stehen. Jetzt erstellen wir nur noch eine neue Formel mit der korrekten Syntax:

FUNCTION(VARS(@X),REGEXREPLACE(@X,"\{.+?\}",""))

  • Wir haben jetzt das x durch @X ersetzt. Denn so drückt man in einer benutzerdefinierten Funktion einen Parameter aus. Sie müssen hier auch nicht „X“ nutzen, sondern können jede beliebige Kombination von Buchstaben verwenden.
     
  • Speichern Sie Ihre benutzerdefinierte Funktion. Geben Sie ihr einen Namen und tragen Sie in der Beschreibung am Besten kurz ein, was diese Funktion leistet. Nun können Sie Ihre benutzerdefinierte Funktion in jeder Ihrer Formeln verwenden. Sie müssen einfach nur den Namen verwenden. Nehmen wir zum Beispiel an, wir hätten die obige Funktion „Clean Text“ genannt. Dann würden Sie diese Funktion in einer Formel folgendermaßen verwenden:

CLEANTEXT($itemdescription)

Beachten Sie, dass wir das Leerzeichen aus dem Namen entfernt haben.


Technische Infos und Hinweise


Sie sehen also, die Syntax für eine benutzerdefinierte Funktion sieht folgendermaßen aus:

FUNCTION(VARS(@v1,@v2,...@vn),Ausdruck)

  • Ihre benutzerdefinierte Funktion erscheint in der Liste der Formeln wie jede andere Formel auch. JEDOCH zeigen wir nicht an, dass sie eventuell in einer anderen Formel verwendet wird. So könnten Sie also die benutzerdefinierte Funktion in dem Moment löschen, was schlecht wäre.
  • Sie sollten eine benutzerdefinierte Funktion NICHT einem Feld in einer Vorlage zuweisen.
  • Die Funktion muss mindestens einen Parameter enthalten (z. B. @X), es können aber auch mehr sein.
  • Der Ausdruck kann wie bei normalen Formeln jede beliebige Kombination aus Text, Ziffern, Bestandfelder, Funktionsaufrufe und auch Parameter sein.
  • Jedoch DARF der Begriff KEINE Aufrufe für benutzerdefinierte Funktionen enthalten, sondern nur für Standardfunktionen.
  • Sie können die Funktion nennen, wie Sie wollen; Leerzeichen und nicht-alphanumerische Zeichen werden jedoch aus dem Namen entfernt, wie auch bei Namen von Bestandsfeldern.
  • Die benutzerdefinierten Funktionen werden speziell für Ihr Konto angelegt.
  • Sie können in Ihren „regulären“ Formeln so viele benutzerdefinierte Funktionen verwenden, wie Sie möchten. Sie funktionieren genau wie die Standardfunktionen.

Nach oben


Eine Formel innerhalb einer Formel aufrufen


Oft wollen Anwender eine in einer Formel enthaltene Formel aufrufen. Das kann erfolgen, indem man die „innere“ Formel in eine benutzerdefinierte Funktion mit nur einem Parameter umwandelt; der Ausdruck benutzt den Parameter allerdings nicht. Der Nachteil ist, dass die „innere“ Formel nicht länger als Formel verwendet werden kann. Nehmen wir zum Beispiel an, Sie hätten eine Formel mit Namen „Clean Title“, die die Marke aus dem Titel entfernt:

REGEXREPLACE($ITEMTITLE,$BRAND,"")

Sie verwenden diese Formel in mehreren Ihrer Feeds für das Titel-Feld. Außerdem wollen Sie die Formel „Beschreibung plus Titel“ erstellen, die den bereinigten Titel in Ihrer Beschreibung hinzufügt:

JOIN(" ",$ITEMDESCRIPTION, TBD)

Wenn Sie nun die Formel „Clean Title“ folgendermaßen abändern:

FUNCTION(VARS(@X),REGEXREPLACE($ITEMTITLE,$BRAND,""))

könnte Ihre Formel „Beschreibung plus Titel“ so aussehen:

JOIN(" ",$ITEMDESCRIPTION, CLEANTITLE(0))

Jedoch können Sie die Formel „Clean Title“ jetzt nicht mehr für Ihre Vorlagen verwenden. Sie müssten eine neue Formel erstellen, die einfach CLEANTITLE heißt, und diese für Ihre Vorlagen verwenden:

CLEANTITLE(0)

Nach oben


Eval-Funktion, um Markenname unterschiedlich zu manipulieren



Oft gab es Rückfragen mit der Bitte um Hilfe beim Verfassen einer Formel, die etwa so aussieht:

Bei jeder meiner Marken soll die Formel leicht anders agieren. Ich würde eine Verweisliste erstellen, bei der die Marke in der linken Spalte steht und in der rechten eine Formel, die ich für die jeweilige Marke verwenden möchte. Zum Beispiel:

Marke X    JOIN(" ",$title,$brand,$manufacturer)
Marke Y    REPLACE($title,$brand,"")

Die „wirkliche“ Formel würde also folgendermaßen aussehen:

IRGENDWAS(LOOKUP("Die Liste",$brand))

Das Problem dabei war stets, dass die Funktion „IRGENDWAS“ einfach nicht existierte. Bis jetzt!

Wir stellen vor: eine neue Funktion mit Namen „EVAL“. EVAL hat einen einzigen Parameter: einen Textwert. Wie bei allen Funktionen kann dieser Wert seinen Ursprung überall haben: Sie können ihn direkt „hart codieren“, aus einem Bestandsattribut nehmen oder das Ergebnis einer anderen Funktion nutzen. Berücksichtigen Sie nur, dass der Text wie eine Formel funktionieren MUSS.

So muss man sich das vorstellen: Erstellen Sie eine Formel, die eine Formel „schreibt“. Das bedeutet: Erstellen Sie eine Formel, deren Ergebnis ein Text ist, der wie eine Formel „aussieht“. Um beim obigen Beispiel zu bleiben, sieht die regelschreibende Formel so aus:

LOOKUP("Die Liste",$brand)

Nun betten Sie das einfach in ein EVAL ein:

EVAL(LOOKUP("Die Liste",$brand))

Einige technische Anmerkungen:

  • EVAL kann Ihre benutzerdefinierten Funktionen nicht abfragen. Darum sollten Sie diese in Ihrem Input-Text vermeiden.
  • Wenn Ihr Input-Text einen Syntaxfehler hat, entfernt EVAL den Artikel aus den Feeds.

Nach oben

0
Your rating: None
0
Your rating: None
Tags