Felder für die automatische Suche hinzufügen/bearbeiten
Hinweis: Der folgende Abschnitt gilt nur für benutzerdefinierte Berichte (nicht für Standardberichte, die den „Entwurfsmodus“ verwenden).
Die Standardwerte für Felder der AutoSearch-Datenpipeline können über den Code auf der Registerkarte „Calc“ konfiguriert werden. Stellen Sie dazu zunächst sicher, dass das Feld auf der Registerkarte „Daten“ auf „AutoSearch = True“ eingestellt ist. Wechseln Sie anschließend zur Registerkarte „Calc“, wählen Sie das oberste Berichtsobjekt in der Gliederungsstruktur aus und erstellen Sie ein Ereignis für „ReportBeforeAutoSearchDialogCreate“. Nachfolgend finden Sie einen Beispielcode, gefolgt von einer Erläuterung:
var
ppTemp : TppAutoSearchField;
begin
ppTemp := Report.AutoSearchCriteriaByName('EVENTS', 'COMPANY');
if ppTemp <> nil then
begin
ppTemp.SearchExpression := 'ABC COMPANY';
end;
wenn ReplaceSpecialFields('!PROFILE!') = 'Systemadministrator' 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;
Der obige Code setzt voraus, dass auf der Registerkarte „Daten“ der Pipeline für die Tabelle „EVENTS“ drei Felder als AutoSearch-Felder eingerichtet sind: COMPANY, DEPARTMENT und EVENT_DATE. Dieser Code legt neue Standardwerte für alle drei AutoSearch-Felder fest. Der erste Abschnitt des Codes sucht in der Pipeline „EVENTS“ nach einem vorhandenen Feld für die automatische Suche mit dem Namen „COMPANY“. Der Wert wird dann auf „ABC COMPANY“ gesetzt. Zugegeben, in diesem Fall hätte der Wert „ABC COMPANY“ direkt auf der Registerkarte „Daten“ als Standardwert festgelegt werden können. Es ist jedoch oft hilfreich, auf der Registerkarte „Daten“ einen „Standardwert“ für AutoSearch-Felder festzulegen, der dem Benutzer die Gewissheit gibt, dass erste Aufrufe zur Aktivierung dieser Pipeline VOR dem AutoSearch-Dialogfeld nicht viele (oder gar keine) Datensätze zurückgeben. Die Registerkarte „Calc“ ist also ein guter Ort, um sicherzustellen, dass der Standardwert wieder auf einen angemessenen Wert zurückgesetzt wird.
Im zweiten Codeabschnitt wird der Standardfilterwert des Felds „DEPARTMENT“ geändert, jedoch nur, wenn der Bericht von einem „Systemadministrator“ ausgeführt wird. Der auf der Registerkarte „Daten“ festgelegte Standardfilterwert für „DEPARTMENT“ lautet „= DEPT3“. Dies ist in der Regel eine gute Standardeinstellung, doch wenn ein „Systemadministrator“ den Bericht erstellt, muss er meist mehrere Abteilungen gleichzeitig erfassen, weshalb standardmäßig alle drei Abteilungen einbezogen werden sollten. Beachten Sie also zunächst, dass der Suchoperator auf „soInList“ geändert wurde (von der Standardeinstellung „soEqual [=]“ auf der Registerkarte „Daten“). Es kommt selten vor, dass man den Suchoperator im Code der Registerkarte „Calc“ ändern muss, doch falls erforderlich, sind dies die zulässigen Werte:
soEqual = Der Feldwert muss mit dem Suchwert übereinstimmen.
soNotEqual = Der Feldwert darf nicht mit dem Suchwert übereinstimmen.
soLessThan = Der Feldwert muss kleiner sein als der Suchwert.
soLessThanOrEqualTo = Der Feldwert muss kleiner oder gleich dem Suchwert sein.
soGreaterThan = Der Feldwert muss größer sein als der Suchwert.
soGreaterThanOrEqualTo = Der Feldwert muss größer oder gleich dem Suchwert sein.
soLike = Der Feldwert muss mit dem Suchbegriff beginnen. Am Ende des Suchkriteriums, das diesen Operator verwendet, wird automatisch ein Platzhalter eingefügt, sodass es wie eine „Beginnt mit“-Suche funktioniert.
soNotLike = Der Feldwert darf nicht mit dem Suchwert beginnen.
soBetween = Der Feldwert muss zwischen den beiden Suchkriterienwerten liegen.
soNotBetween = Der Feldwert darf nicht zwischen den beiden Suchkriterienwerten liegen.
soInList = Der Feldwert muss in der Liste der Suchwerte enthalten sein.
soNotInList = Der Feldwert darf nicht in der Liste der Suchwerte vorkommen.
soBlank = Der Feldwert muss null sein. (Für diesen Operator ist kein Suchwert erforderlich.)
soNotBlank = Der Feldwert darf nicht null sein. (Für diesen Operator ist kein Suchwert erforderlich.)
Als Nächstes wird in diesem zweiten Beispiel der Suchausdruck auf „DEPT1, DEPT2, DEPT3“ gesetzt. Da der Suchoperator nun „soInList“ lautet, akzeptiert der Suchausdruck eine durch Kommas getrennte Auflistung von Werten.
Schließlich legen wir die beiden Daten für einen Datumsbereich dynamisch fest. Bei der Festlegung des Standardfilters „Wert“ auf der Registerkarte „Daten“ ist es eher ungewöhnlich bzw. unwahrscheinlich, dass Benutzer die optimalen Standarddaten kennen – da sich diese Daten in der Regel auf das Datum beziehen, an dem der Bericht ausgeführt wird. In diesem Beispiel wird davon ausgegangen, dass das Feld EVENT_DATE auf der Registerkarte „Daten“ als „soBetween ['Between']“ eingerichtet ist. In diesem Fall muss der Suchausdruck also ebenfalls eine durch Kommas getrennte Auflistung der beiden Daten enthalten – das „von“- und das „bis“-Datum. Verwenden Sie die Funktion DateToStr, um Datumsangaben in Zeichenfolgen (Textwerte) umzuwandeln. Sehen Sie sich das Fenster „Code Toolbox“ (unten rechts) an … im Abschnitt „Sprache“, um sich an weitere nützliche Funktionen wie „CurrentDate“ zu erinnern.
Nachfolgend finden Sie ein zweites Beispiel, bei dem das Feld EVENT_DATE standardmäßig auf alle Ereignisse des aktuellen Monats gesetzt wird:
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;
Es ist auch möglich, im Code der Registerkarte „Calc“ völlig neue AutoSearch-Kriterien zu erstellen (anstatt lediglich die Werte bestehender AutoSearch-Felder zu ändern). Nachfolgend finden Sie ein Beispiel, bei dem je nach Bedarf entweder neue Kriterien hinzugefügt oder bestehende Kriterien geändert werden:
ppTemp := Report.AutoSearchCriteriaByName('EVENTS', 'COMPANY');
if ppTemp = nil then
Report.CreateAutoSearchCriteria('EVENTS', 'COMPANY', soEqual, 'ABC COMPANY', False)else
ppTemp.SearchExpression := 'ABC COMPANY';
Die Prozedur „Report.CreateAutoSearchCriteria“ benötigt fünf Parameter:
1.Name der Pipeline
. 2.Name des Feldes (ohne Tabellenbezeichnungen wie „GAGES.“ oder „EVENTS.“ usw.)
3.der Vergleichstyp – mögliche Werte finden Sie in der obigen Liste unter
4.Standardwert für den AutoSearch-Filter; leere Werte in Textfeldern sind zulässig
5.Gibt es eine Verpflichtung zur Verwendung des AutoSearch-Filters? – Geben Sie entweder „True“ oder „False“ ein
Hinweis: Wenn Sie die Werte für alle AutoSearch-Felder vollständig über den Code der Registerkarte „Calc“ festlegen können und sicher sind, dass Endbenutzer diese im AutoSearch-Dialogfeld nicht ändern müssen (oder nicht ändern dürfen), können Sie dieses AutoSearch-Dialogfeld unmittelbar vor seinem Aufruf deaktivieren. Fügen Sie einfach die folgende Codezeile an einer beliebigen Stelle innerhalb des oben beschriebenen „ReportBeforeAutoSearchDialogCreate“-Ereignisses ein:
Report.ShowAutoSearchDialog := False; |