Création d'une tâche configurable (Task)
De Wiki1000
Version du 28 mars 2020 à 17:39 par Syfre (discuter | contributions)
Une tâche configurable est une tâche qui apparaît dans l'assistant de création de tâche.
Les prés-requis minimums pour qu'une tâche soit configurable sont :
- La classe dérive du stéréotype TitTask
- Elle implémente une méthode Execute
- Elle implémente une méthode de classe IsTaskConfigurable qui retourne True
Optionnellement la classe peut implémenter :
Méthode | Type | O/F | Valeur |
---|---|---|---|
IsTaskConfigurable | Classe | O | True |
TaskCategory | Classe | F | Nom de la catégorie de la tâche |
TaskFormConfiguration | Classe | F | Nom de l'écran de configuration |
Execute | Instance | O | Exécution de la tâche |
EventNotification | Instance | F | True pour générer un événement sur la terminaison de la tâche |
TaskName | Instance | F | Nom de la tâche dans le journal |
TaskInfos | Instance | F | Informations sur la tâche dans le journal |
TaskReference | Instance | F | Référence de la tâche dans le journal |
Tip : Si une tâche est configurable mais n'implémente pas TaskFormConfiguration la configuration de la tâche se fera par saisie des valeurs des attributs de la classe. |
Tip : Générer un événement sur la terminaison de la tâche permet de déclencher une tâche abonnée à cette tâche. |
Exemple :
unit TestSYFREWF; interface Type TTestTask = Class(TitObject,IMyTask) public unCode: string; uneChaine: string; unEntier: integer; Function EventNotification():boolean; Function Execute(var aReason:string):Integer; Procedure ExecuteAsync; Procedure InitializeParameters; Class Function IsTaskConfigurable():boolean; Procedure OnFailure; Procedure OnSuccess; Procedure OnTerminate; Class Function TaskCategory():string; Class Function TaskFormConfiguration():string; Function TaskInfos():string; Function TaskName():string; Function TaskReference():string; end; Implementation {TTestTask} Function TTestTask.EventNotification():boolean; //Function EventNotification():boolean; begin Result := True; end; Function TTestTask.Execute(var aReason:string):Integer; //Function Execute(var aReason:string):Integer; var aMsg:TdbmQueueMessage; idx:Integer; S:string; begin // Add messages to the log ProgressMessage('HelloWorld, input parameters:'); ProgressMessage(Format(' unCode:%s',[unCode])); ProgressMessage(Format(' unEntier:%d',[unEntier])); ProgressMessage(Format(' uneChaine:%s',[uneChaine])); if Assigned(UserContext.TaskContext) and Assigned(userContext.TaskContext.EventContext) then begin userContext.TaskContext.AddMessage('Has Task context message'); // aMsg := userContext.TaskContext.EventContext.ReceivedMsg; if Assigned(aMsg) then begin userContext.TaskContext.AddMessage(Format('Task context message: %d',[aMsg.Count])); for idx:=0 to aMsg.Count-1 do begin S := aMsg.DisplayStrings(idx); UserContext.TaskContext.AddMessage(S); end; end; // Add parameters to the message // May be used in an other task triggered by this one // aMsg.AddParameter('Task1.uneChaine',uneChaine); aMsg.AddParameter('Task1.unEntier',unEntier); end else ProgressMessage('no task context'); aReason := ''; Result := trOK; end; Procedure TTestTask.ExecuteAsync; //Procedure ExecuteAsync; var aMsg:TitObject; aReason:string; begin InitializeParameters; if not ExecuteTask(aReason) then showMessage(aReason) else showMessage('ok'); end; Procedure TTestTask.InitializeParameters; //Procedure InitializeParameters; begin uneChaine := 'Chaine'; unCode := 'code'; unEntier := 1; end; Class Function TTestTask.IsTaskConfigurable():boolean; //Class Function IsTaskConfigurable():boolean; begin Result := True; end; Procedure TTestTask.OnFailure; //Procedure OnFailure; begin // On failure if Assigned(UserContext.TaskContext) and Assigned(userContext.TaskContext.EventContext) then begin userContext.TaskContext.AddMessage('Failure executed'); end; end; Procedure TTestTask.OnSuccess; //Procedure OnSuccess; begin // on success // if Assigned(UserContext.TaskContext) and Assigned(userContext.TaskContext.EventContext) then begin userContext.TaskContext.AddMessage('Success executed'); end; end; Procedure TTestTask.OnTerminate; //Procedure OnTerminate; var vCommentaire : TStringList; begin vCommentaire := TStringList.Create; GetMessages(vCommentaire); showMessage(vCommentaire.Text); end; Class Function TTestTask.TaskCategory():string; begin Result := 'MyCategory'; end; Class Function TTestTask.TaskFormConfiguration():string; //Class Function TaskFormConfiguration():string; begin Result := 'fwtesttaskconfiguration.dfm'; end; Function TTestTask.TaskInfos():string; begin Result := 'My task infos'; end; Function TTestTask.TaskName():string; //Function TaskName():string; begin Result := 'My Task Name'; end; Function TTestTask.TaskReference():string; //Function TaskReference():string; begin Result := CreateGUID; end; end.