Autor Thema: Dokument mit aktualisierter Dokumentverknüpfung auf ein anderes Dok.  (Gelesen 6422 mal)

Offline Pidray

  • Junior Mitglied
  • **
  • Beiträge: 58
  • 640K ought to be enough for anybody. (Bill Gates)
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

------------------------------------------------
« Letzte Änderung: 21.09.09 - 09:05:20 von Pidray »
Lotus Notes 6.0.1

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
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

Offline Pidray

  • Junior Mitglied
  • **
  • Beiträge: 58
  • 640K ought to be enough for anybody. (Bill Gates)
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 ?
Lotus Notes 6.0.1

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
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      

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")    

Andreas

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
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
Situs vilate in isse tabernit.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Wiederum volle Zustimmung, Norbert. Ohne Dein Post hätte ich hier gar nicht geantwortet, weil www.pidray-hat-ja-nicht-mal-einen-richtigen-namen.xy  ;D

Vermutlich täte es hier - so, wie, der Code von - wie immer er auch richtig heisst - schon vorliegt, sogar eine eine einfache Schaltfläche (in der Action Bar zum Beispiel): UNID eruieren, instantiieren und NotesUIWorkspace.EditDocument).

Schauen wir mal, wie der ominöse "Pidray" sich nun bewegt - ggf. bin ich dann auch gerne zur Hilfe bereit.

Bernhard

Offline Pidray

  • Junior Mitglied
  • **
  • Beiträge: 58
  • 640K ought to be enough for anybody. (Bill Gates)
vielen Dank schon mal für Eure Vorschläge !

Z.Zt. steht mir die Arbeit bis Oberkante Unterlippe; viele Mitarbeiter sind im Urlaub/krank und ich hatte auch 3 Wochen Urlaub (kommt mir gar nicht mehr so vor)

Auch wenn mein Lösungsansatz "falsch und ungeeignet" ist, es hat doch irgendwie funktioniert, allerdings z.B. mit der Nebenwirkung des Setzens von Ungelesen-Markierungen.

Ich werde alles noch mal auseinanderpflücken und Eure Vorschläge ausprobieren - das kann allerdings noch eine Weile dauern und gibt bestimmt neue Rückfragen meinerseits.

Bis denne
LG
Katrin

Nachtrag zur Beschreibung:
auch wenn ein aktuell-Dokument angelegt ist, kann sich das zugehörige Vorarbeit-Dokument geändert haben, z.B. wird dokumentiert, dass eine Datei von Mitarbeiter A erzeugt wurde und Mitarbeiter B liest sie in ein Programm ein (--> Erledigt-Datum)

PS:   Seinerzeit war das hier aber nicht so streng wegen des "richtigen Namens" und dass man nur damit eine Antwort kriegt.
sorry wenn ich Eurer Netiquette nicht entsprochen habe, ich gelobe Besserung

Lotus Notes 6.0.1

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Hallo Katrin,

dein Ansatz ist einer der Wege nach Rom - wie bereits erwähnt ein ungünstiger und mit Nebeneffekten versehen - und bei der momentanten Sommerhitze...  ;)

Der Weg mit der eingebetteten Ansicht ist da auf jeden Fall eleganter. Es geht aber auch ohne. Die Änderung nimmst du ja nur vor, weil sich das Datum des Bezugsdokumentes ändert - oder? Im Dokument benötigst du auf jeden Fall die UNID des verlinkten Dokumentes. Damit kannst du dann aus dem Bezugsdokument Daten lesen - das Datum => @GetField(...) => Berechnet zur Anzeige. Als Link verwendest du eine Grafik die wie dein Symbol des Links aussieht und erstellt darauf eine HotSpot-Aktion - und darin dann das Öffnen anhand der gespeicherten UNID. Mit HideWhen schaltest du das ganze dann aus, wenn noch keine UNID vorliegt. Das wäre ein Weg ohne embedded View und Rich-Text und Speichern des Dokumentes...

Toni
Grüßle Toni :)

Offline Pidray

  • Junior Mitglied
  • **
  • Beiträge: 58
  • 640K ought to be enough for anybody. (Bill Gates)
Hallo Toni,

... HotSpot-Aktion - und darin dann das Öffnen anhand der gespeicherten UNID. ...

ich hab nun die UNID in einem Textfeld "Vorarbeit_1" gespeichert und eine Grafik mit Aktions-Hotspot  erstellt.
Als Click-Formel habe ich @Command( [OpenDocument] ; 0 ; Vorarbeit_1) drin, kriege dafür die Fehlermeldung: "Angegebener Befehl kann nicht ausgeführt werden".

Muss ich über LS gehen ?

 :-:

Bitte nehmt mich mal an die Hand und gebt mir eine Schritt-für-Schritt-Anleitung.
Danke !

Katrin

-----------------------------------------------
Nachtrag:

@Command([OpenView];"Ansichtxyz");            <------- das hatte ich vergessen, dann gehts
@Command( [OpenDocument] ; 0 ; Vorarbeit_1)

und schöner ist es, kommt hinterher ein:
@Command([OpenView];"Ansichtxyz");
@Command([FileCloseWindow]);

« Letzte Änderung: 15.09.09 - 12:06:06 von Pidray »
Lotus Notes 6.0.1

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Hallo,

Als erstes faellt mir auf, dass die 0 in Anfuehrungszeichen gesetzt sein sollte.
Also

Code
@Command( [OpenDocument] ; "0" ;Vorarbeit_1)
oder auch
Code
@Command( [OpenDocument] ; "" ;Vorarbeit_1)

Versuch es mal damit. Eventuell beseitigt dieses ja schon das Problem.


Andreas

Offline Pidray

  • Junior Mitglied
  • **
  • Beiträge: 58
  • 640K ought to be enough for anybody. (Bill Gates)
Hi Andreas,

uups, habe ich vergessen hier im Post anzugeben. Es klappte aber erst nach vorherigem "OpenView" (s. Nachtrag).

-----------------------------------------

neues Problem:
ich brauche nun 3x UNID-Felder + 3x Hotspots

nun kriege ich zwar drei verschiedene IDs in den Feldern angezeigt, aber  alle drei Hotspots zeigen mir das selbe Dokument an ?!

*haarerauf*

hilfe !
schreit Katrin


Lotus Notes 6.0.1

Offline Pidray

  • Junior Mitglied
  • **
  • Beiträge: 58
  • 640K ought to be enough for anybody. (Bill Gates)
nochmals Danke an alle !

Ich habe einige eurer Tipps ausprobiert und bin nun zurückgerudert: ich habe meinen Code aus dem PostOpen auf einen Button gelegt.

Nun werden die Dokumente den anderen Usern nicht mehr unnötigerweise als ungelesen angezeigt.
Zwar geht das nur im Nicht-Editmodus, aber das kann ich in Kauf nehmen.

Bis zum nächsten Mal
Katrin
 ;)


PS: wo kann ich diesen Thread als erledigt markieren ?
Lotus Notes 6.0.1

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
PS: wo kann ich diesen Thread als erledigt markieren ?

Editier das ersten Posting und setz' das Symbol auf "Daumen hoch".

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Pidray

  • Junior Mitglied
  • **
  • Beiträge: 58
  • 640K ought to be enough for anybody. (Bill Gates)
Danke !
Lotus Notes 6.0.1

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz