Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: schmalzz am 06.03.12 - 11:11:44

Titel: Ausdruck für Suche mit db.Search funktioniert nicht
Beitrag von: schmalzz am 06.03.12 - 11:11:44
Hallo Forum,

ich habe eine Urlaubsdatenbank in der unsere User ihre Urlaubsanträge einstellen. Die zugehörige Maske heißt einfach "Urlaubsantrag".
Zusätzlich gibt es eine weitere Maske mit den User Dokumenten, "Personal" genannt. In diesen Dokumenten stehen der Urlaubsanspruch laufendes Jahr sowie ein eventueller Anspruch aus dem letzten Jahr.
Nun möchte ich in einer Ansicht den restlichen Urlaubsanspruch für das laufende Jahr darstellen. Dazu hole ich mir für jeden User die dazugehörigen Urlaubsanträge. Damit das ein bischen schneller läuft, will ich nur die Anträge aus dem laufen Jahr haben.
Folgende Formel funktioniert:
Code
suche = {Form="Urlaubsantrag" & U_MITARB="} & VornameMA & " " & NachnameMA & {"}

Ergänze ich die Formel um die Suche nach dem laufenden Jahr, bekomm ich 0 Dokumente zurück:
Code
suche = {Form="Urlaubsantrag" & @contains(U_EINSTAG; "2012") & U_MITARB="} & VornameMA & " " & NachnameMA & {"}

Kann man in dem Ausdruck für db.search keine @-Formeln verwenden?

Gruß - Markus
Titel: Re: Ausdruck für Suche mit db.Search funktioniert nicht
Beitrag von: Tode am 06.03.12 - 11:17:44
Was ist "U_EINSTAG" für ein Feld ? Wenn es ein Datumsfeld ist, dann funktioniert das so nicht.

Wenn Du Dir nicht sicher bist: die db.search- Formel ist das selbe wie eine View- Selection- Formel nur ohne "SELECT" davor...
Erstell Dir eine Ansicht mit Deiner Formel als Suchformel. Wenn die geht, dann geht es auch in db.Search...
Titel: Re: Ausdruck für Suche mit db.Search funktioniert nicht
Beitrag von: schmalzz am 06.03.12 - 11:25:56
"U_EINSTAG" ist ein Datumsfeld. Also keine Chance damit zu filtern?
Titel: Re: Ausdruck für Suche mit db.Search funktioniert nicht
Beitrag von: koehlerbv am 06.03.12 - 11:27:14
Doch, natürlich - nur musst Du das auch mit den passenden Datentypen machen. Die DesignerHelp unter @Year ist Dein Freund.

Bernhard
Titel: Re: Ausdruck für Suche mit db.Search funktioniert nicht
Beitrag von: schmalzz am 06.03.12 - 11:43:31
Hm,

wenn ich dich richtig verstehe, soll ich mit @Year mein Feld "U_EINSTAG" in eine Jahreszahl wandeln?

Also so:
Code
suche = {Form="Urlaubsantrag" & @contains(@Year(U_EINSTAG); "2012") & U_MITARB="} & VornameMA & " " & NachnameMA & {"}
Funktioniert leider nicht, auch das nicht:
Code
suche = {Form="Urlaubsantrag" & @Year(U_EINSTAG) = "2012" & U_MITARB="} & VornameMA & " " & NachnameMA & {"}

Oder meinst du das anders? Aber ich muss es ja in den Such-Ausdruck mit einbauen, anders hab ich ja keinen Zugriff auf die Felder.  :-:
Titel: Re: Ausdruck für Suche mit db.Search funktioniert nicht
Beitrag von: koehlerbv am 06.03.12 - 11:45:55
Schau Dir doch bitte die Datentypen an! Du vergleichst da gerade Äpfel mit Birnen ...
Titel: Re: Ausdruck für Suche mit db.Search funktioniert nicht
Beitrag von: umi am 06.03.12 - 11:51:56
Kleiner Tipp @Year() liefert eine Zahl, kein String..... EOM
Titel: Re: Ausdruck für Suche mit db.Search funktioniert nicht
Beitrag von: Tode am 06.03.12 - 12:01:34
Nochmal: Bevor Du Dich mit db.search rumschlägst: Mache Dir eine Ansicht mit der gewünschten Selektions- Formel und probiere so lange rum, bis die Ansicht die richtigen Dokumente zeigt (@Year(U_EINSTAG) = 2012 wäre richtig), dann musst Du nicht immer Deinen Agenten rennen lassen... und lernst eventuell noch ein wenig über Formelsprache...
Titel: Re: Ausdruck für Suche mit db.Search funktioniert nicht
Beitrag von: schmalzz am 06.03.12 - 12:05:00
Vielen Dank an euch alle für die Hinweise. Das Problem war, dass ich nicht gerafft habe, dass @Year eine Zahl liefert bzw. ich halt zwei verschiedene Datentypen verglichen habe.

Jetzt funktionierts auf alle Fälle mit @Text:
Code
suche = {Form="Urlaubsantrag" & @Text(@year(U_EINSTAG)) = "} & Jahr & {" & U_MITARB="} & VornameMA & " " & NachnameMA & {"}

Gruß - Markus
Titel: Re: Ausdruck für Suche mit db.Search funktioniert nicht
Beitrag von: Peter Klett am 06.03.12 - 12:12:43
suche = {Form="Urlaubsantrag" & @Text(@year(U_EINSTAG)) = "} & Jahr & {" & U_MITARB="} & VornameMA & " " & NachnameMA & {"}

Und ohne @Text und Jahr ohne Anführungszeichen wird es auch funktionieren, wenn Dir @Text (@Year (...)) aufgrund irgendeiner Plattformeinstellung anstelle von 2012 nur 12 zurückliefert. Wenn Du es schon als Datum hast, solltest Du es auch so verwenden.
Titel: Re: Ausdruck für Suche mit db.Search funktioniert nicht
Beitrag von: schmalzz am 06.03.12 - 13:50:44
Das "Jahr" kommt von folgender Zeile:

Code
	'----- Aktuelles Jahr ermitteln
	Jahr = Year(Today())

Ich dachte, es geht halt schneller wenn er nicht bei jedem zu prüfendem Dokument das aktuelle Jahr immer wieder ermitteln muss. Probiert hab ich den Unterschied allerdings nicht.

Markus
Titel: Re: Ausdruck für Suche mit db.Search funktioniert nicht
Beitrag von: koehlerbv am 06.03.12 - 14:12:58
Hier sind schon wieder die Datentypen verwurschtelt, das Ergebnis passt nur zufällig, weil in diesem Kontext die Stringzuweisung "suche = " die Variable Jahr (Integer!) zu einem String konvertiert (in anderen Konstellationen kann das auch fix zu einem Runtime-Error führen.

Sauber wäre
@Year (U_EINSTAG) = @Year (@Today))

Also: Immer schön sauber bleiben  ;)

Bernhard
Titel: Re: Ausdruck für Suche mit db.Search funktioniert nicht
Beitrag von: schmalzz am 06.03.12 - 15:10:42
Ich gelobe Besserung!  ;)

Markus