Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: SnooP am 26.06.03 - 17:20:45
-
Ich habe ein Script das ein Feld durch ein Klick im Backend ändert und das Dokument anschließend schließt.
Hier mein Script:
Dim UiWs As New Notesuiworkspace
Dim uidoc As notesuidocument
Dim doc As notesdocument
Dim var As Integer
Set uidoc=uiws.currentdocument
Set doc=uidoc.document
var2=Messagebox ("Sind sie sicher?", 36 , "Frage")
If var2=6 Then
If doc.wpm(0)="wpm" Then
doc.Status="2"
var=Messagebox ("test", 32 , "bla")
Call doc.save(True, True)
Call uidoc.Close
Else
doc.Status="3"
Call doc.save(True, True)
Call uidoc.Close
End If
End If
End Sub
so, das Funktioniert auch. In diesem Dokument befindet sich eine TeilMaske, mit 3 Feldern :
SessionTimes
SessionEditors
SessionStatus
die es mir eine Historie ermöglicht, wann und durch wen ein Dokument geändert wurde. Soweit so gut.
Jetzt habe ich schon mehrer Stunden verbracht mein Problem zu lösen und bin zu keinem Ergebniss gekommen.
Ich möchte, dass mitprotokuliert wird wenn sich das Feld FeldName="Status" ändert. Die Änderung erfolgt wie oben beschrieben im Backend duch ein Click auf ein Button.
Das Problem dabei ist eigentlich der, dass meine History nurmitbekommt, dass ein Doku. gespeichert wurde und sich ein feld verändert hat (Stichwörter: Postopen, Querysave, Postsave). Da ich das Feld aber im Backend verändere, bekommt meine History das nicht mit.
Danke im Voraus
-
wenn sich was "ändert" ...
dazu trägst Du ins PostOpen Event der Maske eine globale Variable ein, die im IDE "Initialize" Bereich dann gefüllt wird (immer noch PostOpen Event) mit [CHECKER = doc.status(0)]
wenn nun Dein Buttonm Click kommt,
erfolgt die Überprüfung per
if doc.status(0) <> CHECKER Then
mach Deine Historie.....
End
die Historie selber, also in ein Feld etwas fortzuschreiben ist nicht so schwer (mal etwas umständlicher der Code, abert hoffentlich nachvollziehbarer):
Dim current As String
current$ = Time$()
Auslesen = doc.Historie(0)
Neu = doc.FeldABC(0) & " am " & current$
Protokoll = Auslesen & Chr(10) & Neu
doc.Historie=Protokoll
-
Leider bekomme ich es nicht hin daher alles etwas ausführlicher:
ich habe eine Teilmaske mit 3 Feldern:
SessionTimes = (Wert) @Now
SessionEditors =(Wert) @UserName
SessionStatus = (Wert) "Dokument erstellt"
in der Maske (im Dokument) befindet sich ein Feld "CommentHistory"
Im Feld sind folgende Werte einegtragen:
(SessionStatus + ": ") + @Name([CN];SessionEditors)+" am " + @Replace(@Text(@Weekday(SessionTimes));"1":"2":"3":"4":"5":"6":"7";"Sonntag" : "Montag" : "Dienstag" : "Mittwoch" : "Donnerstag" : "Freitag" : "Samstag") + ", den "+
@Text(@Day(SessionTimes)) + "." + @Replace(@Text(@Month(SessionTimes)); "1":"2":"3":"4":"5":"6":"7":"8":"9":"10":"11":"12" ; "Januar":"Februar":"März":"April":"Mai":"Juni" : "Juli" : "August" : "September" : "Oktober" : "November":"Dezember") + " " + @Text(@Year(SessionTimes)) +
" um " + @Text(SessionTimes;"S1")
Jetzt muss ich in der Teilmaske den Script einbauen wie RobGreen es beschrieben hat.
Es müssen also alle veränderungen in ein Array geladen werden die dan dem Feld "CommentHistory" zugewiesen werden, der wiederum Zeigt wie Werte bzw. Daten in der Maske an.
Leider bekomme ich es nicht hin !!!
Hier mein verzweifelter Versuch:
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim uiDoc As NotesUIDocument
Dim currentDoc As NotesDocument
Dim dateField As NotesItem
Dim statusField As NotesItem
Dim nameListItem As NotesItem
Dim nameArray As Variant Dim dateArray As Variant
Dim statusArray As Variant
Set uiDoc = workspace.CurrentDocument
Set currentDoc = uiDoc.Document
Stop
REM Append the "SessionEditors" field with the current editor of the document.
Set nameListItem = currentDoc.GetFirstItem( "SessionEditors" )
Set dateField = currentDoc.GetFirstItem( "SessionTimes" )
Set statusField = currentDoc.GetFirstItem( "SessionStatus" )
nameArray = nameListItem.Values
dateArray = dateField.Values
statusArray = statusField.Values
If addToFields And (Not uiDoc.IsNewDoc) Then
Redim Preserve nameArray(Ubound(nameArray) + 1)
Redim Preserve dateArray(Ubound(dateArray) + 1)
Redim Preserve statusArray(Ubound(statusArray) + 1)
End If
nameArray(Ubound(nameArray)) = session.UserName
dateArray(Ubound(dateArray)) = Now
'- Prüfen der Veränderung des Statusfeldes-------------------------------------
If currentDoc.Status(0) <> checker Then
Redim Preserve statusArray(Ubound(statusArray) + 1)
statusArray(Ubound(statusArray)) = "Status geändert '
End If
If Not uiDoc.IsNewDoc Then
nameListItem.Values = nameArray
dateField.Values = dateArray
statusField.Values = statusArray
End If
End Sub
Danke im Voraus für eure Hilfe