Une application sans mail, ça existe ? Jamais vu !  😆

Plusieurs solutions pour gérer les mails sont disponibles lorsque vous travaillez sur : K2 Blackpearl :

  • Directement dans le paramétrage du mail event ?
    C’est possible, ça fonctionne, mais niveau maintenance c’est complexe et pas souple du tout, on oublie !

       

  • La seconde solution est de déporter les mails en base de données, et d’utiliser une procédure stockée et une série de tags pour rendre le mail générique. Un peu plus de détails ci-dessous :

 

Créer la table qui va contenir le mail

Premièrement, créer une table qui va permettre de gérer le contenu des différents mails, on va avoir besoin d’un code du mail, pour l’identifier facilement côté processus, de l’objet du mail et de son corps :

Gérer ses mails dans une base SQL sur K2 Blackpearl

CREATE TABLE [dbo].[Blog_Mail](
	[MA_ID] [int] IDENTITY(1,1) NOT NULL,
	[MA_Code] [nvarchar](120) NULL,
	[MA_Subject] [nvarchar](max) NULL,
	[MA_Body] [nvarchar](max) NULL,
 CONSTRAINT [PK_Blog_Mail] PRIMARY KEY CLUSTERED 
(
	[MA_ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

Exemple de mail (simple) :

  • Code : NEWTASK
  • Objet : [Blog] – Validation de la demande %ID% %Title%
  • Corps : Bonjour %UserDisplayName%, <br/><br/>Vous devez valider la demande %ID% (Titre : %Title%).<br /><br /><a href=’%LinkToTask%’>Cliquez ici pour valider</a>

💡 Astuce : comme vous pouvez le voir, on peut mettre du HTML dans le corps et l’objet du mail, vous pouvez du coup faire des jolis mails avec plein de couleurs super facilement  😎

Créer la procédure stockée qui va restituer le mail

Notre processus ne va pas pouvoir directement aller chercher le contenu du mail dans la table, car les mails ont des contenus dynamiques (nom de la personne qui reçoit le mail, lien vers la tâche, information sur la demande en cours de validation, …). Une procédure stockée va devoir être utilisée pour générer le corps du mail avec le bon contenu.

Si vous souhaitez plus de détails sur la création de procédures stockées et leur utilisation dans K2, Thomas vous explique tout dans son article sur enK2besoin.

Les modèles de mails contenus dans la table créée ci-dessus devront posséder des tags, qui seront remplacés par la procédure stockée par les vraies valeurs. Dans mon exemple, les tags ont la forme %NomDuTag%, ce format de tag peut-être modifié en fonction de vos besoins.

La procédure stockée prendra a minima en paramètre :

  • Le code du mail que l’on cherche à retourner
  • L’ID métier de la demande (en fonction de notre application, il pourra varier)
  • Le lien vers la tâche (doit être présent de façon optionnelle)
  • L’utilisateur destinataire du mail (login + display name)

La procédure stockée va :

  1. Récupérer le modèle du mail en fonction du code passé en paramètre
  2. Récupérer les informations de la table métier (business data dans l’exemple)
  3. Remplacer les tags du mail par les informations récupérées de la table métier ou passées en paramètre
  4. Renvoyer le mail
CREATE PROCEDURE [dbo].[PRC_Blog_GetMail]
	@P_MailCode			nvarchar(120),			-- Code du mail a retourner
	@P_ID				int = null,				-- ID de notre demande
	@P_LinkToTask		nvarchar(max) = null,	-- Lien vers la tache
	@P_UserLogin		nvarchar(120) = null,	-- Login de la personne
	@P_UserDisplayName	nvarchar(120) = null	-- Destinataire du mail
AS
BEGIN

	DECLARE @MA_Subject nvarchar(max) = '',
			@MA_Body nvarchar(max) = '',
			@BD_Title nvarchar(120) = '',
			@BD_Originator nvarchar(120) = '';
			
	-- Récupération du template de mail
	SELECT @MA_Subject = MA_Subject, @MA_Body = MA_Body
	FROM Blog_Mail 
	WHERE MA_Code = @P_MailCode 
	
	-- Récupération des données métier
	SELECT @BD_Title = BD_Title, @BD_Originator = BD_Originator
	FROM Blog_BusinessData
	WHERE BD_ID = @P_ID
	
	-- Génération du subject
	SET @MA_Subject = REPLACE(@MA_Subject,'%UserDisplayName%',ISNULL(@P_UserDisplayName,''))
	SET @MA_Subject = REPLACE(@MA_Subject,'%UserLogin%',ISNULL(@P_UserLogin,''))
	SET @MA_Subject = REPLACE(@MA_Subject,'%ID%',ISNULL(@P_ID,''))
	SET @MA_Subject = REPLACE(@MA_Subject,'%Title%',ISNULL(@BD_Title,''))
	SET @MA_Subject = REPLACE(@MA_Subject,'%Originator%',ISNULL(@BD_Originator,''))

	-- Génération du corps du mail
	SET @MA_Body = REPLACE(@MA_Body, '%UserDisplayName%', ISNULL(@P_UserDisplayName,''))
	SET @MA_Body = REPLACE(@MA_Body, '%UserLogin%', ISNULL(@P_UserLogin,''))
	SET @MA_Body = REPLACE(@MA_Body, '%LinkToTask%', ISNULL(@P_LinkToTask,''))
	SET @MA_Body = REPLACE(@MA_Body,'%ID%',ISNULL(@P_ID,''))
	SET @MA_Body = REPLACE(@MA_Body,'%Title%',ISNULL(@BD_Title,''))
	SET @MA_Body = REPLACE(@MA_Body,'%Originator%',ISNULL(@BD_Originator,''))

	
	SELECT @MA_Subject AS 'MA_Subject', @MA_Body AS 'MA_Body'
	
END
Procédure stockée de génération du mail

 

Côté processus

Côté processus, rien de plus simple, dans nos mails event, on va faire appel à notre procédure stockée et lui renseigner les informations en entrée comme ci-dessous :

Gérer ses mails dans une base SQL sur K2 Blackpearl

 

Gérer ses mails dans une base SQL sur K2 Blackpearl

 

C’est bon, on peut tester maintenant, et voici le résultat :

Gérer ses mails dans une base SQL sur K2 Blackpearl

 

A vous de jouer  😉

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.