Autor Thema: Eingebettete Ansicht  (Gelesen 5063 mal)

Offline Leddl

  • Junior Mitglied
  • **
  • Beiträge: 54
Eingebettete Ansicht
« am: 18.12.06 - 15:51:35 »
Hallo zusammen,

ich wollte in einer DialogBox Suchergebnisse anzeigen, von denen eines ausgewählt werden soll. Die Suchergebnisse kommen aus einer Volltextsuche in einer View. Die Suche funktioniert bisher wunderbar, nur hapert es an der Anzeige. Hierfür wollte ich eine eingebettete Ansicht anzeigen, in der ich dann eben nur die gefundenen Dokumente anzeigen lasse. Soweit ich das mitbekommen habe, wird bei einer FTSearch bereits automatisch die NotesView auf die Ergebnisse gefiltert. Ich müßte es also nur noch schaffen, diese Filterung auf die eingebettete Ansicht zu übertragen. Da beide die gleiche View darstellen, dachte ich eigentlich, das sollte kein Problem sein. Aber anscheinend hab ich mich da getäuscht.
Ich wäre euch daher dankbar, wenn ihr mir sagen könntet, ob und wenn ja, wie das geht. Habt ihr vielleicht Erfahrungen mit ähnlichen Problemen gemacht und Vorschläge, wie man etwas ähnliches erreichen kann?

Meine 2. Frage, die am gleichen Problem hängt ist folgende: Kann ich in dieser eingebetteten Ansicht das aktuell markierte (also das, auf dem der Cursor steht) Dokument auslesen? In anderen Threads habe ich dazu das Stichwort CaretNoteID gefunden, allerdings sind die Beispiele immer nur für die aktuelle View konzipiert, und ich scheitere daran, das für meine eingebettete Ansicht zurechtzurücken. Wieder meine Frage: Ist das überhaupt möglich, oder sind die Möglichkeiten einer eingebetteten Ansicht einfach zu gering?

Danke

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Eingebettete Ansicht
« Antwort #1 am: 18.12.06 - 19:44:40 »
Zu 1.) Die Volltextausgabe im Frontend ist eine momentan beschränkte Ausgabe einer bestimmten View. Soetwas funktioniert in embedded views überhaupt nicht.
Üblicherweise verwendet man für soetwas (private) Ordner, in die die Suchergebnisse geschoben werden. Dann klappts auch wieder mit der embedded view.

Bernhard

Offline Leddl

  • Junior Mitglied
  • **
  • Beiträge: 54
Re: Eingebettete Ansicht
« Antwort #2 am: 19.12.06 - 10:03:34 »
Aha, gut zu wissen. Danke schonmal für die Antwort.
Wie genau funktioniert das dann mit diesen privaten Ordnern? Sorgt das dann nicht für starke Performanceeinbußen, wenn viele Dokumente kopiert werden müssen?
Und wie siehts mit meiner 2. Frage aus? Kann man das aktuell markierte Dokument aus einer eingebetteten Ansicht auslesen? Oder bin ich damit wieder auf dem Holzweg?

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Eingebettete Ansicht
« Antwort #3 am: 19.12.06 - 10:20:01 »
Ich stelle die Suchergebnisse auch in privaten Ordnern dar. Perfomanceeinbußen kann ich nicht feststellen. Das Suchergebnis ist ja eine Collection und in der entsprechenden Klasse gibt's die Methode PutAllInFolder. Damit geht's relativ schnell.

Da Zugreifen auf markierte Dokumente in einer eingebetteten Ansicht ist in der Tat etwas umständlich. Die einfachste Art und Weise ist diese hier:

http://atnotes.de/index.php?topic=22045.msg187338#msg187338


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Leddl

  • Junior Mitglied
  • **
  • Beiträge: 54
Re: Eingebettete Ansicht
« Antwort #4 am: 19.12.06 - 10:45:36 »
Bei der Suche in der NotesView direkt ist das Ergebnis die Anzahl der gefundenen Dokumente. In der Hilfe habe ich auch keine Methode der NotesView gefunden, an eine DocumentCollection zu kommen, oder war ich da einfach wieder nur blind?
Die Suche in der View wäre mir nämlich lieber als die in der Datenbank, da ich so einfach auf bestimmte Felder einschränken kann. Sollte das nicht gehen, suche ich eben in der Datenbank direkt und schränke zumindest auf die Maske ein. Das Ergebnis hier ist dann eine DocumentCollection.

Die Idee in dem von dir verlinkten Thread klingt gut. Den Wert kann ich dann einfach über @Environment("EMB_VIEW_docid") auslesen, oder?
Wie aber komme ich dann von der DocumentUniqueID zum entsprechenden Dokument? Das Problem hatte ich nämlich schonmal an anderer Stelle. In der Methode getDocumentsbyID der NotesDatabase wird ja zB die NoteID verlangt, mit der UniqueID kann man hier nichts anfangen...

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Eingebettete Ansicht
« Antwort #5 am: 19.12.06 - 13:03:02 »
Stimmt, bei der Suche innerhalb der Ansicht bekommst du "nur" die Anzahl der Dokumente. Du könntest folgendes mal versuchen, nach dem du die Suche in der Ansicht durchgeführt hast.

Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim vc As NotesViewEntryCollection
Set db = session.CurrentDatabase
Set view = db.GetView("By Category")

'Hier führst du die Suche durch

Set vc = view.AllEntries
Call vc.PutAllInFolder("Name des Ordners")

Ich bin mir aber nicht ganz sicher ob das funktioniert. Wenn nicht, dann bleibt nur die Suche in der Datenbank.


Wie aber komme ich dann von der DocumentUniqueID zum entsprechenden Dokument?

Damit:

    notesDocument = notesDatabase.GetDocumentByUNID( unid$ )


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Leddl

  • Junior Mitglied
  • **
  • Beiträge: 54
Re: Eingebettete Ansicht
« Antwort #6 am: 19.12.06 - 13:32:54 »
OK, jetzt hat sich das nächste Problem herausgestellt... Logischerweise bezieht sich der Ordner bei PutAllInFolder auf die Datenbank, aus der die Dokumente geholt werden. Da ich die aber aus einer anderen Datenbank hole, werden sie auch da in den Ordner kopiert. Eher etwas unschön, da ich vermeiden wollte, daß in der anderen Datenbank herumgewurschtelt wird.
Gibt es eine Möglichkeit, die gefundenen Dokumente in einem Ordner der richtigen Datenbank zu speichern?

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Eingebettete Ansicht
« Antwort #7 am: 19.12.06 - 13:45:40 »
Gibt es eine Möglichkeit, die gefundenen Dokumente in einem Ordner der richtigen Datenbank zu speichern?

Nein.

In welchem Ordner ein Dokument enthalten ist, wird nur mit einem Verweis im des Dokumentes gespeichert und das funktioniert nur innerhalb der Datenbank.

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Leddl

  • Junior Mitglied
  • **
  • Beiträge: 54
Re: Eingebettete Ansicht
« Antwort #8 am: 19.12.06 - 14:50:07 »
Hm... Ok, schade.
Jetzt mal angenommen, ich lasse es so. Die gefundenen Dokumente werden also jetzt in meinen Ordner kopiert. In meiner eingebettete Ansicht kann ich jetzt den Ordner auswählen (zumindest wenn ich ihn nicht als private definiere, das hat mir auch gerade noch einmal Kopfzerbrechen bereitet ;D). Wie kann ich denn dann später den eben befüllten Ordner wieder leeren? Sonst läuft er mir ja voller und voller ;)

Die Ergebnisse mit der ViewEntryCollection waren auch eher weniger von Erfolg gekrönt, so daß ich jetzt dann doch wieder zur Datenbank zurückgekehrt bin. Gibt es hier evtl die Möglichkeit, zumindest auf eine bestimmte Maske einzugrenzen?

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Eingebettete Ansicht
« Antwort #9 am: 19.12.06 - 15:16:56 »
NotesDocumentCollection.RemoveAllFromFolder ist eine von etlichen Varianten zum Leeren eines Folders. Das sollte also nicht das Problem darstellen.

Ich denke, Hilfe wäre zielgerichteter möglich, wenn Du Dein Problem möglichst detailliert beschreibst.
- Warum brauchst Du die Auswahl? Was willst Du dann damit anstellen?
- Warum passiert das aus einer anderen DB heraus?
- Wie willst Du die Dokumente selektieren (Kriterien)?
- Wie schätzt Du Deine Erfahrungen mit LS ein?

Ich habe da so ein paar Ahnung (und würde das Ganze dann ganz anders lösen).

Bernhard

Offline Leddl

  • Junior Mitglied
  • **
  • Beiträge: 54
Re: Eingebettete Ansicht
« Antwort #10 am: 19.12.06 - 16:09:30 »
  • Weil es die Fachabteilung, für die die Anwendung gedacht ist, so haben will ;) Jedes Dokument soll einem bestimmten Kunden zugeordnet werden, und da kam der Wunsch auf, daß nicht jedesmal die Daten von Hand eingegeben werden kann, sondern daß die Eingabe eines Teils der Daten reicht und dann automatisch alles ausgefüllt wird. Ist die Eingabe nicht eindeutig, soll eben aus den gefundenen Ergebnisses ausgewählt werden können
  • Weil die Kundendaten eben in einer anderen Anwendung in einer anderen Datenbank gepflegt werden.
  • Vor allem nach der Maske, besser noch, nach einer bestimmten Ansicht, die ich hierfür erstelle. Darin soll dann nach dem eingegebenen Begriff gesucht werden.
  • Naja, ich arbeite mit Notes jetzt die 4. Woche und hab mir alles selbst beigebracht. Antworte selbst ;) Allerdings heißt das nicht, daß ich keine Programmiererfahrung habe, nur in Notes bin ich eben eher frisch ;)

Meine Anwenung ist ja eigentlich schon so gut wie fertig, das meiste funktioniert auch ganz gut. Das einzig größere Problem war eben das hier, und daher hab ichs mal versucht.
Und dank Axels Vorschlag mit der NotesViewEntryCollection hab ich auch den nächsten Schritt geschafft, denn selbige hat wiederrum eine Methode FTSearch, über die ich es dann jetzt auch geschafft habe, nur die relevanten Dokumente in den Ordner zu kopieren. (Thx an dich, Axel, das war die richtige Fährte! ;))

Mit deinem Vorschlag mit RemoveAllFromFolder tue ich mir ehrlich gesagt etwas schwer, da zu dem Zeitpunkt, zu dem ich den Ordner löschen muß (entweder beim Öffnen der Dialogbox oder beim Schließen) die beim Suchen gefüllte Collection nicht vorliegen habe. Oder wie komme ich da später (beim Beenden der Dialogbox) nochmal dran?

Wichtig ist mir vor allem, daß beim Leeren des Ordners die Dokumente nicht gelöscht werden (das ist mir nämlich gerade beim "manuellen Leeren" des Ordners aufgefallen... Zum Glück arbeite ich mit ner Testdatenbank ;D Hatte nicht damit gerechnet, daß die Dokumente beim Löschen aus dem Ordner auch komplett weg sind, obwohl das ja eigentlich nahe liegt, wenn man mal drüber nachdenkt...), sondern eben einfach nur nicht mehr im Ordner auftauchen.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Eingebettete Ansicht
« Antwort #11 am: 19.12.06 - 16:32:12 »
Nun, wenn ich Kundendaten aus einer anderen DB brauche, verwende ich in der Regel eine Picklist.
Wenn das - warum auch immer - bei Dir nicht in Frage kommt: Warum bringst Du das Ergebnis Deiner Suche auf Basis der Suchmaske nicht in ein Array und bietest dieses in einer Dialogbox dem Anwender an?

Zur Frage nach dem RemoveAllFromFolder: Die Methode macht tatsächlich genau das, was der Name verspricht - der Ordner wird geleert, ergo nur die Referenzen und nicht physisch die Dokumente.
An die erforderliche Collection kommst Du unter anderem über NotesView.AllEntries.

HTH,
Bernhard

Offline Leddl

  • Junior Mitglied
  • **
  • Beiträge: 54
Re: Eingebettete Ansicht
« Antwort #12 am: 19.12.06 - 17:05:30 »
Nun, wenn ich Kundendaten aus einer anderen DB brauche, verwende ich in der Regel eine Picklist.
Hatte ich auch in Betracht gezogen. Bei einigen Tausend Kundendaten ist da die Auswahl aber etwas langwierig. Zudem ist eine Anforderung, daß eben in jeder Spalte gesucht werden soll. Bei der Picklist geht das nur über eine Spalte. Daher habe ich der Idee (schweren Herzens, wäre schließlich viel einfacher gewesen) adieu gesagt.
Wenn das - warum auch immer - bei Dir nicht in Frage kommt: Warum bringst Du das Ergebnis Deiner Suche auf Basis der Suchmaske nicht in ein Array und bietest dieses in einer Dialogbox dem Anwender an?
Da verstehe ich jetzt nicht ganz, wie du das meinst, kannst du das näher erläutern? Das ganze läuft ja schon in einer DialogBox.

Zur Frage nach dem RemoveAllFromFolder: Die Methode macht tatsächlich genau das, was der Name verspricht - der Ordner wird geleert, ergo nur die Referenzen und nicht physisch die Dokumente.
An die erforderliche Collection kommst Du unter anderem über NotesView.AllEntries.
Achso, klar... Sind Dokumente nicht im Ordner enthalten, macht das ja natürlich nichts... Ich hab mir jetzt gerade in den Kopf gesetzt, ich müsste ganz genau die vorher kopierten Dokumente auch wieder entfernen. Aber das klingt logisch.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Eingebettete Ansicht
« Antwort #13 am: 19.12.06 - 17:10:51 »
Wenn das - warum auch immer - bei Dir nicht in Frage kommt: Warum bringst Du das Ergebnis Deiner Suche auf Basis der Suchmaske nicht in ein Array und bietest dieses in einer Dialogbox dem Anwender an?
Da verstehe ich jetzt nicht ganz, wie du das meinst, kannst du das näher erläutern? Das ganze läuft ja schon in einer DialogBox.

Die Dialogbox verwendest Du doch derzeit zur Eingabe Deiner Suchbegriffe. Auch die Ergebnisse kannst Du so präsentieren: Du bereitest sie entsprechend auf (Sortierung etc.) in einem Array Of Strings. Dieses zeigst Du dann in einer Ergebnis-Dialogbox an. Der Anwender kann dann "seinen" Treffer auswählen - oder eine neue Suche starten (am besten, wenn er die letzte bestehende noch verfeinern kann).

Bernhard

Offline Leddl

  • Junior Mitglied
  • **
  • Beiträge: 54
Re: Eingebettete Ansicht
« Antwort #14 am: 19.12.06 - 17:29:27 »
Die Dialogbox verwendest Du doch derzeit zur Eingabe Deiner Suchbegriffe.
Nein, die Idee hab ich aufgegeben ;D Die Eingabe geschieht momentan direkt in der aufrufenden Maske. So konnte ich das Fokus-Problem lösen, das ich in meinem anderen Thread angesprochen habe.
Auch die Ergebnisse kannst Du so präsentieren: Du bereitest sie entsprechend auf (Sortierung etc.) in einem Array Of Strings. Dieses zeigst Du dann in einer Ergebnis-Dialogbox an.
Vrstehe ich das richtig, du meinst ich sollte suchen, aus den gefundenen Dokumenten dann jeweils die relevanten Daten zu einem String zusammenfassen und dann alle in ein Array packen? Und dann zB in einem Kombinationsfeld anzeigen?
Wäre schon eine Möglichkeit. Garantiert auch um einiges einfacher zu realisieren. Schöner anzuschauen ist aber definitiv die andere Möglichkeit, da ich hier durch die tabellarische Ansicht mehr Übersichtlichkeit habe, vor allem weil ich mindestens 6 Spalten unbedingt zur Auswahl anzeigen muß.

Offline Leddl

  • Junior Mitglied
  • **
  • Beiträge: 54
Re: Eingebettete Ansicht
« Antwort #15 am: 20.12.06 - 09:02:33 »
So, ich wollte jetzt gerade noch Axels Tip für die Auswahl eines Items in der eingebetteten Ansicht einbauen.
Da ich ja immer noch in ner DialogBox bin, konnte ich nicht wie vorgeschlagen einen Button zur Auswahl eines Dokuments neben die eingebettete Ansicht setzen (der kriegt nach Klick in die Ansicht ja schließlich nie den Fokus). Daher hab ich den Code zur Übernahme der Daten eben ins QueryClose gesetzt. Nur beobachte ich dort, daß - egal, welches Dokument ich in der eingebetteten Ansicht auswähle - immer das oberste Dokument ausgelesen wird.

Hab ich da evtl. irgendeine Einstellung oder etwas anderes vergessen?

Im Zielrahmen (Einfachklick) des Ordners steht wie vorgeschlagen
Code
@SetEnvironment("Kundensuche_View_DocID";@Text(@DocumentUniqueID));""
und im QueryClose hab ich bisher folgenden Code stehen
Code
Dim session as New NotesSession
Dim doc as NotesDocument

unID$ = session.GetEnvironmentString("Kundensuche_View_DocID")	
Set doc = db.GetDocumentByUNID(unID$)

Messagebox doc.Shortname(0)

//Edit:
Korrektur, es wird *nicht* immer das oberste Dokument des Ordners eingelesen. Es scheint nur so, als ob die Umgebungsvariable nach dem ersten Mal nicht mehr gesetzt wird, denn das Ergebnis ist immer das selbe Dokument... Muß man vor dem setzen evtl. erstmal die Variable löschen?
« Letzte Änderung: 20.12.06 - 10:38:43 von Leddl »

Offline Leddl

  • Junior Mitglied
  • **
  • Beiträge: 54
Re: Eingebettete Ansicht
« Antwort #16 am: 20.12.06 - 14:52:26 »
Wäre es möglich, daß das Problem wieder an der Dialogbox hängt? Daß die eingebettete Ansicht hier einfach nicht korrekt auf den Mausklick reagiert? :-\

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: Eingebettete Ansicht
« Antwort #17 am: 20.12.06 - 20:19:29 »
Könnte sein. Ich habe noch nie eine eingebettete Ansicht in einer Dialogbox verwendet. Wie verhält sich denn das Ganze, wenn du die Maske ganz normal aufrufst? Wenn's dann funktioniert, dann liegt's eindeutig am Dialog.

Nochmal zurück zur Picklist. Versuch doch mal mit der Picklist auf den Ordner mit den Suchergebnissen zuzugreifen. Vielleicht ist das ja auch ein gangbarer Weg.


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Eingebettete Ansicht
« Antwort #18 am: 20.12.06 - 21:28:14 »
Eine Dialogbox ist ganz schlecht für derartige Dinge. Ihr einziger Vorteil - aus meiner Sicht - ist in diesem Zusammenhang ihre Modalität. Dialogbox und RTF, Dialogbox und embedded view - alles eingeschränkt wegen der speziellen Eigenschaften. Das muss kein Nachteil sein, man muss ihn nur umschiffen bzw. jedes Designelement entsprechend Spezifikation verwenden.

Du kannst
- eine normale Maske für die Auswahl Suchkriterien / Auswahl aus Treffern verwenden. Etwas geschickte Programmierung, Form events ausnutzen ...
- Du kannst eine Dialogbox mit der eigentlichen Maske verknüpfen
- Du kannst eines der anderen hier vorgeschlagenen Verfahren verwenden
- ...

Auswählen und umsetzen musst Du nun aber alleine. Wir können (und wollen) nur Anregungen geben.

Bernhard

Offline Leddl

  • Junior Mitglied
  • **
  • Beiträge: 54
Re: Eingebettete Ansicht
« Antwort #19 am: 08.01.07 - 17:09:59 »
Hallo zusammen,
erstmal natürlich ein frohes neues Jahr, hoffe ihr seid alle gut rübergerutscht ;)

Ich war die letzten Wochen im Urlaub und habe daher hier nichts mehr geschrieben. Wollte jetzt auch nur mal vermelden, daß ich mich inzwischen doch für die Variante mit der Picklist entschieden habe. Sieht zwar nicht ganz so schön aus wie die Dialogbox, da ich mich hier nicht ums Design kümmern kann, aber dank Axels Vorschlag, das Verschieben in den Ordner mit der Picklist zu verbinden, läuft es im Großen und Ganzen ganz gut.
Die eigentliche Suche habe ich daher jetzt auf die aufrufende Maske ausgelagert, in der Picklist werden dann nur noch die gefundenen Ergebnisse angezeigt. Soweit so gut.

Mein Problem momentan ist jetzt nur noch, an die ausgewählte Zeile zu kommen. Aus einem mir nicht bekannten Grund bekomme ich bei den zu suchenden Dokumenten keine DocumentUniqueID, wodurch es mir dann recht schwer fällt, an die restlichen Daten zu gelangen. Aber daran arbeite ich jetzt auch noch. Zur Not muß ich eben die andere Datenbank nochmal nach der ausgewählten Kundennummer durchsuchen ;)
Oder gibts nen einfacheren Weg, den ich momentan nicht sehe?

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz