Aggiunta/modifica dei campi di ricerca automatica
Nota: quanto riportato di seguito si applica solo ai report personalizzati (non ai report standard che utilizzano la modalità "Progettazione")
I valori predefiniti dei campi della pipeline di dati di AutoSearch possono essere configurati tramite il codice della scheda Calc. Per farlo, innanzitutto assicurati che il campo sia impostato su AutoSearch = True nella scheda Dati, poi vai alla scheda Calc, seleziona l'oggetto Report principale nella struttura ad albero e crea un evento su ReportBeforeAutoSearchDialogCreate. Di seguito è riportato un codice di esempio, seguito da una spiegazione:
var
ppTemp : TppAutoSearchField;
begin
ppTemp := Report.AutoSearchCriteriaByName('EVENTS', 'COMPANY');
if ppTemp <> nil then
begin
ppTemp.SearchExpression := 'ABC COMPANY';
end;
se ReplaceSpecialFields('!PROFILE!') = 'Amministratore di sistema' 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;
Il codice sopra riportato presuppone che nella scheda Dati della pipeline della tabella EVENTS siano stati configurati tre campi come campi di ricerca automatica: COMPANY, DEPARTMENT ed EVENT_DATE. Questo codice imposta nuovi valori predefiniti per tutti e 3 i campi di ricerca automatica. La prima sezione del codice verifica la presenza di un campo di ricerca automatica denominato «COMPANY» nella pipeline «EVENTS». Il valore viene quindi impostato su «ABC COMPANY». Certo, in questo caso il valore «ABC COMPANY» avrebbe potuto essere impostato come predefinito direttamente nella scheda Dati. Tuttavia, spesso è utile impostare un valore "predefinito" per i campi di ricerca automatica nella scheda Dati, in modo da garantire all'utente che eventuali chiamate iniziali volte ad attivare questa pipeline PRIMA della finestra di dialogo di ricerca automatica non restituiscano molti (o nessun) record. Quindi la scheda "Calc" è il posto giusto per assicurarsi che l'impostazione predefinita sia riportata a un valore appropriato.
Nella seconda sezione del codice, il campo «DEPARTMENT» viene modificato rispetto al suo valore predefinito nel filtro, ma solo quando il report viene eseguito da un «amministratore di sistema». Il valore predefinito del filtro per «DEPARTMENT», così come impostato nella scheda Dati, è «= DEPT3». Di norma questa è una buona impostazione predefinita, ma se a generare il report è un «amministratore di sistema», questi deve solitamente includere più reparti contemporaneamente, pertanto l'impostazione predefinita dovrebbe prevedere l'inclusione di tutti e tre. Si noti quindi che, innanzitutto, l'operatore di ricerca è stato modificato in soInList (rispetto all'impostazione predefinita soEqual [=] nella scheda Dati). È raro dover modificare il SearchOperator nel codice della scheda Calc, ma, se necessario, questi sono i valori ammessi:
soEqual = Il valore del campo deve corrispondere al valore di ricerca.
soNotEqual = Il valore del campo non deve corrispondere al valore di ricerca.
soLessThan = Il valore del campo deve essere inferiore al valore di ricerca.
soLessThanOrEqualTo = Il valore del campo deve essere minore o uguale al valore di ricerca.
soGreaterThan = Il valore del campo deve essere maggiore del valore di ricerca.
soGreaterThanOrEqualTo = Il valore del campo deve essere maggiore o uguale al valore di ricerca.
soLike = Il valore del campo deve iniziare con il valore di ricerca. Alla fine del valore dei criteri di ricerca che utilizza questo operatore viene automaticamente aggiunto un carattere jolly, che lo fa funzionare come un "inizia con".
soNotLike = Il valore del campo non deve iniziare con il valore di ricerca.
soBetween = Il valore del campo deve rientrare nell'intervallo compreso tra i due valori dei criteri di ricerca.
soNotBetween = Il valore del campo non deve trovarsi tra i due valori dei criteri di ricerca.
soInList = Il valore del campo deve essere presente nell'elenco dei valori di ricerca.
soNotInList = Il valore del campo non deve comparire nell'elenco dei valori di ricerca.
soBlank = Il valore del campo deve essere nullo. (Per questo operatore non è richiesto alcun valore di ricerca.)
soNotBlank = Il valore del campo non deve essere nullo. (Per questo operatore non è necessario specificare alcun valore di ricerca.)
In seguito, in questo secondo esempio, l'espressione di ricerca è impostata su «DEPT1, DEPT2, DEPT3». Poiché l'operatore di ricerca è ora "soInList", l'espressione di ricerca accetta un elenco di valori separati da virgole.
Infine, impostiamo dinamicamente le due date che definiscono un intervallo di tempo. Quando si imposta il valore predefinito del filtro nella scheda Dati, è raro che gli utenti conoscano le date predefinite più appropriate, poiché, in genere, tali date sono relative alla data di esecuzione del report. In questo esempio si presume che il campo EVENT_DATE sia impostato come "soBetween" ['Between'] nella scheda Dati. Quindi, in questo caso, l'espressione di ricerca richiederà anche un elenco delle due date, separate da una virgola: la data "da" e la data "a". Utilizza la funzione DateToStr per convertire le date in valori di tipo stringa (testo). Dai un'occhiata alla finestra "Code Toolbox" (in basso a destra)... nella sezione "Language" per scoprire altre funzioni utili come CurrentDate.
Di seguito è riportato un secondo esempio in cui il campo EVENT_DATE viene impostato di default su tutti gli eventi del mese corrente:
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;
È inoltre possibile creare criteri di ricerca automatica completamente nuovi nel codice della scheda Calc (anziché limitarsi a modificare i valori dei campi di ricerca automatica esistenti). Di seguito è riportato un esempio che, a seconda dei casi, aggiunge i nuovi criteri o modifica quelli esistenti:
ppTemp := Report.AutoSearchCriteriaByName('EVENTS', 'COMPANY');
if ppTemp = nil then
Report.CreateAutoSearchCriteria('EVENTS', 'COMPANY', soEqual, 'ABC COMPANY', False)else
ppTemp.SearchExpression := 'ABC COMPANY';
La procedura Report.CreateAutoSearchCriteria accetta cinque parametri:
1.nome della pipeline
e 2.nome del campo (ometti eventuali qualificatori del nome della tabella come «GAGES.» o «EVENTS.», ecc.)
3.il tipo di confronto – consultare l'elenco sopra riportato per i possibili valori
4.valore predefinito per il filtro AutoSearch; è consentito lasciare vuoti i campi di testo
5.Se il filtro AutoSearch è obbligatorio: inserire True o False
Nota: Se è possibile utilizzare il codice della scheda Calc per impostare completamente i valori di tutti i campi di ricerca automatica e si è certi che gli utenti finali non avranno bisogno di modificarli nella finestra di dialogo di ricerca automatica (o non dovrebbero essere autorizzati a modificarli), allora è possibile disabilitare questa finestra di dialogo di ricerca automatica proprio prima che venga visualizzata. Basta aggiungere la riga di codice riportata di seguito in un punto qualsiasi dello stesso evento ReportBeforeAutoSearchDialogCreate descritto in precedenza:
Report.ShowAutoSearchDialog := False; |