Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: tpo am 14.04.08 - 15:06:44
-
Hallo Gemeinde,
ich habe folgendes Phänomen bei "makeResponse":
Dim uidoc As NotesUIDocument
' uidoc ist vorhanden und gespeichert
Dim docNew As Notesdocument
'...
Call docNew.MakeResponse(uidoc.Document)
Hier steigt mein Script (manchmal) aus mit der Fehlermeldung:
Error (4188) in Name.ls, line 111: Parent and Response Documents must be in the same database
Selbstverständlich sind beide Dokumente in der selben Datenbank erstellt!!!
Den einzigen Unterschied, den ich im Debugger feststellen kann, ist:
Wenn der Fehler auftritt, ist die Schreibweise des Server-Namens unterschiedlich
dim sTemp as string
sTemp = docNew.ParentDatabase.Server '// SRV01/SRV/TEST
sTemp = uidoc.Document.ParentDatabase.Server '// CN=SRV01/OU=SRV/O=TEST
Das Ganze passiert auf unterschiedlichen Clients: R6.5.4, R7.x
Server ist R7.0.2FP2 auf Windows NT 5.2
Hat jemand eine Idee!?
-
Ich weiß zwar nicht ob die unterschiedliche Schreibweise des Servernamens dafür verantwortlich ist, aber um das auszuschließen würde ich einmal den Servernamen ermitteln und den dann verwenden.
Dim session As New NotesSession
Dim db As NotesDatabase
Dim strServer As String
Set db = session.CurrentDatabase
strServer = db.Server
...
Wenn dann nichts fruchtet, dann poste doch bitte mal das gesamte Script.
Axel
-
Jetzt steh ich etwas auf dem Schlauch: "Servernamen ermitteln und den dann verwenden" ???
Bei der Funktion
Call docNew.MakeResponse(uidoc.Document)
verwende ich den Servernamen ja nicht explizit.
Der beigefügte Code
dim sTemp as string
sTemp = docNew.ParentDatabase.Server '// SRV01/SRV/TEST
sTemp = uidoc.Document.ParentDatabase.Server '// CN=SRV01/OU=SRV/O=TEST
soll nur dazu dienen, um zu zeigen dass die Servernamen unterschiedlich angezeigt werden. sTemp hat sonst keinerlei Funktion. Der Fehler passiert schon früher in der Zeile ... makeResponse...
Hier ist der komplette Code:
Private Function CreateResponses(col As NotesDocumentCollection) As String
On Error Goto error_Handle
Dim ses As New NotesSession
Dim dbCurr As NotesDatabase
Set dbCurr = ses.CurrentDatabase
If col. count > 0 Then
Dim docSelected As NotesDocument
Set docSelected = col.GetFirstDocument
Dim docNew As NotesDocument
While Not docSelected Is Nothing
CreateResponses = docSelected.strResName(0)
Set docNew = dbCurr.CreateDocument
Call docSelected.CopyAllItems( docNew, True )
docNew.ApprovalStatus = "Not approved"
Dim item As NotesItem
Set item = docNew.GetFirstItem( "rtfResBody" )
Call item.Remove
Dim namCurrUser As New NotesName(ses.UserName)
docNew.nameUpdatedBy = namCurrUser.Common
docNew.nameCreator = namCurrUser.Common
docNew.strShowHistory = "YES"
Redim aryFieldValues(0 To 1) As Variant
aryFieldValues(0) = "[ADMIN]"
aryFieldValues(1) = "[READ ALL]"
docNew.Readers = aryFieldValues
Redim aryFieldValues(0 To 2) As Variant
aryFieldValues(0) = "[ADMIN]"
aryFieldValues(1) = "[EDIT ALL]"
aryFieldValues(2) = namCurrUser.Canonical
docNew.Editors = aryFieldValues
'// m_uiProxy ist ein globales (public) NotesUIDocument
Call docNew.MakeResponse( m_uiProxy.Document ) '// Hier passiert der Fehler
Call docNew.Save( True, False )
Set docSelected = col.GetNextDocument( docSelected )
Wend
End If
cleanup_Handle:
On Error Goto 0
GetExtendedError.ThrowLastError MODULE_NAME + "." + Typename(Me)
Exit Function
error_Handle:
GetExtendedError.Store Err, Erl, Error$, MODULE_NAME + "." + Typename(Me)
Resume cleanup_Handle
End Function
-
... die Kopie des Dokumentes lässt sich mit docNew.CopyToDatabase(dbThis) wesentlich einfacher gestalten - da dürfte das bisher geschilderte keine Auswirkung mehr haben...
Toni
-
Hatte gerade selbes Problem.
Das Problem trat auf, wenn man die selbe DB nochmals mit openByReplicaID() öffnet und hier den Servernamen in Kurzform angibt.
Und zwar ändert sich dann in allen Dokumenten ParentDatabase.server von Langform auf Kurzform, ausser im UI-Document. Somit sind Dokumente aus dem Backend scheinbar nicht mehr in der gleichen DB
Evtl hilft es wem bei der Fehlersuche
Gruß
Roland