Das Notes Forum
Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: ewald am 18.05.07 - 12:06:38
-
Hallo zusammen,
hab folgendes Problem mit GetItemValue:
Ich kopiere ein Document in einer View mit einem Button (Agent dahinter) mit folgendem Code (der auch soweit funktioniert):
-----Start code-------
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Dim docA As NotesDocument
Dim docB As NotesDocument
Dim collection As NotesDocumentCollection
Set db = session.CurrentDatabase
Set collection = db.UnprocessedDocuments
Set docA = collection.GetFirstDocument()
Dim NewStatus As String, NeuDat As Variant
NewStatus = "Draft"
NeuDat = Now
'Holen des aktuellen Benutzers
Dim nam As NotesName
Dim user As String
user = session.UserName
Set nam = session.CreateName(user)
If Not (docA Is Nothing) Then
Set docB = New NotesDocument( db )
Call docA.CopyAllItems( docB, True )
'An der Stelle kommt mein GetItemValue code!!!!!
'Reset some fields in the new document (docB)
Call docB.ReplaceItemValue( "CopyFlag", "1" )
Call docB.ReplaceItemValue( "vCopyFlag", "Copy" )
Call docB.ReplaceItemValue( "DocOriginator", nam.Abbreviated )
Call docB.ReplaceItemValue( "DocOrigDate", NeuDat )
Call docB.Save( True, True )
Messagebox "Document successfully copied."
Else
Messagebox "No documents found"
End If
End Sub
-----End code-------
Nun möchte ich an der markierten Stelle im Code den Inhalt eines Feldes der Form lesen. Das wollte ich mit GetItemValue und dem folgenden Code machen:
Dim wert As String
wert=docB.GetItemValue("FormName")
Msgbox wert
Ich krieg an der Stelle aber einen Typemissmatch :-(
Grüße Ewald
-
GetItemValue liefert ein Array zurück, Messagebox erwartet aber einen String! Ergo muss man vor der Ausgabe mit Messagebox einen String erzeugen.
Bernhard
-
Bernhard,
hab jetzt MsgBox Cstr(wert) der Typemissmatch kommt aber immer noch
Ewald
-
Ewald - wie wärs, wenn Du das Cstr DORT einbaust, WO Du dem STRING ein ARRAY ZUWEIST, und nicht dort, wo Du den String ausgibst?
-
Cstr dient nicht dazu, ein Array in einen skalaren Wert zu verwandeln.
Einfache Möglichkeiten für die Ausgabe eines per GetItemValue geholten Wertes stehen gleich in den ersten Beispielen der DesignerHelp. Wird die eigentlich gar nicht benutzt??
Bernhard
-
Wie mache ich aus einem Array einen Wert?
Ganz einfach mit (0)
also
wert = docB.getitemvalue("FormNAme")(0)
RTFM :-P
-
Damit "macht" man aber aus einem Array keinen skalaren Wert, sondern man zieht damit nur den ersten skalaren Wert aus einem Array ...
Bernhard
-
Die Designer Hilfe hab ich vorhin schon durchgenudelt. Da hab ich auch was gefunden:
Dim subj As Variant
subj = doc.GetItemValue( "Subject" )
Messagebox( subj( 0 ) )
Meins sieht doch eigentlich auch nicht so sehr anders aus
Dim wert As Variant
wert=docB.GetItemValue("FormName")
Messagebox (wert (0) )
Ewald
-
sorry, hab ich ganz vergessen: ich krieg ne leere msgbox zurück
-
Wo ist nun das Problem? Da wird wahrscheinlich das Feld "FormName" leer sein....
schon mal den Debugger angeworfen?
-
Das Feld ist aber nicht leer. Wenn ich nämlich das neu, kopierte Doc anschaue, dann steht da in dem Feld was drin. Kann es sein, dass ich vor meiner Aktion das neu kopierte Doc einmal speichern muss?
Ewald
-
Speichern hilft auch nix, hab ich grad probiert
-
Wie schaust Du das neue Dokument an? via Maske oder über die Dokumenteneigenschaften? Könnte es ein Computed for display feld sein?
-
Ich glaub, ich hab den Fehler gefunden:
Das Feld ist Computed when composed. Das ist aber nicht das Problem. Ich hab mal ein neues Ursprungs document angelegt und das dann kopiert und siehe da es funktioniert. Nehm ich vorhandenes Doc, dann gehts nicht. Wenn ich ein vorhandenes Doc allerdings erneut speichere, dann gehts auch da.
Ewald
-
@All,
es funktioniert!!
@Bernhard,
so wie es in der Designer Hilfe steht hab ich es ja zu allererst auch gehabt.
Designer Hilfe ist immer mein erster Anlaufpunkt.
Das Problem war wirklich nur, dass ich es immer mit existierenden Dokumenten getestet hab und da war meine MsgBox halt immer leer. Da dacht ich immer, es liegt an meinem Programmcode.
Danke nochmal an alle!
Grüße Ewald