Ajouter/modifier des champs de recherche automatique
Remarque : les informations ci-dessous s'appliquent uniquement aux rapports personnalisés (et non aux rapports standard qui utilisent le mode « Conception »).
Les valeurs par défaut des champs du pipeline de données AutoSearch peuvent être configurées via le code de l'onglet « Calc ». Pour ce faire, assurez-vous d'abord que le champ est configuré avec AutoSearch = True dans l'onglet « Données », puis rendez-vous dans l'onglet « Calcul », sélectionnez l'objet « Rapport » situé tout en haut de l'arborescence et créez un événement sur ReportBeforeAutoSearchDialogCreate. Voici un exemple de code, suivi d'une explication :
var
ppTemp : TppAutoSearchField;
begin
ppTemp := Report.AutoSearchCriteriaByName('EVENTS', 'COMPANY');
if ppTemp <> nil then
begin
ppTemp.SearchExpression := 'ABC COMPANY';
end;
si ReplaceSpecialFields('!PROFILE!') = 'Administrateur système' then
begin
ppTemp := Report.AutoSearchCriteriaByName('EVENTS', 'DEPARTMENT');
if ppTemp <> nil then
begin
ppTemp.SearchOperator := soInList;
ppTemp.SearchExpression := 'DEPT1,DEPT2,DEPT3';
end;
end;
ppTemp := Report.AutoSearchCriteriaByName('EVENTS', 'EVENT_DATE');
if ppTemp <> nil then
begin
ppTemp.SearchExpression := DateToStr(CurrentDate - 7) + ',' + DateToStr(CurrentDate);
end;
end;
Le code ci-dessus part du principe que trois champs sont configurés comme champs de recherche automatique dans l'onglet « Données » du pipeline de la table EVENTS : COMPANY, DEPARTMENT et EVENT_DATE. Ce code définit de nouvelles valeurs par défaut pour les trois champs de recherche automatique. La première section du code recherche un champ de recherche automatique existant dans le pipeline « EVENTS » nommé « COMPANY ». La valeur est alors définie sur « ABC COMPANY ». Certes, dans ce cas précis, la valeur « ABC COMPANY » aurait pu être définie comme valeur par défaut directement dans l'onglet Données. Mais il est souvent utile de définir une valeur « par défaut » pour les champs de recherche automatique dans l'onglet « Données », afin de garantir à l'utilisateur que les premiers appels visant à activer ce pipeline AVANT l'ouverture de la boîte de dialogue de recherche automatique ne renverront pas beaucoup (voire aucun) d'enregistrements. L'onglet « Calc » est donc l'endroit idéal pour s'assurer que la valeur par défaut a bien été rétablie à un niveau approprié.
Dans la deuxième section du code, la valeur par défaut du champ « DEPARTMENT » est modifiée, mais uniquement lorsque le rapport est exécuté par un « administrateur système ». La valeur de filtre par défaut pour « DEPARTMENT », telle qu'elle est définie dans l'onglet « Données », est « = DEPT3 ». C'est généralement un bon choix par défaut, mais si c'est un « administrateur système » qui génère le rapport, il doit souvent rendre compte de plusieurs services à la fois, et le réglage par défaut devrait être d'inclure les trois. Notez donc tout d'abord que l'opérateur de recherche a été remplacé par « soInList » (au lieu de la valeur par défaut « soEqual [=] » définie dans l'onglet « Données »). Il est rare de devoir modifier l'opérateur de recherche dans le code de l'onglet « Calc », mais si cela s'avère nécessaire, voici les valeurs autorisées :
soEqual = La valeur du champ doit correspondre à la valeur de recherche.
soNotEqual = La valeur du champ ne doit pas correspondre à la valeur de recherche.
soLessThan = La valeur du champ doit être inférieure à la valeur de recherche.
soLessThanOrEqualTo = La valeur du champ doit être inférieure ou égale à la valeur de recherche.
soGreaterThan = La valeur du champ doit être supérieure à la valeur de recherche.
soGreaterThanOrEqualTo = La valeur du champ doit être supérieure ou égale à la valeur de recherche.
soLike = La valeur du champ doit commencer par la valeur recherchée. Un caractère générique est automatiquement ajouté à la fin de la valeur du critère de recherche qui utilise cet opérateur, ce qui lui confère la fonction « commence par ».
soNotLike = La valeur du champ ne doit pas commencer par la valeur de recherche.
soBetween = La valeur du champ doit se situer entre les deux valeurs des critères de recherche.
soNotBetween = La valeur du champ ne doit pas se situer entre les deux valeurs des critères de recherche.
soInList = La valeur du champ doit figurer dans la liste des valeurs de recherche.
soNotInList = La valeur du champ ne doit pas figurer dans la liste des valeurs de recherche.
soBlank = La valeur du champ doit être nulle. (Aucune valeur de recherche n'est requise pour cet opérateur.)
soNotBlank = La valeur du champ ne doit pas être nulle. (Aucune valeur de recherche n'est requise pour cet opérateur.)
Dans ce deuxième exemple, l'expression de recherche est définie sur « DEPT1, DEPT2, DEPT3 ». Étant donné que l'opérateur de recherche est désormais « soInList », l'expression de recherche accepte une liste de valeurs séparées par des virgules.
Enfin, nous définissons dynamiquement les deux dates pour une plage de dates. Lors de la configuration de la valeur par défaut du filtre dans l'onglet « Données », il est rare que les utilisateurs connaissent les dates par défaut les plus appropriées, car celles-ci sont généralement liées à la date à laquelle le rapport est généré. Cet exemple part du principe que le champ EVENT_DATE est configuré comme « soBetween ['Between'] » dans l'onglet « Données ». Dans ce cas, l'expression de recherche devra donc également comporter une liste des deux dates, séparées par une virgule : la date de début et la date de fin. Utilisez la fonction DateToStr pour convertir les dates en chaînes de caractères (valeurs textuelles). Consultez la fenêtre « Code Toolbox » (en bas à droite)... dans la section « Language » pour découvrir d'autres fonctions utiles telles que CurrentDate.
Voici un deuxième exemple qui définit par défaut la valeur du champ EVENT_DATE sur tous les événements du mois en cours :
var
ppTemp : TppAutoSearchField;
iYear, iMonth, iDay, iToYear, iToMonth : Integer;
begin
ppTemp := Report.AutoSearchCriteriaByName('EVENTEQUIP', 'EVENT_DATE');
if ppTemp <> nil then
begin
DecodeDate(CurrentDate, iYear, iMonth, iDay);
if iMonth = 12 then
begin
iToMonth := 1;
iToYear := iYear + 1;
end else
begin
iToMonth := iMonth + 1;
iToYear := iYear;
end;
ppTemp.SearchExpression := DateToStr(EncodeDate(iYear, iMonth, 1)) + ',' +
DateToStr(EncodeDate(iToYear, iToMonth, 1));
end;
end;
Il est également possible de créer des critères de recherche automatique entièrement nouveaux dans le code de l'onglet « Calc » (plutôt que de se contenter de modifier les valeurs des champs de recherche automatique existants). Voici un exemple qui permet soit d'ajouter de nouveaux critères, soit de modifier les critères existants, selon le cas :
ppTemp := Report.AutoSearchCriteriaByName('EVENTS', 'COMPANY');
if ppTemp = nil then
Report.CreateAutoSearchCriteria('EVENTS', 'COMPANY', soEqual, 'ABC COMPANY', False) else
ppTemp.SearchExpression := 'ABC COMPANY';
La procédure Report.CreateAutoSearchCriteria prend cinq paramètres :
1.nom du pipeline
2.nom du champ (sans les préfixes de table tels que « GAGES. » ou « EVENTS. », etc.)
3.le type de comparaison – voir la liste ci-dessus pour les valeurs possibles :
4.Valeur par défaut pour le filtre AutoSearch ; les champs de texte peuvent rester vides
5.Indiquez si le filtre AutoSearch est obligatoire : saisissez « True » ou « False »
Remarque : Si vous pouvez utiliser le code de l'onglet « Calc » pour définir intégralement les valeurs de tous les champs de la recherche automatique et que vous êtes certain que les utilisateurs finaux n'auront pas besoin de les modifier dans la boîte de dialogue de recherche automatique (ou ne doivent pas être autorisés à les modifier), il est alors possible de désactiver cette boîte de dialogue juste avant qu'elle ne s'affiche. Il suffit d'ajouter la ligne de code ci-dessous à un endroit quelconque de l'événement ReportBeforeAutoSearchDialogCreate évoqué plus haut :
Report.ShowAutoSearchDialog := False; |