Domino 9 und frühere Versionen > ND9: Entwicklung

Remote Binding

<< < (2/4) > >>

Jürgen Schomann:
Ralf, den Code von SetFocus habe ich doch bereits angegeben, hier noch einmal:

Sub SetFocus(Source As NotesUIDocument, Continue As Variant)
   Call uiview.SelectDocument(Source.Document)
End Sub

Harald, als globale Variable klappt es auch nicht, hatte ich auch schon vorher selbst versucht.

Irgendwie scheint Notes verklemmt gewesen zu sein.
Jetzt wird die Prozedur SetFocus durchlaufen aber es kommt die Fehlermeldung:

Command is not available!

Eigentlich ist bei Queryclose das Dokument ja auch noch nicht richtig geschlossen. Der Fokus ist ja noch nicht in der Ansicht?
Ich frage mich wie das überhaupt dann so gehen soll.

Ausgangspunkt für meine Versuche ist eigentlich das unbefriedigende Verhalten von Notes wenn man in einer kategorisierten Ansicht arbeitet.
Wenn es nur ein Dokument in der Kategorie gibt und man dieses bearbeitet und wieder schließt, wird die Kategorie zugeklappt.
Wenn es mehr als ein Dokument gibt, aber nicht mehr.
Das gilt auch wenn man das erste Dokument einer Kategorie erstellt.
Außerdem werden bei Ansichten mit mehr als einer Kategorie bei einem Wechsel zu einer anderen Ansicht und wieder zurück alle Unterkategorien der betreffenden Hauptkategorie aufgeklappt.

Ich habe dieses Verhalten so umgangen:
In der Ansicht ist die 1. Spalte verborgen mit  der Formel @DocNumber
Im Postopen ist folgende Formel:

_Position := @GetViewInfo([ColumnValue]; 0);
@If(@IsNumber(_Position); @Return(""); "");
_Position := @Explode(_Position; ".");
@Command([ViewCollapseAll]);
@Command([ViewExpand]);
@For(n := 2; n <= @Elements(_Position); n := n + 1;
  @For(n2 := 1; n2 <= @TextToNumber(_Position[n]); n2 := n2 + 1;
    @Command([NavNext])
  );
  @Command([ViewExpand])
)

Dadurch wird immer nur die aktuelle Unterkategorie aufgeklappt und das zuletzt gewählte Dokument selektiert.

Ich habe folgende geänderte Variante probiert :

In der Ansicht o. g. Prozedur

Sub SetFocus(Source As NotesUIDocument, Continue As Variant)
   Dim ws As New NotesUIWorkspace
   Call ws.GetCurrentDatabase.Close
   Call ws.OpenDatabase(ws.GetCurrentDatabase.Database.Server, ws.GetCurrentDatabase.Database.FilePath, "", "", True)
   Call ws.CurrentView.SelectDocument(Source.Document)
End Sub

oder statt in der Ansicht mit remote binding zu arbeiten, in der Masdke bei Queryclose das ganze

Sub Queryclose(Source As Notesuidocument, Continue As Variant)
   Dim ws As New NotesUIWorkspace
   Call ws.GetCurrentDatabase.Close
   Call ws.OpenDatabase(ws.GetCurrentDatabase.Database.Server, ws.GetCurrentDatabase.Database.FilePath, "", "", True)
   Call ws.CurrentView.SelectDocument(Source.Document)
End Sub

Das klappt auch soweit, es wird dann immer die Rahmengruppe geöffnet und das richtige Dokument selektiert.
Aber das ganze Verfahren ist nicht konsistent genug.
Insbesondere könnte der Nutzer das Fenster mit der Ansicht vor dem Schließen des Dokuments schließen oder auch ein Fenster
einer anderen Datenbank parallel zuletzt vor dem Schließen fokussiert haben.
Dann kommt es sporadisch zur Fehlermeldung Objektvariable nicht gesetzt oder Notes bricht sogar ab.

Die ganze Fokussteuerung sollte man wohl besser nicht selbst in die Hand nehmen,
da die Ausführung der einzelnen Anweisungen nicht synchronisiert seriell abläuft?

jBubbleBoy:
Verwende einen NotesTimer in der View, wenn du noch eine Prüfung auf ws.currentView und der View des Timers durchführst, dann können zwischendurch auch andere Notesfenster geöffnet werden. Im QueryClose wird nur die UNID des Dokumentes übergeben, z.B. über die notes.ini.
Notes-Abstürze treten dabei nicht auf ;)

Jürgen Schomann:
Vielen Dank für den Hinweis mit dem NotesTimer in der Ansicht beim Remote Binding. So klappt es.
Allerdings wenn man andere Dokumente der gleichen Datenbank parallel geöffnet hat, werden diese auch geschlossen.

Aber wie erreiche ich das uidoc wenn ich alte Dokumente zum Bearbeiten öffne.
Sie werden ja im allgemeinen durch einen Doppelklick geöffnet statt über eine Schaltfläche.
Auch hier möchte ich das Dokument nach dem Schließen fokussieren.

jBubbleBoy:
Das habe ich jetzt nicht verstanden ???
Warum werden andere Dokumente geschlossen und was sind bei dir alte Dokumente?
Das Schließen führt nur der Nutzer durch und ob das Dokument durch Doppelklick oder einer Aktion geöffnet wird spielt keine Rolle, da nur das Schließen den NotesTimer "indirekt" anspricht.
Spannend wird es wenn man mit mehrere Ansichten arbeiten möchte, hier müsste man im Initialize der Maske über ws.currentView.view.universalID ansichtspezifische Übergabewerte für den späteren QueryClos/View generieren.
Vielleicht habe ich auch dein Konstrukt noch nicht ganz verstanden ;)

Jürgen Schomann:
Entschuldige, das mit dem Schließen anderer geöffneter Dokumente war ein Irrtum, hatte noch etwas falsch im Code.

Der Test bezog sich ja auf neu zu erstellende Dokumente. Diese werden über eine Schaltfläche in der Ansicht mit NotesUIWorkspace.ComposeDocument erstellt.
Hier kann ich dann auch 'On Event Queryclose NotesUIDocument' verwenden.

Es geht mir jetzt noch um das Bearbeiten von bereits gespeicherten Dokumenten.
Wenn ich dazu auch eine Schaltfläche mit NotesUIWorkspace.EditDocument benutze, kann ich auch  'On Event Queryclose NotesUIDocument' verwenden.
Die Anwender klicken aber oft ein Dokument doppelt an und gehen dann durch einen weiteren Doppelklick in den Bearbeitenmodus oder
sie wählen in der Symbolleiste von Notes den Bleistift aus, wodurch das Dokument gleich im Bearbeitenmodus geöffnet wird.
Dann habe ich ja kein NotesUIDocument zum Aufsetzen von 'On Event Queryclose NotesUIDocument' zur Verfügung?

Wenn ich dann das Dokument schließe und die Ansicht ist kategorisiert und enthält nur dies eine Dokument, wird sie leider immer von Notes zugeklappt.
Ich möchte aber auch in diesem Fall gerne das Dokument fokussieren, also die Kategorie aufgeklappt sehen.

Gruß Jürgen

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln