Autor Thema: Wie per Lotusscript neue Einträge in einem Listenfeld erstellen?  (Gelesen 2039 mal)

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Hallo,

ich muss mich mal wieder als Anfänger outen:  :-[
Ich möchte gerne per Lostusscript einem Listenfeld innerhalb einer Maske weitere Einträge hinzufügen.
Meine Versuche:

Code
Set uidoc = ws.CurrentDocument
Set currdoc = uidoc.Document
Set item = currdoc.GetFirstItem ( "Namen" )

' Versuch 1
Call item.AppendToTextList ( "abc" )

' Versuch 2
Dim nameList(2) As String
nameList(1) = "abc123"
nameList(2) = "xyz789"
currdoc.Namen = nameList

Call uidoc.Refresh

Alle Versuche haben quasi dasselbe Ergebnis, es wird nur eine Zeile erstellt, mit beiden Einträgen in einer Zeile.
Wo mache ich denn (mal wieder) den Fehler?
Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

pantelis.botsas

  • Gast
Hallo schroederk,

prüfe bitte, ob das Feld selbst Mehrfachwerte annehmen darf ...

und welches Zeichen bei der Eingabe dazu führen soll, dass Mehrfachwerte auch eingegeben werden können.

Abschließend kannst Du noch festlegen, wie Mehrfachwerte im Feld selbst angezeigt werden sollen.

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Hallo,

die Eigenschaft "Mehrfachwerte zulassen" ist doch dafür, dass der Anwender mehrere Einträge selektieren kann und nicht nur einen, oder?
Die Felder bei "Optionen für Mehrfachwerte" sind bei mir ausgegraut.

In der Eigenschaft "Auswahl" habe ich "Formel verwenden" ausgewählt und die folgende Formel eingetragen:
Code
@If(KNamen = ""; "Keine Namen gefunden"; @GetField("KNamen"))
In KNamen steht als Vorgabe:
Code
"Name1" : "Name2" : "Name3"

In der Liste werden damit beim Aufruf der Maske korrekt 3 Einträge angezeigt. Per Lotusscript soll jetzt einfach ein weiter Eintrag angehängt werden (der Wert wird dann später aus einer anderen Maske kommen).
Durch AppendToTextList wird dann aber aus den 3 Einträgen nur noch einziger, der alle 4 Einträge enthält.
Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

Offline Tode

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Du kannst den Inhalt der Liste nicht mittels LotusScript manipulieren. Hierfür brauchst Du immer 2 Felder.

1. Feld "KNamen_Liste" mit einer Formel für die Vorgabewerte.
2. Feld "Knamen". Auswahl: Formel verwenden, Formel: KNamen_Liste, Option "Auswahl bei Dokumentaktualisierung aktualisieren" aktiviert.

Jetzt kannst Du per LotusScript das Feld "KNamen_Liste" manipulieren (genauso wie Du es in Deinem Beispielcode gemacht hast), und sobald Du Refreshst wird der neue Inhalt des Feldes KNamen_Liste als Auswahl in KNamen auftauchen.
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Sicher?
Ds wusste ich nicht. Wahrscheinlich hat es deshalb bei mir funktioniert.
https://help.hcltechsw.com/dom_designer/11.0.1/basic/H_APPENDTOTEXTLIST_METHOD.html

Zeigt in den Beispielen, wie es geht. Und die unterscheiden sich nicht von den bereits unternommenen Versuchen.

Knackpunkt ist hier, dass das Item keine TextList ist, weil es nicht die Option „allow multiple values“ besitzt. Steht auch so in der Hilfe, „for an item that‘s a text list … „
Deshalb sind auch die anderen Optionen ausgegraut.
« Letzte Änderung: 28.02.22 - 19:38:52 von eknori »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Funktioniert einwandfrei

Code
Sub Click(Source As Button)
	
	Dim workspace As New NotesUIWorkspace
	Dim uidoc As NotesUIDocument
	Dim doc As NotesDocument
	Dim item As NotesItem
	
	Set uidoc = workspace.CurrentDocument
	Set doc = uidoc.Document
	
	Set item = doc.GetFirstItem("multi")
	Call item.AppendToTextList ( "abc" ) 
	Call doc.Save(True, False)
	
End Sub

Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Tode

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
@Ulrich: Ich hatte es so verstanden, dass er die mögliche AUSWAHL erweitern will. Also: Das Feld selbst ist Single Value, hat aber die Optionen "Name1" : "Name2" : "Name3" zur Auswahl. Und jetzt möchte er die Option "Name4" hinzufügen.
Wenn es wirklich nur darum geht, weitere Werte hinzuzufügen, dann hast Du natürlich vollkommen recht.
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Ehrlich gesagt, habe ich euch jetzt absolut nicht verstanden, wer wo einen Unterschied sieht  :-[

Vielleicht fange ich nochmal von vorne an:
Ich möchte eine Maske bauen, in der der Anwender eine Liste bisher erfasster Kategorien angezeigt bekommt. Dieser Liste soll der Anwender weitere Kategorien hinzufügen können.
Dafür habe ich ein einfaches Feld KategorienNamen, Typ Text, Bearbeitbar, verborgen, Vorgabewert: "Kategorie 1" : "Kategorie 2"
und ein Feld KategorienListe, Typ Listenfeld, Bearbeitbar (bei berechnet lässt sich nicht speichern: "keine Formel für berechnetes Feld"), Formel für Auswahl verwenden:
@If(KategorienNamen = ""; "Keine Kategorien gefunden"; @GetField("KategorienNamen"))
Über die Schaltfläche "Neu" wird über Dialogbox eine weitere Maske aufgerufen in der der Anwender eine Bezeichnung (und die Farben) angeben kann.
Diese neue angegebene Bezeichnung soll nun im Listenfeld auftauchen und natürlich auch auswählbar sein.

Code
	Dim ndialog2 As Integer
	Dim dialogdoc2 As NotesDocument
	Dim ws2 As New NotesUIWorkspace
	Dim db2 As NotesDatabase
	Dim s2 As New NotesSession
	Dim uidoc2 As NotesUIDocument
	Dim currdoc As NotesDocument
	Dim item As NotesItem
	
	On Error Goto ErrHandler2
	
	Set uidoc2 = ws2.CurrentDocument
	Set currdoc = uidoc2.Document
	
	Set db2 = s2.CurrentDatabase
	Set dialogdoc2 = db2.CreateDocument
	dialogdoc2.SaveOptions = "0"
	
	ndialog2 = ws2.Dialogbox("CategoriesNew",True,True,False,False,False,False,"Neue Kategorie",dialogdoc2, True, True, True)
	If Not ndialog2 Then
		'Messagebox ("abgebrochen")
	Else	
		Set item = currdoc.GetFirstItem ( "KategorienNamen" )
		'Set item = currdoc.GetFirstItem ( "KategorienListe" )
		Call item.AppendToTextList ( "XXX")
		
		Call uidoc2.Refresh
		Call currdoc.Save(True, False)

Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

pantelis.botsas

  • Gast
Hallo schroederk,

Du möchtest neue Werte erfassen, welche dann künftig zur Auswahl stehen.
Hierzu ist eine Ansicht zu erstellen, in welcher der betreffende Feldwert aus dem Dokument in einer Spalte angezeigt wird (die Spalte kann sortiert sein, muss es aber nicht). Im nächsten Schritt befüllst Du die Auswahlliste des Feldes in Deiner Dialogbox über diese Spalte aus der Ansicht. Ein Beispiel einer Formelauswahl habe ich im Bild mit aufgenommen.

Off Topic (passt nicht zu Deiner Anforderung): In einem ganz einfachen Fall kann auch ein Feld vom Typ Dialogliste genutzt werden mit der Eigenschaft, dass neue Werte eingegeben werden können. Doch um die Ansicht kommst Du auch hier nicht herum, wenn Du diese neuen Werte für eine künftige Auswahlliste nutzen möchtest.

Möchtest Du "Standardwerte" vorgeben, so nimmst Du diese Werte zusätzlich VOR der @DBColumn-Formel auf. Also:
@Sort(@Unique("Wert 1":"Wert 2":@DBColumn(...)))

Damit verhinderst Du, dass die Standardwerte doppelt vorkommen.

Ich hoffe, ich habe Deine Situation jetzt richtig nachvollziehen können ;)
« Letzte Änderung: 01.03.22 - 11:48:55 von pantelis.botsas »

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Ich wollte die Daten eigentlich in einem Profildokument anstatt einer Ansicht speichern.
Dafür wollte ich bspw. die Namen in ein einfaches Textfeld speichern, mit einem Separatorzeichen getrennt (bspw. "Kategorie 1;Kategorie 2; Kategorie 3")
Im Queryopen der Maske würde ich dann dieses Feld aus dem Profildokument auslesen und wieder in die Hilfsvariable speichern.
Fast genauso habe ich das bereits schon einmal gemacht. Dort habe ich auch im Queryopen eine Ansicht ausgelesen und Namen mit Doppelpunkt getrennt in eine String-Variable geschrieben.
Das Listenfeld hat dann über das Formelfenster einfach den Inhalt der Hilfsvariable geholt ( @GetField("Listenhelfer") ).
Code
	
	s_zeilen = ""
	Set jobdoc = jobview.GetFirstDocument
	While Not(jobdoc Is Nothing)
		s_name = jobdoc.GetItemValue("Name")(0)
		s_zeilen = s_zeilen & ":" & s_name
		Set jobdoc = jobview.GetNextDocument(jobdoc)
	Wend
	s_zeilen = Mid(s_zeilen,2)
	zeilen = Split(s_zeilen,":")
	
	Call doc.ReplaceItemValue("Listenhelfer", zeilen)

Wenn ich dasselbe jetzt über die Schaltfläche versuche
Code
elements = "aaa:bbb:ccc:ddd"
zeilen = Split(elements,":")
Call currdoc.ReplaceItemValue("KategorienNamen", zeilen)
dann wird wieder alles in einer Zeile angezeigt.
Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

pantelis.botsas

  • Gast
Hallo nochmal,

vielleicht hilft Dir das hier weiter bei Deinem Vorhaben:

https://help.hcltechsw.com/dom_designer/10.0.1/basic/H_GETPROFILEFIELD.html
https://help.hcltechsw.com/dom_designer/10.0.1/basic/H_SETPROFILEFIELD.html

Damit kannst Du direkt aus dem Profildokument lesen bzw. speichern.

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Hallo nochmal,

vielleicht hilft Dir das hier weiter bei Deinem Vorhaben:

https://help.hcltechsw.com/dom_designer/10.0.1/basic/H_GETPROFILEFIELD.html
https://help.hcltechsw.com/dom_designer/10.0.1/basic/H_SETPROFILEFIELD.html

Damit kannst Du direkt aus dem Profildokument lesen bzw. speichern.

Das ist zwar nett, dass Du mir die Links postest (und zwischen version 10 und 11 wird sich sicher auch nichts geändert haben), aber das hilft mir ja leider noch nicht dabei, warum das Listenfeld nach dem Bearbeiten die Einträge nur noch in einer Zeile zeigt.  :-\

Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

Offline Tode

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Das sieht mir aus, als ob Dein Feld "KategorienNamen" kein Multivalue- Feld wäre. Das muss es aber sein, wenn es mehrere Werte aufnehmen soll...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline schroederk

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.924
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Das sieht mir aus, als ob Dein Feld "KategorienNamen" kein Multivalue- Feld wäre. Das muss es aber sein, wenn es mehrere Werte aufnehmen soll...

Wie so oft ist die Lösung so einfach. Häkchen rein bei "Mehrfachwerte zulassen" und schon funktioniert es.
Ich hab mich da komplett in die Irre führen lassen, da Mehrfachwerte nicht angehakt war, als Vorgabewert aber mehrere Werte angegeben hatte und diese auch korrekt angezeigt wurden.

Vielen Dank Dir (und den anderen auch).  Damit bin ich schon einen deutlichen Schritt weiter. Nur noch Bearbeiten, Löschen, Speichern im Profildokument und letztlich die Ansicht mit Kategorien und Farben. Also schon fast fertig  ;D
Ich wäre ja gerne weniger egoistisch, aber was hab ich davon?

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz