Autor Thema: Alle Werte eines Listenfelds auswählen  (Gelesen 3951 mal)

Offline dia

  • Junior Mitglied
  • **
  • Beiträge: 64
  • Geschlecht: Männlich
  • |_ |\|
Alle Werte eines Listenfelds auswählen
« am: 06.10.08 - 10:57:26 »
Ich brüte jetzt schon eine Weile über dem Problem ohne eine Lösung gefunden zu haben.

Ich habe ein Listenfeld in dem ich Mehrfachwerte zulasse.
Nun möchte ich gern, dass beim Speichern (der Zeitpunkt spielt eigentlich keine Rolle) alle Einträge in dem Listenfeld ausgewählt werden.

Mit Call uidoc.FieldSetText("Feldname", "Wert") kann ich einen Wert auswählen aber nicht mehrere bzw. alle. Und Call uidoc.FieldSetText("Feldname", "Wert1" : "Wert2") mag er auch nicht.

Jemand eine Idee?

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Alle Werte eines Listenfelds auswählen
« Antwort #1 am: 06.10.08 - 11:03:27 »
Im Backenddokument hast du Zugriff auf das Item als Array.
Aber ich verstehe den Sinn nicht:

Der Anwender wählt erst einige Werte aus, und anschliessend werden beim Speichern einfach alle eingetragen?
Warum muss der Anwender da überhaupt rumklicken?

Grüsse

DAU-in
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Re: Alle Werte eines Listenfelds auswählen
« Antwort #2 am: 06.10.08 - 11:08:06 »
Im Frontend musst das so machen:
uidoc.FieldSetText("Feldname", "Wert1, Wert2")

, ist hier das Trennzeichen für Mehrfachwerte, so wie im Feld definiert.
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Alle Werte eines Listenfelds auswählen
« Antwort #3 am: 06.10.08 - 11:14:53 »
Anita hat recht.

Was ist der Sinn des ganzen?

Wenn ich beim Speichern eh alle Werte aktiv schalte, warum dem Benutzer dann überhaupt die Illusion geben das er da irgendetwas beeinflussen kann?
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline dia

  • Junior Mitglied
  • **
  • Beiträge: 64
  • Geschlecht: Männlich
  • |_ |\|
Re: Alle Werte eines Listenfelds auswählen
« Antwort #4 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.

uidoc.FieldSetText("Feldname", "Wert1, Wert2") hat jetzt auf anhieb erstmal gar nichts bewirkt. Es ist danach nichts ausgewählt. Ich teste das nochmal in einer etwas leereren Maske.

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Re: Alle Werte eines Listenfelds auswählen
« Antwort #5 am: 06.10.08 - 11:23:27 »
Wenn es unsichtbar ist, dann kannst Du es auch nicht im Frontend bestücken, dann nur im backend.
uidoc.document.feldname = array
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline dia

  • Junior Mitglied
  • **
  • Beiträge: 64
  • Geschlecht: Männlich
  • |_ |\|
Re: Alle Werte eines Listenfelds auswählen
« Antwort #6 am: 06.10.08 - 11:32:20 »
Super vielen Dank jBubbleBoy mit uidoc.document.feldname = array funktionierts. Wobei ich nicht ganz verstehe warum uidoc.FieldSetText("Feldname", "Wert1, Wert2") nicht funktioniert, denn zum testen ist das Feld im Moment natürlich sichtbar. Aber gut seis drum per Backend funktionierts.

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Alle Werte eines Listenfelds auswählen
« Antwort #7 am: 06.10.08 - 12:11:49 »
Warum willst da bei einem versteckten Feld mit Frontendmethoden arbeiten, wenn du beim Speichern im Backend etwas belegst?
Und warum machst du nicht einfach ein berechnetes Feld daraus?
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Alle Werte eines Listenfelds auswählen
« Antwort #8 am: 06.10.08 - 12:22:55 »
Und wenn schon, dann probiers es mal damit:

uidoc.fieldsettext("Feldname",split("wert1,wert2,wert3,...",","))
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.290
  • Geschlecht: Männlich
Re: Alle Werte eines Listenfelds auswählen
« Antwort #9 am: 06.10.08 - 12:39:42 »
uidoc.fieldsettext("Feldname",split("wert1,wert2,wert3,...",","))

ich hab es zwar nicht getestet, das sollte aber nicht funktionieren ;) denn der Rückgabewert ist hier ein Array und das klappt nicht mit der Funktion "fieldsettext".
Gruss Erik :: Freelancer :: KI-Dev, Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16 / OLI 2.0

--
Nur ein toter Bug, ist ein guter Bug!

Offline dia

  • Junior Mitglied
  • **
  • Beiträge: 64
  • Geschlecht: Männlich
  • |_ |\|
Re: Alle Werte eines Listenfelds auswählen
« Antwort #10 am: 06.10.08 - 12:54:58 »
Warum willst da bei einem versteckten Feld mit Frontendmethoden arbeiten, wenn du beim Speichern im Backend etwas belegst?
Und warum machst du nicht einfach ein berechnetes Feld daraus?

Die Datenbank ist nicht von mir. Da ich aber heute anscheinend der einzige Notes Entwickler hier bin ist das Problem bei mir gelandet.
Ich möchte nicht mit Frontendmethoden arbeiten. Ich suchte nur irgend einen Weg das Problem zu lösen. Und da im QuerySave schon einiges an code stand hab ich meinen code einfach unten dran gehangen.
Was für einen Vorteil hätte ich wenn ich das Feld berechnet mache?

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Alle Werte eines Listenfelds auswählen
« Antwort #11 am: 06.10.08 - 13:05:26 »
Da deine Benutzer offensichtlich nur die Möglichkeit haben, alles an oder alles aus, würdest du dir mit einem berechneten Feld den ganzen Script Zirkus sparen können.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline dia

  • Junior Mitglied
  • **
  • Beiträge: 64
  • Geschlecht: Männlich
  • |_ |\|
Re: Alle Werte eines Listenfelds auswählen
« Antwort #12 am: 06.10.08 - 13:24:46 »
Da deine Benutzer offensichtlich nur die Möglichkeit haben, alles an oder alles aus, würdest du dir mit einem berechneten Feld den ganzen Script Zirkus sparen können.

Verstehe ich nicht ganz. Ich muss das Feld nur berechnet machen und schon sind automatisch alle Einträge darin ausgewählt?

Die Werte müssen alle ausgewählt sein, weil es eine (villeicht auch noch mehr) Stellen gibt in der einfach der Feldname genutzt wurde um zu überprüfen was dort für Einträge drin sind. Das hat natürlich nicht funktioniert, weil das Ergebnis immer nichts war, weil man nur die ausgewählten Werte zurück bekommt. Also war meine Idee um das Problem zu lösen einfach dafür zu sorgen, dass alle ausgewählt sind. Somit müsste das ganze dann auch an allen Stellen funktionieren die ich jetzt vielleicht nicht gefunden habe.

Ach ja ich habs getestet:
uidoc.fieldsettext("Feldname",split("wert1,wert2,wert3,...",","))
Geht nicht weil er an der Stelle einen String erwartet.

Ahh ich glaube ich weiß worauf du hinaus willst. Wenn ich das Feld berechnet mache könnte ich vielleicht als Wert die gleiche Formel angeben wie bei der Auswahlformel der Liste. Das werde ich mal versuchen.

Getestet und funktioniert. Also ist die Lösung doch so einfach.
« Letzte Änderung: 06.10.08 - 13:37:38 von dia »

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Alle Werte eines Listenfelds auswählen
« Antwort #13 am: 06.10.08 - 14:15:47 »
Die Werte müssen alle ausgewählt sein, weil es eine (villeicht auch noch mehr) Stellen gibt in der einfach der Feldname genutzt wurde um zu überprüfen was dort für Einträge drin sind. Das hat natürlich nicht funktioniert, weil das Ergebnis immer nichts war, weil man nur die ausgewählten Werte zurück bekommt. Also war meine Idee um das Problem zu lösen einfach dafür zu sorgen, dass alle ausgewählt sind. Somit müsste das ganze dann auch an allen Stellen funktionieren die ich jetzt vielleicht nicht gefunden habe.

Das ist jetzt wirklich AUA. Um die Korrektur der Überprüfug welche Werte ausgewählt wurden zu umgehen baust du die Anwendung einfach so um, das jetzt grundsätzlich immer alle Werte ausgewählt werden?

In der Logik ist ein Loch so groß, da kannst du mit einem Panzer durchfahren.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Alle Werte eines Listenfelds auswählen
« Antwort #14 am: 06.10.08 - 14:18:30 »

Die Werte müssen alle ausgewählt sein, weil es eine (villeicht auch noch mehr) Stellen gibt in der einfach der Feldname genutzt wurde um zu überprüfen was dort für Einträge drin sind. Das hat natürlich nicht funktioniert, weil das Ergebnis immer nichts war, weil man nur die ausgewählten Werte zurück bekommt. Also war meine Idee um das Problem zu lösen einfach dafür zu sorgen, dass alle ausgewählt sind. Somit müsste das ganze dann auch an allen Stellen funktionieren die ich jetzt vielleicht nicht gefunden habe.


Wie sollen dort auch Werte drin stehen, wenn das Eingabefeld versteckt ist?
Vasteh ich hier was nicht richtig?

Suchst du evt. nur eine Fehlerbehandluing für ein leeres Feld?
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Alle Werte eines Listenfelds auswählen
« Antwort #15 am: 06.10.08 - 14:32:57 »
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.

 ??? ???


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.
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline dia

  • Junior Mitglied
  • **
  • Beiträge: 64
  • Geschlecht: Männlich
  • |_ |\|
Re: Alle Werte eines Listenfelds auswählen
« Antwort #16 am: 06.10.08 - 15:06:21 »
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.

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Alle Werte eines Listenfelds auswählen
« Antwort #17 am: 06.10.08 - 15:17:01 »
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
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: Alle Werte eines Listenfelds auswählen
« Antwort #18 am: 06.10.08 - 15:21:40 »

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.


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?


mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Alle Werte eines Listenfelds auswählen
« Antwort #19 am: 06.10.08 - 16:01:27 »
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)

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.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz