Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Heinrich am 15.02.05 - 21:55:36

Titel: ViewName ausgeben
Beitrag von: Heinrich am 15.02.05 - 21:55:36
Hi Programmierer,
habe ein kleines Problem.
In einem Navigator, über eine Schaltfläche möchte ich gerne den Namen der aktuell geöffneten Ansicht ausgeben.

Habe folgenden Script in der Schaltfläche hinterlegt:

Sub Click(Source As Navigator)
   Dim workspace As New NotesUIWorkspace
   Dim view As NotesUIView
   Set view = workspace.CurrentView
   Messagebox view.ViewName
End Sub


Leider wird die Fehlermeldung: "Object variable not set" ausgegeben.
Wo liegt denn der Fehler?  :)

Titel: Re: ViewName ausgeben
Beitrag von: Glombi am 15.02.05 - 21:59:22
Hallo Heinrich, willkommen im Forum!

Hast Du das mal mit durch den Debugger gejagt.

Navigator, brrrrrr graus  :o
Vielleicht gibt es gar keine CurrentView !

Andreas
Titel: Re: ViewName ausgeben
Beitrag von: Heinrich am 15.02.05 - 22:06:00
Sie Ansicht "Kunden" wird mit dem Navigator geöffnet.
Titel: Re: ViewName ausgeben
Beitrag von: Glombi am 15.02.05 - 22:09:11
Geh doch mal Schritt für Schritt mit dem Debugger durch die Formel und poste, wo er dann hängen bleibt.

Andreas
Titel: Re: ViewName ausgeben
Beitrag von: koehlerbv am 15.02.05 - 22:12:58
Wenn das eine Schaltfläche im Navigator ist, dann kann das auch nicht funktionieren, da dann der Fokus auf dem Navigator resp. der Schaltfläche ist.

Ändere mal den Code wie folgt, um das zu verifizieren, Heinrich:
Code
Sub Click(Source As Navigator)
   Dim workspace As New NotesUIWorkspace
   Dim view As NotesUIView
   Set view = workspace.CurrentView
   If view Is Nothing Then
      Messagebox "View not instantiated !"
   Else
      Messagebox view.ViewName
   End If
End Sub

Wozu soll das eigentlich gut sein ? Schaltfläche und ViewName anzeigen ? Warum Navigator anstatt Page / Outline ? Vielleicht findet sich ja eine ganz andere Lösung ?

Und: Willkommen im Forum, Heinrich !

Bernhard
Titel: Re: ViewName ausgeben
Beitrag von: Heinrich am 15.02.05 - 22:19:25
Danke, für die schnellen Antworten. Ist wirklich super das schnelle Feedback.

@Bernhard
Mit Deinem Script wird die Meldung "View not instandiiated" ausgegeben.

@Glombi
Bei meinem Script meckert der Debugger bei der msgbox mit der o.g. Fehlermeldung
Titel: Re: ViewName ausgeben
Beitrag von: koehlerbv am 15.02.05 - 22:28:31
Die Ausgabe der Massagekiste war logisch. Aber zurück zu meiner Frage: Wozu das ganze usw. ? Siehe oben.

Bernhard
Titel: Re: ViewName ausgeben
Beitrag von: Thomas Schulte am 15.02.05 - 22:34:13
Hast du das Objekt view denn schon mal mit dem Debugger überprüft. Wetten das das nicht instanziiert ist. Und warscheinlich hast du den Navigator auch noch in einem Frame untergebracht. Wie soll er denn wissen wo im UIBereich er gerade ist. Für den Geschmack des Clients auf jeden Fall nicht in einer View und damit liefert dir diese Abfrage, auch wenn sie syntaktisch korrekt ist und die richtigen Klassen benutzt kein Ergebnis. Bau dir das zum Bleistift in eine Aktion in der Ansicht ein und du wirst sehen das es funktioniert.

Das haben dir die anderen beiden schon geschrieben aber löschen will ich das jetzt auch nicht mehr

Titel: Re: ViewName ausgeben
Beitrag von: Heinrich am 15.02.05 - 22:39:26
Ist nur ein Teil eines Scriptes.
Hintergrund: Der User ruft über eine Schaltfläche eine Ansicht auf z. B. KundenNachName. Über diese werden mehrere Aktionen ausgeführt und darüberhinaus wird eine zweite Ansicht geöffnet. Zum Schluss sollte aber wieder die zuerst gewählte Ansicht geöffnet werden.
Deshalb brauche ich den aktuellen Ansichtsnamen in einer Variable. Und das ganze über eine Schaltfläche in einem Navi.
Titel: Re: ViewName ausgeben
Beitrag von: Thomas Schulte am 15.02.05 - 22:58:23
Wenn das im Client ist dann nimm die Notes.ini,. gib dem Teil einen Feldnamen. Schreib das in die Ini rein und hol es nach dem Ende der Aktion wieder raus und lösch es anschließend.
Im Web wäre das ein ganz anderes Kapitel aber so dürfte das ganz einfach und ohne Kopfschmerzen gehen.
Titel: Re: ViewName ausgeben
Beitrag von: Semeaphoros am 15.02.05 - 23:21:12
Aber unbedingt zwecks Verhinderung des Zumüllens der Notes.ini am Schluss den Eintrag wieder löschen, oder doch lieber ein Profildok dafür nehmen.

Und natürlich, Heinrich, willkommen im Forum :)
Titel: Re: ViewName ausgeben
Beitrag von: Thomas Schulte am 15.02.05 - 23:27:08
wieder löschen
Sag ich doch, aber Profildokumente haben so ihre Tücken speziell in dem Fall den man denke ich hier als Gegeben annehmen muss.
Titel: Re: ViewName ausgeben
Beitrag von: Semeaphoros am 15.02.05 - 23:32:07
Hier haben Profildokumente überhaupt keine Tücken, da sie ja in der gleichen Sitzung wieder gebraucht werden, wie sie gesetzt wurden, damit geht das alles über Memory und sind klar im Vorteil gegenüber der Notes.ini
Titel: Re: ViewName ausgeben
Beitrag von: koehlerbv am 16.02.05 - 00:01:52
Jo, solange das ProfileDoc personenbezogen sind, sind sie gegenüber der NOTES.INI erste Wahl und völlig problemlos (da sie ja eh immer - ggf. sogar komplett, falls "Schwund" eintritt - neu aufgebaut werden, wenn sie benötigt werden).

Bernhard
Titel: Re: ViewName ausgeben
Beitrag von: Semeaphoros am 16.02.05 - 00:05:22
Da es in dieser Situation sogar implizit personenbezogen ist, ist es noch nicht einmal erforderlich, das Profil-Doc explizit personenbezogen zu erstellen, womit auch gleich verhindert wird, dass unnötig Profil-Dokumente liegen bleiben.
Titel: Re: ViewName ausgeben
Beitrag von: Thomas Schulte am 16.02.05 - 09:17:02
Stimmt ihr habt recht. Wenn man das genau liest dann passiert da wirklich alles im Spieicher und damit sind Profildokumente verwendbar.
Titel: Re: ViewName ausgeben
Beitrag von: Marinero Atlántico am 16.02.05 - 09:50:51
Hervorhebungen von mir:
Der [einzelne] User ruft über eine Schaltfläche eine Ansicht auf z. B. KundenNachName. Über diese werden mehrere Aktionen ausgeführt und darüberhinaus wird eine zweite Ansicht geöffnet. Zum Schluss sollte aber wieder die zuerst [von dem einzelnen User] gewählte Ansicht geöffnet werden.


ist es noch nicht einmal erforderlich, das Profil-Doc explizit personenbezogen zu erstellen

Jens, das verstehe ich nicht.
Das Datum "vonUserZuerstGewaehlteAnsicht" ist eindeutig personenbezogen. Also benötigt man personenbezogene Profildokumente. 
Titel: Re: ViewName ausgeben
Beitrag von: Semeaphoros am 16.02.05 - 09:56:02
Benötigt keine personenbezogenen Profildokumente, da die Angabe nur solange Sinn macht, wie die Sitzung noch existiert, und während der Sitzung wechselt der Benutzer nicht. Nach der Sitzung kannst Du die gespeicherte Info wegwerfen, spielt also keine Rolle mehr, was da noch im Profildoc drinsteht, wird eh bei einer neuen Sitzung überschrieben
Titel: Re: ViewName ausgeben
Beitrag von: Marinero Atlántico am 16.02.05 - 10:14:39
und während der Sitzung wechselt der Benutzer nicht.
ok. Ich bin z.Zt. ein bischen object relational mapping infiziert, deshalb:

Nicht user-gebundene Profildokumente besitzen eine 1 zu 1 Beziehung zur Datenbank.
User besitzen (normalerweise) eine n zu 1 Beziehung zur Datenbank.

User 1 wählt seine 1. Ansicht und das Telefon klingelt.
AnsichtUser1 wird in das ProfilDokument geschrieben. 
User 2 wählt seine Ansicht
AnsichtUser2 wird in das ProfilDokument geschrieben.
User1 legt den Höhrer auf und arbeitet weiter.
Eigentlich müßte User1 nun AnsichtUser2 sehen, wenn er seine erste Ansicht aus dem Profildokument holt.

Das könnte funktionieren, wenn der cache von Profildokumenten tatsächlich user-session-gebunden wäre. Und wie lange werden die an die UserSession gebundenen Daten im Speicher gehalten? Was ist, wenn er Essen geht. Vielleicht werden die an die UserSession gebundenen Daten nach 30 Minuten gelöscht. Oder vielleicht findet manchmal doch ein Durchgriff auf das Profildokument statt. 
Weisst du sicher, dass das stabil funktioniert? Selbst dann wäre es ein hack. Die genaue Funktionalität des caches ist nicht dokumentiert (userSession-bezogen? wann und überhaupt wird der cache gelöscht?

Gruß Axel
 
Titel: Re: ViewName ausgeben
Beitrag von: Semeaphoros am 16.02.05 - 10:18:02
Genau das ist es ja, was sonst das Problem macht, was man hier ausnutzen kann: Profildokumente werden nur aus dem Memory bedient, wenn sie mal geladen sind, der Cache ist auch kein write-through, wird also nicht sofort zurückgeschrieben. Man kann hier genau das nutzen, was sonst den Entwicklern so sehr Bauchweh macht (weil sie damit nicht rechnen und deshalb dieses Verhalten nicht gewohnt sind)
Titel: Re: ViewName ausgeben
Beitrag von: Marinero Atlántico am 16.02.05 - 10:38:56
Hängt dann aber 100% von der Implementierung des caches ab.
Werden Werte aus Profildokumenten tatsächlich immer im Client gehalten. Oder ist da vielleicht eingebaut, dass auf den Server durchgegriffen wird, wenn die Daten vor ca. 1 Stunde das letzte mal durch einen Durchgriff auf den Server geholt werden (ziemlich gebräuchliches cache design, würd ich sagen).
Ein potentieller Vorteil von Personengebundenen Profildokumenten wäre auch, dass die Daten evtl. Client-crashe während der Operation überleben.
 
Titel: Re: ViewName ausgeben
Beitrag von: Semeaphoros am 16.02.05 - 10:44:08
Wie ich eben schon gesagt habe, ist das genau das Problem mit den Profil-Dokumenten, dieser Cache wurde in einer Weise implementiert, wie es eben nicht "normal" ist, ein Durchgriff auf den Server erfolgt nicht. Natürlich, wer sicher sein will, verwendet hier personenbezogene Profil-Dokumente.
Titel: Re: ViewName ausgeben
Beitrag von: Heinrich am 16.02.05 - 21:55:32
Danke, für die Tipps.
Habe mir den ViewName in die notes.ini scheiben lassen. In den Ansichten über Postopen wird die Ini gefüllt. Beim verlassen der Datenbank wird der Eintrag wieder gelöscht. Funktioniert super.