Créer des fonctions personnalisées de l'outil Formule
Vous pouvez créer des fonctions personnalisées auxquelles les utilisateurs peuvent accéder dans Designer partout où un éditeur d'expression est disponible dans la configuration de l'outil. Pour créer une fonction personnalisée…
Écrire un fichier XML, qui encapsule les paramètres dans d'autres appels de fonctions.
Écrire une DLL de type C.
Quelle que soit la méthode de création, les fonctions sont mises à disposition dans Designer via un fichier XML de fonctions de formule, qui doit contenir les attributs suivants :
<name>: un nom unique apparaissant dans la liste des fonctions.<NumParams>: le nombre de paramètres acceptés par la fonction.<Category>: la catégorie de la fonction affichée. Il peut s'agir d'une nouvelle catégorie ou d'une catégorie existante.<InsertText>: le texte standard inséré dans l'éditeur d'expressions lorsque la fonction est utilisée.<Description>: une description affichée lors du survol de la fonction.
Fonctions personnalisées de l'outil Formule
Si vous utilisez des fonctions personnalisées de l'outil Formule et que votre fonction personnalisée porte le même nom qu'une fonction Alteryx existante (ou une fonction Alteryx nouvellement introduite), vous risquez d'obtenir des résultats inattendus et de rencontrer des conflits.
Pour résoudre ce problème, renommez votre fonction personnalisée (ou ajoutez un préfixe/suffixe) pour la différencier des fonctions Designer déjà installées.
Créer via XML
Lors de la création d'une fonction utilisant uniquement XML, la structure du fichier suit celle de l'exemple ci-dessous :
<?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'élément NumParams possède un attribut variable. L'attribut est défini sur false, car le nombre de paramètres acceptés est fixe. Lorsque seul XML est utilisé pour créer une fonction, le nombre de paramètres acceptés est toujours fixe.
L'élément Formula contient la formule qui effectue réellement le travail. Le contenu n'est pas visible par l'utilisateur. Les paramètres sont toujours référencés sous la forme P1, P2, P3, etc., quel que soit le texte présenté dans la boîte de dialogue InsertText.
Pour ajouter une seconde fonction au même fichier XML, créez un autre élément Function dans l'élément FormulaAddIn.
Créez à l'aide d'une DLL et d'un XML
Pour utiliser une DLL, écrivez la fonction souhaitée, puis exportez-la à partir de la DLL. En supposant que la fonction exportée est définie comme suit :
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 fonction exportée possède la signature :
typedef long ( _stdcall * FormulaAddInPlugin)(int nNumArgs, FormulaAddInData *pArgs, FormulaAddInData *pReturnValue);
nNumArgs contient le nombre réel d'arguments dans l'appel.
pArgs pointe vers un tableau des arguments réels.
La fonction doit renvoyer un 1 pour la réussite du signal et un 0 pour la défaillance du signal.
pReturnValue renvoie le résultat calculé si l'appel réussit ou un message d'erreur sous forme de chaîne si l'appel échoue. Toute chaîne renvoyée doit être allouée avec GlobalAlloc, et Alteryx Designer gère la libération de la chaîne.
Une fois la DLL correctement configurée, vous devez référencer la DLL à partir du fichier 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'élément NumParams possède un attribut variable. L'attribut est défini sur true, car le nombre de paramètres acceptés est variable. Lorsque vous utilisez un nombre variable de paramètres, la valeur doit être égale au nombre minimal requis.
L'élément Dll contient deux éléments enfants qui fournissent les informations nécessaires sur la DLL.
<Name>: le nom du fichier DLL sans extension.<EntryPoint>: le nom de la fonction exportée utilisée.<RunSingleThreaded>: (paramètre facultatif) l'option pour imposer un traitement à thread unique. La valeur de cette option peut être soitFalse(par défaut), soitTrue. Vous pouvez utiliser ce paramètre lorsque la fonction ne fonctionne pas correctement en environnement multi-threaded.Note
Pour de meilleures performances, il est recommandé de modifier la fonction pour qu'elle fonctionne en environnement multi-threaded plutôt que d'utiliser ce paramètre.
Accéder aux fonctions dans Designer
Pour rendre les fonctions disponibles dans Alteryx Designer, accédez au dossier RuntimeData de votre installation d'Alteryx Designer. Vérifiez s'il existe un dossier nommé \FormulaAddIn. Si le dossier n'existe pas, créez-le.
Exemple XML dans FormulaAddIn
Le dossier contient Sample.xml, un fichier correctement configuré. Ajoutez une catégorie, enregistrez le fichier et redémarrez Alteryx Designer pour voir l'exemple de fonction.
C:\Program Files\Alteryx\bin\RuntimeData\FormulaAddIn
Enregistrez votre fichier XML dans le répertoire \FormulaAddIn. Si vous utilisez une DLL, enregistrez le fichier DLL associé au même endroit. La convention de dénomination standard consiste à nommer les fichiers DLL et XML de manière à ce qu'ils correspondent.
Dans le cas de deux instances Designer s'exécutant simultanément sur une machine (Administrateur et Non-administrateur), le fichier XML contenant les fonctions personnalisées de l'outil Formule doit être distinct pour les deux versions via des chemins différents afin d'être affiché dans l'interface GUI Designer.
Pour la version Non-administrateur, le chemin est le suivant :
C:\Program Files\Alteryx\bin\RuntimeData\FormulaAddIn.Pour la version Administrateur, le chemin est le suivant :
C:\Alteryx\RuntimeData\FormulaAddIn.