Skip to main content

Benutzerdefinierte Formelfunktionen erstellen

Sie können benutzerdefinierte Funktionen erstellen, auf die Benutzer:innen in Designer überall dort zugreifen können, wo ein Ausdruckseditor in der Toolkonfiguration verfügbar ist. So erstellen Sie eine benutzerdefinierte Funktion:

  • Schreiben Sie eine XML-Datei, die Parameter in andere Funktionsaufrufe umschließt.

  • Schreiben Sie eine C-Style-DLL.

Unabhängig von der Erstellungsmethode werden die Funktionen in Designer mittels einer XML-Formel-Funktionsdatei zur Verfügung gestellt, die folgende Attribute enthalten muss:

  • <name>: Ein eindeutiger Name, der in der Funktionsliste erscheint.

  • <NumParams>: Die Anzahl der Parameter, die die Funktion akzeptiert.

  • <Category>: Die Funktionskategorie, die die Funktion anzeigt. Dabei kann es sich um eine neue oder eine bestehende Kategorie handeln.

  • <InsertText>: Der Boilerplate-Text, der bei Verwendung der Funktion in den Ausdruckseditor eingefügt wird.

  • <Description>: Eine Beschreibung, die angezeigt wird, wenn der Mauszeiger über die Funktion bewegt wird.

Benutzerdefinierte Formelfunktionen

Wenn Sie benutzerdefinierte Formelfunktionen verwenden und Ihre benutzerdefinierte Funktion denselben Namen wie eine vorhandene Alteryx-Funktion (oder eine neu eingeführte Alteryx-Funktion) hat, können unerwartete Ergebnisse und Konflikte auftreten.

Um dieses Problem zu beheben, benennen Sie Ihre benutzerdefinierte Funktion um (oder fügen Sie ein Präfix/Suffix hinzu), um sie von den in der Basisinstallation vorhandenen Designer-Funktionen zu unterscheiden.

Mit XML erstellen

Beim Erstellen einer Funktion, die nur XML verwendet, folgt die Struktur der Datei der Struktur des folgenden Beispiels:

<?xml version="1.0" encoding="utf-8"?>
<FormulaAddIn>
  <Function>
    <Name>Sample_XML</Name>
    <NumParams variable="false">3</NumParams>
    <Category>Sample</Category>
    <InsertText>Sample_XML(Num1, Num2, Num3)</InsertText>
    <Description>Obtains the average of three numbers.</Description>
    <Formula>((P1+P2+P3)/3)</Formula>
  </Function>
</FormulaAddIn>

Das Element NumParams hat eine Attribut-Variable. Das Attribut ist auf „False“ gesetzt, weil die Anzahl der akzeptierten Parameter festgelegt ist. Wenn nur XML zum Erstellen einer Funktion verwendet wird, ist die Anzahl der akzeptierten Parameter immer festgelegt.

Das Element Formel enthält die Formel, die die Arbeit tatsächlich ausführt. Der Inhalt ist für die Benutzer:innen nicht sichtbar. Die Parameter werden immer als P1, P2, P3,usw. bezeichnet, unabhängig vom Text in InsertText.

Um einer XML-Datei eine zweite Funktion hinzuzufügen, erstellen Sie ein weiteres Element Funktion innerhalb des Elements FormulaAddIn.

Mit einer DLL und XML erstellen

Um eine DLL zu verwenden, schreiben Sie die gewünschte Funktion und exportieren Sie sie aus der DLL. Vorausgesetzt, die exportierte Funktion ist wie folgt definiert:

struct FormulaAddInData{
        int nVarType;           // 1 for double, 2 for wchar_t
        int isNull;             // 1 if NULL, 0 if valid
        double dVal;            // valid if nVarType==1 && isNull==0
        const wchar_t * pVal;   // valid if nVarType==2 && isNull==0
};

Die exportierte Funktion hat die Signatur:

typedef long ( _stdcall * FormulaAddInPlugin)(int nNumArgs, FormulaAddInData *pArgs, FormulaAddInData *pReturnValue);

nNumArgs enthält die tatsächliche Anzahl an Argumenten im Aufruf.

pArgs verweist auf ein Array der eigentlichen Argumente.

Die Funktion sollte einen Wert von 1 zurückgeben, um einen erfolgreichen Vorgang anzuzeigen, und einen Wert von 0, um einen fehlgeschlagenen Vorgang anzuzeigen.

pReturnValue gibt das berechnete Ergebnis zurück, wenn der Aufruf erfolgreich ist, oder eine Zeichenfolge-Fehlermeldung, wenn der Aufruf nicht erfolgreich ist. Alle zurückgegebenen Zeichenfolgen müssen mit GlobalAlloc bereitgestellt werden und Alteryx Designer verwaltet die Freigabe der Zeichenfolge.

Nach erfolgreicher Einrichtung der DLL müssen Sie die DLL aus der XML-Datei referenzieren.

<?xml version="1.0" encoding="utf-8"?>
<FormulaAddIn>
  <Function>
    <Name>AddInData</Name>
    <NumParams variable="true">3</NumParams>
    <Category>Sample</Category>
    <InsertText>AddInData(VarType, isNull, double)</InsertText>
    <Description>Verifies data type before adding data.</Description>
    <Dll>
        <Name>AddInData</Name>
        <EntryPoint>FormulaAddInData</EntryPoint>
    </Dll>
  </Function>
</FormulaAddIn>

Das Element NumParams hat eine Attribut-Variable. Das Attribut ist auf True gesetzt, weil die Anzahl der akzeptierten Parameter variabel ist. Bei Verwendung einer variablen Anzahl von Parametern sollte der Wert der erforderlichen Mindestanzahl entsprechen.

Das Element Dll enthält zwei untergeordnete Elemente, die die erforderlichen Informationen über die DLL bereitstellen.

  • <Name>: Der Name der DLL-Datei ohne Erweiterung.

  • <EntryPoint>: Der Name der exportierten Funktion, die verwendet wird.

  • <RunSingleThreaded>: (Optionaler Parameter) Die Option zum Erzwingen der Single-Threaded-Verarbeitung. Der Wert für diese Option kann entweder False (standardmäßig) oder True sein. Sie können diesen Parameter in Fällen verwenden, in denen die Funktion in einer Multi-Threaded-Umgebung nicht ordnungsgemäß funktioniert.

    Anmerkung

    Um eine bessere Leistung zu erzielen, empfehlen wir, die Funktion so zu ändern, dass sie in einer Multi-Thread-Umgebung funktioniert, anstatt diesen Parameter zu verwenden.

Zugriff auf Funktionen in Designer

Um die Funktionen in Alteryx Designer verfügbar zu machen, wechseln Sie zum Ordner „RuntimeData“ in Ihrer Alteryx Designer-Installation. Suchen Sie nach einem Ordner mit dem Namen „\FormulaAddIn“. Wenn der Ordner nicht vorhanden ist, erstellen Sie ihn.

Beispiel-XML in FormulaAddIn

Der Ordner enthält Sample.xml, eine korrekt konfigurierte Datei. Fügen Sie eine Kategorie hinzu, speichern Sie die Datei und starten Sie Alteryx Designer neu, um die Beispielfunktion anzuzeigen.

C:\Program Files\Alteryx\bin\RuntimeData\FormulaAddIn

Speichern Sie Ihre XML-Datei im Verzeichnis \FormulaAddIn. Wenn Sie eine DLL verwenden, speichern Sie die zugehörige DLL-Datei am selben Ort. Die standardmäßige Namenskonvention besteht darin, die DLL- und XML-Dateien zu benennen, die übereinstimmen sollen.

Wenn zwei Designer-Instanzen gleichzeitig auf einem Rechner ausgeführt werden (Admin und nicht-Admin), sollte die XML-Datei mit benutzerdefinierten Formelfunktionen für beide Versionen über verschiedene Pfade zur Anzeige in der Designer-GUI getrennt sein.

  • Für die nicht-Admin-Version lautet der Pfad C:\Program Files\Alteryx\bin\RuntimeData\FormulaAddIn.

  • Für die Admin-Version lautet der Pfad C:\Alteryx\RuntimeData\FormulaAddIn.