Autor Thema: Markierte Dokumente "außerhalb" der Ansicht / des Ordners ermitteln  (Gelesen 2341 mal)

Offline Hugi23

  • Frischling
  • *
  • Beiträge: 30
  • Geschlecht: Männlich
  • Dietmar
Das Problem soll am Beispiel der Maildatenbank erklärt werden.
Die Lotus Notes 7 Standardschablone hat eine Vielzahl von Ansichten und Ordnern, von denen jede(r) über eine Aktionsleiste verfügt. Diese Aktionsleisten sind meist randvoll mit Aktionen. Da ist es nicht gut, Kunden-spezifische Aktionen "mit hinein zu mischen", also da irgendwo mit zu platzieren.

Erster Versuch: Der Rahmen, in dem die Ansicht / der Ordner angezeigt wird, wird zeilenweise aufgeteilt. Der neue untere Rahmen bekommt inhaltlich alles "vererbt", was zuvor in dem ursprünglichen Rahmen stand. Der neue obere Rahmen erhält eine leere Seite, von der man nur die Aktionsleiste sieht (durch entsprechende Pixel-Größeneinstellung machbar). Die Aktionsleiste der Seite gleich vom Layout komplett der Aktionsleiste der Ansichten / Ordner. Das sieht dann so aus, als ob zwei Aktionsleisten zu der Ansicht / dem Ordner gehören. Nun können alle kundenspezifischen Aktionen in der Seiten-Aktionsleiste platziert werden.
Das Problem besteht aber in dem Bezug auf markierte Dokumente. Wenn man sich im Script auf die "unprocessed documents" bezieht, so klappt das nur, wenn man das Script aus der Ansicht heraus / dem Ordner heraus startet, in dem die Markierung erfolgte.

Zweiter Versuch: Erfreulicherweise gibt es noch Agenten mit dem Bezug auf alle ausgewählten Dokumente. Also geht man folgenden Umweg: Die Aktion in der Seite ruft nicht das Script auf, sondern den Agent, der dann das Script enthält. Das klappt! Der entscheidende Makel: Natürlich ist eine Seite wie ein neues Dokument noch nicht gespeichert. Der Client erwähnt diesen Sachverhalt in Form eines Prompts: "Dokument ist noch nicht gespeichert" - ärgerlich. Warum auch immer, jedenfalls kann man das dem Nutzer nicht zumuten, jedesmal beim Klick auf eine der kundenspezifischen Aktionen diese Meldung zu quittieren.

Meine Frage:
Gibt es die Möglichkeit, statt einer Seite ein anderes Designelement mit einer Aktionsleiste anzubieten, deren Aktionen sich auf markierte Dokumente in der Ansicht / dem Ordner beziehen können?
Die Forderung ist: NICHT die Ansicht / den Ordner in der Aktionsleiste anpassen, in dem die Dokumentauswahl erfolgt.
« Letzte Änderung: 18.07.10 - 17:20:20 von Hugi23 »
Dietmar
Es gibt nichts, was mit Lotus Notes nicht geht.
(nicht von mir, aber wahr)

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Das was du suchst, hat Kevin Pettit hier beschrieben ( http://www.lotusguru.com/lotusguru/LGBlog.nsf/SearchResults?OpenNavigator&Query=@UpdateFormulaContext ) und in seinem OpenNTF Projekt "SuperNZF" verwendet.

@UpdateFormulaContext ist der Schlüssel zu Erfolg.
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Hugi23

  • Frischling
  • *
  • Beiträge: 30
  • Geschlecht: Männlich
  • Dietmar
Vielen Dank - eknori! Ich denke, das ist die Lösung. Aber sie funktioniert leider nicht.
Mein ursprünglicher Agent hatte die Einstellung "Ziel: ausgewählte Dokumente". Der Aufruf des Agents verursachte die Anzeige "Dokument ist noch nicht gespeichert". Ich bin wie beschrieben vorgegangen: statt der Seite habe ich eine Maske in den neuen, zusätzlichen Rahmen eingebaut. Die Maskenaktion hat folgenden Code:
@SetTargetFrame ("...");
@UpdateFormulaContext;
@Command ([ToolsRunMacro]; "...");
Beim Aufruf des Agents erfolgt der Dialog "Dokument ist noch nicht gespeichert" dennoch.
Ändere ich jetzt den Agent auf "Ziel: Keines", erfolgt beim Aufruf keine Anzeige mehr. Aber dann ist auch der Bezug auf die ausgewählten Dokumente verloren gegangen.

Noch der Hinweis: der Agent beinhaltet Script. Mit Makroformelsprache lässt sich das gewünschte leider nicht realisieren.
Auch die Verlagerung des erforderlichen Code in das Script selbst funktioniert nicht. Folgendes habe per Script versucht.

dim ws as New NotesUIWorkspace
dim tmprc as Variant
...
call ws.settargetframe ("...")
tmprc = Evaluate ("@UpdateFormulaContext")
...
Der dann per Script erfolgende Versuch, auf die ausgewählten Dokumente zuzugreifen, schlägt fehl. Die Liste ist leer.
« Letzte Änderung: 18.07.10 - 17:31:47 von Hugi23 »
Dietmar
Es gibt nichts, was mit Lotus Notes nicht geht.
(nicht von mir, aber wahr)

Offline Hugi23

  • Frischling
  • *
  • Beiträge: 30
  • Geschlecht: Männlich
  • Dietmar
Neuer Sachstand:
Wenn man es richtig macht, klappt es auch. Die Code-Zeile
@Command ([OpenView]; @Viewname);
hatte ich schlichtweg ignoriert. Nach entsprechender Korrektur kann ich nun einen Agent mit "Ziel: Ausgewählte Dokumente" aufrufen, ohne dass die ominöse Fehlermeldung erscheint.

Allerdings wäre mir lieber, den Umweg über den Agenten nicht gehen zu müssen. Ich benötige wie gesagt die Scriptsprache, um alle Funktionalität umzusetzen. Wenn also schon die Aktion selbst in Script erfolgen könnte, spare ich mir die Programmierung all der Agenten, die nun je Aktion erforderlich sind.
Ich habe folgendes probiert:

dim ws as New NotesUIWorkspace
dim tmprc as Variant
dim tmpname as string
...
' die nächste Zeile entspricht @SetTargetFrame (" ...");
call ws.settargetframe ("...")
' die nächste Zeile entspricht @UpdateFormulaContext;
tmprc = Evaluate ("@UpdateFormulaContext")
' die nächste beiden Zeilen entsprechen @Command ([OpenView]; @Viewname);
tmpname = ws.CurrentView.Viewname
call ws.OpenDatabase ("", "", tmpname)
' Prüfen auf markierte Dokumente
Print Str$ (ws.CurrentDatabase.Database.UnprocessedDocuments.Count)
' Ausdruck liefert immer 0

Ein weiterer Versuch, in dem ich alle Aufrufe der Makrosprache über Evaluate abgebildet hatte, schlug ebenfalls fehl:
...
tmprc = Evaluate ("@SetTargetFrame (""NotesView"")")
tmprc = Evaluate ("@UpdateFormulaContext")
tmprc = Evaluate ("@Command([OpenView]; @ViewTitle)")
...
Wenn es da Lösungen gibt, würde ich mich über eine Antwort freuen.
Ich nutze erstmal die Variante über den Agent.
« Letzte Änderung: 19.07.10 - 08:01:31 von Hugi23 »
Dietmar
Es gibt nichts, was mit Lotus Notes nicht geht.
(nicht von mir, aber wahr)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Um die Anzahl der Agenten zu reduzieren, könntest Du alle Schaltflächenaktionen in einen einzigen Agenten schreiben. Beim Aufruf des Agenten aus der Schaltfläche per Formel musst Du dann nur an einer vom Agent lesbaren Stelle (z.B. notes.ini) die Art der Aktion ablegen, der Agent liest die Art und löscht sie. Danach führt er die gewünschte Aktion aus.

Offline Hugi23

  • Frischling
  • *
  • Beiträge: 30
  • Geschlecht: Männlich
  • Dietmar
Danke - prima Idee!
So etwas habe ich schon an anderer Stelle umgesetzt. D.h. ich bin darin geübt.
Nachteil: jede der aufzurufenden Scriptfunktionen muss aus dem Agent heraus aufrufbar sein. D. h. alle potentiell erforderlichen Scriptbibliotheken sind dem Agent per "Use ..." bekannt zu machen. Da muss ich erstmal prüfen, ob sich die Scriptbibliotheken alle "gegenseitig leiden" können :-)

Was Kevin Pettit in dem Artikel (auf den eknori verwéist) nicht beschrieben hat, ist der Umstand, wie man die Anzeige der Aktionen aktualisiert. D. h. ich weiß noch nicht, wie man die Maske (ich verwende eine Seite, das geht genauso) aktualisiert, wenn sich die Ansicht / der Ordner ändert. Aber das ist eigentlich ein neues Thema, nach dem ich ursprünglich nicht gefragt hatte.
« Letzte Änderung: 19.07.10 - 12:32:19 von Hugi23 »
Dietmar
Es gibt nichts, was mit Lotus Notes nicht geht.
(nicht von mir, aber wahr)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz