Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: robertpp am 07.04.03 - 16:44:21
-
Ich bräuchte eine Funktion die mir alle Docs zurückgibt die zwischen dem vonDatum und bisDatum liegen!!
Ich möchte das ganze aber nicht über FTSearch realisieren.
Hat jemand so etwas gebastelt oder weiß jemand wie man soetwas
lösen könnte?
danke robertpp
-
hm..gebastelt nicht, aber wenn Du keine Search Methode nehmen möchtest, mußt Du wohl oder übel über die NotesViewEntry Klasse gehen und das Datum aus jedem einzelnen Doc auslesen...
Collection bilden
....
erstes Doc nehmen
....
dim start as variant
dim ende as variant
start = doc.startdatum(0)
ende = doc.enddatum(0)
If start>=StartVergleich AND ende <=EndeVergleich Then
...
End If
...
nächstes Doc aus Coll
Wenn Du magst und kannst, dabei Performance Nachteile in Kauf nimmst, kannSt Du natürlich auch viewbasierend einen Select aufbauen...der die anzuzeigenden Docs vorhält, wenn der Zeitraum immer der gleiche sein soll.
-
... neben FTSearch gibt es auch db.Search - da wird kein Volltextindex benötigt...
ata
-
nein das genügt mir glaub ich.ich werde es mal über diese Variante versuchen
danke robertpp
-
hallo ata wie funkt das dann bei db.search?
ich wollte mir eine dialogbox machen wo man das vondatum bisdatum eingibt und die gefundenen doc aus einer ansicht in eine DocCollection werfen!
danke robertpp
-
... die Syntax des db.Search funktioniert wie folgt
Dim session As New NotesSession
Dim dbThis As NotesDatabase
Dim dc As NotesDocumentCollection
Dim sdt As New NotesDateTime("01/01/1990")
Sim sSearch As String
Set dbThis = session.CurrentDatabase
sSearch = {SELECT Form = "DeineMaske"}
Set dc = dbThis.Search( sSearch , sdt , 0 )
' # ... liefert alle Dokumente mit deiner Maske...
... die Suchformel funktioniert in Formelsprache
... ich verwende mittlerweile gescheifte Klammern für die Suchformel, so kannst du ganz normal mit Anführungszeichen, Pipe und AmperSand arbeiten, wie gewohnt
ata
-
und wie geht das jetzt wenn ich alle docs zwischen zwei datümer brauche?
robertpp
-
... so auf die schnelle...
' # Anhand des Feldes "TargetDate" in einer Maske "Job" Dokumente einschränken
Dim ws As New NotesUIWorkspace
Dim docThis As NotesDocument
Dim dbThis As NotesDatabase
Dim sdt As New NotesDateTime("01/01/1990")
Dim sSearch As String
Dim dc As NotesDocumentCollection
Set docThis = ws.CurrentDocument.Document
Set dbThis = docThis.ParentDatabase
sSearch = {SELECT Form = "Job" & ( TargetDate >= [01/03/2003] ) & ( TargetDate < [01/04/2003] )}
Set dc = dbThis.Search( sSearch , sdt, 0)
MsgBox Cstr(dc.Count) + " Dokumente..."
ata
-
Hallo ata
Ich möchte das ganze von einer Ansicht aus machen!
dh. ich stehen in einer Ansicht möchte auf einen Button klicken wo ich dann das vondatum und bisdatum eingeben kann und die gefundenen dann zb in eine DocColl.
ich hab das ganze jetzt mal so abgeändert:
Dim s As New NotesSession
Dim ws As New NotesUIWorkspace
Dim doc As NotesDocument
Dim db As NotesDatabase
Dim sdt As New NotesDateTime("01/01/1990")
Dim view As NotesView
Dim sSearch As String
Dim dc As NotesDocumentCollection
Set db= s.CurrentDatabase
Set view=db.GetView("Massnahme")
Set doc = view.GetFirstDocument
sSearch = {SELECT Form = "task" & ( Erledigtam >= [18/03/2003] ) & ( Erledigtam < [25/04/2003] )}
Set dc = db.Search( sSearch , sdt, 0)
Msgbox Cstr(dc.Count) + " Dokumente..."
nur wie mach ich dass das datum über felder variabel ist!!!
Ich mach mir eine Dialogbox mit einer maske mit vondatum und bisdatum aber weiter weiß ich nicht!
danke robertpp
-
... das macht so noch keinen Sinn. Du ziehst eine View, holst das erste Dokument und dann passiert was völlig anderes...
... beschreib' mal, was du tatsächlich machen willst. Am Anfang war das "... die Dokumente zwischen 2 Datumswerten" - jetzt kommt eine Ansicht ins Spiel. Was für eine Rolle spielt denn die Ansicht?
... du willst das Datum dynamisch eingeben. Welche Vorstellung hast du über das User Handling - 2 Werte heißt 2 mal InputBox - ansonsten mußt du dir eine Dialogbox bauen - oder ist ein Wert Fix - zum Beispiel das heutige Datum...
... benötigst du nur die Anzahl der Dokumente - möchtest du mit den Dokumenten noch was machen...
... von daher die Bitte - fass das mal konkreter... ;)
ata
-
OK ich mach mir eine Dialogbox mit einem Feld vonDatum und einem zweiten Feld bisDatum!!
Die zweit Datumswerte sollen anschließen zum suchen verwendet werden.
Ich habe mir eine Ansicht gebastelt die das :
SELECT Form="task" & Status="Arbeit erledigt" : "Nachweis erledigt"
als Auswahlformel verwendet. Nur bei diesen Docs soll gesucht werden die das erfüllen.
Es wäre unnotig alle docs zu durchsuchen weil das sehr viele sind.
Anschließen möchte ich alle gefundenen docs in eine DocCollection und dann lese ich ein paar felder aus von den Docs in der DocCollection.
robertpp
-
... wenn du schon einen db.Search nimmst, dann bau den noch weiter aus mit der Datumsabfrage, damit du nur die Dokumente bekommst, die in deinem Range liegen...
ata
-
Das vesteh ich jetzt nicht!!
Es soll von den ganze docs eine auswertung gemacht werden und das nur vom vondatum bis zum bisdatum (alles was zwischen den beiden datümer liegt).
und das ist von tag zu tag unterschiedlich deshalb dialogbox mit den felder!!
Aber ich weiß nicht wie ich das realisieren kann.
Wie würdest du das machen?
bitte um hilfe
robertpp
-
... ich habe gleich einen Termin, kann erst spät heute Abend wieder - wenn ich Glück habe, dann zwischendurch noch mal...
ata
-
Hallo Robert,
ich habe mir noch einmal Zeit genommen und mir dein Anliegen nochmal näher gebracht.
Bei der Suche nach deinen Dokumenten ist die Ansicht völlig überflüssig. Sie ist für die Ermittlung der Collection nicht notwendig.
... erstelle dir eine Maske
... nimm ein Feld SaveOptions = "0" auf
... deine beiden Datumsfelder VonDatum und BisDatum
... einen Button zum Ausführen deines Codes
Lese zuerst die Werte deiner Felder ein.
Du mußt den Datumsstring in die Form "24/1/2003" bringen, damit du diesen String in die Formel integrieren kannst...
Mit Day( ... ) erhälst du den Tag als Integer
Mit Month( ... ) erhälst du den Monat als Integer
mit Year( ... ) erhälst du das Jahr als Integer
Mit Cstr(...) kannst du Zahlenwerte zu Strings konvertieren
Den Rest hast du ja bereits...
ata
-
ein problem hab ich bei dieser sache noch!!
Er gibt mir den Fehler zurück:
Dialogbox cannot be used in this context; a document must be selected!
Wenn ich das ganze mit einer Dialogbox machen dann brauch ich vorher ein doc aber wie erstelle ich mir das doc, dass ich dann nicht speichern will?
Ich habs mal so versucht:
Sub Click(Source As Button)
Dim s As New NotesSession
Dim ws As New NotesUIWorkspace
Dim db As NotesDatabase
Dim doc As NotesDocument
Set db= s.CurrentDatabase
Dim uidoc As NotesUIDocument
Set doc= db.CreateDocument
doc.Form="proof"
Aber da fehlt mir noch was!!!!
Call ws.dialogbox("proof",True,True,True,,,,"Nachweis suchen",,True,True)
End Sub
robertpp
-
... verwende die Maske nicht für die Dialogbox, sondern öffne sie mit @Command([Compose] ; "Maskenname")...
... denn wie du siehst, kann eine Dialogbox nur über einem bestehenden Dokument geöffnet werden. Um zu vermeiden, daß dann Werte in das Dokument geschrieben werden, die dort nichts zu suchen haben, mußt du die Parameter der Box entsprechend einstellen usw. - daher nimm eine Maske, die nicht gespeichert werden kann - temporäres Doc...
ata
-
also mir wäre es lieber wenn ich das ganze über eine dialogbox lösen könnte!! Oder geht das dann eh auch? Wenn nicht wie bekomme ich das so hin es über ein Dialogbox zu lösen?
danke robertpp
-
... wenn du unbedingt eine Dialogbox verwenden willst, dann muß der User in der Ansicht ein Dokument markiert haben...
... damit dieses Dokument keine unerwünschten Felder übernimmt, müssen die Parameter der Dialogbox entsprechend übergeben werden => Designer-Hilfe
ata
-
Hallo an alle!!
Zuerst mal ein schönes Osterfest!!
Ich hab hier jetzt für mein Problem mit dem Suchen eine Test-DB angelegt!!
Dort hab ich mir ein doc erstellt ( "proof") dieses doc rufe ich, jetzt immer wenn ich in der Ansicht Massnahmen bin, und den Button "Nachweis suchen" (Dialogbox) klicke auf!! jetzt kann ich hier mein vondatum und mein bisDatum eingeben und das Problem das ich jetzt habe ist, das ich die Dialogbox jetzt wieder schließen muss( mit OK Button) und die zwei Datumswerte übergeben muss!!!! Das vondatum und bisdatum brauche ich anschließen in dem Anderen Button "ansicht vc" um dort die zwei fixen Datumswerte variabel zu machen. Das schließen hab ich schon mit einem Agent versucht aber die Dialogbox geht aber nicht zu!! Und wie ich die werte dann übergeben muss weiß ich auch nicht!!! Besser gesagt ich will wenn ich auf OK klicke das die Dialogbox zu geht und gleich gesucht wird.
Bitte um hilfe
robertpp
-
Kann mir jemand bei meiner test-DB helfen bittteeeee! :'( :'(
robertpp
-
Schau es dir mal an ob es dir so gefällt! ich nutze halt nicht deine Buttons sondern die von Dialogbox funktion da ich sonst Probleme hatte die Daten hin und her zu schieben.
MfG
Enny
-
danke enny genau das hab ich gesucht!!
Ich hatte mir gedacht das kann man mit meinen Buttons auch lösen nur so passt es auch!!
robertpp