Autor Thema: Remote Binding  (Gelesen 5086 mal)

Jürgen Schomann

  • Gast
Remote Binding
« am: 15.03.17 - 18:51:35 »
Ich habe eine Ansicht mit folgendem Code:

(Globals)
(Declarations)
Dim uiview As NotesUIView

und

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

und eine Aktion

Sub Click(Source As Button)
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Set uiview = ws.CurrentView
   Set uidoc = ws.ComposeDocument (server, datei, maske)
   On Event Queryclose From uidoc Call SetFocus
End Sub

Aber irgendwie scheint es nicht zu funktionieren.
Beim Schließen des Dokuments wird die Prozedur SetFocus nicht durchlaufen.
Habe dazu mal eine Zeile Msgbox 99 eingefügt.
Es kommt keine Meldung und das Dokument wird auch nicht selektiert.
Was könnte falsch sein?

Gruß Jürgen

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Remote Binding
« Antwort #1 am: 15.03.17 - 19:29:09 »
Mal ins Blaue geschossen, habe mit solchen Bindings noch nichts gemacht

Sub Click(Source As Button)
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Set uiview = ws.CurrentView
   Set uidoc = ws.ComposeDocument (server, datei, maske)
   On Event Queryclose From uidoc Call SetFocus (uidoc, Continue)
End Sub

Wobei das Continue noch definiert werden müsste
« Letzte Änderung: 15.03.17 - 19:32:52 von Peter Klett »

Jürgen Schomann

  • Gast
Re: Remote Binding
« Antwort #2 am: 15.03.17 - 20:22:49 »
Peter, Parameter kann man nicht angeben beim EventHandler: kommt Syntaxfehler.

Habe hier im Forum gesucht und ähnliche Beiträge gefunden.

http://atnotes.de/index.php/topic,55577.msg358438.html#msg358438

Gruß Jürgen

Offline Ralf_M_Petter

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.879
  • Geschlecht: Männlich
  • Jeder ist seines eigenen Glückes Schmied
    • Ralf's Blog
Re: Remote Binding
« Antwort #3 am: 18.03.17 - 12:38:25 »
Kannst du mal den Code der SetFocus Prozedur zeigen?
Jede Menge Tipps und Tricks zu IT Themen findet Ihr auf meinem Blog  Everything about IT  Eine wahre Schatzkiste sind aber sicher die Beiträge zu meinem Lieblingsthema Tipps und Tricks zu IBM Notes/Domino Schaut doch einfach mal rein.

Offline spookycoder

  • Frischling
  • *
  • Beiträge: 21
  • Geschlecht: Männlich
  • Harald
    • Harrys Blog
Re: Remote Binding
« Antwort #4 am: 18.03.17 - 19:52:49 »
Hallo,

wie schon dem von Dir verlinkten Beitrag erwähnt, solltest Du das uiDocument als globale Variable hinterlegen und in der OnClick-Methode setzen.

Auf diese globale Variable kannst Du dann auch in Deiner SetFocus Methode zugreifen, sodass diese keine Parameter mehr hat - weil wie Du bereits gemerkt hast - dürfen Event-Handler keine Parameter haben.

lg

Harald

Jürgen Schomann

  • Gast
Re: Remote Binding
« Antwort #5 am: 18.03.17 - 22:15:42 »
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?

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.276
  • Geschlecht: Männlich
Re: Remote Binding
« Antwort #6 am: 19.03.17 - 11:00:54 »
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 ;)
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16
--
Nur ein toter Bug, ist ein guter Bug!

Jürgen Schomann

  • Gast
Re: Remote Binding
« Antwort #7 am: 20.03.17 - 20:53:53 »
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.

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.276
  • Geschlecht: Männlich
Re: Remote Binding
« Antwort #8 am: 21.03.17 - 00:25:30 »
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 ;)
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16
--
Nur ein toter Bug, ist ein guter Bug!

Jürgen Schomann

  • Gast
Re: Remote Binding
« Antwort #9 am: 21.03.17 - 15:27:05 »
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

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.276
  • Geschlecht: Männlich
Re: Remote Binding
« Antwort #10 am: 21.03.17 - 19:21:32 »
Hä? QueryClose wird immer ausgeführt und ein uiDoc gibt es auch immer, egal ob ein Dokument geöffnet oder erstellt wird.
Prüf das bitte noch einmal.
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16
--
Nur ein toter Bug, ist ein guter Bug!

Jürgen Schomann

  • Gast
Re: Remote Binding
« Antwort #11 am: 21.03.17 - 20:04:16 »
Ich glaube wir verstehen uns nicht richtig.
Also ich meine folgendes:

Maske Code:

Sub Onload(Source As Notesuidocument)
   Dim uidoc As NotesUIDocument
   Set uidoc = Source
End Sub


Ansicht Code:

(Globals)
(Declarations)
Dim obTimer As NotesTimer

Sub SetFocus(Source As NotesUIDocument, Continue As Variant)
   If Source.IsNewDoc Then Exit Sub
   Set obTimer = New NotesTimer(1)
   obTimer.Enabled = True
   On Event Alarm From obTimer Call SetFocus2
End Sub

Sub SetFocus2(Source As NotesTimer)
   Dim session As New NotesSession
   Dim ws As New NotesUIWorkspace
   Dim doc As NotesDocument
   obTimer.Enabled = False
   Set doc = session.CurrentDatabase.GetDocumentByUNID(session.GetEnvironmentString("FOCUSUNID"))
   Call ws.CurrentView.SelectDocument(doc)
End Sub

Schaltfläche zum Erstellen eines Dokuments
Sub Click(Source As Button)
   Dim session As New NotesSession
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Set uidoc = ws.ComposeDocument("", "", "faM1")
   Call session.SetEnvironmentVar("FOCUSUNID", uidoc.Document.UniversalID)
   On Event Queryclose From uidoc Call SetFocus
End Sub

Schaltfäche zum Bearbeiten eines Dokuments
Sub Click(Source As Button)
   Dim session As New NotesSession
   Dim ws As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Set uidoc = ws.EditDocument(True)
   Call session.SetEnvironmentVar("FOCUSUNID", uidoc.Document.UniversalID)
   On Event Queryclose From uidoc Call SetFocus
End Sub

Die funktioniert fürs Erstellen und Bearbeiten.
Wenn ich aber zum Bearbeiten eines Dokuments statt über die Schaltfläche über das Notes Symbol oder Doppelkick das Dokument öffne und bearbeite,
habe ich ja kein 'On Event ...' aufgesetzt und damit wird beim Schließen auch nicht SetFocus bzw. SetFocus2 durchlaufen.

Oder habe ich noch etwas falsch verstanden?

Gruß Jürgen

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.276
  • Geschlecht: Männlich
Re: Remote Binding
« Antwort #12 am: 21.03.17 - 20:24:39 »
Das OnLoad Ereignis kommt aus der Web-Welt und wird, soweit ich das mitbekomme habe, nicht immer ausgeführt. Nutze selber nur das Query- oder PostOpen Ereignis.
In diesem Fall kannst du aber darauf verzichten, da QueryClose dir den Source/uiDoc als Parameter bereitstellt.
Wenn du dir eigene Ereignisse, wie z.B.  "On Event Queryclose From .. " erstellst, dann über das PostOpen Ereignis der Maske, denn das wird bei jeder Aufrufvariante initiiert.
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16
--
Nur ein toter Bug, ist ein guter Bug!

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.276
  • Geschlecht: Männlich
Re: Remote Binding
« Antwort #13 am: 21.03.17 - 20:43:20 »
Warte mal, sehe gerade das dein OnLoad Ereignis bei deinem Code keinen Sinn macht.
Du musst nur das QueryClose, direkt in der Maske, mit diesen beiden Zeilen versehen:
Code
Dim session As New NotesSession
Call session.SetEnvironmentVar("FOCUSUNID", source.Document.UniversalID)
Eine Teilmaske sollte genauso gut funktionieren.
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16
--
Nur ein toter Bug, ist ein guter Bug!

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.276
  • Geschlecht: Männlich
Re: Remote Binding
« Antwort #14 am: 21.03.17 - 20:51:56 »
Und zum Schluss noch den NotesTimer im PostOpen der Ansicht initiieren und nicht in der Aktion, dann passt alles.
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16
--
Nur ein toter Bug, ist ein guter Bug!

Jürgen Schomann

  • Gast
Re: Remote Binding
« Antwort #15 am: 21.03.17 - 23:56:39 »
Ich glaube du verstehst hier etwas falsch.
Es ging um Remote Binding und das kann hier nur in der Ansicht über on event ausgelöst werden.
Das mit der Variablen uidoc bei onload scheint ein Cache-Problem gewesen zu sein, es kam immer Objektvariable nicht gesetzt.
Nach Neustart brauchte ich dies nicht mehr anzugeben.
onload/onunload/onsubmit werden lt. Notes-Hilefe bevorzugt empfohlen auch im Notes-Client und wir benutzen sie seit dem es sie gibt nur noch
und hatten bisher keine Probleme.
Das Bearbeiten eines Dokuments per Doppelklick geöffnet und eben nicht über eine Ansichtsaktion bringt wie gesagt das Schließen der Kategorie beim Schließen des Dokuments und darum ging es.

Eine Variante für das Selektieren des Dokuments nur über Queryclose in der Maske auch für das erste Dokument einer Kategorie (auch über Doppelklick geöffnet), also ohne Remote Binding habe ich auch bereits getestet.

Gruß Jürgen

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.276
  • Geschlecht: Männlich
Re: Remote Binding
« Antwort #16 am: 22.03.17 - 00:41:35 »
Achso, dir geht es nicht um die Lösung sondern um die Technik. Dann vergiss den NotesTimer, das hat nix mit Remote Binding zu tun ... ist mehr ein Workaround.
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16
--
Nur ein toter Bug, ist ein guter Bug!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz