Domino 9 und frühere Versionen > ND6: Entwicklung

Alle Werte eines Listenfelds auswählen

<< < (4/5) > >>

Axel:

--- Zitat von: dia am 06.10.08 - 11:18:11 ---Das Feld ist unsichtbar und wird vom Benutzer nicht bearbeitet. Denkbar wäre aber ein Button "alle Auswählen" für den Benutzer um ihn nicht alle einzeln anhaken zu lassen.

--- Ende Zitat ---

 ??? ???


Ich habe gerade mal das Ganze quergelesen. Was willst du denn mit diesem Stunt überhaupt errreichen. Das Ganze muss doch einen Sinn haben. Im Gegensatz zu obiger Aussage. -> Wie soll den ein Benutzer was markieren können, wenn er das Feld gar nicht sieht?

Axel

PS: Hast du eigentlich auch einen richtigen Namen? Dich immer nur beim Nicknamen anzusprechen ist sehr unpersönlich.

dia:
Also wie es scheint muss ich jetzt doch etwas weiter ausholen. Der Bug, der einem Benutzer aufgefallen war war folgender. Er hat ein Dokument erstellt. In dem Dokument hat er eine Gruppe gewhält die das Dokument in einer bestimmten Ansicht sehen können soll. Wichtig hierbei ist, dass anscheinend in der Datenbank eine eigene Benutzerverwaltung porgrammiert wurde. Man kann also dort Gruppen anlegen und den Gruppen Benutzer zuweisen. Nun hat der Herr ein Dokument erstellt das Für eine bestimmte Gruppe sichtbar sein sollte. Ein Benutzer aus der Gruppe konnte das Dokument jedoch in der Ansicht nicht sehen. Also rief man mich an. Ich habe mir also die Ansichtsauswahlformel der Ansicht angeschaut.

SELECT(@Contains(vrrAutor;@Name([CN];@UserName)) | @Contains(vrrFreigabePersonDisp;@Name([CN];@UserName)) | @Contains(vrrAdressatenGruppeDisp;"&V13_VRR_TR-Info_Admin") | @Contains(vrrAdressaten;@Name([CN];@UserName))) & (vrrDocStatus != "Papierkorb"   | @If((vrrFreigeben != "" & vrrFreigabe = "Ja")) & (Form = "vrrfrmNeuesDokument")& (vrrGueltigkeitDatum="" | vrrGueltigkeitDatum>=@Date(@Now)) | @AllChildren)

Die fette Stelle ist die, über die der Benutzer dieses Dokument angezeigt bekommen müsste. Also schaute ich mir die Maske an und suchte nach dem Feld vrrAdressaten. Das war ein unsichtbares Listenfeld. Das machte ich sichtbar und stellte fest, dass dort die richtigen Namen drin stehen. Jedoch wird mit @Contains(vrrAdressaten;@Name([CN];@UserName)) nur ausgewertet welche der Namen in der Liste denn auch selektiert sind. Und somit war vrrAdressaten logischerweise immer "". Die Liste war also korrekt gefüllt aber da kein Name selektiert war wurde das Dokument für die Person, die zwar in der Liste enthalten war nicht angezeigt, weil sie nicht selektiert wurde.

Also hätte ich die Ansichtsauswahl dahingehen ändern können, dass sie nicht den selektierten Wert der Liste abfragt sondern alle Werte in der Liste. Da wusste ich auf anhieb erstmal nich wie ich das machen könnte. Und des weiteren wusste ich nicht in welchen Ansichten vielleicht noch über diese Formel der Zugriff ausgewertet wird. Also war für mich die Lösung einfach alle Werte in der Liste selektieren und der Wert der abgefragt wird passt.

Zum Thema Benutzerverwaltun in einer Notesdatenbank braucht jetzt keine was zu sagen. Das finde ich auch unschön, und würde eine Benutzerverwaltung über die ACL vorziehen. Aber ich werde jetzt nicht die komplette Datenbank umkrämpeln.

Und nur nochmal um Missverständnisse zu vermeiden. Das Problem ist behoben und alles funktioniert einwandfrei. Wenn ihr trotzdem noch hilfreiche Tipps haben solltet dann bitte her damit.

Mein richtiger Name ist übrigens Mirko.

Axel:
Ok. Nun ist die ganze Sache klarer geworden. Normalerweise steuert man sowas über Leser- und/oder Autorenfelder. Aber sei's drum. Das Ganze im nachträglich umbauen birgt einiges an Risiken, sollte aber mal ins Auge gefasst werden.

Als einfache Alternative wäre auch z.B. ein einfaches berechnetes Textfeld (mit Mehrfachwerten) das alle entsprechenden Namen enthält denkbar. Dann bruahcst ud dir keine Gedanken zu machen welcher Wert jetzt selektiert wird oder werden muss.


Axel

DAU-in:

--- Zitat von: dia am 06.10.08 - 15:06:21 ---
SELECT(@Contains(vrrAutor;@Name([CN];@UserName)) | @Contains(vrrFreigabePersonDisp;@Name([CN];@UserName)) | @Contains(vrrAdressatenGruppeDisp;"&V13_VRR_TR-Info_Admin") | @Contains(vrrAdressaten;@Name([CN];@UserName))) & (vrrDocStatus != "Papierkorb"   | @If((vrrFreigeben != "" & vrrFreigabe = "Ja")) & (Form = "vrrfrmNeuesDokument")& (vrrGueltigkeitDatum="" | vrrGueltigkeitDatum>=@Date(@Now)) | @AllChildren)

Die fette Stelle ist die, über die der Benutzer dieses Dokument angezeigt bekommen müsste. Also schaute ich mir die Maske an und suchte nach dem Feld vrrAdressaten. Das war ein unsichtbares Listenfeld. Das machte ich sichtbar und stellte fest, dass dort die richtigen Namen drin stehen. Jedoch wird mit @Contains(vrrAdressaten;@Name([CN];@UserName)) nur ausgewertet welche der Namen in der Liste denn auch selektiert sind. Und somit war vrrAdressaten logischerweise immer "". Die Liste war also korrekt gefüllt aber da kein Name selektiert war wurde das Dokument für die Person, die zwar in der Liste enthalten war nicht angezeigt, weil sie nicht selektiert wurde.


--- Ende Zitat ---

ik versteh nur Bahnhof. Was bedeutet für dich selektiert? für mich heisst das vom Anwender angehakt/ ausgewählt, aber das kann ja nicht zutreffen, da das Feld versteckt ist.
Und @contains prüft, ob der Wert im Feld enthalten ist.
Mit 'die Liste war korrekt gefüllt' meinst du, dass der betreffende Name zur Auswahl in einem Listenfeld stand?


Thomas Schulte:

--- Zitat von: dia am 06.10.08 - 15:06:21 ---SELECT(@Contains(vrrAutor;@Name([CN];@UserName)) | @Contains(vrrFreigabePersonDisp;@Name([CN];@UserName)) | @Contains(vrrAdressatenGruppeDisp;"&V13_VRR_TR-Info_Admin") | @Contains(vrrAdressaten;@Name([CN];@UserName))) & (vrrDocStatus != "Papierkorb"   | @If((vrrFreigeben != "" & vrrFreigabe = "Ja")) & (Form = "vrrfrmNeuesDokument")& (vrrGueltigkeitDatum="" | vrrGueltigkeitDatum>=@Date(@Now)) | @AllChildren)

--- Ende Zitat ---

Hi Mirko ...

Wenn das jemals funktioniert haben sollte was mit dem Select in dieser Anwendung getrieben wird, dann kann das nur Zufall gewesen sein. Zumindest wenn ich von deinen bisherigen Informationen ausgehe.

Siehe Online Hilfe zu @UserName ...

Usage
When a formula runs on a server, the agent signer is considered the current user. Using @UserName on a local database or in a private view in a server-based database returns the user's name. You should not use @UserName in a public view, doing so produces unpredictable results. Also, if the field that you are referencing changes, you will get unpredictable results because the index has to be rebuilt to accommodate the new information.
One use for @UserName is to display only those documents relevant to the current user. For example, your Service Request database could use @UserName in the private view named Assignments to display each technician's assignments, weeding out everyone else's:
SELECT @UserName=AssignedTo
However, the user can still design a different private view that retrieves all documents, so don't depend on @UserName as a security mechanism.

Also das kann nur funktionieren wenn das in "private" Views eingebaut wurde.
Dann will ich aber nicht wissen wieviele Benutzer die Datenbank hat. Und schon gar nicht, ob irgendjemand sich Gedanken über die Update Mechanismen die hinter Private Views liegen MÜSSEN, wenn jemand den Source für das Ding verändert, gemacht hat.

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln