Domino 9 und frühere Versionen > ND6: Entwicklung
Dokument mit aktualisierter Dokumentverknüpfung auf ein anderes Dok.
Pidray:
Hallo, ich hoffe, Ihr könnt mir hierbei weiterhelfen:
ich habe in einer Datenbank zwei Masken: 'Vorarbeit' und 'aktuell'. wobei ich in 'aktuell'-Dokumenten einen Link (+ Datum aus Link-Dok) anzeigen lassen will, welcher auf ein monatlich passendes 'Vorarbeit'-Dokument verweist. Dieser Link (+ Datum aus Link-Dok) soll bei jedem Dokumentzugriff erneut aktualisiert werden.
Das 'Vorarbeit'-Dokument erhalte ich per "db.search" - klappt soweit
den Link schreibe ich im PostOpen per "rtitem.AppendDocLink"+ "doc.Save" - klappt auch (mit Nebenwirkungen)
Nun habe ich aber das Problem, dass ich ein Dokument 2-3 mal öffnen muss, ehe die geschriebenen Linkdaten auch korrekt im 'aktuell'-Dokument angezeigt werden.
Damit könnte ich zwar leben, aber die User bemängeln nun, dass durch bloße Ansicht des 'aktuell'-Dokumentes ein Schreibvorgang stattfindet, welcher die Dokumente für andere User als ungelesen markiert - obwohl das Dokument von keinem User geändert + gespeichert wurde.
Nun meine Frage:
wie und wo kann ich dies eleganter lösen (leider kenne ich mich mit Backend und Frontend auch nicht aus) ?
Schon mal Danke für Eure Antworten !
Pidray
------------------------------------------------
mein PostOpen habe ich wie folgt zusammengeschustert:
Sub Postopen(Source As Notesuidocument)
Dim ws As New NotesUIWorkspace
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc0 As NotesDocument
Dim doc As notesdocument
Dim uidoc As NotesUIDocument
Dim rtitem As NotesRichTextItem
Dim item As NotesItem
Set db = session.CurrentDatabase
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
' Suchfelder für 'Vorarbeit'-Dokument
AbArt = uidoc.FieldGetText("Categories")
AbZeit = uidoc.FieldGetText("AbrZeit")
dat = Vorarbeit( AbArt, AbZeit ) ' liefert ein Array: gefunden=1 + Text + DocID von Vorarbeit-Dok
doc.RemoveItem( "Taet01" )
Set rtitem = New NotesRichTextItem( doc, "Taet01")
If Left( dat(0,0),1)="1" Then
Set doc0 = db.GetDocumentByUnId( dat(1,1))
If dat(1,0) <> "" Then
Call rtitem.AppendText( "Erledigt " & dat(1,0) & " " )
Call rtitem.AppendDocLink( doc0 , "Näheres siehe Vorarbeit")
Else
Call rtitem.AppendText( "----------> Erledigt-Datum fehlt noch !!! ")
Call rtitem.AppendDocLink( doc0 , "Näheres siehe Vorarbeit")
End If
Else
Call rtitem.AppendText( "----------> Vorarbeit fehlt noch !!! ")
End If
Call doc.Save(False,False,True)
End Sub
------------------------------------------------
ascabg:
Hallo,
verstehe ich jetzt nicht ganz.
Wird das Vorarbeitsdokument denn immer wieder geloescht und neu angelegt?
Wenn ich einmal einen Dok-Link erstellt habe, verweist dieser doch immer auf dieses eine Dokument, egal wie oft ich dieses in der Zwischenzeit aendere.
Warum den Dok-Link dann immer wieder neu schreiben, wenn sich letztendlich doch nur der Text aendert.
Pack den Text ein Feld und den Link in ein zweites.
Somit musst Du nur den Text aendern und kannst den Link in Ruhe lassen.
Ansonsten kannst Du das ganze auch ueber einen periodischen Agenten realisieren (1x am Tag).
Hierbei musst Du lediglich auf Deine UI-Klassen verzeichten.
Andreas
Pidray:
Danke für die schnelle Antwort !
Wenn das Vorarbeits-Dok. da ist, bleibt der Link unverändert, nur der Text/Datum kann sich ändern.
Aber es kann auch sein, dass ein aktuell-Dok angelegt wird, ohne dass Vorarbeits-Dok da ist - dann gibts keinen Link, klar.
Und wenn ich einen Agent nutze, ergibt es trotzdem Ungelesen-Markierungen, oder ?
Meine gesuchte Lösung müßte irgendwo im vom User ausgelösten Editmode liegen ... QueryModeChange ?
ascabg:
Sorry, aber Du schreibst den Link sofort neu, wenn sich hier aenderungen ergeben.
--- Code: --- If dat(1,0) <> "" Then
Call rtitem.AppendText( "Erledigt " & dat(1,0) & " " )
Call rtitem.AppendDocLink( doc0 , "Näheres siehe Vorarbeit")
Else
Call rtitem.AppendText( "----------> Erledigt-Datum fehlt noch !!! ")
Call rtitem.AppendDocLink( doc0 , "Näheres siehe Vorarbeit")
End If
--- Ende Code ---
Und bevor Du ueberhaupt Deine Pruefungen durchfuehrst loescht Du erst mal das Feld mit dem Link.
--- Code: --- doc.RemoveItem( "Taet01" )
Set rtitem = New NotesRichTextItem( doc, "Taet01")
--- Ende Code ---
Andreas
LN4ever:
Hallo Pidray,
dein bisheriger Lösungsversuch ist von Starksinn ein gutes Stück entfernt, weil du auch im Lesemodus ein Dokument änderst, an dem sich eigentlich gar nichts geändert hat, um darin immer Daten aus einem ganz anderen Dokument anzeigen zu lassen - und das mit Methoden, die völlig ungeeignet sind (RT-Item, dessen Inhalt im UI-Dokument im Postopen nicht richtig angezeigt wird). Die Lösung ist also nicht nur schlecht oder umständlich, sondern auch falsch und ungeeignet.
Die einfachste Lösung scheint mir eine Aufnahme der UNID des Vorarbeits-Dokuments in ein Feld des AKTUELL-Dokuments. Und dann läßt du das Vorarbeitsdokument in einer eingebetteten Ansicht mit seinem (Titel und) Änderungsdatum als SingleCategory auf seine UNID anzeigen - und diese SingleCategory ist der Inhalt des Felds UNID des Vorarbeits-Dokuments im AKTUELL-Dokument.
Gruß
Norbert
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln