Création d'une tâche configurable (Task)
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 :
<source lang="delphi"> unit TestSYFREWF; interface
Type
TTestTask = Class(TitTask,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. </source>