RegisterSearchKey (MM)

De Wiki1000
Version du 11 juillet 2022 à 07:48 par Syfre (discuter | contributions)
(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

Version1000-32x32.png

function RegisterSearchKey(iWeight:Integer; const iClassName:string; const iProperty:string; const iFormName:string):TSearchKey;

Cette méthode enregistre une clé de recherche globale.

A partir de la version 10 cette méthode retourne un objet permettant de configurer la clé de recherche

iWeight Poids de la clé dans la recherche
iClassName Nom de la classe sur lequel porte la recherche
iProperty Attribut de recherche
iFormName Nom de l'interface a ouvrir lorsque l'utilisateur sélectionne le résultat. Optionnel : La classe iClassName doit être renseignée au niveau de l'écran qui devra être ouvert et être unique pour le métier chargé car c'est le 1er écran disponible qui sera utilisé. Attention de bien prendre en compte le fait que l'écran est ouvert sur une instance de iClassName.
Result Un objet de type TSearchKey
Tip-20px.png Tip : Enregistrez les clés de recherche dans les procédures d'initialisation des paquets, qui sont appelés à chaque chargement des applications.

Recherche sur une classe de base

iFormName peut définir plusieurs écrans suivant la classe actuelle de l'objet retourné. Ceci peut être utile si la clé de recherche est définie sur une classe de base et que les objets retrouvés le sont dans des classes dérivées.

Dans ce cas définissez iFormName sous la forme de couple "classe:forme" séparés par des ; :

  class1:form;class2:form2;...;default_form

Exemple :

Ajouter des colonnes supplémentaires dans la recherche :

//procedure Initialize;
var sk:TSearchKey;
 
 function _FormOfClass(const iClass:string):string;
 begin
   Result := iClass+':'+TFacadeModel.FindFormOfClass(iClass)+';'; 
 end; 
 
begin
 sk := ModelManager.RegisterSearchKey(10,
   'TPieceTaxable',
   'noPiece,totalHT,datePiece,referencePiece,referenceExterne,RoleTiersFacture.+Tiers.Code,RoleTiersFacture.+Tiers.Caption',
   _FormOfClass('TPieceVente')+
   _FormOfClass('TPieceAchat')+
   _FormOfClass('TPieceDevis')+
   _FormOfClass('TPieceAbonnementVente')+
   _FormOfClass('TPieceAbonnementAchat')+
   _FormOfClass('TPieceFacturationVente')+
   _FormOfClass('TPieceFacturationAchat')
   );
 sk.Limits := 20; 
 sk.ExtraNames := 'totalHT:CodeDevise'; 
 sk.ExtraColumns := 't0.estAvoir as estAvoir'; 
end;

Formatter le résultat :

//procedure Initialize;
var sk:TSearchKey;
 
 function _FormOfClass(const iClass:string):string;
 begin
   Result := iClass+':'+TFacadeModel.FindFormOfClass(iClass)+';'; 
 end; 
 
begin
 sk := ModelManager.RegisterSearchKey(10,
   'TPieceTaxable',
   'noPiece,totalHT,datePiece,referencePiece,referenceExterne,RoleTiersFacture.+Tiers.Code,RoleTiersFacture.+Tiers.Caption',
   _FormOfClass('TPieceVente')+
   _FormOfClass('TPieceAchat')+
   _FormOfClass('TPieceDevis')+
   _FormOfClass('TPieceAbonnementVente')+
   _FormOfClass('TPieceAbonnementAchat')+
   _FormOfClass('TPieceFacturationVente')+
   _FormOfClass('TPieceFacturationAchat')
   );
 sk.Limits := 20; 
 sk.ExtraNames := 'totalHT:CodeDevise'; 
 sk.ExtraColumns := 't0.estAvoir as estAvoir'; 
 sk.FormatValue := '@ClassLabel@ @noPiece@ du @datePiece@ pour @RoleTiersFacture.+Tiers.Caption@ de @totalHT@ (@totalHT:CodeDevise@ HT)'; 
 sk.FormatCaption := '@ClassLabel@ @noPiece@'; 
end;

Définir l'identifiant principal de la clé de recherche :

//procedure Initialize;
var sk:TSearchKey;
begin
  sk := ModelManager.RegisterSearchKey(10,'TEcriture','Caption,eDate,montant,numero',TFacadeModel.FindFormOfClass('TEcriture'));
  sk.ExtraNames := 'compteGeneral.codeCompte,piece.numero,piece.journal.code,piece.Etablissement.code,piece.TypePiece.code,montant:CodeDevise,oidpiece';
  sk.FormatValue := _TP('Ecriture #@numero@ piece #@piece.numero@ sur le compte @compteGeneral.codeCompte@ (@piece.journal.code@/@piece.Etablissement.code@) du @eDate@ de @montant@ (@montant:CodeDevise@)'); 
  sk.FormPropOID := 'oidpiece';
end;

Définir l'ordre de tri de la clé de recherche :

//procedure Initialize;
var sk:TSearchKey; AStr:string; 
 
 function _FormOfClass(const iClass:string):string;
 begin
   Result := iClass+':'+TFacadeModel.FindFormOfClass(iClass)+';'; 
 end; 
 
begin
  sk := ModelManager.RegisterSearchKey(10,'TRoleTiers',
    'Caption,Tiers.code,Tiers.caption,Tiers.raisonsociale,SitePrivilegie.Adresse.codePostal,SitePrivilegie.Adresse.ville,SitePrivilegie.Adresse.telephone1',
    _FormOfClass('TClient')+
    _FormOfClass('TFournisseur')+
    _FormOfClass('TSalarie')+
    _FormOfClass('TTiersDivers')+
    _FormOfClass('TTransporteur')+
    _FormOfClass('TIntraGroupe')
  ); 
  sk.Limits := 20; 
  sk.ExtraNames := 'SitePrivilegie.Adresse.nomRueVoie';
  sk.FormatValue := _TP('@Tiers.code@ @Tiers.RaisonSociale@ @SitePrivilegie.Adresse.nomRueVoie@ @SitePrivilegie.Adresse.codePostal@ @SitePrivilegie.Adresse.ville@ @SitePrivilegie.Adresse.telephone1@'); 
  sk.OrderBy := 'Tiers.code'; 
end;

Définir une clé sur une donnée personnelle :

//procedure Initialize;
var sk:TSearchKey;
begin
  sk := ModelManager.RegisterSearchKey(10,'TPersonne','nom,prenom,telephone,email',TFacadeModel.FindFormOfClass('TPersonne'));
  sk.IsPersonalData := True; 
end;

Ajouter une action sur une clé de recherche :

P//procedure Initialize;
var sk:TSearchKey; 
 
 function _FormOfClass(const iClass:string):string;
 begin
   Result := iClass+':'+TFacadeModel.FindFormOfClass(iClass)+';'; 
 end; 
 
begin
  sk := ModelManager.RegisterSearchKey(10,'TProduitCommercial',
    'code,Caption,codeBarre,Produit.code,Produit.Caption',
    _FormOfClass('TProduitAchat')+
    _FormOfClass('TProduitVente')
    );
  //
  if TFacadeModel.hasSales() or TFacadeModel.hasPurchases() then
  begin
    sk.AfterCode := 
      'begin '+
      ' if (ClassName=''TProduitAchat'')or(ClassName=''TProduitVente'') then'+
      '  begin '+
      '    AddAction(sapRight,satOpenPanel,_TP(''Voir les commandes''),''search'',''actionProductOrderLines'');'+ 
      '  end; '+ 
      'end;';
  end; 
end;

Voir aussi :


ModelManager_(code)Développement DSM

Outils personnels