Application de workflow EXECSQL
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. - L'application EXECSQL requiert les paramètres
CONNECTION_NAME
(qui correspond au nom de la connexion) etQUERY
(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
etPROCEDURE
. - 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
parCMDx_
. Il n'est pas possible d'utiliser une connexion globale et une connexion locale (p.ex. :CONNECTION_NAME
etCMD2_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
parCMDx_
. Il n'est pas possible d'utiliser une transaction globale et une transaction locale (ex:TRANSACTION
etCMD2_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 fichierweb.config
sur0
pour désactiver la journalisation,1
pour les logs d'erreur,2
pour des logs d'informations ou3
pour les logs de débogage; la valeur par défaut est0
.
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ètre | Type | Direction | Description |
TYPE | TEXT | IN | Type de la requête à exécuter Les types supportés sont :
|
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ésultatPar 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 duFORM_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.
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 (@
).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è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 |
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 |
Paramètre | Type | Direction | Description |
RESULT | NUMERIC | OUT | Contient le résultat numérique d'une requête de type SCALAR |
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 |
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 :<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Table1">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="REQUEST_GRID">
<xs:complexType>
<xs:sequence>
<xs:element name="REQUEST_GRID_LASTNAME" type="xs:string" minOccurs="0"/>
<xs:element name="REQUEST_GRID_FIRSTNAME" type="xs:string" minOccurs="0"/>
<xs:element name="REQUEST_GRID_USERNAME" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<Table1></Table1>
</NewDataSet>
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) |
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 |
Paramètre | Type | Direction | Valeur |
CONNECTION_NAME | TEXT | IN | MainDbSource |
TYPE | TEXT | IN | UPDATE |
QUERY | TEXT | IN | UPDATE WFCATEGORY SET NAME = @Name WHERE ID_CATEGORY = @IdCategory |
QUERY_PARAM_IdCategory | NUMERIC | IN | 1 |
QUERY_PARAM_Name | TEXT | IN | NouveauNomCategorie |
Paramètre | Type | Direction | Valeur |
CONNECTION_NAME | TEXT | IN | MainDbSource |
TYPE | TEXT | IN | DELETE |
QUERY | TEXT | IN | DELETE FROM WFCATEGORY WHERE ID_CATEGORY = @IdCategory |
QUERY_PARAM_IdCategory | NUMERIC | IN | 1 |
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 |
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 |
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 |
NUMERIC | IN | 1 | |
CMD2_RESULT_ROW_NAME | TEXT | OUT | NomCategorie |
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 5d ago