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:
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?
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:
@If(KNamen = ""; "Keine Namen gefunden"; @GetField("KNamen"))
In KNamen steht als Vorgabe:
"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.
Funktioniert einwandfrei
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
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.
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 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") ).
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
elements = "aaa:bbb:ccc:ddd"
zeilen = Split(elements,":")
Call currdoc.ReplaceItemValue("KategorienNamen", zeilen)
dann wird wieder alles in einer Zeile angezeigt.