Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: schmidti88 am 24.02.09 - 09:41:10

Titel: Wert in Maske nur dann anzeigen, wenn true
Beitrag von: schmidti88 am 24.02.09 - 09:41:10
Hallo!
Bin nun schon um einiges weiter gekommen in meiner Geburtstagsdatenbank!

Möchte nun noch eine Ansicht haben, in der nur dann die Werte drin stehen, wenn der Anweder auch wirklich Geburtstag hat!

Dazu habe ich mir eine neue Ansicht gebaut!
2 Spalten mit Name und Geburtstag!

Dann habe ich Ansichtsauswahl folgende Formel nach Anleitung von http://atnotes.de/index.php/topic,18203.0.html (http://atnotes.de/index.php/topic,18203.0.html) eingebaut!

Trotz allem funktioniert es leider nicht!

Meine Formel lautet:
Code
SELECT ((Form = "Geburtstag"));
Code
_anzeigen := @False;
_verbergen := @True;
@If(
   @Day(GeburtstagDatum)=@Day(@Now))&((@Month(GeburtstagDatum)=@Month(GeburtstagDatum)=@Month(@Now)); _anzeigen;
  _verbergen
)


Könnt ihr mir bitte nochmal helfen? Wäre sehr nett?
Titel: Re: Wert in Maske nur dann anzeigen, wenn true
Beitrag von: m3 am 24.02.09 - 09:43:06
WAS funktioniert nicht?
http://www.tty1.net/smart-questions_de.html#chronology
Titel: Re: Wert in Maske nur dann anzeigen, wenn true
Beitrag von: schmidti88 am 24.02.09 - 09:45:52
sry, dass ich schon wieder was vergessen habe :(

also funktionieren tut folgendes nicht:
in der anzeige wird trotz oben genannter formel alle einträge angezeigt!
- normalerweise dürfte er nur max mustermann anzeigen, der am 24.02. geburtstag hat!
- nicht aber martina mustermann, denn die hat am 24.08. geburtstag
- oder manuela mustermann, denn der habe ich den 11.11 als geburtstag gegeben!

Habe also 3 Beispiele in meiner Datenbank!
nur 1x davon darf heute angezeigt werden!
Titel: Re: Wert in Maske nur dann anzeigen, wenn true
Beitrag von: Felix Ziegler am 24.02.09 - 10:00:25
ohne die Formel ein wenig zu "pimpen" ... und ohne das Jahr zu berücksichtigen...

Code
SELECT @if(
  (Form = "Geburtstag") &
  (@Day(GeburtstagDatum)=@Day(@Now)) &
  (@Month(GeburtstagDatum)=@Month(@Now)) ; @True
  @False
);
Titel: Re: Wert in Maske nur dann anzeigen, wenn true
Beitrag von: Axel am 24.02.09 - 10:04:23
Das wirst du so nur bedingt geregelt bekommen, denn was du brauchst ist eine "dynamische" Ansicht und eben genau das kann Notes nicht.

Eine saubere Alternative auf die Schnelle wäre folgendes: Du baust die einen periodischen Agenten der einmal am Tag (z.B. um 3:00 Uhr) alle Dokumente durchgeht und bei den heutigen Geburtstagkindern ein verstecktes Feld (waqs da z.B. HeuteGeburtstag heisst) auf 1 setzt. Diese Feld wertest du in deiner Ansichtenformel aus.

So z.B.  SELECT Form = "Geburtstag" & HeuteGeburtstag = 1;

Axel

Titel: Re: Wert in Maske nur dann anzeigen, wenn true
Beitrag von: schmidti88 am 24.02.09 - 10:07:39
hhm, sry! verstehe ich so nicht ganz!
ok, das mit dem agenten und form schon!

aber das was "Felix Ziegler" gepostet hat, funtioniert so

Code
SELECT @if(
  (Form = "Geburtstag") &
  (@Day(GeburtstagDatum)=@Day(@Now)) &
  (@Month(GeburtstagDatum)=@Month(@Now)) ; @True;
   @False;);

ganz gut!
Titel: Re: Wert in Maske nur dann anzeigen, wenn true
Beitrag von: Axel am 24.02.09 - 10:11:50
Schon, aber sauber ist das nicht. @Now sollte aus Performancegründen in Ansichtenformel nicht verwendet werden.

Auszug aus der Hilfe:
Durch die Verwendung von @Now in Spalten- oder Auswahlformeln kann die Verarbeitungsgeschwindigkeit Ihrer Anwendung verringert werden. Außerdem verursacht diese Funktion, dass permanent das Symbol für die Ansichtsaktualisierung erscheint.

Das war hier im Forum auch schon öfters ein thema.

Axel
Titel: Re: Wert in Maske nur dann anzeigen, wenn true
Beitrag von: schmidti88 am 24.02.09 - 10:12:47
achso! hhm, ok!
dann suche ich nochmal nach einer anderen lösung!
Titel: Re: Wert in Maske nur dann anzeigen, wenn true
Beitrag von: Felix Ziegler am 24.02.09 - 10:20:53
Hab ich ja geschrieben... ohne zu "pimpen". Es kann bei mehreren Dokumenten echt langsam werden!

Aber die Formel lässt sich ein wenig abwandeln, wenn du sie in einen Agenten packst, der auf alle Dokumente in der Datenbank läuft ...

Code
@if(
  (Form = "Geburtstag") &
  (@Day(GeburtstagDatum)=@Day(@Now)) &
  (@Month(GeburtstagDatum)=@Month(@Now)) ; @SetField("HeuteGeburtstag", "1");
  @SetField("HeuteGeburtstag", "0")
);

edit:
Aber auch das gillt es zu überdenken, weil jeden Tag alle Dokumente der Datenbank aktualisiert werden ...
Titel: Re: Wert in Maske nur dann anzeigen, wenn true
Beitrag von: Thomas Schulte am 24.02.09 - 10:32:21
Schon, aber sauber ist das nicht. @Now sollte aus Performancegründen in Ansichtenformel nicht verwendet werden.

Auszug aus der Hilfe:
Durch die Verwendung von @Now in Spalten- oder Auswahlformeln kann die Verarbeitungsgeschwindigkeit Ihrer Anwendung verringert werden. Außerdem verursacht diese Funktion, dass permanent das Symbol für die Ansichtsaktualisierung erscheint.


Vielleicht noch eine Anmerkung dazu Axel.

Bei vielen Dokumenten in der Datenbank .....

ein @Now bei 200 Dokumenten in der DB die von allen die es verwenden gelesen werden dürfen tut nicht wirklich weh.

Das Ganze im Adressbuch der IBM das ein paar mehr Einträge umfasst. JA da macht es dann AUA.