Domino 9 und frühere Versionen > ND6: Entwicklung

Dokument mit aktualisierter Dokumentverknüpfung auf ein anderes Dok.

(1/3) > >>

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