Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: sja am 25.02.05 - 17:21:05
-
Hallo @All,
vielen Dank im Voraus für jede Hilfe, Type, Hinweis bei folgendem Problem.
Ein response übernimmt von parent u. a. die Felder (flagL_1, ... flagL_10) erst ohne den Inhalt zu ändern. Beim Speichern des response wird der Inhalt dieser Felder analysiert und für die Felder mit dem Inhalt = “1“ muss den Inhalt des gleichnamigen Feldes in der parent auf = “2“ gesetzt werden.
Dafür habe ich folgendes Script, das nicht richtig funktioniert und zwar, die Inhalt des Feldes in der parent bleibt = “1“. In dem Bild habe ich versucht die Ergebnisse zu zeigen
Sub Postsave(Source As Notesuidocument)
Dim ws As NotesUIWorkspace
Dim s As NotesSession
Dim db As NotesDatabase
Dim uiDoc As NotesUIDocument
Dim responseDoc As NotesDocument
Dim parentDoc As NotesDocument
Dim FeldName As String
Dim FeldInhalt As String
Dim i As Integer
Set s = New NotesSession
Set db = s.CurrentDatabase
Set ws = New NotesUIWorkspace
Set uiDoc = ws.CurrentDocument
Set responseDoc = uiDoc.Document
If responseDoc.IsResponse Then
Set parentDoc = db.GetDocumentByUNID(responseDoc.ParentDocumentUnID)
End If
If Not (parentDoc Is Nothing) Then
For i = 1 To 10 Step 1
FeldName = "flagL_" & Cstr(i)
FeldInhalt =uiDoc.FieldGetText( FeldName )
Messagebox FeldInhalt
If FeldInhalt = "1" Then
Messagebox parentDoc.FeldName(0)
parentDoc.FeldName = "2"
Messagebox parentDoc.FeldName(0)
End If
Next
Call parentDoc.Save( True, True )
End If
End Sub
Viele Gruesse,
Sofia
-
Hi,
das kann so nicht gehen.
If Not (parentDoc Is Nothing) Then
For i = 1 To 10 Step 1
FeldName = "flagL_" & Cstr(i)
FeldInhalt =uiDoc.FieldGetText( FeldName )
Messagebox FeldInhalt
If FeldInhalt = "1" Then
'Bis hier ist nichts am Code auszusetzen
'Ab hier wird falsch
Messagebox parentDoc.FeldName(0)
parentDoc.FeldName = "2"
Messagebox parentDoc.FeldName(0)
End If
Next
Call parentDoc.Save( True, True )
End If
Messagebox parentdoc.Feldname(0) zeigt dir den Inhalt des Feldes mit Namen Feldname. Du kannst hier, auf diese Weise, nicht mit Variablen arbeiten.
Das müsste so aussehen:
...
Dim item As NotesItem
...
If Not (parentDoc Is Nothing) Then
For i = 1 To 10 Step 1
FeldName = "flagL_" & Cstr(i)
FeldInhalt =uiDoc.FieldGetText( FeldName )
Messagebox FeldInhalt
If FeldInhalt = "1" Then
Messagebox parentdoc.GetItemValue(FeldName)(0)
Set item = parentdoc.ReplaceItemValue( FeldName, "2" )
Messagebox parentdoc.GetItemValue(FeldName)(0)
End If
Next
Call parentDoc.Save( True, True )
End If
Axel
-
Hallo Axel,
herzlichen Dank für Deine Hilfe. Das funktioniert! :)
Aber ehrlich zu sagen, bin ich hier verwirrt, da ich mir so vorgestellt habe, dass Claas NotesItem für RichText und Date/Time Felder vorgesehen ist. In dem Fall habe ich einfach ein Text-Feld und dachte mir, dass doc.FeldName = "Inhalt" funktionieren sollte. Verstehe nicht ganz klar der Unterschied zwischen dem Begriff Feld und dem Begriff Item.
Schöne Gruesse und noch mal vielen Dank
Sofia
-
Hallo,
In dem Buch ”Domino Designer R5” von Raimund Mann, Seite 348-349 stehet:
Zitat:
...
Um weiteren Zugriff auf ein Item zu erhalten. Muss im Normalfall ein Objekt Notesitem verwendet werden. Lotus Notes unterstützt jedoch eine sogenannte “erweiterte Klassendefinition“. Das bedeutet, dass ein Feldname eines Dokuments wie eine Eigenschaft des Dokuments sowohl zum Setzen als auch zum Lesen von Werten verwendet werden kann.
Soll bsp.weise der Wert des Feldes “Subject“ auf den Wert “ScriptIt – it’s easy“ gesetzt werden, kann man dies unter Verwendung den Methoden der Klasse NotesDocument wie folgt codieren:
’der Variablen doc ein Wert zu weisen
...
doc.ReplaceItemValue(“Subject“,“ScriptIt – it’s easy“)
…
Unter Verwendung der erweiterten Klassendefinition kann dies vereinfacht codiert werden:
’der Variablen doc ein Wert zu weisen
...
doc. Subject = “ScriptIt – it’s easy“
…
In der Verbindung zum o.g. Zitat verstehe ich nicht, warum bei mir funktionierte nicht folgendes:
parentDoc.FeldName = "2" ???
Vielen Dank, wenn jemand das erklären möchte.
Gruesse
Sofia
-
Du beziehst Dich auf zwei grundlegend unterschiedliche Dinge:
FeldName = "flagL_" & Cstr(i)
Damit belegst Du eine Stringvariable namens "Feldname" mit - z.B. - "flagL1"
parentDoc.FeldName = "2"
Hier sprichst Du ein Item (Feld) Deines NotesDocuments mit dem Namen "Feldname" an. Das ist aber etwas völlig anderes als die Variable gleichen Namens.
Mit der Kurznotation kannst Du Items nicht variabel ansprechen - es wird der hardgecodete Bezeichner verwendet. Mit Deinem ursprünglichen Code hast Du also ein Feld namens "Feldname" in Deinem Dokument erzeugt und mit "w" gefüllt.
Mit ReplaceItemValue hingegen kannst Du auch Variableninhalte als Itembezeichner verwenden.
HTH,
Bernhard
-
Hallo Bernhard
oh ja, jetzt ist es mir alles klar geworden! :)
Ich danke dir viel Mals, Du hast mir wieder sehr geholfen!
(Habe bei mir alles mögliches durchgekuckt und keine vernünftige Erklärung gefunden).
Schoene Gruesse
Sofia