Application de workflow EXECSQL

Aperçu

L'application de workflow EXECSQL vous permet d'exécuter une ou plusieurs requêtes SQL dans un processus.
Elle vous permet de récupérer des informations au travers de requêtes SELECT par exemple, afin de pouvoir utiliser le résultat dans des conditions du processus.

Mode de fonctionnement

    L'application EXECSQL requiert les paramètres CONNECTION_NAME (qui correspond au nom de la connexion) et QUERY (qui correspond à la requête à exécuter).
    Il est possible de spécifier une ou plusieurs commandes par action EXECSQL. Pour ceci, les paramètres doivent être préfixés par CMDx_, où x correspond au numéro de la commande (p.ex. : CMD1_).
    Les types de requête supportés sont SELECT, INSERT, UPDATE, DELETE , SCALAR et PROCEDURE.
    L'application supporte la gestion des transactions SQL.
    Il est possible d'utiliser une connexion globale pour plusieurs commandes. Pour ceci, il ne faut pas préfixer le paramètre CONNECTION_NAME par CMDx_. Il n'est pas possible d'utiliser une connexion globale et une connexion locale (p.ex. : CONNECTION_NAME et CMD2_CONNECTION_NAME).
    Il est possible d'utiliser une transaction globale pour plusieurs commandes. Pour ceci, il ne faut pas préfixer le paramètre TRANSACTION par CMDx_. Il n'est pas possible d'utiliser une transaction globale et une transaction locale (ex: TRANSACTION et CMD2_TRANSACTION). Il est nécessaire de définir une connexion globale pour pouvoir définir une transaction globale.
    Des logs d'application sont disponibles. Ceux-ci peuvent être spécifiés en définissant la valeur du paramètre ExecSqlLogLevel dans le fichier web.config sur 0 pour désactiver la journalisation, 1 pour les logs d'erreur, 2 pour des logs d'informations ou 3 pour les logs de débogage; la valeur par défaut est 0.

Paramètres obligatoires

Paramètre
Type
Direction
Description
CONNECTION_NAME
TEXT
IN
Nom de la connexion à utiliser
Le nom de la connexion doit être défini dans le fichier web.config de WorkflowGen.
QUERY
TEXT
IN
Requête à exécuter

Paramètres facultatifs

Général

Paramètre
Type
Direction
Description
TYPE
TEXT
IN
Type de la requête à exécuter
Les types supportés sont :
    SELECT (par défaut)
    INSERT
    UPDATE
    DELETE
    SCALAR
    PROCEDURE
TRANSACTION
TEXT
IN
Lorsque défini sur Y , l'application déclenche une transaction SQL avant l'exécution de la requête et effectuera un commit ou rollback en fonction du résultat
Par défaut : N
ON_ERROR
TEXT
IN
Lorsque défini sur CATCH, l'application ne retournera pas d'erreur à WorkflowGen. Ceci permettra de stocker un message d'erreur dans le paramètre ERROR_MESSAGE et de continuer l'exécution. Par défaut : THROW
TIMEOUT
NUMERIC
IN
Indique le nombre de secondes à définir dans le temps d'exécution de la commande Par défaut : 30
FORM_DATA
FILE
INOUT
Fichier FORM_DATA contenant la définition XML du processus
FORM_DATA_GRIDVIEW
TEXT
IN
Identifiant du tableau à alimenter dans le FORM_DATA
RESULT_CSV_SEPARATOR
TEXT
IN
Séparateur utilisé dans la valeur ou fichier CSV de retour
Par défaut : , (virgule)
    Si vous souhaitez alimenter un tableau à l'aide du paramètre FORM_DATA_GRIDVIEW, il est nécessaire que le contenu du FORM_DATA contiennent au moins le schéma XML.
    Si la première action du processus est une action EXECSQL, vous devez mettre une valeur par défaut dans le FORM_DATA, avec la définition du schéma.

Paramètres de requête

Il est possible de définir pour chaque requête des paramètres à utiliser lors de l'exécution. Les paramètres peuvent être définis de deux façons, soit en utilisant le préfixe QUERY_PARAM, soit en utilisant un arobase (@).

📌 Exemple

Vous pouvez utiliser QUERY_PARAM_MyParam ou @MyParam, où MyParam correspond au nom du paramètre défini dans la requête.
Paramètre
Type
Direction
Description
QUERY
TEXT
IN
SELECT * FROM USERS WHERE LASTNAME = @UserLastname
QUERY_PARAM_UserLastName / @UserLastName
TEXT
IN
Doe

Paramètres de retour

Général

Paramètre
Type
Direction
Description
ERROR_MESSAGE
TEXT
OUT
Contient le message d'erreur dans le cas où la valeur du paramètre contient CATCH et qu'une exception est levée lors de l'exécution
RESULT_COMMIT
TEXT
OUT
Indique si un commit a été exécuté sur la transaction Valeurs possibles : Y ou N

Requête SELECT

Paramètre
Type
Direction
Description
RESULT_ROWx_fieldName
TEXT
NUMERIC
DATETIME
OUT
Contient la valeur de la colonne fieldName pour la ligne x
Vous devez remplacer fieldname par votre nom de colonne (p.ex. : LASTNAME) et x par le numéro de la ligne (p.ex. : 2).
RESULT_ROW_fieldName
TEXT
NUMERIC
DATETIME
OUT
Contient la valeur de la colonne fieldName pour la première ligne retournée
RESULT_JSON
TEXT
OUT
Contient le résultat de la requête au format JSON
RESULT_JSON_FILE
FILE
OUT
Contient le résultat de la requête au format JSON stocké dans un fichier .json
RESULT_XML
TEXT
OUT
Contient le résultat de la requête au format XML
RESULT_XML_FILE
FILE
OUT
Contient le résultat de la requête au format XML stocké dans un fichier .xml
RESULT_CSV
TEXT
OUT
Contient le résultat de la requête au format CSV
Les données sont séparées suivant le séparateur défini dans le paramètre RESULT_CSV_SEPARATOR
RESULT_CSV_FILE
FILE
OUT
Contient le résultat de la requête au format CSV stocké dans un fichier .csv
Les données sont séparées suivant le séparateur défini dans le paramètre RESULT_CSV_SEPARATOR

Requête SCALAR

Paramètre
Type
Direction
Description
RESULT
NUMERIC
OUT
Contient le résultat numérique d'une requête de type SCALAR

Exemples

Requête SELECT

Stockage du retour dans des données

Paramètre
Type
Direction
Valeur
CONNECTION_NAME
TEXT
IN
MainDbSource
QUERY
TEXT
IN
SELECT LASTNAME, FIRSTNAME, USERNAME FROM USERS
RESULT_JSON
TEXT
OUT
{ "TABLE":[ { "LASTNAME":"Administrator", "FIRSTNAME":"WorkflowGen", "USERNAME":"wfgen_admin" }, { "LASTNAME":"Doe", "FIRSTNAME":"John", "USERNAME":"john.doe" } ] }
RESULT_JSON_FILE
FILE
OUT
result.json
RESULT_CSV
TEXT
OUT
"LASTNAME","FIRSTNAME","USERNAME" "Administrator","WorkflowGen","wfgen_admin"
"Doe","John","john.doe"
RESULT_CSV_FILE
FILE
OUT
result.csv
RESULT_ROW_LASTNAME
TEXT
OUT
Administrator
RESULT_ROW1_FIRSTNAME
TEXT
OUT
WorkflowGen
RESULT_ROW2_USERNAME
TEXT
OUT
john.doe

Alimentation d'un tableau

Paramètre
Type
Direction
Valeur
CONNECTION_NAME
TEXT
IN
MainDbSource
QUERY
TEXT
IN
SELECT LASTNAME as REQUEST_GRID_LASTNAME, FIRSTNAME as REQUEST_GRID_FIRSTNAME, USERNAME as REQUEST_GRID_USERNAME FROM USERS
FORM_DATA
FILE
INOUT
FORM_DATA
FORM_DATA_GRIDVIEW
TEXT
IN
REQUEST_GRID
Dans le cas où EXECSQL est la première action du processus, vous devez définir une valeur par défaut pour la donnée FORM_DATA contenant le schéma du tableau comme dans l'exemple ci-dessous :
1
<?xml version="1.0" standalone="yes"?>
2
<NewDataSet>
3
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
4
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
5
<xs:complexType>
6
<xs:choice minOccurs="0" maxOccurs="unbounded">
7
<xs:element name="Table1">
8
<xs:complexType>
9
<xs:sequence>
10
</xs:sequence>
11
</xs:complexType>
12
</xs:element>
13
<xs:element name="REQUEST_GRID">
14
<xs:complexType>
15
<xs:sequence>
16
<xs:element name="REQUEST_GRID_LASTNAME" type="xs:string" minOccurs="0"/>
17
<xs:element name="REQUEST_GRID_FIRSTNAME" type="xs:string" minOccurs="0"/>
18
<xs:element name="REQUEST_GRID_USERNAME" type="xs:string" minOccurs="0"/>
19
</xs:sequence>
20
</xs:complexType>
21
</xs:element>
22
</xs:choice>
23
</xs:complexType>
24
</xs:element>
25
</xs:schema>
26
<Table1></Table1>
27
</NewDataSet>
Copied!

Requête INSERT

Paramètre
Type
Direction
Valeur
CONNECTION_NAME
TEXT
IN
MainDbSource
QUERY
TEXT
IN
INSERT INTO WFCATEGORY (ID_CATEGORY,NAME,DESCRIPTION) VALUES (@IdCategory, @Name, @Description)
QUERY_PARAM_IdCategory
NUMERIC
IN
1
QUERY_PARAM_Name
TEXT
IN
NomCategorie
QUERY_PARAM_Description
TEXT
IN
Description de la catégorie
Voici une autre possibilité pour les paramètres de requête :
Paramètre
Type
Direction
Valeur
CONNECTION_NAME
TEXT
IN
MainDbSource
TYPE
TEXT
IN
INSERT
QUERY
TEXT
IN
INSERT INTO WFCATEGORY (ID_CATEGORY,NAME,DESCRIPTION) VALUES (@IdCategory, @Name, @Description)
@IdCategory
NUMERIC
IN
1
@Name
TEXT
IN
NomCategorie
@Description
TEXT
IN
Description de la catégorie

Requête UPDATE

Paramètre
Type
Direction
Valeur
CONNECTION_NAME
TEXT
IN
MainDbSource
QUERY
TEXT
IN
UPDATE WFCATEGORY SET NAME = @Name WHERE ID_CATEGORY = @IdCategory
QUERY_PARAM_IdCategory
NUMERIC
IN
1
QUERY_PARAM_Name
TEXT
IN
NouveauNomCategorie

Requête DELETE

Paramètre
Type
Direction
Valeur
CONNECTION_NAME
TEXT
IN
MainDbSource
QUERY
TEXT
IN
DELETE FROM WFCATEGORY WHERE ID_CATEGORY = @IdCategory
QUERY_PARAM_IdCategory
NUMERIC
IN
1

Procédure stockée

Paramètre
Type
Direction
Valeur
CONNECTION_NAME
TEXT
IN
MainDbSource
TYPE
TEXT
IN
PROCEDURE
QUERY
TEXT
IN
INSERT_CATEGORY
QUERY_PARAM_ID_CATEGORY
NUMERIC
IN
1
QUERY_PARAM_NAME
TEXT
IN
NomCategorie
QUERY_PARAM_DESCRIPTION
TEXT
IN
Description de la catégorie
Le type de requête PROCEDURE ne permet pas de retourner de valeur. Si vous souhaitez retourner une valeur, il faut utiliser le type SELECT.
Paramètre
Type
Direction
Valeur
CONNECTION_NAME
TEXT
IN
MainDbSource
TYPE
TEXT
IN
SELECT
QUERY
TEXT
IN
EXEC GET_USER @USERNAME = @User
QUERY_PARAM_User
NUMERIC
IN
wfgen_admin

Requête SCALAR

Paramètre
Type
Direction
Valeur
CONNECTION_NAME
TEXT
IN
MainDbSource
TYPE
TEXT
IN
SCALAR
QUERY
TEXT
IN
SELECT COUNT(*) FROM USERS
RESULT
NUMERIC
OUT
2

Lancement de plusieurs requêtes

Paramètre
Type
Direction
Valeur
CONNECTION_NAME
TEXT
IN
MainDbSource
CMD1_TYPE
TEXT
IN
INSERT
CMD1_QUERY
TEXT
IN
INSERT INTO WFCATEGORY (ID_CATEGORY,NAME,DESCRIPTION) VALUES (@IdCategory, @Name, @Description)
CMD1_QUERY_PARAM_IdCategory
NUMERIC
IN
1
CMD1_QUERY_PARAM_Name
TEXT
IN
NomCategorie
CMD1_QUERY_PARAM_Description
TEXT
IN
Description de la catégorie
CMD2_QUERY
TEXT
IN
SELECT NAME FROM WFCATEGORY WHERE ID_CATEGORY = @IdCategory
CMD2_RESULT_ROW_NAME
TEXT
OUT
NomCategorie

Requêtes avec transactions et gestion des erreurs

Paramètre
Type
Direction
Valeur
CONNECTION_NAME
TEXT
IN
MainDbSource
CMD1_TYPE
TEXT
IN
INSERT
CMD1_QUERY
TEXT
IN
INSERT INTO WFCATEGORY (ID_CATEGORY,NAME,DESCRIPTION) VALUES (1, "Nom", "Description")
CMD1_TRANSACTION
TEXT
IN
Y
CMD1_ON_ERROR
TEXT
IN
CATCH
CMD1_COMMIT
TEXT
OUT
Y
CMD1_ERROR_MESSAGE
TEXT
OUT
NULL
CMD2_TYPE
TEXT
IN
INSERT
CMD2_QUERY
TEXT
IN
INSERT INTO WFCATEGORY (ID_CATEGORY,NAME,DESCRIPTION) VALUES (1, "AutreNom", "Autre description")
CMD2_TRANSACTION
TEXT
IN
Y
CMD2_ON_ERROR
TEXT
IN
CATCH
CMD2_COMMIT
TEXT
OUT
N
CMD2_ERROR_MESSAGE
TEXT
OUT
Cannot insert duplicate key in object 'dbo.WFCATEGORY'. The duplicate key value is (1).
Dernière mise à jour 5mo ago