Création d'une tâche configurable (Task)

De Wiki1000

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-20px.png 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-20px.png 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.
Outils personnels