Skip to main content

Creazione di funzioni di formula personalizzate

Puoi creare funzioni personalizzate, che risultano accessibili agli utenti di Designer da qualsiasi finestra di configurazione degli strumenti che disponga di un Editor di espressioni. Per creare una funzione personalizzata...

  • Scrivi un file XML, per eseguire il wrapping dei parametri in altre chiamate di funzione.

  • Scrivi una DLL in stile C.

A prescindere dal metodo di creazione, in Designer le funzioni sono disponibili tramite un file di funzione di formula in formato XML, che deve contenere gli attributi seguenti:

  • <name>: nome univoco da visualizzare nell'elenco delle funzioni.

  • <NumParams>: numero dei parametri accettati dalla funzione.

  • <Category>: categoria in cui viene visualizzata la funzione, che può essere una nuova categoria o una categoria preesistente.

  • <InsertText>: testo standard che viene inserito nell'Editor di espressioni quando si utilizza la funzione.

  • <Description>: descrizione da visualizzare quando l'utente sposta il mouse sopra la funzione.

Funzioni di formula personalizzate

Se utilizzi funzioni di formula personalizzate e la funzione personalizzata ha lo stesso nome di una funzione Alteryx esistente (o di una funzione Alteryx appena introdotta), potresti riscontrare risultati e conflitti imprevisti.

Per risolvere questo problema, rinomina la funzione personalizzata (o aggiungi un prefisso/suffisso) per differenziarla dalle funzioni di base di Designer installate.

Creazione di una funzione in formato XML

Se la funzione viene creata utilizzando solo codice XML, il file deve avere la stessa struttura dell'esempio che segue:

<?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>

L'elemento NumParams ha un attributo variable impostato su False, perché la funzione accetta solo un numero di parametri prestabilito. Se la funzione viene creata utilizzando solo codice XML, può accettare solo un numero di parametri fisso.

L'elemento Formula contiene la formula che esegue l'operazione vera e propria. Il contenuto non è visibile all'utente e i parametri sono sempre referenziati come P1, P2, P3 e così via, indipendentemente dal testo inserito nel campo InsertText.

Per aggiungere una seconda funzione allo stesso file XML, devi creare un altro elemento Function all'interno dell'elemento FormulaAddIn.

Creazione di una funzione tramite DLL e codice XML

Se vuoi utilizzare una DLL, scrivi la funzione desiderata, quindi esportala dalla DLL. Presupponendo che la funzione esportata sia definita come segue:

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
};

La funzione esportata presenta questa firma:

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

nNumArgs contiene il numero di argomenti effettivamente incluso nella chiamata.

pArgs punta a una matrice con gli argomenti effettivi.

La funzione deve restituire 1 se ha esito positivo e 0 se ha esito negativo.

pReturnValue restituisce il risultato calcolato, se la chiamata ha esito positivo, o un messaggio di errore in formato stringa, se ha esito negativo. Tutte le stringhe restituite devono essere allocate con GlobalAlloc, mentre la loro liberazione viene gestita da Alteryx Designer.

Dopo aver configurato correttamente la DLL, devi referenziarla dal file XML.

<?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>

L'elemento NumParams ha un attributo variable L'attributo è impostato su True perché la funzione accetta un numero di parametri variabile. Quando il numero dei parametri è variabile, il valore deve indicare il numero minimo richiesto.

L'elemento Dll contiene due elementi figlio che forniscono le informazioni necessarie sulla DLL.

  • <Name>: nome del file DLL, senza estensione.

  • <EntryPoint>: nome della funzione esportata da utilizzare.

  • <RunSingleThreaded> (parametro facoltativo): consente di imporre l'elaborazione a thread singolo. Questa opzione può avere valore False (impostazione predefinita) o True. Puoi usare questo parametro nelle situazioni in cui la funzione non opera correttamente in un ambiente multi-thread.

    Nota

    Per migliorare le prestazioni, è consigliabile modificare la funzione in modo che riesca a operare anche in un ambiente multi-thread, piuttosto che utilizzare questo parametro.

Accesso alle funzioni in Designer

Se desideri che le tue funzioni siano disponibili in Alteryx Designer, accedi alla sottocartella RuntimeData nella cartella di installazione di Alteryx Designer. Cerca una cartella di nome FormulaAddIn. Se non esiste, creala manualmente.

Esempio di file XML nella cartella FormulaAddIn

La cartella contiene il file Sample.xml, che è configurato correttamente. Aggiungi una categoria, salva il file e riavvia Alteryx Designer per visualizzare la funzione di esempio.

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

Salva il file XML nella directory \FormulaAddIn. Se utilizzi una DLL, salva il file DLL correlato nella stessa posizione. In base alla convenzione di denominazione standard, i file DLL e XML devono avere lo stesso nome.

Se nello stesso sistema vengono eseguite due istanze di Designer contemporaneamente (una amministrativa e una non amministrativa), il file XML della funzione di formula personalizzata viene visualizzato nella GUI di Designer solo se ogni versione utilizza un file specifico inserito in un percorso specifico.

  • Per la versione non amministrativa, il percorso è C:\Program Files\Alteryx\bin\RuntimeData\FormulaAddIn,

  • mentre per quella amministrativa è C:\Alteryx\RuntimeData\FormulaAddIn.