Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: robertpp am 22.10.03 - 17:33:17
-
Ich hab hierzu auch schon den Beitrag gefunden nur geht der leider nicht wenn man nach Datum sortieren möchte!!
Hat da jemand eine Lösung?
http://www.atnotes.de/index.php?board=7;action=display;threadid=7644
http://eknori.dyndns.org/knowledge/devidea.nsf/Alpha/76D771F265E915268025687700475CEA?OpenDocument
Das vom Eknori hab ich gar nicht zum laufen gebracht!!
Ich hab eine DocCollection und die möchte ich nach dem Feld Termin(=Datum) sortieren!
-
Wenn Du mit dem stuff nicht klar kommst von Axel oder Ulrich (warum auch immer), dann bist Du vielleicht schneller am Ziel, wenn Du Dir die Collection über eine nach Datum sortierte Ansicht bildet (NotesView.AllDocuments).
Oder Du schreibst mal, warum die beiden von Dir genannten Lösungen bei Dir nicht funktionieren bzw. wo Du Schwierigkeiten bei der Anpassung hast.
Bernhard
-
Bernhard, bist Du sicher, dass die DocCollection aus dem View sortiert kommt? Ich glaube nicht. Da müsste man dann schon über NotesViewEntryCollection gehen und von dort auf die Dokumente zugreifen.
-
Oh, mein letztes Posting war peinlich. Ein übler Schnellschuss. NotesView.AllDocuments existiert ja nur in meinem Wunschdenken, aber nicht in der Klasse ...
Jo, denn also durch die sortierte View "schlaufen" (wie Semeaphoros jetzt sagen würde) oder über die NotesViewEntryCollection gehen.
Über sich selbst verärgert,
Bernhard
-
Ich weißnicht wie es Euch geht, aber ich habe mit der NotesViewEntryCollection nur böse Erfahrungen gemacht und das blöde Teil aus meinen Script-Fundus verbannt.
Wenn bspw. die View kategorisiert ist, funzt das nicht.
Andreas
-
Bernhard:
Na, immerhin hast Du mich erwischt, hab das auch nicht gemerkt, ich hab ja nur drauf getriggert, dass AllDocuments normalerweise nicht sortiert ist, aber das gibts eh nur in der DB, und da ist klar, dass sie unsortiert daherkommt.
Andreas:
Also die NotesViewEntryCollection brauche ich auch selten, ganz einfach, weil ich programmatisch eh in der Regel auf entsprechende, verborgend Views zugreife, und da lässt sich gut durch den View durchschlaufen (wie ich das laut Bernhard sagen würde :-), weil da Kategorien fast nie Sinn machen. Hab aber sonst eigentlich nix negatives gehört bisher. Das mit den Kategorien ist nicht wirklich soo kritisch, weil das Ding doch eigentlich Properties besitzt, die einem das ermöglichen sollten:
IsCategory
IsConflict
IsDocument
IsTotal
IsValid
Allerdings gebe ich Dir recht, dass das Arbeiten mit einem derart "schillernden" Objekt Unübersichtlichkeit impliziert
-
Hab hier was aus der KBase:
The documents contained within a NotesDocumentCollection object are sorted by the created date. By design, the sort order of the view or folder the documents reside within is ignored.
Domino Designer 5.0 includes two new classes that enable you to access documents in the order they appear within a view: The NotesViewEntryCollection class and the NotesViewEntry class. The NotesView class also includes additional methods and properties that allow you to create object handles to these new classes.
In the following example, the new AllEntries property of the NotesView class is used to get a handle to all the documents in the view "Test View". You can then loop through these documents using the NotesViewEntryCollection class' GetNthEntry method.
Sample Script:
Dim session As New notessession
Dim db As notesdatabase
Dim view As notesview
Dim viewcol As notesviewentrycollection
Dim viewentry As notesviewentry
Dim doc As notesdocument
Set db=session.currentdatabase
Set view=db.getview("Test View")
Set viewcol=view.allentries
For i = 1 To viewcol.count
Set viewentry=viewcol.getnthentry(i)
Set doc=viewentry.document
Messagebox doc.created
Next
Wie gesagt, wenn man eine kat. View hat, gibt es ein Fehler "Dokument nicht länger in der Collection" oder sowas in der Art. Also: NIEMALS kategorisieren.
Wegen der Performacen würde ich das getnthentry(i) nicht machen, sondern wie es sich gehört mit
...firstentry und ...nextentry.
Andreas
-
Sieh mal einer an, danke Andreas.
Das war doch etwa das, was ich von Anfang an gesagt habe. Danke für den Beleg hier. Das macht ja eigentlich alles klar.
Gruss, Jens
-
Das Problem ist:
Ich fülle mein dc mit einem search befehl!
Set dc = db.Search("@Adjust(@Today;0;0;3;0;0;0) => @Date(Termin) & Entscheid != ""erledigt VA""", Nothing, 0)
Was mach ich jetzt?
robert
-
Genau das, was Bernhard gesagt hat unter Berücksichtigung meiner und Andreas' Ergänzungen:
Einen versteckten View (Namen in Klammer gesetzt) anstelle des Search
-
In diesem Fall geht folgendes:
Du erstellst Dir im Designer Client einen Ordner in der Datenbank. Die erste Spalte sortierst Du nach dem Feld Termin.
In Deinem Script löscht kopierst Du alle Dokumente der dc in diesen Ordner. Anschließend iterierst Du über alle Dokumente im Ordner mit
set view = db.GetView("DeinOrdner")
set odoc = view.GetFirstDocument
While not(odoc is Nothing)
'... ... ...
set odoc = view.GetNextDocument(odoc)
Wend
Anschließend alle Dokumente aus dem Ordner entfernen (zur Sicherheit auch vor dem Kopieren der DOkumente in den Ordner)
Andere Möglichkeit (aber nicht unbedingt empfehlenswert wegen @Today).
Erstelle eine Ansicht mit der Zugriffsformel
SELECT @Adjust(@Today;0;0;3;0;0;0) => @Date(Termin) & Entscheid != "erledigt VA"
Sortiere die View nach Termin.
Iteriere über alle Dokumente in der View.
Andreas
-
:D :D Jetzt hast du den Motor angekurbelt!!!!
Genau das geht so wirklich:
Ansichtsauswahl: SELECT Form="report" & Entscheid!="erledigt VA" &@Adjust(@Today;0;0;3;0;0;0) >= @Date(Termin)
nach Datum sortieren und viewentrycoll. und dann müsste es das gewesen sein!!!!
ich sag danke fürs erste Probier das gleich aus und werde den eintrag nach erfolgreichem testen auf finish setzen. ;D
-
Die Ueberlegungen von Andreas wegen @Today sind es Wert, darüber nachzudenken.
A-bär (... würde Bär-nhard jetzt sagen ...)
Nimme man einen Folder und zwei machen das gleichzeitig, bekommt man Spagetthi-Daten. Also müsste man einen SPOFU-Folder (Shared - Private on first use) machen. Diese Dinger wiederum funktionieren von Script aus nicht so ohne weiteres (hatten wir doch auch schon mal in einem Thread - oder?)
Darüber hinaus gibt es verschiedene Strategien, um das @Today-Problem im View zu umgehen, beispielsweise den Refresh nur alle paar Stunden durchzuführen.
-
Es hat jetzt alles geklappt!
Das einzige was nicht so schön ist was Semeaphoros angesprochen hat ist das die Ansichtsauswahl mit einem Datum ist und die ansicht jetzt ständig den Aktualisierungspfeil hat.
Aber sieht ja eh niemand!
danke robert
-
Hast Du auch die Aktualisierung entsprechend kastriert? Ok, der Recyclingpfeil kommt trotzdem ....
-
Hi,
logsich, dass der Aktualisierungspfeil kommt. Es wird ja auch @Today (liefert nicht nur Datum sondern auch Uhrzeit) in der Ansichtsformel verwendet. Dadurch kann die Ansicht nie aktuell werden. Das bringt nur eine große Serverlast, da erständig versucht die Ansicht zu aktualisieren.
Man sollte @Today und @Now tunlichst in Ansichtenformeln vermeden.
Axel
-
Wenn Du die View nimmst, brauchst Du natürlich keine NotesViewCollection mehr.
Denn dann kannst Du einfach mit
set doc = view.GetFirstDocument
while not (doc is nothing)
set doc = view.GetNextDocument(doc)
wend
darüber iterieren.
Wegen des Refreshsymbols: Da hatte eknori mal was gepostet - es ging um
@TextToTime("Today")
Ich hatte das dann noch sprachabhängig gemacht
@TextToTime("Heute")
suche mal hier in den alten Einträgen...
Andreas
-
Danke glombi mit @TextToTime hat das jetzt funktioniert!! :D
Obwohl du funktion ja unlogisch ist weil eigentlich sollte die ja @TimeToText heißen? Oder? ;)
-
Nein, die heisst schon richtig.
"Today" oder auch "Heute" ist ein String, sprich Text.
Das Resultat ist eine Zeitangabe, muss ja, sonst kannst Du das nicht für einen Zeitvergleich brauchen.
Also wird ein Text genommen und in eine Zeitangabe umgewandelt. Pseudografisch:
Textstring ----> Zeitangabe, und dasist ja auch der Name der Funktion: TextToTime
Dass es funktioniert, liegt daran, dass oberflächlich betrachtet keine Zeitfunktion verwendet wird. Das TextToTime interpretiert aber den Text und entdeckt statt eines konkreten Datums wie "10/24/2003" oder so ähnlich (je nach Lokalisierung) findet die Funktion ein Schlüsselwort, das wiederum zu einem Funktionsaufruf führt. Die Tagesfunktion wird also erst indirekt in zweiter Linie aufgerufen, deshalb wird das Ding dann auch vom Indexer nicht als zeitabhängig eingestuft.
-
@Glombi
Hi Andreas,
>>Ich weißnicht wie es Euch geht, aber ich habe mit der >>NotesViewEntryCollection nur böse Erfahrungen gemacht und >>das blöde Teil aus meinen Script-Fundus verbannt.
>>Wenn bspw. die View kategorisiert ist, funzt das nicht.
Ich habe da keine Probleme, es funktioniert wunderbar.
Läuft bei mir als periodischer Agent.
Fallbeispiel:
Ich habe eine kategorisierte Ansicht auf die Kundennummer und darunter als Dokumente die Bestellungen der Kunden. Innerhalb der Kategorie ist nach Datum der letzten Bestellung dann absteigend sortiert (letztr Bestellung immer oben).
Ich schnappe mir nun immer das erste Dokument (also die letzte Bestellung) der Kategorie (in eine dc) und pump die gefundenen Dokumente in einen Ordner (also ein Dokument pro Kunde eben die letzte Bestellung) . Im Order zeige ich dann über eine berechnete Spalte mit einem Symbol (icons - thumbs up bis zu Bombe) an , ob der Zeitraum der letzten Bestellung bis heute für den Kunden ok ist oder nicht (verschiedene Symbole und Einstufungen)
Läuft wunderbar und ist auch alles richtig.
Wenn Du den Code brauchst, sag Bescheid, ich setz ihn hier rein.
Verschnupfte und Kopfschmerzgrüße, Holcomb
-
Gute Besserung .... !!!
-
Hi Semeaphoros,
>>Gute Besserung .... !!!<<
Donke !!
Ähh bei was ?
Grippe oder wegen meiner Programmiererei ???? ;-)))
Im Moment bräuchtens meine Nerven auch.
Änderungen in Tabellen in Masken und Hide whens bzw hide....
Gruß und schönes Wochenende.
BTW ich war gestern auf einer Windows 2003 Infoveranstaltung.
Jede menge MS Admins dort und dann die Storys über Exchange <gröhl> von denen.
War amüsant das ganze.
-
Na, die Grippe natürlich .... :-) ..... aber Du darfst es ruhig für das nehmen, wo Dus im Moment am meisten brauchst :-)
Hide-Whens in Tabellen sind übrigens in den älteren 5er Versionen fehlerhaft (vor allem im Designer). Also vor allem zum Entwickeln möglichst die 0.12 verwenden.
-
Na, die Grippe natürlich .... :-) ..... aber Du darfst es ruhig für das nehmen, wo Dus im Moment am meisten brauchst :-)
Hide-Whens in Tabellen sind übrigens in den älteren 5er Versionen fehlerhaft (vor allem im Designer). Also vor allem zum Entwickeln möglichst die 0.12 verwenden.
Danke für den Hinweis. Ich hab da auch schon meine Erfahrunge gemacht, mich aber auch schon dran gewöhnt.
Im Moment entwickle ich mit 5.0.10 deutsch.
Bye und gutes Wochenende.
Holcomb
-
Meine Erfahrung mit Hide-whens in Tabellen (5.0.8): Im Client darf nicht gleichzeitig eine Maske, die gerade geändert wird, geöffnet sein. Ist das erfüllt, habe ich wirklich keinerlei Probleme.
Bernhard
-
Ben Langhinrichs könnte Dir da wahrscheinlich noch ein paar mehr Fälle bringen, aber es stimmt schon, man kann schon einigermassen damit leben, es kann aber leider jeden unvorbereitet treffen :-(
-
Hi Bernhard.
Tabellen und hide whens.
Was ich nur festgestellt habe:
Soll in einer Zelle einer Tabelle ein Element ein hide haben, das andere nicht (z.B. zwei Fehler oder auch zwei Textattributein eienr Zelle) dann braucht man sowieso einen Zeilenumbruch dadrin (damit kann man ja noch leben).
Was mir aber öfter passiert ist, daß manchmal wie von Geisterhand die Formel für das hide when verschwunden ist wenn ich mal was ändere (z.B. mal en Haken rausnheme um das Feld editieren zu können und dann danach den Haken wieder setze) .
Was da sonst noch an "Veränderungen" war, habe ich mir gar nicht gemerkt, aber ich bin da immer vorsichtig und kontrolliere oft im Design das Ganze pro Zelle nochmal.
Gruß Holcomb,
-
Hallo, Holcomb,
Hide-whens wirken immer auf ganze Abschnitte. Bei purem Text auf eine Zeile, in Tabellen ist das natürlich ebenso. Das Zeugs heisst ja auch "Hide paragraph", das ist Iris ganz ehrlich. Klar, daß man das manchmal lieber anders hätte, aber wenn man's weiss, geht das eigentlich problemlos.
Die "wundersamen Dinge" - z.B. neben Deinem Beispiel auch die Übernahme einer Hide-when-Formel von einer Zelle in andere - passieren immer dann, wenn die DB oder womöglich noch die gerade bearbeitete Maske auch im Client geöffnet ist. Faßt man also Hide-whens an, dann im Client immer die DB vorher schliessen.
Das steht auch irgendwo in der KBase und ist IMHO nun wirklich ein Bug.
Ciao,
Bernhard
-
@semeaphoros.
Das "unvorbereitet" das ist halt manchmal das Prob.
Leider hat das geliebte Notes manchmal auch seine Ecken und Kanten (wo ich manche gerne gerundeter hätte),deshalb auch meine etwas zynische sig ".. aber Hauptsache wap geht.."
Kleine Anekdote noch.
Berlin Lotusphere Septemeber 2000 (das einzige mal, daß ich dort war,- blindes Huhn findet auch mal ein Korn ;-)- ). Am letzten Tag war dann große Entwicklersession (paar hundert Leute) mit Frage- und Antwortstunde mit den anwesenden Iris Leuten.
Meldet sich ein englischsprechender Zuhörer am Mikrophon zu Wort und fragt nach der Zukunft der Notesentwicklung.
Seinen Frage beginnt er aber mit dem Knaller über den sogar die Iirs Leute trotzdem wie alle herzhaft lachen musste: "..this makes pain in my a**.."
Naja, so schlimm isses ja bei weitem nicht aber ich habe bis heute diese Formulierung nicht vergessen.
Ankedote off
Holcomb