Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: smokyly am 04.04.11 - 14:30:15

Titel: Formel in Ansichtsspalte bringt kein Ergebnis
Beitrag von: smokyly am 04.04.11 - 14:30:15
Guten Tag,

ich habe in der names eine Ansicht erstellt, die in der ersten Spalte die Person ausgibt und in der zweiten soll die letzte Version con ClntBld dargestellt werden.

Ansichtsauswahl:
Zitat
SELECT Type = "Person"

Person:
Zitat
@Trim(@Subset(LastName;1))+@If(Firstname !="";" , "+@Trim(@Subset(FirstName;1));"")+@If(MiddleInitial !="";" "+@Trim(@Subset(MiddleInitial;1));"")

Version:
Zitat
t_elements:=@Elements(ClntDate);
@If(
      t_elements=0;t_count:=0;
                           (@For(i:=1;t_elements;i:=1+1;
      @If(i=1;t_date:=@Subset(ClntDate;i) & t_count:=1;
              @If(@Subset(ClntDate;i)>t_date;t_date:=@Subset(ClntDate;i) & t_count:=i;
               "")
         )
                              )
                        )
   );
@If(t_count=0;"";@Subset(ClntBld;t_count))

Wenn ich die Ansicht aktualisieren will, läuft sich der Client tot.

Was mache ich falsch? Dass es bestimmt auch einfacher geht ist nicht mein Problem, sondern warum da kein Ergebnis kommt (in dem Sinne, dass Ansicht aktualisieren nicht zum Ende kommt).

Gruß
Titel: Re: Formel in Ansichtsspalte bringt kein Ergebnis
Beitrag von: Mitch am 04.04.11 - 14:45:56
Heyho,

abgesehen davon, dass ich @For in Ansichtsspalte bedenklich finde (Performance) und mir auch gar nicht genau angeguckt habe, was du da eigentlich genau mit erreichen willst, denke ich dass der Fehler in der Schleife liegt, da keine Abbruchbedingung vorliegt:

Code
@For(i:=1;t_elements;i:=1+1;

Wenn t_elements jetzt größer 0 ist, läuft das einfach immer weiter und weiter.

Nimm doch lieber:

Code
@For(i:=1;i <= t_elements;i:=1+1;

Gruß,

Mitch

P.S.: Und der Zähler ist immer 2? Nicht lieber i :=  i + 1? ;)
Titel: Re: Formel in Ansichtsspalte bringt kein Ergebnis
Beitrag von: smokyly am 04.04.11 - 14:54:32
 :-X :-X :-X

Oh Mann! Bin ich......
Manchmal sollte ich doch ne Brille aufsetzen>!


VIELEN DANK!
Titel: Re: Formel in Ansichtsspalte bringt kein Ergebnis
Beitrag von: Driri am 04.04.11 - 16:45:31
Möchtest Du immer die höchste Clientversion anzeigen oder interessiert dich, welcher Eintrag anhand des Datums der aktuellste ist ?

Für den ersten Fall könnte man das wesentlich einfacher aufbauen. Ich habe so etwas bei uns mal mit folgender Formel "Quick & Dirty" eingebaut :

Zitat
_clntlist:=@Sort(ClntBld);
@Subset(_clntlist;-1)

Das ist keinesfalls perfekt, weil dabei z.B. ein Client 5.0.9 höher einsortiert würde, als ein Client 5.0.11. Da R5 aber das letzte Release mit so hohen Minorversionen war, habe ich das mal vernachlässigt.
Ab R10 würde das dann ebenfalls wieder kritisch. Ist halt die Frage, wofür man das braucht und wie lange man das braucht.


Ansonsten hat Ulrich da vor einiger Zeit mal einen guten Artikel in seinem Blog zu gepostet :

http://www.eknori.de/2008-02-02/domino-directory-people-by-client-version/
Titel: Re: Formel in Ansichtsspalte bringt kein Ergebnis
Beitrag von: smokyly am 05.04.11 - 09:44:22
Möchtest Du immer die höchste Clientversion anzeigen oder interessiert dich, welcher Eintrag anhand des Datums der aktuellste ist ?

Eigentlich ist das erstmal eine Spielerei als Übung, aber das Ziel ist die aktuellste Version zu erhalten. Wobei das nicht zu 100% mit der tatsächlich produktiv genutzten Version übereinstimmt.

Meine Kurzlösung sieht so aus:
Zitat
ClntBld[@Member(@Text(@Max(ClntDate));@Text(ClntDate))]

Warum aber dies hier nicht funzt, ist mir immer noch nicht klar. Es kommt zwar ein Ergebnis, aber es stimmt nicht.
Zitat
t_elements:=@Elements(ClntDate);
t_count:=0;
@If(
      t_elements=0;t_count:=0;
                           (@For(i:=1;i<=t_elements;i:=i+1;
      @If(i=1;t_date:=                        
                  @ToNumber(@Middle(@Text(ClntDate);6;4)+@Middle(@Text(ClntDate);3;2)+@Middle(@Text(ClntDate);0;2))
                         & t_count:=1;
              @If(
                  @ToNumber(@Middle(@Text(ClntDate);6;4)+@Middle(@Text(ClntDate);3;2)+@Middle(@Text(ClntDate);0;2))
                  >t_date;t_date:=
                  @ToNumber(@Middle(@Text(ClntDate);6;4)+@Middle(@Text(ClntDate);3;2)+@Middle(@Text(ClntDate);0;2))
                        & t_count:=i;
               "")
         )
                              )
                        )
   );
@If(t_count=0;"";ClntBld[t_count])
Das mit den Datumsoperationen ist mir noch nicht wirklich klar.

Gruß