Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Andreas Huhn am 19.12.05 - 13:22:43

Titel: Ansicht über Zeitraum einschränken
Beitrag 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
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: umi am 19.12.05 - 13:24:08
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...
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: eknori am 19.12.05 - 13:40:17
geht mit @SetViewInfo 
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: umi am 19.12.05 - 13:43:44
Wie?
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: Andreas Huhn am 19.12.05 - 13:55:27
Ä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.
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: eknori am 19.12.05 - 14:03:10
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
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: koehlerbv am 19.12.05 - 14:10:37
Ob das aber was wird unter den gegebenen Anforderungen ?

Zitat
Filtert in Standardgliederungsansichten eine Ansicht, um nur die Dokumente einer angegebenen Kategorie anzuzeigen.
Kategorie haben wir hier ja nicht.

Zitat
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
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: Andreas Huhn am 19.12.05 - 14:46:14
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
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: Andreas Huhn am 21.12.05 - 09:19:27
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
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: Axel am 21.12.05 - 09:43:31
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
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: Andreas Huhn am 21.12.05 - 10:16:08
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
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: Andreas Huhn am 21.12.05 - 10:47:12
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?
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: Axel am 21.12.05 - 11:42:37
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
   
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: koehlerbv am 21.12.05 - 11:55:35
Einen Ordner kannst du nichtg einbetten.

Was sollte einen daran hindern ?

Bernhard
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: Axel am 21.12.05 - 12:00:44
Was sollte einen daran hindern ?

Außer der Holzweg, auf dem ich war, niemand.  :P

Ich war gedanklich auf einer anderen Baustelle.


Axel
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: Andreas Huhn am 21.12.05 - 13:43:08
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
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: koehlerbv am 21.12.05 - 13:50:40
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
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: Andreas Huhn am 21.12.05 - 14:06:16
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
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: Andreas Huhn am 21.12.05 - 14:25:57
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...
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: ghost am 21.12.05 - 14:40:46
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
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: Andreas Huhn am 21.12.05 - 14:56:02
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?
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: ghost am 21.12.05 - 15:34:29
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
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: Andreas Huhn am 21.12.05 - 15:58:33
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
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: Andreas Huhn am 21.12.05 - 16:06:42
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
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: ghost am 21.12.05 - 16:22:38
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
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: Andreas Huhn am 22.12.05 - 07:35:13
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
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: Andreas Huhn am 22.12.05 - 12:56:41
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?
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: umi am 22.12.05 - 13:00:30
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)...
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: Andreas Huhn am 22.12.05 - 13:50:21
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
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: Axel am 22.12.05 - 14:01:32
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
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: Andreas Huhn am 22.12.05 - 14:09:21
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...
Titel: Re: Ansicht über Zeitraum einschränken
Beitrag von: Andreas Huhn am 22.12.05 - 15:27:03
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