Processus pour la ComboBox

De Wiki1000
Version du 4 novembre 2017 à 09:30 par Syfre (discuter | contributions)
(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

Sommaire

Introduction

Les processus ComboBox permet d'enrichir les fonctionnalités du produit quand c'est vraiment nécessaire.

Il suffit de disposer d'un écran et d'un processus qui sera le datasource qui gérera le traitement.

On notera qu'actuellement les arguments de l'écran ne sont pas évalués : il est donc inutile de les employer.

Déclaration de la fonction getSelectedOID qui retournera l'oid de l'objet sélectionné

Cette fonction publique est optionnelle, mais prioritaire quand elle est renseignée.

Function getSelectedOID():String;

Déclaration du rôle de navigation oidObjetSelectionne

Ce rôle est également optionnel et sert en second plan lorsque l'on n'a pas défini la fonction publique getSelectedOID.

Processus de traitement

Généralement, ce traitement créé une liste de vue représentant le combo lors du chargement.

Cette liste peut ensuite être accessible via un NDS depuis le data source du processus, que l'on utilise dans une grille pour la sélection.

A charge au processus d'entretenir le rôle optionnel oidObjetSelectionne de l'objet sélectionné afin de connaître la position.

Notons que sur ce processus, on devra spécifier au moins une fonction ou un rôle de navigation pour pouvoir obtenir l'oid de l'objet.

Les outils utilisent la fonction getSelectedOID pour obtenir un oid

Dans ce cas, la méthode peut faire ce qu'elle désire avant de rendre la main, y compris créée, modifier l'objet, ou retourner un oid vide.

Attention dans ce cas à ce que le contexte de transaction soit bien isolé.

Les outils utilisent l'attribut oidObjetSelectionne pour obtenir un oid

Si le rôle est renseigné, les outils connaissent l'oid de l'objet correspondant.

Exemple

//Function getSelectedOID():String;
//Cette méthode est identifiée par les outils et récupère l'oid
var
 vObjetCourant : TCCBS_ObjetReplique;
begin
 if Assigned(objetSelectionne) then
 begin
   try
     vObjetCourant := ClassManager.FindObject(nomClasse,'(id=%1)','',false,[ObjetSelectionne.id]);
 
     WithP Private transaction do
     Begin
       if not Assigned(vObjetCourant) then
       begin //pas trouvé : il faut créer
         vObjetCourant := ClassManager.CreateInstance(nomClasse) AS TCCBS_ObjetReplique;
         vObjetCourant.id := ObjetSelectionne.id;
       end;
 
       //trouvé mais je mets à jour le code qui peut avoir changé
       vObjetCourant.caption := ObjetSelectionne.libelle;
       ActualiserDonneesComplementaires(vObjetCourant, ObjetSelectionne);
     End;
 
   except;
     raise;
   end;
    Result := vObjetCourant.oid;
 end else
    Result := '';
end;

Code métierDéveloppement DSM

Outils personnels