Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: CarlGustav am 12.12.02 - 08:40:28
-
Guten Morgen Notesgemeinde!
Folgendes problema: Weiß jemand wie man den Cursor bei Öffnen einer Datenbank in einer Ansicht automatisch an eine bestimmte Position setzen kann?
In meinem Fall bräuchte ich in einer Ansicht die nach Datum sortiert ist (die erste Spalte), den Cursor immer beim aktuellsten Dokument. Bei dem Datum das am nächsten des heutigen Tages liegt.
Vielleicht weiß ein schlaues Hirn ja was,
Danke auf alle Fälle!
CarlGustav
-
... das kannst du in den Eigenschaften einer View einstellen, ich denke das 2. Register (Info)...
ata
-
Vielen Dank ata, das ist schon klar, daß es diese Eigenschaften gibt.
Aber ich habe eine Ansicht mit Datumseingaben von so ungefähr 01.01.01 bis 31.12.2005
Das sind unzählige Docs.
Und der Cursor muß aber immer beim Öffnen beim heutigen (Systemdatum) Datum, oder wenn es dieses nicht gibt einen Tag davor, stehen.
Hoffe nun ist klar was ich meine. Ich kann leider in den View Eigenschaften nur einstellen, daß der Cursor am letzten Doc oder am ersten Doc stehen soll. oder am zuletzt geöffneten Doc...
LG,
CG
-
... ich bin davon ausgegangen, daß du Dokumente nur bis zum aktuellen Datum hast...
... ich sehe aber einen Weg, den ich aber zuerst ausprobieren möchte, bevor ich taube Nüsse verbreite...
ata
-
Vielen Dank für die Hilfe.
Bin schon gespannt wie die Lösung aussehen wird.
Erwartungsvoll,
CG
-
Guten Abend Notesgemeinde!
Ist anscheinend doch ein gröberes Problem...
Hoffe auf gute Nachrichten morgen Früh!
Schönen Abend noch,
CG
-
-beim öffnen der view selektierst du dir das sok und setzt den cursor drauf
Call notesUIView.SelectDocument( notesdocument )
cu
-
-beim öffnen der view selektierst du dir das sok und setzt den cursor drauf
Call notesUIView.SelectDocument( notesdocument )
Vielen Dank für den TIp!
Aber....Kannst Du mir noch einen Tip geben wie ich das Dok selektiere. Krieg das nicht richtig hin!
Mach ich das alles im "Query Open" Event?
Dim doc as notesdocument
set doc = ????
LG,
CG
-
also das ist mal wieder ein Beitrag für Tips + Tricks ;D
- die Sache verhält sich im Prinzip genauso wie die Auswahl von doks in einer embedded View
Ich habe es mit strings probiert - ich glaube es ist besser wenn du dein Datum in der ersten Spalte(versteckt ?) als string speicherst und sortierst - das ist die Suchspalte
im Postopen der view rufst du einen Agent auf(wegen dem initialisieren der view)
@Command([ToolsRunMacro]; "(selectdoc)");
""
- der Agent (selectdoc) - selektiere das dok mit der Zahl "3"
Dim ws As New NotesUIWorkspace
Dim s As New NotesSession
Dim v As NotesView
Dim uiv As NotesUIView
Dim entry As NotesViewEntry
Dim doc as NotesDocument
Set uiv = ws.Currentview
Set v = uiv.view
Set entry = v.GetEntryByKey("3", True)
If entry Is Nothing Then Exit Sub
Set doc = entry.Document
Call uiv.SelectDocument(doc)
End Sub
Das Problem bei der uiview und dem selectdocument ist das die Aktion nur vom user getriggert werden kann, d.h. das der code in der view, direkt kein result bringt, dageggen wird beim Agent der Code vom Benutzer angestossen.
cu
-
Ja, Danke vielmals - Das funzt!
Nun bin ich dran eine Lösung zu finden wie man dem Agenten dann sagt, daß wenn kein Doc zu finden ist, welches dem heutigen Datum entspricht, er solange um einen Tag zurück gehen soll, bis er ein gültiges findet.
Zurzeit schaut der Code des Agenten so aus:
Sub Initialize
Dim whenNow As String
whenNow$ = Today()
Dim ws As New NotesUIWorkspace
Dim s As New NotesSession
Dim v As NotesView
Dim uiv As NotesUIView
Dim entry As NotesViewEntry
Dim doc As NotesDocument
Set uiv = ws.Currentview
Set v = uiv.view
Msgbox whennow$
Msgbox Today()-1
Set entry = v.GetEntryByKey(Today(), True)
If entry Is Nothing Then
Set entry = v.GetEntryByKey(Today()-1, True)
End If
Set doc = entry.Document
Call uiv.SelectDocument(doc)
End Sub
Ich hab nichts mit der vorgeschlagenen Selektierung nach der Zahl "3" anzufangen gewußt!
Also hab ich das getentry nach today gemacht - danach suchen wir ja auch!
Ja und nun wenn er kein Doc findet daß dem entspricht, soll er so lange um einen Tag zurückzählen bis er ein richtiges Datum findet.
Derzeit zählt er nur 1 Tag zurück...
Vielleicht hast Du ja auch schneller eine Lösung.
Weiters wäre interessant ob es machbar ist, daß der Cursor dann zum aktuellsten Doc (wenn an einem Tag mehrere Einträge sind, dann geht er zum ersten und nicht zum letzten Eintrag - der letzte Eintrag ist natürlich der aktuellste) geht...
Vielen Dank nochmals und ich freu mich über weitere Hinweise,
Schönes Wochenende,
CG
-
also Gustav ein wenig denken schadet wohl niemandem oder ?
- ich habs mit meinem code nach deinen Vorgaben weiterentwickelt, falls mehrere doks das gleiche Datum haben gehst du über eine entrycollection
- weil diese entrycollectionview sortiert ist (deshalb arbeite ich gerne mit der entry collection und nicht mit einer doccollection)
brauchst du entweder den Anfang oder das Ende der collection
Sub Initialize
Dim ws As New NotesUIWorkspace
Dim s As New NotesSession
Dim vc As NotesViewEntryCollection
Dim entry As NotesViewEntry
Dim v As NotesView
Dim uiv As NotesUIView
Dim doc As NotesDocument
Dim www As String
Dim key As Integer
Dim docfound As Variant
Set uiv = ws.Currentview
Set v = uiv.view
docfound = False
key = 7 '''' Suchkriterium
Do While Not docfound
www = Cstr(key)
Set vc = v.GetAllEntriesByKey(www, True)
If (vc.count > 0) Then
''' Set entry = vc.GetLastEntry( ) ''' letzte in der collection
Set entry = vc.GetFirstEntry( ) ''' erste in der collection
Set doc = entry.Document
docfound = True
End If
If key = 1 Then ''''' Abbruch falls was schiefgeht
docfound = True
Exit Sub
End If
key = key - 1
Loop
Call uiv.SelectDocument(doc)
End Sub
cu
-
Zur Vollständigkeit:
Nach einigen Tagen Notesabstinenz hab ich nun den Code von Perfomance ein wenig angepaßt und das funzt nun super!
Nun kann man in einer View bei jedem öffnen der View (oder wenn man eine Aktion durchführt) einen Agenten starten, der folgenden Code ausführt und dann steht der Cursor immer beim aktuellen Datum, oder dem nächstgelegenen.
Danke an alle die geholfen haben!
CG
Sub Initialize
Dim whenNow As String
whenNow$ = Today()
Dim ws As New NotesUIWorkspace
Dim s As New NotesSession
Dim vc As NotesViewEntryCollection
Dim entry As NotesViewEntry
Dim v As NotesView
Dim uiv As NotesUIView
Dim doc As NotesDocument
Dim www As String
Dim key As String
Dim docfound As Variant
Set uiv = ws.Currentview
Set v = uiv.view
docfound = False
key = whenNow$ '''' Suchkriterium
Do While Not docfound
www = Cstr(key)
Set vc = v.GetAllEntriesByKey(Cdat(www), True)
If (vc.count > 0) Then
Set entry = vc.GetLastEntry( ) ''' letzte in der collection
Set doc = entry.Document
docfound = True
End If
key=Cdat(www)-1
'Msgbox key
Loop
Call uiv.SelectDocument(doc)
End Sub