Récupérer les signatures ou l'historique du workflow dans un modèle bureautique
La commande à connaître est la suivante : FormatWorkflowHistory(nomEtape, "P1" , "P2" , "P3" )
P1 : paramètre obligatoire, options possibles listées ci dessous
P2 : paramètre obligatoire, format de date si utilisée, exemple dd/MM/yyyy sinon laisser vide
P3 : paramètre facultatif, dans le cas de l'utilisation de userFor en P1 (validation par délégation) par défaut si non spécifié : 0 (pour 1)
Les options possible sont: {user},{comment},{action},{date},{userFor},{userjob}.
user : nom (cn) de celui qui est sorti de l'étape
comment : son commentaire si renseigné
action : sa décision
date : date horodatée de la signature de l'étape
userFor : peut renvoyer 2 noms de personne
0 : (cn) du délégué si il a signé à la place de
1 : nom (cn) de celui qui devait signer
userjob : fonction de celui qui est sorti de l'étape
Voici quelques exemples de formule à mettre dans les correspondances bureautiques :
Exemple pour récupérer celui qui à signé :
string nomEtape = "Validation";
string action = FormatWorkflowHistory(nomEtape,"{action}","");
if ( action.Contains( "Refusé" ) || action.Contains( "Changement d'étape" ))
return "";
return FormatWorkflowHistory( nomEtape , "{user}","");
Exemple pour récupérer une concaténation d'informations sur l'étape :
string nomEtape = "Vérification";
string action = FormatWorkflowHistory(nomEtape,"{action}","");
if ( action.Contains( "Refusé" ) || action.Contains( "Changement d'étape" ))
return "";
return FormatWorkflowHistory( nomEtape, "Document vérifié par {user} - {userjob} le {date}", "dd/MM/yy hh:mm" );
-- Résultat : Document vérifié par Jacque VERPRE - Consultant le 17/08/2017 13:15
Dans le cas de l'envoi de la date dans Excel, la formule est la suivante (ne pas oublier de formatter la colonne dans Excel, au format personnalisé date) :
string action = FormatWorkflowHistory(nomEtape,"{action}","");
if ( action.Contains( "Refusé" ) || action.Contains( "Changement d'étape" ))
return "";
return FormatWorkflowHistory( nomEtape, "{date}", "yyyy/MM/dd" );
Exemple pour récupérer celui qui devait signer, même quand son délégué signe à sa place :
string nomEtape = "Validation";
string action = FormatWorkflowHistory(nomEtape,"{action}","");
if ( action.Contains( "Refusé" ) || action.Contains( "Changement d'étape" ))
return "";
return FormatWorkflowHistory( nomEtape , "{userFor}","", "{1}");
Exemple pour récupérer la fonction de celui qui a signé, en tenant compte du fait qu'il peut avoir signé par délégation :
string nomEtape = "Validation";
string action = FormatWorkflowHistory(nomEtape,"{action}","d");
if ( action.Contains( "Refusé" ) || action.Contains( "Changement d'étape" ))
return "";
var ret = new List<string>();
foreach( var history in GetWorkflowHistory( nomEtape ) ) {
var job = GetUserJob( history.Performer );
if (!String.IsNullOrEmpty(history.ValidationFor))
job = GetUserJob( history.ValidationFor );
ret.Add( job );
}
returnValue = string.Join( "\n", ret.ToArray() );
Le nom de l'étape courante peut s'extraire par la formule :
returnValue = GetWorkflowActivity();
L'intervenant courant peut s'extraire par requête :
string intervenant = string.Join(
", ", ApplicationDataSource.DocumentsDataSource.SQL_ExecuteScalarCollection<string>(
@"SELECT resource_name from DocumentAccessView where id_document = @id_document and access_mode=2"
,new KeyPair("id_document",doc.GetStringValue("id_document") )).ToArray()
);
return intervenant;
La date de lancement en workflow peut aussi s'extraire par requête :
//cette formule récupère la première date dans l'historique du workflow (lancement)
string wkf_date_first =
(string)ApplicationDataSource.DocumentsDataSource.SQL_ExecuteScalar(
@"select top 1 convert(varchar,P.date_start,103) from DocumentProcess DP inner join ProcessInstances P on P.id_root_parent = DP.id_instance where DP.id_document = @id_document order by idx asc"
,new KeyPair("id_document",doc.GetStringValue("id_document") )
);
return wkf_date_first;
Demande de révision :
DR-2022-00821 :
Voir la TEC : TEC-AV-2011-074 qui prend en charge plusieurs cas bloquant. Par exemple le Cn différent du DN
string nomEtape = "Traitement";
string dateFormat = "d";
string format = "{user}";
var ret = new List<string>();
foreach (var history in GetWorkflowHistory(nomEtape))
{
var newString = format
.Replace("{comment}", history.Comment)
.Replace("{action}", history.Action)
.Replace("{date}", history.Date.ToString(dateFormat))
.Replace("{user}", history.Performer);
ret.Add(newString);
}
string action = FormatWorkflowHistory(nomEtape,"{action}","");
if ( action.Contains("Demandes d'infos complémentaires"))
return "";
return string.Join("\n", ret.ToArray());