Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Gruenkohl am 07.06.04 - 15:40:43

Titel: Im Backend Mehrfachwerte in ein Textfeld schreiben
Beitrag von: Gruenkohl am 07.06.04 - 15:40:43
Moin, moin,

also ich habe eine schon fast peinliche Frage.
Und zwar wie kann im Backend in ein Textfeld Mehrfachwerte schreiben, so das sie auch als Mehrfachwerte erkannt werden?

Ich habe in den Feldeigenschaften folgendes eingestellt:

- Mehrfachwerte zulassen
- Trennen bei Komma, Semikolon und Leerzeichen
- Anzeigen mit Semikolon

Wenn aber nun mit einem Agenten in dieses Feld etwas schreibe wird es nur als ein Wert genommen. Ein ComputeWithForm hat nichts gebracht.

Der eingefügte Text sieht z.B. wie folgt aus:  aaa, bbb, ccc, ...

Kann mir da jemand helfen???


Danke und Gruss

Andreas
Titel: Re:Im Backend Mehrfachwerte in ein Textfeld schreiben
Beitrag von: koehlerbv am 07.06.04 - 15:49:42
Du brauchst hierfür ein Array.

Wenn es hardcoded geht:
Dim aMultiValue (0 to 2) as String
aMultiValue (0) = "Wert 1"
aMultiValue (1) = "Wert 2"
aMultiValue (2) = "Wert 3"
NotesDocument.MyMultiValueField = aMultiValue

Wenn Du mit bekannten Strings arbeiten kannst, kannst Du das Evaluate-Statement verwenden (siehe DesignerHelp) und mit den aus @functions bekannten Verfahren das Feld füllen:
NotesDocument.MyMultiValueField = Evaluate ({"Wert 1" : "Wert 2" : "Wert 3"})

Sonst brauchst Du ein dynamisches Array (Stichwort: Redim) oder
ArrayAppend auf ein bestehendes Array (was das Feld in Deinem backend-Doc immer ist).

HTH,
Bernhard
Titel: Re:Im Backend Mehrfachwerte in ein Textfeld schreiben
Beitrag von: Gruenkohl am 07.06.04 - 16:01:12
Habe ich auch schon probiert aber bringt nix.
Wird auch wie ein Wert gesehen.
Ich probiere es aber noch mal aus.
Danke
Titel: Re:Im Backend Mehrfachwerte in ein Textfeld schreiben
Beitrag von: Glombi am 07.06.04 - 16:02:02
Sieh Dir mal in der Designer Hilfe folgendes an:

Call notesItem.AppendToTextList( newValue )

Bsp:
Dim doc As NotesDocument
Dim item As NotesItem
Dim newVals( 1 To 3 ) As String
'...set value of doc...
Set item = doc.GetFirstItem( "Categories" )
newVals( 1 ) = "Girls"
newVals( 2 ) = "Boys"
newVals( 3 ) = "Toys"
Call item.AppendToTextList( newVals )
Call doc.Save( False, True )

Andreas
Titel: Re:Im Backend Mehrfachwerte in ein Textfeld schreiben
Beitrag von: Gruenkohl am 07.06.04 - 16:15:38
Ja wunderbar. Das hat gezogen.
Danke und schönen Feierabend.

Andreas
Titel: Re:Im Backend Mehrfachwerte in ein Textfeld schreiben
Beitrag von: koehlerbv am 07.06.04 - 16:44:28
Hallo, Andreasse,

Zitat
Habe ich auch schon probiert aber bringt nix.
Wird auch wie ein Wert gesehen.
Ich probiere es aber noch mal aus.

Mystisch, dass das bei Dir nicht funktioniert, Andreas der Grünkohl. Da muss der Fehler woanders liegen, denn das ist die simpelste und brachialste und garantiert wirksame Methode.

Andreas G.: AppendToTextList hängt aber prinzipiell nur an. Das muss nicht unbedingt erwünscht sein.

Gespannt auf des Rätsels Lösung,
Bernhard
Titel: Re:Im Backend Mehrfachwerte in ein Textfeld schreiben
Beitrag von: Glombi am 07.06.04 - 16:52:21
Andreas G.: AppendToTextList hängt aber prinzipiell nur an. Das muss nicht unbedingt erwünscht sein.
Ok, dann muss man das so machen
Set item = doc.ReplaceItemValue( "Categories", "" )

Ansonsten kapier ich auch nicht, warum Deine Lösung nicht funktionieren sollte. Ist ja prinzipiell das gleiche.

Andreas G.  ;)
Titel: Re:Im Backend Mehrfachwerte in ein Textfeld schreiben
Beitrag von: koehlerbv am 07.06.04 - 17:22:41
Ich hatte das ja heute schon mal postuliert mit dem "Brett vor'm Kopf", welches ich zu haben glaubte. Sicherheitshalber habe ich Glombi's und meine Methode eben mal nebeneinander ausprobiert - aber erwartungsgemäss keinen Unterschied feststellen können:

Glombi:
Code
   Dim ws As New NotesUIWorkspace
   Dim docDeserts As NotesDocument
   Dim itemDeserts As NotesItem
   Dim aDeserts (0 To 2) As String
   
   aDeserts (0) = "Gobi"
   aDeserts (1) = "Kalahari"
   aDeserts (2) = "Sahara"
   
   Set docDeserts = ws.CurrentDocument.Document
   Set itemDeserts = docDeserts.ReplaceItemValue ("Deserts", aDeserts)

Der Ich:
Code
   Dim ws As New NotesUIWorkspace
   Dim docDeserts As NotesDocument
   Dim aDeserts (0 To 2) As String
   
   aDeserts (0) = "Sahara"
   aDeserts (1) = "Kalahari"
   aDeserts (2) = "Gobi"
   
   Set docDeserts = ws.CurrentDocument.Document
   docDeserts.Deserts = aDeserts

Die Ergebnisse sind absolut identisch.

Jetzt ist Andreas der Gruenkohl im Erklärungsnotstand  ;)
Würde mich echt interessieren, welcher Nebenumstand da mitgespielt hat.

Bernhard
Titel: Re:Im Backend Mehrfachwerte in ein Textfeld schreiben
Beitrag von: TMC am 07.06.04 - 23:24:51
Und zwar wie kann im Backend in ein Textfeld Mehrfachwerte schreiben, so das sie auch als Mehrfachwerte erkannt werden?
Ich habe in den Feldeigenschaften folgendes eingestellt:

Noch zur Ergänzung:

Wenn Du per Script auf Felder zugreifst, bekommst Du Strings (völlig egal, ob das Feld auf 'Mehrfachwerte' etc. eingestellt ist).
Wenn Du auf Itemebene (also Dokumentenseitig) zugreifst, bekommst Du immer ein Array - auch wenn das ursprünglich zugrunde liegende Feld z.B. vom Typ "Zahl, ohne Mehrfachwerte" war.
Titel: Re:Im Backend Mehrfachwerte in ein Textfeld schreiben
Beitrag von: koehlerbv am 07.06.04 - 23:44:04
Zitat
Wenn Du per Script auf Felder zugreifst, bekommst Du Strings (völlig egal, ob das Feld auf 'Mehrfachwerte' etc. eingestellt ist).
Wenn Du auf Itemebene (also Dokumentenseitig) zugreifst, bekommst Du immer ein Array - auch wenn das ursprünglich zugrunde liegende Feld z.B. vom Typ "Zahl, ohne Mehrfachwerte" war.

Ich bin jetzt etwas verwirrt. Insbesondere, da Andreas vom Backend sprach: Wie meinst Du das ? Wann bekommst Du skalare Werte zurück ?

Bernhard

PS: Vielleicht hörst Du ja bald wieder den berühmten "Klatsch" bis nach Niederbayern, wenn meine Hand wieder an die Stirn knallt  ;)
Titel: Re:Im Backend Mehrfachwerte in ein Textfeld schreiben
Beitrag von: TMC am 07.06.04 - 23:58:26
Mein comment war deshalb, weil ich "Feld" und "Backend" gelesen hatte (und Backend ja auch im Thread-Betreff steht).

Mein Verständnis:
Im Backend interessieren "Felder" überhaupt nicht. Hier haben wir mit Items zu tun, und die geben uns immer Arrays zurück. Nice to have, dass vielleicht mal eine Maske verwendet wurde, um unser Backend-Doc zu speichern - aber das interessiert im Backend ja eigentlich nicht,

Wenn man im Frontend Felder anspricht, bekommt man Stings (z.B. uidoc.fieldgtetext).
Titel: Re:Im Backend Mehrfachwerte in ein Textfeld schreiben
Beitrag von: TMC am 08.06.04 - 00:11:21
Zurück zum Unterschied der beiden o.g. Scripts.

Imho ist da kein Unterschied:

Ob man nun via Items oder direkt mit doc.* arbeitet - es sollte nach meinem Verständnis kein Unterschied da sein, da man ja auch mit doc.* ein Item des Backenddocs anspricht. Ich kann mir nicht vorstellen, dass via doc.* kein Array übergeben wird - dies würde wohl der ganzen LS-Philosophie widersprechen.
Titel: Re:Im Backend Mehrfachwerte in ein Textfeld schreiben
Beitrag von: koehlerbv am 08.06.04 - 00:16:01
Jo, verstanden. Und Du hast mit Deiner Erklärung natürlich vollkommen Recht: Im Backend gibt es nur Items, und die sind (ausser RTIs) immer Arrays. Dafür braucht es auch keine Masken. Und im FrontEnd kommt man nicht an die Arrays heran, sondern sieht sich nur skalaren Werten gegenüber.

Merci,
Bernhard
Titel: Re:Im Backend Mehrfachwerte in ein Textfeld schreiben
Beitrag von: TMC am 08.06.04 - 00:21:45
Keine Ursache, Bernhard. Es war auch von mir nicht ganz klar dargelegt und kam wohl verwischt rüber, da das Wörtlein "UI" fehlte und ich nur von Backend schrieb  ;)
Titel: Re:Im Backend Mehrfachwerte in ein Textfeld schreiben
Beitrag von: koehlerbv am 08.06.04 - 00:22:33
Zitat
Ob man nun via Items oder direkt mit doc.* arbeitet - es sollte nach meinem Verständnis kein Unterschied da sein, da man ja auch mit doc.* ein Item des Backenddocs anspricht. Ich kann mir nicht vorstellen, dass via doc.* kein Array übergeben wird - dies würde wohl der ganzen LS-Philosophie widersprechen.

Da besteht auch kein Unterschied, und ob ich mit einer expliziten Methode (NotesDocument.GetItemValue) oder "direkt" (NotesDocument.ItemName) - was letztlich auf den gleichen API-Code wie GetItemValue zurückgreift) - Items auslese: Man bekommt immer (!) Arrays zurück. Selbst, wenn das Item gar nicht existiert.

Ich präferiere aus Gründen der besseren Lesbarkeit und des einfacheren Codings übrigens die Variante
NotesDocument.ItemName
statt
NotesDocument.GetItemValue.
Wie gesagt: Beides landet in den gleichen API-Routinen  :)

Bernhard
Titel: Re:Im Backend Mehrfachwerte in ein Textfeld schreiben
Beitrag von: koehlerbv am 08.06.04 - 00:25:14
Zitat
Keine Ursache, Bernhard. Es war auch von mir nicht ganz klar dargelegt und kam wohl verwischt rüber, da das Wörtlein "UI" fehlte und ich nur von Backend schrieb
Ich glaube, da müssen wir uns beide nicht entschuldigen. Aber vielleicht hilft unser so dokumentierter Disput wieder dem einen oder anderen, der sich mit derartigen Basics noch herumquält (wie wir das früher auch mal gemacht haben  ;D)

Bernhard