Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Andreas Huhn am 19.12.05 - 13:22:43
-
Hallo zusammen,
ich habe bereits die Boardsuche bemüht aber nicht wirklich das gefunden was mit weitergeholfen hätte. Lediglich einen 3 Jahre alten, trotzdem sehr interessanten Thread zu R5.
Ich habe eine Ansicht erstellt und diese als eingebettete Ansicht in eine Maske verpflanzt. Am Anfang der Maske soll es über zwei Datumsfelder möglich sein ein "Von" und ein "Bis" Datum zu definieren.
In der eingebetteten Ansicht sollen dann nur noch jene Dokumente berücksichtigt werden die innerhalb dieses Intervalls liegen.
Ist das mit Notes Domino 6 möglich?
Viele Grüße und besten Dank,
Andreas
-
Nein. Das geht in Richtung dynamischer Ansichten.
Was gehen könnte wäre eine Lösung mit einer dbSearch und eine spofu folder...
evtl. gibts noch weitere Möglichkeiten...
-
geht mit @SetViewInfo
-
Wie?
-
Ähm..
könntet ihr mir das etwas genauer erklären? Evtl. an einem Beispiel?
die Auswahlformel für die view lautet:
SELECT (form = "MainTopic" | form = "Prototyping2") | @IsResponseDoc
dann landet sie als embedded view in einer Maske.
Ebenfalls in der Maske zwei Felder die Start- und Endwert des Intervalls definieren.
-
Hallo Andreas:
Die Auswahlformel der View als solche liefert dir die Grundgesamtheit der Dokumente; jetzt willst du noch einen Filter über diese Dokumente legen.
Ich habe es selber noch nicht ausprobiert, aber es sollt mit @SetViewInfo funktionieren.
Im Normalfall filterst du nach einem Suchbegriff; z.b. Alle Kunden mit einem bestimmten Firmennamen
@Command([OpenView];"Kunden");
@SetViewInfo([SETVIEWFILTER];"Acme AG";"Firmenname";1)
wobei die Ansicht Kunden alle deine Kunden enthält und die erste Spalte nach Kundenname kategorisioert ist.
Jetzt stelle dir eine ähnliche Ansicht vor, wo in der ersten Spalte das Datum steht, was du filtern möchtest.
Statt "acme AG" steht dann in etwas folgendes in der Suchanfrage
Datum <= SucheStartDatum & SucheEndDatum <= Datum
wobei SucheStart und End deine beiden Felder darstellen.
da solltest du mal ein bisschen mir rumprobieren
-
Ob das aber was wird unter den gegebenen Anforderungen ?
Filtert in Standardgliederungsansichten eine Ansicht, um nur die Dokumente einer angegebenen Kategorie anzuzeigen.
Kategorie haben wir hier ja nicht.
Filterzeichenfolge
Text. Schlüssel, der festlegt, welche Dokumente in einer Ansicht angezeigt werden. Wenn diese Zeichenfolge in der in Spalte angegebenen Spalte vorhanden ist, wird das Dokument in der Ansicht angezeigt.
Text haben wir auch nicht ...
Eigentlich bietet @SetViewInfo genau das, was in der sowieso schon eingebetteten Ansicht SingleCategory erledigt.
Das "richtige" SetViewInfo ist aus meiner Sicht in R6 und R7 noch nicht enthalten.
Bernhard
-
okay, ich werd damit was versuchen, danke Ulrich.
Doch Kategorien haben wir schon...
ich habe jetzt aktuell 3 embedded views in der Maske. Jede von den dreien ist in der ersten Spalte nach Produkten kategorisiert.
Hoffe das funktioniert auch mit mehreren embedded views in einer Maske.
werd jetzt mal ein wenig tüfteln... schreib euch dann mit welchem Erfolg.
Danke,
Andreas
-
Hallo Ulrich,
was ich auch probiert habe, es wollte nicht so recht funktionieren. Wie ich gerade gesehen habe hast du weite Teile deines Postings durchgestrichen. Heißt das daß es doch nicht möglich ist den Einzugsbereich der Dokumente auf ein Zeitintervall zu begrenzen? Such nämlich immer noch nach einer Lösung.
Viele Grüße,
Andreas
-
Hi,
meines Wissens ist es nicht möglich Ansichten auf einen Zeitraum zu beschränken, denn du variabel eingeben kannst. Das würde eine dynamische Ansicht bedeuten und das kann Notes nicht.
Meine Vorposter haben das ja schon hinreichend erörtert.
Die einzigste Alternative hat dir umi in Antwort #1 genannt. Die Dokumente über NotesDatabase.Search suchen und dann in einen SPOFU (shared, private on first use) - Ordner verschieben.
Axel
-
Guten Morgen Axel,
gerade komme ich mir wieder ziemlich dumm vor. Ich weiß nicht mal wo anfangen. Notesdatabase.search spofu ? Über einen Agenten? Wo kommt die eingebettete Ansicht ins Spiel? Gibt es ein -einigermaßen- simples Beispiel dafür an dem ich mich orientieren kann oder ist das alles sehr aufwändig? In letzterem Fall müsste ich den Gedanken wohl fallen lassen.
mit leicht besorgten Grüße aus Landshut,
Andreas
-
In der Hilfe habe ich ein Beispiel gefunden,
Dim db As New NotesDatabase("Katmandu","somedocs.nsf")
Dim collection As NotesDocumentCollection
Dim dateTime As New NotesDateTime(_
Cstr(Datenumber(2000, 5, 1)))
Set collection = db.Search("@IsResponseDoc",dateTime,0)
Über den Parameter notesDateTime wird aber das Datum festgelegt ab dem (Untergrenze) die Dokumente in die Collection aufgenommen werden sollen. Das erste Problem wäre schon mal auch eine Obergrenze festzulegen.
Im zweiten Schritt müsste ich die Collection in den SPOFU verschieben, oder? Wie stellt man das an?
-
Hi,
die Suche über den dateTime-Parameter würde ich nicht machen, dass kann u.U. zu Problemen führen, da hier das Erstell- bzw. Geändert-Datum verwendet wird und nicht ein Feldwert.
So könnte ein Beispiel aussehen, dass alle Dokumente findet, die im Datumsfeld im Bereich vom 2.1. - 30.06. 2005 liegen
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim strSearchFormula As String
strSearchFormula = {SELECT Datumsfeld > @TextToTime("01.01.2005") & Datumsfeld < @TextTotime("01.07.2005")}
Set db = session.CurrentDatabase
Set collection = db.Search(strSearchFormula, Nothing,0)
...
Das Ergebnis lässt sich mit einem Befehl in einen Ordner verschieben.
Call notesDocumentCollection.PutAllInFolder( folderName$ [, createonfail ] )
Wobei ich die Erfahrung gemacht habe, dass der Ordner bestehen muss. Das war allerdings zu R5-Zeiten. Bei R6 musst du es ausprobieren.
Über einen Agenten?
Du kannst das auch über einen Aktionsbutton machen.
Wo kommt die eingebettete Ansicht ins Spiel?
Die kommt hier garnicht ins Spiel. Einen Ordner kannst du nichtg einbetten.
Axel
-
Einen Ordner kannst du nichtg einbetten.
Was sollte einen daran hindern ?
Bernhard
-
Was sollte einen daran hindern ?
Außer der Holzweg, auf dem ich war, niemand. :P
Ich war gedanklich auf einer anderen Baustelle.
Axel
-
Hallo nochmal ihr beiden,
.. ich brauch immer ein wenig um das ganze umzusetzen und bei Bedarf nochmal ein wenig nachzulesen.
Was ich gemacht habe...
Zuerst habe ich in zwei Masken, die evtl. Dokumente erstellen die in die Auswertung aufgenommen werden sollen ein neues Feld namens "Datumsfeld" erstellt, vom Typ Text und "Berechnet beim Anlegen". Als Vorgabewert habe ich jeweils folgende Formel verwendet um das aktuelle Datum darin zu speichern: @Left(@Text(@Today);10)
Als nächstes habe ich einen neuen Ordner namens "oTest" erstellt, aus der Vorlage "leer".
Maskenformel hat er keine.
2 Spalten, die erste zeigt die Nummer in der Ansicht, die zweite ist auf den Namen "Freigabe" gestellt, der Name eines Feldes in einer der beiden Masken.
Diesen Ordner habe ich in eine Maske eingefügt (komischerweise tauchen Ordner unter erstellen ->eingebettetes Element -> Ansicht auf). Darüber einen Hotspot mit folgendem Code:
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim strSearchFormula As String
strSearchFormula = {SELECT Datumsfeld > @TextToTime("21.12.2005") & Datumsfeld < @TextTotime("22.12.2005")}
Set db = session.CurrentDatabase
Set collection = db.Search(strSearchFormula, Nothing,0)
Call collection.PutAllInFolder( "oTest" , True)
End Sub
Dann habe ich mit einer der beiden Masken (die welche das Feld "Freigabe" enthält) ein neues Dokument gestellt und in der db gespeichert. Dann habe ich auf meinen Hotspot geklickt. Jedoch passiert nichts. Keine Fehlermeldung, kein Dokument das plötzlich im eingebetteten Ordner sichtbar wird.
Hab versucht das möglichst genau zu beschreiben, was ich getan hab, damit ihr seht an welcher Stelle ich den Bock geschossen hab.
Gruß,
Andreas
-
Ob überhaupt was passiert, kannst Du mit
Messagebox collection.Count
überprüfen.
Weiters: Deine Bedingung kann nicht erfüllt werden: Der 21.12.2005 (wenn das in Deinem Datumsfeld steht) kann nicht grösser sein als der 21.12.2005.
Bernhard
-
Du hast recht, allein vom Datum her konnte das schon nicht funktionieren.
Weiter hab ich noch gemerkt. Die Maske die das Dokument erstellt ist von Typ Antwort. Deswegen hab ich jetzt in den Eigenschaften des Ordners den Haken vor "Antwortdokumente hierarchisch anzeigen" entfernt.
Außerdem hab ich jetzt das Feld "Datumsfeld" von Typ Text auf den Typ Datum/Zeit umgestellt.
..und siehe da... die Messagebox collection.count wirft jetzt eine 1 aus. Im eingebetteten Order in der Maske taucht leider kein Dokument auf. Ist da noch ein Fehler drin?
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim strSearchFormula As String
strSearchFormula = {SELECT Datumsfeld > @TextToTime("20.12.2005") & Datumsfeld < @TextTotime("22.12.2005")}
Set db = session.CurrentDatabase
Set collection = db.Search(strSearchFormula, Nothing,0)
Call collection.PutAllInFolder( "oTest" , True)
Messagebox collection.Count
End Sub
-
Okay, hab herausgefunden daß der Ordner nicht aktualisiert wird. Das Dokument wird eingefügt, aber erst angezeigt wenn ich die Maske schließe und neu öffne.
Auch ein @command([refresh]) oder reloadwindow funktionieren nicht. Ein Druck auf F9 komischerweise schon.
Was ich also jetzt noch bräuchte wäre daß die Dokumente im Ordner gleich angezeigt werden und daß bei einer Anfrage nach einem anderen Zeitraum die bestehenden Doks aus dem Ordner gelöscht werden (ohne sie aus der db zu löschen) und mit den neuen Suchtreffern gefüllt wird. Ich weiß aber gar nicht ob dies möglich ist...
-
Hallo,
bei einer neuen Suche, solltest Du die im Folder befindlichen Dokumente erst mit
Call notesViewEntryCollection.RemoveAllFromFolder( foldername$ )
aus dem Folder entfernen.
Viele Grüße
ghost
-
Okay, hab herausgefunden daß der Ordner nicht aktualisiert wird. Das Dokument wird eingefügt, aber erst angezeigt wenn ich die Maske schließe und neu öffne.
Auch ein @command([refresh]) oder reloadwindow funktionieren nicht. Ein Druck auf F9 komischerweise schon.
Was ich also jetzt noch bräuchte wäre daß die Dokumente im Ordner gleich angezeigt werden und daß bei einer Anfrage nach einem anderen Zeitraum die bestehenden Doks aus dem Ordner gelöscht werden (ohne sie aus der db zu löschen) und mit den neuen Suchtreffern gefüllt wird. Ich weiß aber gar nicht ob dies möglich ist...
Danke Ghost. Kurz vor deinem Posting hab ich ein entsprechendes Posting von Diali mittels Boardsuche gefunden. Mit:
Set view = db.GetView("oIntervall")
Set vc = view.AllEntries
Call vc.RemoveAllFromFolder("oIntervall")
So lösche ich sie vorher. Das andere Problem schlägt auch hier zu: Das der Ordner wieder leer ist wird erst nach dem neu öffnen der Maske dargestellt, oder nach Druck auf F9.
Sendkeys {F9} am Ende des Scriptes verursacht einen Fehler.
Habt ihr noch eine Idee?
-
Wenn @Command([ViewRefreshFields]) nicht hilft, dann fallen mir im Moment nur 2 weniger schöne Lösungen ein:
1. Schreib in die Maske, dass der User F9 drücken soll um das Ergebnis zu sehen.
2. Schließe das Dokument und öffne es dann gleich wieder. So muss man das auch machen, wenn sich ein RTF-Feld geändert hat. Schau dir dazu die EditDocument-Methode der Klasse NotesUIWorkspace an.
Viele Grüße
ghost
-
Danke Ghost, das wars! Hatte schon alle möglichen Refreshmethoden durch. Mit der ViewRefresh Methode von NotesuiWorkspace, dem Pendant zur Formel funktioniert die Aktualisierung jetzt.
... jetzt nur noch eine Sache und dann bin ich glücklich...
Ich hab jetzt zwei Felder vom Typ Datum/Zeit mit den Namen datVon und datBis erstellt um dort die Abfrage des Zeitintervalls variabel zu gestalten. Leider meldet er immer einen Fehler in der Abfrageformel...
Versucht hab ich es mit:
strSearchFormula = {SELECT Datumsfeld > @TextToTime( uidoc.datVon(0) ) & Datumsfeld < @TextTotime( uidoc.datBis(0) )}
und auch mit:
strSearchFormula = {SELECT Datumsfeld > @TextToTime( uidoc.FieldGetText("datVon") ) & Datumsfeld < @TextTotime( uidoc.FieldGetText("datBis") )}
aber leider kein Erfolg. Wie kann ich die Feldwerte variabel an die Abfrage übergeben?
Gruß,
Andreas
-
Hab den Unsinn gerade bemerkt. Bin ja auf Formelebene da is nix mit uidoc. Aber klappen tuts leider trotzdem noch nicht. Ich glaub es wird langsam zu spät für heut für mich. Hoffe es kann mir da noch einer drauf helfen.
Auch das funktioniert nicht:
strSearchFormula = {SELECT Datumsfeld > datVon & Datumsfeld < datBis}
Bis denn,
Andreas
-
Was ist den in der Formel Datumsfeld? ist dies das Feld, das in den Dokumenten steht? Und datVon und datBis sind die Recherche einträge? Dann muss der String erst mal aufgebaut werden (Zur Kontrolle mit Msgbox ausgeben!).
In etwa so:
strSearchfromula = {SELECT Datumsfeld > [} & uidoc.fieldGetText("datVon") & {] & Datumsfeld < [} & uidoc.FieldgetText("datBis") & {]}
Die formel habe ich nicht getestet, bitte nochmal überprüfen.
Viele Grüße
ghost
-
Datumsfeld ist das Datum/Zeit-Feld in den Dokumenten, ja. Und datVon und datBis sind auch Datum/Zeit-Felder die das zu betrachtende Intervall definieren.
Die Formel funktioniert. Vielen Dank und schon mal ein frohes Weihnachtsfest! Euch allen!
Viele Grüße,
Andreas
-
Mein Ordner ist vom Ordnertyp "Gemeinsam". Das was ihr geschrieben hatte handelte von einem SPOFU Order, also shared private on first use, oder? Also die Auswahl "Gemeinsam, privat bei Erstbenutzung".
Sollte ich das noch umstellen? Oder wo liegen denn die Unterschiede?
-
Sobald mehr als ein User darauf zugreift, musst Du das unbedingt umstellen!
Grund: Wenn er gemeinsam ist, können mehrere User gleichzeitig Dokumente in den Ordner verschieben, bzw. aus dem Ordner löschen. Du kannst so nie sagen ob die Resultate auch wirklich stimmen oder nicht.
Beim Spofu hat jeder user seinen eigenen Folder ( mit den bekannten Problemen)...
-
Gut, danke.
Kann es sein daß das ganze nur für Dokumente vom Typ Antwort funktioniert?
Hab ein Dokument mit einem Feld DDokument mit dem Datum drin und darunter zwei Antwortdokumente mit einem Feld ADokument ebenfalls mit Datum drin.
Das Datum ist jeweils das heutige, die Suche geht von "20.12.2005" bis "23.12.2005".
Die Suche nach ADokument liefert collection.count = 2 zurück,
die Suche nach DDokument connection.count = 0
Wie kann das sein?
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim strSearchFormula As String
Dim view As NotesView
Dim vc As NotesViewEntryCollection
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
Set db = session.CurrentDatabase
Set view = db.GetView("(oProduktLinie)")
Set vc = view.AllEntries
Call vc.RemoveAllFromFolder("(oProduktLinie)")
strSearchFormula = {SELECT DDatumsfeld > [} & uidoc.fieldGetText("datVon") & {] & DDatumsfeld < [} & uidoc.FieldgetText("datBis") & {]}
Set collection = db.Search(strSearchFormula, Nothing,0)
Call collection.PutAllInFolder( "(oProduktLinie)" , True)
Msgbox collection.Count
workspace.ViewRefresh
End Sub
-
Kann es sein daß das ganze nur für Dokumente vom Typ Antwort funktioniert?
Nein.
Hab ein Dokument mit einem Feld DDokument mit dem Datum drin und darunter zwei Antwortdokumente mit einem Feld ADokument ebenfalls mit Datum drin.
Je nach dem wie du deinen Suchstring aufbaust werden die Dokumente gefunden.
Wenn du z.B. nach dem Feld DDokument suchst, werden nur Dokumente gefunden die, a) das Feld DDokument beinhalten und b) den entsprechenden Wert im Feld DDokument haben.
Alle anderen Dokumente bleiben außen vor. Wenn du nach allen Dokumenten suchen willst, dann müsste der Feldname in allen Dokumenten gleich sein, oder du müsstest deinen Suchstring aufbohren.
Axel
-
Hab zwei Funktionen draus gemacht. Einmal mit einem Substring A... und einem mit D...
egal, ich schau nochmal ob nicht sonst noch Schreibfehler drin sind. Wenns auch Dokumente finden muß dann muß es an einem Flüchtigkeitsfehler liegen.
Was anderes nerviges: Sobald ich den Ordner auf Spofu umgestellt habe und das Spielchen vollziehe ( Ordnerinhalt löschen ... passende Doks suchen ... In den Ordner packen und anzeigen) seitdem komm nach dem Beenden der Maske und dem zurückwechseln auf das Designerfenster die Fehlermeldung Dokument wurde gelöscht . Und zwar zwei Mal, da ich jetzt zwei Ordner von Gemeinsam auf Gemeinsam, privat bei Erstbenutzung umgestellt habe. Müßte also was mit dem Typ des Ordners zu tun haben...
-
Vielleicht fällt einem dafür ja noch ein Grund ein. Ich mach für heut und bis über die Feiertage Schluß. Wünsch euch eine frohes Weihnachtsfest und einen guten Rutsch, Axel, Umi, Bernhard, Ulich, Ghost und auch alle andern!
Viele Grüße,
Andreas