Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: tpo am 14.04.08 - 15:06:44

Titel: Error 4188 bei MakeResponse
Beitrag 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!?
Titel: Re: Error 4188 bei MakeResponse
Beitrag von: Axel am 14.04.08 - 16:07:36
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
Titel: Re: Error 4188 bei MakeResponse
Beitrag von: tpo am 14.04.08 - 16:42:37
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

Titel: Re: Error 4188 bei MakeResponse
Beitrag von: ata am 14.04.08 - 22:04:28
... 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
Titel: Re: Error 4188 bei MakeResponse
Beitrag von: pram am 10.11.09 - 11:39:06
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