Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Snowman am 05.09.10 - 09:11:30

Titel: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Snowman am 05.09.10 - 09:11:30
hallo,

gibt es eine möglichkeit nach dem speichern eines neuen dokumentes sich dieses, nach dem schließen, in der view anzeigen zu lassen?

In einer Personenansicht, soll nach der Eingabe einer neuen Person, diese in der Ansicht nach dem Speichern selektiert sein.

Danke für Eure Hilfe
Stephan
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Glombi am 06.09.10 - 14:02:29
Mit LotusScript so:

Call notesUIView.SelectDocument( notesdocument )


Mit Formelsprache geht es mit einem Agenten. Agent für Formelsprache erstellen die Einstellung "Dokumente ändern" verwenden.
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Snowman am 06.09.10 - 17:36:30
aber wo rufe ich diese funktion auf?

im queryclose des dokumentes komme ich nicht zum uiview...
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Glombi am 07.09.10 - 08:02:30
Eine Idee:
Beim Schließen des Dokuments die Docid in die notes.ini schreiben. Im Postopen der View (dort gibts ja wohl die uiview) dann die Docid aus der ini lesen, die ini-Variable löschen und dann das Dokument selektieren.

Alternativ zur ini wäre ein Profil-Dok.

Andreas
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Snowman am 07.09.10 - 08:26:43
Hi Andreas,

das Dokument wird ja aus dem bereits offenen View erzeugt. Das Postopen des Views wird beim schließen des Dokumentes dann nicht mehr ausgeführt.

Ich habe die Idee mit der Doc id schon im Recalc des Views probiert. Dann muss man aber F9 drücken. Es wird der kleine blaue Pfeil zum refresh angezeigt, obwohl die View Eigenschaften auf 'sofort refreshen' stehen. (Ist das ein Notes Bug/Feature?)

Stephan
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Grischu am 07.09.10 - 09:25:08
aber wo rufe ich diese funktion auf?

im queryclose des dokumentes komme ich nicht zum uiview...


geht das nicht mit

uiview = workspace.currentdatabase.currentview
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Snowman am 08.09.10 - 09:11:03
Wie meinst Du das?

Es gibt ein uiview=workspace.currentview
Darauf habe ich aber vom Dokument aus keinen Zugriff, das ist ja das Problem

Ein 'workspace.currentdatabase.currentview' sagt mir jetzt gar nix.

Es scheint, als gibt es vom Dokument aus keinen Zugriff auf den view, von welchem aus das Dokument geöffnet wurde. Oder?

vg
Stephan
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Peter Klett am 08.09.10 - 09:33:54
Habe ein bisschen rumprobiert und eine Lösung gefunden, die zwar funktioniert, aber ziemlich "hintenrum" ist.

Du erstellst in der Ansicht eine Schaltfläche zum Erstellen des neuen Dokuments. Diese Schaltfläche enthält (in Auszügen)

Call workspace.CurrentView.Close
Call workspace.ComposeDocument ...

Die aktuelle Ansicht wird geschlossen und das neue Dokument erstellt.

Im Queryclose der Maske schreibst Du dann ggf. die Information über das zu suchende Dokument z.B. in die notes.ini und öffnest die Datenbank wieder mit der Ansicht

Call workspace.OpenDatabase (db.Server, db.Filepath, "MeineAnsicht")

Im PostOpen der Ansicht führst Du in Abhängigkeit des ini-Eintrages

Call Source.SelectDocument (doc)

aus.
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Grischu am 08.09.10 - 15:45:53
Wie meinst Du das?

Es gibt ein uiview=workspace.currentview
Darauf habe ich aber vom Dokument aus keinen Zugriff, das ist ja das Problem

Ein 'workspace.currentdatabase.currentview' sagt mir jetzt gar nix.

Es scheint, als gibt es vom Dokument aus keinen Zugriff auf den view, von welchem aus das Dokument geöffnet wurde. Oder?

vg
Stephan

Sorry, mein Fehler.  Den Workspace.Currentview meinte ich. 
Hatte wohl mein Hirn noch nicht richtig hochgefahren nach dem Urlaub  ::)
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: koehlerbv am 08.09.10 - 15:53:22
Vielleicht sollten wir mal sicherheitshalber über das rein technische Prinzip hinausgehen: Was soll denn mit dieser Selektion überhaupt erreicht werden? Von dem ggf. für den User gar nicht sichtbaren Haken hat dieser ja in der Regel nichts.
Nicht, dass da in Wirklichkeit etwas ganz anderes erreicht werden soll ...

Bernhard
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Snowman am 08.09.10 - 16:41:37
Das Ziel soll sein, wenn in einer Adressdatenbank z.B. ein neuer Name eingegeben wird,  im darunterliegenden View (von wo aus das neue Dok erzeugt wurde) der Cursor auf dem neuen Dokument steht.
Damit der User nicht das neue Dokument erst wieder suchen muss.

Stephan

Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: koehlerbv am 08.09.10 - 17:07:35
Genau das hatte ich befürchtet. Markieren kannst Du, aber dort hinspringen, das geht nicht.

Bernhard
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Peter Klett am 08.09.10 - 17:24:22
... Markieren kannst Du, aber dort hinspringen, das geht nicht.
Also die von mir unter #7 gepostete Lösung setzt die Markierung (also den Rahmen um das Dokument, kein Haken vor dem Dokument) genau auf das Dokument. Das Dokument ist dann auch sofort sichtbar, selbst wenn soviele Dokumente in der Ansicht sind, dass gescrollt werden müsste.
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: koehlerbv am 08.09.10 - 17:42:13
Interessant, Peter. Funktioniert das auch in jeder Version? Frühere Tests mit diesem oder einem sehr ähnlichen Verfahren (auf jeden Fall mit NotesUIView.SelectDocument) wurde die Ansicht so wieder geöffnet, wie sie verlassen wurde - egal, wo das markierte Dokument sich befand.

Das NotesUIView.Close kann natürlich auch ein Killerkriterium sein - wenn man jetzt bei der Eingabe fix ein anderes Dokument zum Vergleich sucht, müsste man eine neue Instanz mit der View aufmachen. Der Effekt, der dann beim Schliessen des neuen Dokuments auftritt, könnte auch interessant werden.

Ich denke, da gibt es eine Menge Fallstricke und Wenns und Abers. Schauen wir mal, was Stephan noch so schreibt.

Bernhard
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Peter Klett am 08.09.10 - 19:23:14
Funktioniert das auch in jeder Version?
Keine Ahnung. Unter 7.03 funktioniert es, allerdings ist die Testansicht auch nicht kategorisiert, was vielleicht auch noch ein Problem geben könnte. Ist halt nur eine Anregung ...
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: koehlerbv am 08.09.10 - 21:56:40
Völlig klar, Peter, Und vielen Dank für Deinen Tipp.

Mein "aber!" ist eben, dass sich völlig andere neue Probleme auftun können. Ausserdem kann ich den Sinn der Aktion nicht ganz nachvollziehen. Ich gebe neue Personendaten ein. Okay, nix dagegen einzuwenden. Nur warum muss ich danach in der Ansicht genau auf diesem Dokument stehen? Wann brauche ich das, und wann möchte ich das genau *nicht*? Wenn ich das Personendokument noch brauche, dann lasse ich es eben offen. Wenn ich es schliesse und sehe dann in der Ansicht wieder "Hirsch, Harry bis Killerkarpfen, Kuno", dann kann ich ja immer noch "dödelmann" eingeben und lande wieder dort, wo ich eben versehentlich ein Dokument geschlossen habe.

Ich denke, Stephan hat hier noch was anderes, sinnvolles vor, sagt es aber noch nicht.

Bernhard
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Peter Klett am 09.09.10 - 07:36:11
Gebraucht habe ich sowas auch noch nie, und wahrscheinlich viele andere auch nicht, sonst wäre das in Notes vielleicht schon seit irgendeiner Version umgesetzt.

Unter Bemühung der Glaskugel könnte ich mir vorstellen, dass aus der Ansicht der Adressdatenbank weitere Aktionen möglich sind wie

1. Anrufen, Mail schreiben usw.
2. Weitere Dokumente zu der Adresse anlegen (Aufträge, weitere Kontaktdaten usw.)

Wird nun eine neue Adresse erfasst, um die z.B. anzurufen, ist das schon lästig, dass nach Erfassung das Dokument gesucht werden muss. Bei kategorisierten Ansichten ohne sortierbare Namensspalte ist es mit "dödelmann" eintippen alleine auch nicht getan.

Ich würde lieber diese Ansichtsaktionen zusätzlich in die Maske aufnehmen, um sie aus dem geöffneten Dokument ausführen zu können. Hätte auch den Vorteil, dass ich mehrere Adressen gleichzeitig offen haben kann, ohne sie jedesmal wieder neu in der Ansicht suchen zu müssen. Wenn vermieden werden soll, dass die Aktionen auf ungespeicherte Dokumente ausgeführt werden, lässt sich das auch noch verhindern.

Im Falle von 2. würde ich auch noch eine Ansicht in das Adressdokument einbetten, die alle zu der Adresse relevanten Dokumente anzeigt, um auch im geöffneten Dokument das Umfeld der Adresse sehen zu  können und um Dopppelanlagen zu vermeiden.

Damit haben wir uns aber von der Beantwortung der eigentlichen Frage weit entfernt.
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Snowman am 09.09.10 - 08:36:17
Also vielen Dank für Eure Antworten.
Ich werde die Idee von Peter mal einbauen und testen.

Zumindest weiß ich nun, ich habe nichts Übersehen sondern es ist nicht ganz trivial.

Die Datenbank ist so aufgebaut, dass unter den Personen, oder Firmen alle weiteren Dokumente dazu hängen. Rechnungen, Mails, Briefe, etc...
Man stellt sich auf eine Person und legt das entsprechende Dokument an.

Natürlich kann ich immer eine alternative Steuerung einbauen, so das ich das Wichtigste aus einer Maske heraus aufrufen kann. Das Userinterface, dass ich gewählt habe ist sehr simpel und für meine Kunden gut verständlich. 'Man stellt sich auf den Kunden drauf, und wählt dann in der Ansicht was man damit machen möchte'...
Das Prinzip gilt in jeder Ansicht und mit jedem Dokument.
Und da wäre es sehr komfortabel, nach dem Anlegen einer neuen Person, oder einer Firma zu der ich mehrere Personen erfassen möchte, schon auf dem richtigen Dokument zu stehen.

Notes hat Grenzen, das ist schon OK. Die Vorteile für mich überwiegen jedoch bei weitem.
Ich schreibe Euch noch wie der Test in einer kategorisierten Ansicht verlaufen ist.

Vielen Dank

Stephan
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Snowman am 09.09.10 - 23:19:24
Peter's Lösungsvorschlag funktioniert SUPER!

Es passiert genau das was die Kunden wollten.
Nach Eingabe einer neuen Person stehe ich in der View genau auf dieser Person.

Es funktioniert in einer kategorisierten Ansicht und auch wenn ich mit dem Frameset starte.

Also statt Call workspace.OpenDatabase (db.Server, db.Filepath, "MeineAnsicht")
Call ws.OpenFrameSet("MeinFrameset")

Dann noch ein bisschen Errorhandling und das wars.

Danke für den Tipp Peter! :)
Grüße
Stephan
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Tode am 16.09.10 - 15:30:07
Das Thema ist zwar schon lange abgefrühstückt, ich muss trotzdem noch meinen Senf dazu geben: Wenn Du Dir nicht das Postopen der View verbiegen willst, dann ist das eigentlich ein typisches Beispiel für "Remote Binding":

Du erstellst in der View eine Funktion, die die gleichen Parameter hat wie das QueryClose oder das PostSave des Dokumentes.


Sub SelectDocument(Source As Notesuidocument, Continue As Variant)
 '- hier kommt Dein Code für das select hin
End Sub

Dann machst Du in Deinem Aufruf, der das neue Dokument erstellt folgendes:

set uidoc = ws.EditDocument( True , DeinNeuesDokument )
on event QueryClose from uidoc call SelectDocument

Was jetzt passiert ist:

Sobald Du das Dokument schliesst, wird Dein View- Event "SelectDocument" aufgerufen.

Diese Lösung sollte eigentlich am wenigsten "Seiteneffekte" haben, weil Du nicht die generellen Events der Maske sowieo die der Ansicht umbiegen musst (was passiert z.B. wenn Du mal 2 Ansichten hast, aus denen Dokumente erstellt werden sollen: Dann macht Dein QueryClose immer die gleiche Ansicht auf...)

HTH
Tode
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Snowman am 16.09.10 - 17:47:02
Da bekomme ich beim speichern des Codes die Meldung: Event handler must be a LotusScript SUB or Function: Selectdocument.

Und wie selektiere ich dann in der View? Da brauche ich NotesUiView.SelectDocument(doc). Den UiView habe ich im Postopen. Im SelctDocument gibst Du das als Parameter nicht mit.

vg
stephan
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Peter Klett am 17.09.10 - 07:32:50
Da ich remote binding auch noch nicht kannte, habe ich das einmal ausprobiert. Vorgehensweise:

In der Ansicht (Globals)

Declarations
Dim uiview As NotesUIView

Sub SelectDocument (Source As NotesUIDocument, Continue As Variant)
   If Not Source Is Nothing Then
      Call uiview.SelectDocument (Source.Document)
   End If
End Sub

In der Schaltfläche zum Erstellen des Dokuments

Sub Click (Source As Button)
   Dim workspace As New NotesUIWorkspace
   Set uiview = workspace.CurrentView
   Call workspace.ComposeDocument ("", "", "NameDerMaske")
   Dim uidoc As NotesUIDocument
   Set uidoc = workspace.CurrentDocument
   On Event Queryclose From uidoc Call SelectDocument
End Sub

Es wird grundsätzlich alles ausgeführt, allerdings erscheint die Fehlermeldung Command is not available und das Dokument wird nicht markiert.

Habe in SelectDocument sowohl auf das Dokument Zugriff als auch auf die uiview (mit msgbox überprüft, da der Debugger bei dieser Konstruktion nicht mitspielt). Ich vermute, dass uiview.SelectDocument nur ausgeführt werden kann, wenn die Ansicht im Vordergrund ist. Das ist sie aber nicht, da das Dokument noch offen ist. Das Event Queryclose ist da zu früh. Habe es mit Terminate versucht, aber das ist gemäß Fehlermeldung kein Event. Und ein Postclose gibt es (noch) nicht.

Set uiview = workspace.CurrentView in SelectDocument ausgeführt, ergab Nothing, das ist ein weiterer Beleg dafür, dass SelectDocument aus dem Fokus des Dokuments und nicht der Ansicht ausgeführt wird.

Getestet habe ich unter 7.03, vielleicht funktioniert das unter einer neueren Version, deshalb habe ich die komplette Vorgehensweise aufgeschrieben.
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Grischu am 17.09.10 - 11:55:26
Ich habe es unter 8.5.1 ausgeführt geht genau so wenig.


Allerdings habe ich danach noch etwas rum probiert und folgendes scheint zu funktionieren. Warum auch immer :)


In der Ansicht (Globals)

Declaration
Dim uiview As NotesUIView
Dim workspace As NotesUIWorkspace
Dim uiDatabase As NotesUIDatabase

Sub Initialize
   Set workspace = New NotesUIWorkspace
   Set uidb = workspace.CurrentDatabase
End Sub

Sub SelectDocument (Source As NotesUIDocument, Continue As Variant)
   Print "SelectDocument"
   If Not Source Is Nothing Then
      Call uiDatabase.OpenView(uiview.ViewName,"",False)
      On Error Resume Next
      Call uiview.SelectDocument (Source.Document)
      On Error Goto 0
   End If
End Sub


In der Schaltfläche zum Erstellen des Dokuments

Sub Click (Source As Button)
   Set uiview = workspace.CurrentView
   Call workspace.ComposeDocument ("", "", "NameDerMaske")
   Dim uidoc As NotesUIDocument
   Set uidoc = workspace.CurrentDocument
   On Event Queryclose From uidoc Call SelectDocument
End Sub


Dies hat bei mir den Effekt dasd das neue Dokument in der View selektiert ist.
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Peter Klett am 18.09.10 - 10:10:51
Warum auch immer :)
Sehr gut! Ist eigentlich logisch, denn Du änderst durch das Öffnen der Ansicht den Fokus, was genau das Problem löst, das in meinem Script war.

Hatte ähnliches probiert, allerdings über Schließen und wieder Öffnen der Ansicht im SelectDocument. Schließen hatte wunderbar funktioniert ...

Die Lösung halte ich für wirklich gut, da auch das Problem, das Bernhard ansprach (Nutzen der Ansicht, während das Dokument geöffnet ist) behoben ist, denn die Ansicht wird nun nicht geschlossen.

Hoffentlich ist Snowman darüber nicht so sehr ins Schwitzen gekommen, dass er nun geschmolzen ist ...
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Snowman am 18.09.10 - 18:56:26
Nein, bin noch nicht zerschmolzen  :)

Die neue Lösung klingt wirklich sehr gut.
Baue das nächste Woche um.

Danke Euch Allen!

vg
Stephan
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Snowman am 04.11.10 - 09:32:08
Sorry, das ich das so spät nochmal aufmache, aber da geht was nicht.

Wenn ich den Code so wie beschrieben einbaue, Bekomme ich (schon beim Speichern der Aktion die die Maske öffnet) die Fehlermeldung: "Eventhandler must be a LotusScript SUB or Function: SELECTDOCUMENT.

Wieso compiliert das bei Euch ohne Fehler?

stephan
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Grischu am 04.11.10 - 11:20:03
Hmm gute Frage.

Ist das eine Shared Action oder ist sie direkt in der Ansicht ?

Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Peter Klett am 04.11.10 - 12:06:20
Hast Du vielleicht die Sub SelectDocument nicht in den Globals definiert?

Du musst die "ganz oben" anlegen, also oberhalb von

NameDerAnsicht (Ansicht)

in

NameDerAnsicht (Globals)
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Snowman am 04.11.10 - 13:34:04
Hmm gute Frage.

Ist das eine Shared Action oder ist sie direkt in der Ansicht ?


Habe beides probiert. Geht nicht.
Action in der Ansicht bringt gleich den Fehler, als Shared Action halt erst zur Laufzeit.
Es liegt an der On Event Zeile.

Hast Du vielleicht die Sub SelectDocument nicht in den Globals definiert?

Du musst die "ganz oben" anlegen, also oberhalb von

NameDerAnsicht (Ansicht)

in

NameDerAnsicht (Globals)

Ja, sind ganz oben eingefügt.

Ich habe 8.5.2. Kann es daran liegen?
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Peter Klett am 04.11.10 - 13:43:51
Hast Du vielleicht in den Declarations der Ansicht (nicht in den Globals) eine Bibliothek eingebunden? Wenn ja, lösch die dort und trag sie in den Declarations (Globals) ein.
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Snowman am 04.11.10 - 14:56:54
ich habe jetzt eine ganz neue db angelegt.

eine maske 'person' mit einem feld name
eine ansicht 'personen' mit einer sortierten spalte name

in der ansicht ist die action, so wie im beispiel.
auch der andere code in den globals.

er compiliert nun ohne fehler, aber das event wird nicht ausgeführt.

ist zum narrischwerden....
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Peter Klett am 04.11.10 - 15:12:45
Wird SelectDocument gestartet? Eventuell mit Msgbox oder Print (wie im Beispiel angegeben) überprüfen. Wenn es gestartet wird, würde ich On Error auskommentieren, vielleicht kommt dann eine aussagekräftige Fehlermeldung.
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Snowman am 04.11.10 - 16:00:29
nein, wird nicht gestartet...
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Snowman am 05.11.10 - 12:02:21
peter,

kann ich dir mal meine db schicken?
oder kannst du mir die schicken, mit der du das getestet hast?

vielleicht sehe ich ja nur den wald vor lauter bäumen nicht...

gruß
stephan
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Peter Klett am 05.11.10 - 12:07:55
ja, schick mal her. Ich kann das dann unter 5.10, 7.03 und 8.51 testen.

Meine Emailadresse ist im Profil
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Peter Klett am 05.11.10 - 16:04:40
Hab's gefunden. SelectDocument wird durch den Befehl

On Event Queryclose From uidoc Call SelectDocument

ausgeführt, wenn das Queryclose des uidoc ausgeführt wurde. Im uidoc wurde aber nie ein Queryclose ausgeführt, weil das Queryclose absolut leer war. Habe dort jetzt ein Leerzeichen eingetragen (und wieder gelöscht).

Beim nächsten Versuch kam dann immerhin schon ein object variable not set, das ließ sich beheben, in dem der workspace nicht mehr im Initialize der Ansicht sondern in der Schaltfläche gesetzt wurde. Nun funktioniert es bei mir.

Ich schicke Dir die Datenbank mit meinen Änderungen wieder zurück.
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: koehlerbv am 05.11.10 - 16:16:14
Peter, der norwegische Sherlock Holmes!  :)
Titel: Re: selektieren des gerade erzeugten dokumentes in der view
Beitrag von: Snowman am 05.11.10 - 22:59:57
Ist ja super, jetzt gehts bei mir auch. :D

Es war wirklich nur das Aktivieren des Queryclose im Document.
Workspace im Initialize macht bei mir keine Probleme.

Danke Peter!

lg
Stephan