Antwortdokument in Antwortdokument ohne Bezug zum Hauptdokument

  • Hallo zusammen,


    Ich ordne einem Hauptdokument (Maske A) ein Antwortdokument (Maske B) zu. Beim Schleißen des Hauptdokumentes werden Feldinhalte aus dem Antwortdokument ausgelesen und in das Haupt-dok eingetragen.


    Aus Gründen der Benutzerführung habe ich nun nachfolgendes Problem:


    Dem Antwortdokument (Maske B) wird ein weiteres Antwortdokument (Maske C) zugeordnet. Auch hier sollen dann beim Schließen des Haupt-Dok Werte aus Maske C in das Haupt-dok geschrieben werden.
    Das Haupt-dok findet jedoch die Inhalte aus Maske C nicht, d.h. mein Set collection = doc.Responses greift ins leere. Denke, es liegt an der DokID. Maske C sieht wohl Maske B als "Muttertier". Maske C soll jedoch weiterhin Maske A als Haupt-Dok ansehen. Wie kann ich das LS-mäßig realisieren bzw. wie findet Maske A Inhalte aus Maske C?

    • Offizieller Beitrag

    mit doc.Responses bekommst Du eine NotesDocumentCollection und diese Collection musst Du Dokument für Dokument durchgehen und für diese Dokumente wieder die Responses holen.


    Oder Du übernimmst in alle Dokumente mit der Maske B und C in ein Feld die DocumentUniqueID der Dokumente, die mit der Maske A erstellt wurden. Über eine Ansicht, in der die Dokumente der Maske B und C nach diesem Feld sortiert angezeigt werden, kannst Du dann danach suchen und hast alle Dokument, die Antwortdokumente zu dem Dokument mit der Maske A sind (egal ob diese mit maske B oder C erstellt wurden).


    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

  • so klappt der Zugriff irgendwie nicht. Der collection2 weiß nicht, dass Maske B sein "Hauptdokument" ist



    Dim session As New NotesSession
    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Dim doc3 As NotesDocument
    Dim collection As NotesDocumentCollection
    Dim collection2 As NotesDocumentCollection
    Set uidoc = workspace.CurrentDocument
    Set uidoc2 = workspace.CurrentDocument
    Set uidoc3 = workspace.CurrentDocument
    Set doc = uidoc.Document
    Set doc2 = uidoc2.Document
    Set doc3 = uidoc3.Document
    Dim db As NotesDatabase


    ...
    Set collection = doc.Responses
    Set doc = collection.GetFirstDocument
    While Not doc Is Nothing


    ....
    If doc.MeinFeld(0) <> "" Then


    Set doc = collection.GetDocument (doc)
    Set collection2 = doc3.Responses
    Set doc3 = collection.GetFirstDocument
    ....
    end if
    ....
    Wend


    ....

    • Offizieller Beitrag

    naja die Reihenfolge stimmt irgendwie nicht.

    Code
    Set doc = collection.GetDocument (doc)
    Set collection2 = doc3.Responses
    Set doc3 = collection.GetFirstDocument


    GetDocument gibt es in NotesDocumentCollection nicht - muss bestimmt collection.GetFirstDocument sein.


    Und die 3. Zeile muss als erste kommen, sonst hast Du in der 2. Zeile das doc3 noch nicht.


    Gruß
    Dirk

  • Sorry, gibt es schon: collection.GetDocument (doc)
    Greife damit auf das Dokument zu, wenn es einer Bedingung entspricht.


    Das collection.GetFirstDocument kommt schon früher im Code.


    Irgendwie chekct er nicht, dass die collection2 das Antwortdokument als "Mutter" hat.


    Denn mit Messagebox(collection2.Count) zeigt er immer die Antwortdokument von Maske A und nicht von Maske B.

    • Offizieller Beitrag

    dann zeige mal, wie Du das doc3 holst und wie Du vorher an die DocumentCollection kommst.


    Gruß
    Dirk


    %edit
    NotesDocumentCollection.GetDocument gibt es, war wohl vorhin bei ner NotesNoteCollection - wird Zeit fürs Wochenende!

  • Da hast Du schon Recht. Leigt irgendwie an der Deklarierung...


    Dim session As New NotesSession
    Dim workspace As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Dim doc3 As NotesDocument
    Dim collection As NotesDocumentCollection
    Dim collection2 As NotesDocumentCollection
    Dim term As String
    Dim term2 As String
    Set uidoc = workspace.CurrentDocument
    Set uidoc2 = workspace.CurrentDocument
    Set uidoc3 = workspace.CurrentDocument
    Set doc = uidoc.Document
    Set doc2 = uidoc2.Document
    Set doc3 = uidoc3.Document
    Dim acl As NotesACL
    Dim entry As NotesACLEntry
    Dim db As NotesDatabase
    Dim flag As Integer
    ' doc2 = Hauptdokument
    ' doc = Antwortdokument auf Hauptdokument
    ' doc3 = Antwortdok auf Antwortdok (doc)


    'Prüfen, ob ein neues Notes-Doc angelegt wurde. Hierzu kann es keine Antwortdokumente geben.
    If Not doc.IsNewNote Then

    'Prüfen, ob ein doc vorhanden ist
    If Not (doc Is Nothing) Then
    Set collection = doc.Responses
    Set doc = collection.GetFirstDocument

    While Not doc Is Nothing
    ....
    'Statuseinträge aus Maske Beurteilungsbogen
    If doc.Signatur1(0) = "" Then
    Else
    Set doc = collection.GetDocument (doc)
    Set collection2 = doc3.Responses
    Messagebox(collection2.Count)
    Set doc3 = collection2.GetFirstDocument
    doc2.StatAusgestellt = doc.Beurteilung_ausgestellt_am(0)
    End If
    Call doc2.Save(True,True)
    Set doc = collection.GetNextDocument(doc)
    Wend

  • Ok, habs jetzt geschaft ein collect für das Antwortdokument zu erstellen usw.


    Wie komme ich jetzt in den collect des Hauptdokumentes zurück?


    PS: die vielen Fehler im von mir geposteten Code bitte ignorieren.

    • Offizieller Beitrag

    ... nur ein Hinweis, verwende in dem Code nicht doc1, doc2, doc3 usw. sondern sprechende Namen, wie z.B. doc_parent, doc_antwort usw., dann hast Du es in ein paar Monaten leichte den Code zu lesen und zu warten.


    Gruß
    Dirk

  • Das ist richtig. Die collection hat immer noch die richtigen Dokumente. Ich kann jedoch nicht darauf zugreifen.


    doc2 = Hauptdokument
    doc = Antwortdokument


    Set collection = doc2.Responses
    Set doc = collection.GetFirstDocument


    = collection für Hauptdokument



    Set collection2 = doc.Responses
    Set doc = collection2.GetFirstDocument


    = collection für Antwortdokument



    und da soll er wieder auf die collection des Haupt-Dok zugreifen.
    die Set doc = uidoc.Document -Eigenschaften gehen jedoch vollkommen verloren (Fehlermeldung: Object variable not set.):


    Set doc = collection.GetDocument (doc2)

    • Offizieller Beitrag

    aber Du hast doch das Hauptdokument noch im doc2 oder verpeile ich da etwas?


    ähm was machst Du eigentlich mit
    Set uidoc = workspace.CurrentDocument
    Set uidoc2 = workspace.CurrentDocument
    Set uidoc3 = workspace.CurrentDocument
    Set doc = uidoc.Document
    Set doc2 = uidoc2.Document
    Set doc3 = uidoc3.Document


    Damit hast due 3 uidoc und 3 doc vom selben Element!


    Da reicht doch ein Objekt.


    Gruß
    Dirk

  • Ja stimmt. Das hab ich alles schon rausgeschmissen. Hatte da wohl einen Hirnverdreher.
    Das Hauptdok ist doc2. Ich komm aber nach wie vor nicht in die collection von doc2 zurück.


    Versuche das mit Set doc = collection.GetDocument (doc2)

  • ???


    Du suchst in den Antwortdokumenten des Hauptdokumentes nach dem Hauptdokument
    Wozu ?


    Mit der Schleife in der du durch alle Antwortdokumente, d.h. alle Dokumente in collection gehst machst du doch genau das.


    Oder was willst du erreichen ?

  • Was wil ich erreichen? Ich halte mich an den Rat von Diali:


    "mit doc.Responses bekommst Du eine NotesDocumentCollection und diese Collection musst Du Dokument für Dokument durchgehen und für diese Dokumente wieder die Responses holen."


    Das funktioniert. Ich komme aber nicht mehr in die NotesDocumentCollection des Hauptdokumentes im Konstrukt
    While Not doc Is Nothing
    .....


    Wend


    zurück. Er bleibt in der NotesDocumentCollection des Antwortdokumentes hängen.

    • Offizieller Beitrag

    mh Du versuchst alles in einer Schleife abzuarbeiten, Du musst aber 2 Schleifen verwenden.
    In etwa so:


    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

  • Tust du nicht wirklich.


    Die Schleife sieht folgendermaßen aus:


    set doc = collection.GetFirstDocument


    do while not doc is nothing


    set doc = collection.GetNextDocument(doc)
    loop


    Damit geht er alle Dokumente die in collection sind durch.


    Und für die Unterdokumente machst du das gleiche nochmals innerhalb.


    GetDocument kannst du eigentlich nur verwenden um zu prüfen ob in einer Collection ein Dokument drin ist.
    Zu was anderes ist die Methode nicht zu gebrauchen

  • Diali: Diese Struktur hatte ich mittlerweile so. Und, oh Wunder, es funzt jetzt. Es lag daran, dass ich für beide collection die gleiche Variable verwendet habe. Dann überschreibt natürlich die eine collection die andere und erstere ist dann verloren.


    Bitte nicht fragen warum ich das so gemacht habe....



    Danke Euch beiden!