Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: pimpfling am 27.01.09 - 16:37:32
-
Hallo,
Meine Suche im Forum war leider erfolglos, darum nun meine Fragen:
Szenario:
Ich habe ein Hauptdokument das mehrere Antwortdokumente haben kann.
Das Hauptdokument hat eine embedded View in der die Antwortdokumente zu sehen sind.
Eins der Antwortdokumente hat einen Fleck, äh Flag gesetzt.
Es darf auch nur eins der Antwortdokumente diesen Flag gesetzt haben.
1.) Wie kann ich bei einem Antwortdokument (im FrontEnd) kontrollieren ob ein anderes (dazugehöriges Antwortdokument) das Flag gesetzt hat?
2.) Wie kann ich aus dem Hauptdokument heraus das Flag von einem Antwortdokument zu einem anderen umsetzen?
Vielen Dank
Stefan
-
Mit NotesDocument.ParentDocumentUNID kommst Du vom Child an das Parent heran, von dort via Responses an alle Antwortdokumente (auf der nächsten Ebene). Damit Kannst Du dann durchgehen, wo das Flag gesetzt ist oder aus einem Child bei einem anderen das Flag entfernen.
Bernhard
-
Hallo Bernhard, vielen Dank für die schnelle Hilfe.
Ich versuche mich erstmal mit dem Punkt 1.)
Leider bin ich nicht der grosse LS Profi. Ich habe jetzt erstmal folgenden Code in einem Button eingebaut um auf die anderen Antwortdokument (collection) zuzugreifen:
Dim parentUnid As String
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim db As NotesDatabase
Dim Parent As NotesDocument
Dim collection As NotesDocumentCollection
Dim currentResponse As NotesDocument
Dim session As NotesSession
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
Set session = New NotesSession
Set db = session.CurrentDatabase
parentUnid = doc.ParentDocumentUNID
Set parent = db.GetDocumentByUNID (parentUnid )
Set collection = parent.Responses
Set currentResponse = collection.GetFirstDocument
Jetzt würde ich die DocumentCollection durch gehen und die einzelnen Antwortdokuemnte bearbeiten...
Ist das soweit erstmal richtig oder renne ich da in die falsche Richtung?
Und wenn ich das soweit fertig habe mit einem Button, an welcher Stelle in der Maske sollte ich das am besten einbauen?
Im QuerySave event das dann zieht wenn das Flag gesetzt wurde?
Oder in einem der Events von dem Flagfeld?
Bin mir an der Stelle nicht sicher was die schlaueste/sauberste Methode wäre...
Vielen Dank
Stefan
-
Ohne jetzt Deinen Code im Detail gecheckt zu haben: Du bist so auf dem richtigen Dampfer.
Wo Du das dann einbauen sollst, kann ich Dir so noch nicht beantworten, da mir Dein Ziel nicht klar ist. Willst Du sicherstellen, dass das Flag immer nur in einem Response ist? Dann solltest Du das entweder
- ins QuerySave packen oder
- in den Flag-setzen-Button, wenn Du dort auch gleichzeitig das aktuelle Dokument speicherst.
Aufpassen musst Du, dass Du ein Flag nur dann entfernst, wenn es nicht gerade das aktuelle Dokument ist (UniversalID zum Vergleich)!
Bernhard
-
Hallo,
vielen Dank für die Hinweise.
mein Code im QuerySave sind nun wie folgt aus:
Dim parentUnid As String
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim db As NotesDatabase
Dim Parent As NotesDocument
Dim collection As NotesDocumentCollection
Dim currentResponse As NotesDocument
Dim session As NotesSession
Dim item As NotesItem
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
Set session = New NotesSession
Set db = session.CurrentDatabase
parentUnid = doc.ParentDocumentUNID
Set parent = db.GetDocumentByUNID (parentUnid )
Set collection = parent.Responses
Set currentResponse = collection.GetFirstDocument
If doc.GetItemValue( "DC_ActiveDevice" )(0) = "Yes" Then
While Not currentResponse Is Nothing
If doc.UniversalID <> currentResponse.UniversalID Then
Set item = currentResponse.ReplaceItemValue( "DC_ActiveDevice", "" )
Call currentResponse.Save( True, True )
'Messagebox "Flag für Device " + currentResponse.GetItemValue( "DC_Device" )(0) + " gesetzt."
End If
Set currentResponse = collection.GetNextDocument(currentResponse)
Wend
End If
Funktioniert einwandfrei.
Jetzt mache ich mich daran das ganze mit den Antwortdokumenten in einer embedded View, mal sehen wie tricky das wird, wenn gewünscht kann ich das Ergebnis hier auch posten...
Leider fehlt mir momentan der Ansatz wie ich an das in der embedded view selectierte Antwortokument komme... :(
Gruß Stefan
-
Der einfachste Weg: Mach Deinen Button in die Ansicht und lass in der embedded view die Buhtongs mit anzeigen.
Bernhard
-
Funzt super, danke :)
Dim parentUnid As String
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim db As NotesDatabase
Dim Parent As NotesDocument
Dim collection As NotesDocumentCollection
Dim currentResponse As NotesDocument
Dim session As NotesSession
Dim item As NotesItem
Dim uiview As NotesUIView
Dim doc As NotesDocument
Set uidoc = workspace.CurrentDocument
Set userdoc = uidoc.Document
Set session = New NotesSession
Set db = session.CurrentDatabase
parentUnid = userdoc.UniversalID
Set parent = db.GetDocumentByUNID (parentUnid )
Set collection = parent.Responses
Set currentResponse = collection.GetFirstDocument
Set uiview = workspace.CurrentView
Set doc = db.GetDocumentByID(uiview.CaretNoteID)
Set item = doc.ReplaceItemValue( "DC_ActiveDevice", "Yes" )
Call doc.Save(True,True)
If doc.GetItemValue( "DC_ActiveDevice" )(0) = "Yes" Then
While Not currentResponse Is Nothing
If doc.UniversalID <> currentResponse.UniversalID Then
Set item = currentResponse.ReplaceItemValue( "DC_ActiveDevice", "" )
Call currentResponse.Save( True, True )
'Messagebox "Flag für Device " + currentResponse.GetItemValue( "DC_Device" )(0) + " gesetzt."
End If
Set currentResponse = collection.GetNextDocument(currentResponse)
Wend
End If
Call Workspace.ViewRefresh