Créer et utiliser des procédures stockées avec K2

Le connecteur SQL Server intégré à K2 (dont on a déjà parlé ici) permet non seulement d’exposer sous forme de smartobjects des tables, mais aussi des vues SQL (et non pas des vues smartforms ) et des procédures stockées.

Dans cet article je vais parler des procédures stockées, qui sont un moyen rapide (aussi bien en temps de développement que de performances) et puissant d’implémenter et de mutualiser des règles de gestion complexes.

Avant de pouvoir utiliser, dans K2, une procédure stockée, encore faut-il savoir en créer une. Nous allons donc lancer SQL Server Management Studio et nous rendre sur la base de données sur laquelle nous désirons implémenter une procédure stockée. Dans notre billet, nous allons utiliser la base de données exemple de SQL Server : la base AdventureWorks.

Créer une procédure stockée dans SQL Server Management Studio
Créer une procédure stockée dans SQL Server Management Studio

SQL Server Management Studio nous génère alors un modèle de procédure stockée que nous allons modifier pour répondre à nos besoins :

Modèle de Proc Stock généré par SQL Server Management Studio
Modèle de Proc Stock généré par SQL Server Management Studio

Pour cet article, nous allons créer une procédure permettant de générer un tableau HTML résumant quelques informations sur l’objet employé de notre base exemple. En paramètre d’entrée, on passera son identifiant.

Ci-dessous le code source de notre procédure stockée :

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: K2 France - Thomas
-- Create date: 2016-11-08
-- Description:	Genere un tableau HTML contenant des informations sur
--				un employe dont le login est passe en parametre
-- =============================================
CREATE PROCEDURE sp_TableauEmploye
	@pLogin nvarchar(256) -- le login de l'employe
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

	-- Initialisation du tableau HTML qui servira de valeur de retour
	DECLARE @Tableau	NVARCHAR(MAX)	=	'<table><caption>Informations de l''employé '
											+ @pLogin
											+ '</caption>'
											+ '<tr><th>Champ</th><th>Valeur</th></tr>'
	
	-- Quelques informations sur l'utilisateur, pour construire le tableau
	DECLARE @Prenom		NVARCHAR(256)
	DECLARE @Nom		NVARCHAR(256)
	DECLARE @Genre		VARCHAR
	DECLARE @Naissance	DATE
	DECLARE @Embauche	DATE
	
	-- Je recupere les infos dans les tables idoines
	SELECT TOP 1
		@Prenom		= P.FirstName,
		@Nom		= P.LastName,
		@Genre		= E.Gender,
		@Naissance	= E.BirthDate,
		@Embauche	= E.HireDate
	FROM
		AdventureWorks2012.Person.Person P,
		AdventureWorks2012.HumanResources.Employee E
	WHERE
		P.BusinessEntityID = E.BusinessEntityID
		and
		E.LoginID = @pLogin

	-- J'ajoute les donnees recuperees au tableau
	SET @Tableau =	@Tableau
					+ '<tr><td>Prénom</td><td>'				+ @Prenom		+ '</td></tr>'
					+ '<tr><td>Nom</td><td>'				+ @Nom			+ '</td></tr>'
					+ '<tr><td>Genre</td><td>'				+ @Genre		+ '</td></tr>'
					-- Pour les dates, je dois les convertir en chaines de caracteres
					-- avant de pouvoir les concatener au reste du tableau
					+ '<tr><td>Date de naissance</td><td>'
						-- Format de date "103" = jj/MM/aaaa
						+ CONVERT(NVARCHAR, @Naissance, 103)
					+ '</td></tr>'
					+ '<tr><td>Date d''embauche</td><td>'
						+ CONVERT(NVARCHAR, @Embauche, 103)
					+ '</td></tr>'
					-- je ferme le tableau HTML
					+ '</table>'

	-- Je renvois le tableau que je viens de generer
	SELECT @Tableau AS 'Informations de l''employé'
END
GO

J’exécute cette requête afin de vérifier qu’elle ne remonte pas d’erreurs.

Puis, suite à un refresh du nœud Stored Procedures de l’arborescence dans SQL Server Management Studio, on voit notre procédure stockée nouvellement créée disponible :

Notre procédure stockée
Notre procédure stockée

Pour utiliser cette procédure stockée dans K2, il va être nécessaire :

  • Soit d’enregistrer une instance du connecteur SQL Server vers cette base de données exemple, si ça n’a pas déjà été fait.
  • Soit de rafraîchir l’instance déjà existante si vous l’avez précédemment enregistrée, afin que le connecteur K2 découvre et référence cette nouvelle procédure stockée.

Les 2 options peuvent se réaliser depuis le SmartObject service tester et sont décrites dans l’article « Le connecteur K2 pour SQL Server ». Ensuite, comme nous sommes des fainéants, nous allons pouvoir créer le smartobject permettant de manipuler la procédure stockée directement depuis le SmartObject Service Tester (une bonne pratique consiste à le créer depuis les outils de conception ).

Rafraîchissement de l'instance de service SQL Server
Rafraîchissement de l’instance de service SQL Server
Mon nouveau service disponible
Mon nouveau service disponible

Nous allons donc créer un smartobject :

Création du SmO depuis le SmartObject Service Tester
Création du SmO depuis le SmartObject Service Tester

On renomme notre nouveau Smartobject selon les conventions de nommage du projet  et on choisit sa catégorie de destination avant de le publier :

Nommage et catégorisation de mon SmO
Nommage et catégorisation de mon SmO
Whouhou
Whouhou

Et voilà !

On peut désormais faire appel à notre procédure stockée depuis K2. Ici le résultat dans le SmartObject Services Tester :

Exécution du SmO depuis le SmartObject Service Tester
Exécution du SmO depuis le SmartObject Service Tester

Le SmartObject Service Tester est bien gentil, mais pas très parlant. Voilà un cas d’utilisation un peu plus pratique : insérer notre tableau HTML dans un email envoyé par un workflow K2.

Dans l’ E-mail Event Wizard de K2 Studio :

Appel de la ProcStock depuis un assistant de configuration K2
Appel de la ProcStock depuis un assistant de configuration K2

Le rendu dans notre boîte de réception :

Le mail obtenu par cette configuration
Le mail obtenu par cette configuration

N’hésitez pas à utiliser les commentaires si vous avez des questions.

Thomas

Chez K2 France depuis 2013, je ne suis pas magicien mais j’ai tout de même quelques tours dans mon sac en matière d’applications K2, dont je veux bien vous révéler les secrets ;-)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *