copytodatabase Problem

  • Hallo Leute,


    ich habe ein seltsames Phänomen und kann mir dieses auch nicht erklären:


    Beim Kopieren eines Dokuments in eine andere DB bekomme ich kein Returnwert.


    Scribt:
    Set archivdoc = tmpdoc.copytodatabase(ArchiveDB)


    Das tmpdoc Dokument wird in die ArchiveDB kopiert und ist dort dann auch vorhanden. Der Returnwert archivdoc ist jedoch immer Nothing!


    Woran kann dies liegen?


    Gruß
    Logonas

    ---------------------------------
    Alles wird gut! :sunclaus:

  • Wo genau prüfst du den Returnwert ab ?
    Direkt danach oder irgendwann später ?


    Wenn du einem Objekt das übergeordnete Objekt nimmst dann verschwinden vor allem bei der Nutzung von Funktionen und Subs auch die Objekte.
    Daher wäre es sinnvoll deinen gesamten Code zu kennen

    • Offizieller Beitrag

    bei mir klappt diese Vorgehensweise.


    Welche Notes- bzw. Domino-Version (je nachdem wo der Agent läuft) setzt Ihr ein?


    Poste mal etwas mehr Code, z.B. wie kommst Du zu dem tmpdoc und der ArchiveDB, welche Rechte hat der Script-Ausführer auf die ArchiveDB (Einlieferer)?


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Hier der gewünschte Code:
    An der Berechtigung liegts nicht, da alle Mitarbeiter als Autor mit allen Rechten in der ACL eingetragen sind.




    Function C_ArchivDocument(tmpdoc As notesdocument,dbkey As String, typ As String, archivdelcoll As NotesDocumentCollection, deldoccoll As notesdocumentcollection) As Integer
    On Error Goto errhandler

    Dim archivdoc As NotesDocument
    Dim parentdoc As notesdocument
    Dim versionrefdoc As notesdocument
    Dim tmpdoccoll As NotesDocumentCollection


    Call ArchiveView.refresh
    Set archivdoc = ArchiveView.getDocumentbyKey(tmpdoc.UniversalID,True)
    If tmpdoc.HasItem("$Ref") Then
    Set parentdoc = ArchiveView.getDocumentbyKey(tmpdoc.getitemvalue("$Ref"),True)
    End If
    If tmpdoc.c_version_refunid(0) <> "" Then
    Set versionrefdoc = ArchiveView.getDocumentbyKey( tmpdoc.c_version_refunid(0),True)
    End If

    If archivdoc Is Nothing Then 'Dokument noch nicht vorhanden
    Set archivdoc = tmpdoc.copytodatabase(CONNECT_ArchiveDB)
    Else
    Forall tmpit In archivdoc.Items 'alle Items entfernen
    If Not tmpit Is Nothing Then Call tmpit.remove
    End Forall
    End If

    ---------------------------------
    Alles wird gut! :sunclaus:

  • Und wo stellst du fest, daß das NotesDocument Objekt leer ist ?


    Selbst wenn der User Autoren Zugriff auf die Datenbank hat kann das auch nicht ausreichend sein.
    Z.b. wenn das Dokument ein Leserfeld hat mit einer Rolle drin und er die Rolle in der neuen DB nicht hat, dann kann er zwar das Dokument kopieren aber danach nicht mehr darauf zugreifen, da er es ja auch nicht sieht

  • Du hast keine ArchivView definiert, oder ist die Global definiert?
    Set ArchiveView = db.getview("ViewName")


    Wird mit "tmpdoc" überhaupt ein Dokument an die Funktion übergeben?


    Ich würde das als erstes mal in der Funktion prüfen und dann erst nach dem "parentdoc" suchen.


    code scheint soweit okay.

    So is das mit dem Licht, mal brennt's und mal brennt's nicht.

    • Offizieller Beitrag

    mach mal den On Error raus, schau dann an welcher Stelle ein Fehler kommt (Debugger einschalten) und schau Dir die Objekte an, die in dieser Zeile benutzt werden.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein