RegisterSearchKey (MM)
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 : 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 :