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