Autor Thema: Error 4188 bei MakeResponse  (Gelesen 2700 mal)

Offline tpo

  • Frischling
  • *
  • Beiträge: 4
  • Geschlecht: Männlich
Error 4188 bei MakeResponse
« 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!?

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Error 4188 bei MakeResponse
« Antwort #1 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
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline tpo

  • Frischling
  • *
  • Beiträge: 4
  • Geschlecht: Männlich
Re: Error 4188 bei MakeResponse
« Antwort #2 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


Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Error 4188 bei MakeResponse
« Antwort #3 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
Grüßle Toni :)

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Error 4188 bei MakeResponse
« Antwort #4 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
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz