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 :
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.