Skip to main content
Version: Next

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() );
NB1 :

Le nom de l'étape courante peut s'extraire par la formule :

returnValue = GetWorkflowActivity();
NB2 :

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;
NB3 :

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());