Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: sja am 18.01.05 - 15:38:40
-
Hallo zusammen,
schon wieder brauche ich Eure Hilfe!
Das ist folgendes:
in einer Ansicht sollen nur die Antwortdokumente (Form = “antw1“) angezeigt werden, die in einem Feld “flag“ den Wert “1“ od. “2“ od. “3“ haben und das Hauptdokument (Form = “haupt“) das Feld “status“ = “post“ hat
Also, die Ansichtsauswahlformel habe ich so angefangen:
SELECT (Form = “antw1“) & (flag = “1“: “2“: “3“)
und weiter kann nicht die Lösung finden, wie soll ich die angezeigte antw1 an diejenige begrenzen, dessen parent in dem Feld “status“ den Wert = “post“ hat.
Mit LotusScript kann ich das mir gut vorstellen, aber die Ansichtsauswahl kann man nur in Formelsprache programmieren, nicht wahr?
Aber in der Formelsprache habe ich nichts geeignetes gefunden oder habe ich was übersehen?
Herzlichen Dank für jeden Typ, Verweis, Vorschlag im Voraus
Schöne Gruesse
Sofia
-
Das geht leider nicht, Sofia. Hierzu müsstest Du aus dem Parent den Status auch mit ins Response-Doc übernehmen, ad-hoc ist dies nicht möglich.
Bernhard
-
um Berhards Antwort etwas zu ergänzen.
Du musst entweder:
beim abspeichern des Hauptdokumentes dessen Status in alle Anwortdokumente übertragen
oder:
einen Agent schreiben der dieses in regelmäßigen Abständen tut.
Thomas
-
Hallo Bernhard,
vielen Dank für Deine Hilfe. Das ist folgendes, das antw1 hat schon das Feld "status" von "haupt" mal übernommen aber mit dem Wert = "pre". In dem Prozesslauf bekommt das "haupt" den Wert = "post" und dann ein periodischer Agent (je Stunde) soll die Email senden mit der Verknüpfung zur entsprechende "antw1".
Mit solche View, ware es gantz einfach: der Agen geht die View durch, sendet die Mail, setzt das "flag" auf "4" und fertige "antw1" verschwindet aus der View.
Na gut, dann soll ich der Agent anders programmieren.
Habe nur gedacht, dass ich mit der Ansichtsauswahl-Formel was übersehen habe.
Aber herzlichen Dank, da das negative Ergebniss auch ein Ergebniss ist und ich weiss jetzt genau, dass ich nich in der Richtung suchen soll. Wenn Du sagst, dass das unmöglich ist, dann ist es auch! Glaube ich das in jedem Fall :)
Schöne Gruesse
Sofia
-
Hallo Thomas,
danke Dir für deinen Rat. Wie schon gesagt, brauchte ich die Ansicht, um den Agent zu vereinfachen, eine Seite und andere es war mir interessant ob solche Ansichtsauswahl überhaupt möglich ist, und ich selbst damit nicht zu Recht gekommen bin.
Noch mal vielen Dank
Schöne Gruesse
Sofia
-
Wenn Du sagst, dass das unmöglich ist, dann ist es auch! Glaube ich das in jedem Fall :)
Mach das nicht, Sofia - ich bin auch nur ein Mensch, der irrt (in diesem Forum mehrfach nachzulesen ;) )
Aber ich glaube, Du kannst Dir den Agent trotzdem mit einer entsprechenden Ansicht einfacher aufbauen.
Nur so als eine Idee:
Eine Ansicht, die nur die Antwortdokumente mit dem Flag = 1..3 anzeigt. Damit ist sicherlich die Anzahl der zu bearbeitenden Dokumente schon mal deutlich eingeschränkt. Zu den Dokumenten holst Du Dir dann das ParentDoc via NotesDatabase.GetDocumentByUNID und NotesDocument.ParentDocumentUNID - das ist ein extrem schnelles Verfahren für den Zugriff auf Dokumente in einer DB.
Aufpassen musst Du nur auf die ADT-Falle, wenn Du den Antwort-Dokumenten dann den Status Flag = "4" verpasst, da diese dann ja aus der Ansicht herausfallen und GetNextDocument in die Hose geht: Du musst also, bevor Du in einem Dokument doc.Flag = "4" setzt, einem docTemp das aktuelle Dokument zuweisen und dann den Pointer auf das nächste Dokument setzen:
If Updatebedingung = True then
Set docTemp = doc
Set doc = view.GetNextDocument.(doc)
docTemp.Flag = "4"
Else
Set doc = view.GetNextDocument.(doc)
End If
HTH,
Bernhard
-
und wenn du es ganz raffiniert machen willst und es durchaus möglich ist, das mehrere Antwortdokumente zu einem Parent existieren dann prüft du jedesmal bevor du dir den parent holst ob der nich schon geladen war und wenn er schon geladen war wie der Status des Parents ist. Damit sparst du auch das noch ein, wobei hier der Geschwindigkeitsgewinn ambivalent sein kann.
Thomas
-
Hallo Bernhard,
hallo Thomas,
kann keine richtigen Wörter zu finden, um euch für so hilfreiche Vorschläge zu danken.
Die Idee mit NotesDatabase.GetDocumentByUNID und NotesDocument.ParentDocumentUNID gefällt mir sehr und ich werde die sofort implementieren als auch Set docTemp = doc.
Eine Ansicht mit dem Flag = 1..3 habe ich schon. Jedes "haupt" hat nur ein einziges Antwortdokument von Typ "antw1" und das macht den Fall viel einfacher, aber sonst hätte ich den Rat von Thomas gefolgt.
Die Ergebnisse werde ich berichten.
Das Forum ist mein einziger Gespräch-Partner in dem Bereich LotusNotes-Programmierung und ich weiss das alles zu schätzen!
Herzlichen Dank noch mal :)
Liebe Gruesse
Sofia
-
Hallo,
vielen Dank noch mal für Eure Hilfe, alles funktioniert hervorragend.
Hier die Lösung:
Ansicht “antw1” mit Ansichtsauswahl-Formel:
SELECT (Form = "antw1")&(flag = "1":"2":"3")
und der Agent enthält folgender Code
Option Public
Dim db As NotesDatabase
Dim view As NotesView
Dim VEC As NotesViewEntryCollection
Dim ve As NotesViewEntry
Dim s As NotesSession
Dim antw1 As NotesDocument
Dim haupt As NotesDocument
…
Sub Initialize
Set s = New NotesSession
Set db = s.CurrentDatabase
Set view =db.getview("antw1")
Set VEC = view.AllEntries
If Not(view.EntryCount = 0) Then
Set ve = VEC.GetFirstEntry()
While Not (ve Is Nothing)
Set antw1 = ve.Document
Sorry dieser Zeile ist falsch <<Set haupt = db.GetDocumentByUNID(antw1.HauptDocumentUNID)>>
Richtig Set haupt = db.GetDocumentByUNID(antw1.ParentDocumentUNID)
If haupt.ProjektStadium(0) = "post" Then
Set ve = VEC.getNextEntry(ve)
Call MailSenden
antw1.flag = "4"
Call antw1.Save( True, True )
Call view.Refresh
Else
Call view.Refresh
Set ve = VEC.getNextEntry(ve)
End If
Wend
End If
End Sub
Function MailSenden...
Ich liebe dieses Forum! :)
Liebe Gruesse
Sofia
-
Kann das stimmen, Sofia:
Set haupt = db.GetDocumentByUNID(antw1.HauptDocumentUNID)
Muss es nicht heissen:
Set haupt = db.GetDocumentByUNID(antw1.ParentDocumentUNID)
Bernhard
-
doch, Du hast Recht (wie immer!) :) ich habe automatisch Namen ersetzt und dabei war es bei mir was Schiff gelaufen.
sorry für falsche Info
Viele Gruesse
Sofia
-
Ich habe nicht immer Recht ... Und Notes hätte es auch gemerkt und Dir einen Laufzeitfehler spendiert.
Bernhard
-
Der Code in meinem Agent auf dem Server ist ohne Fehler geschrieben, deshalb ist alles gut gelaufen, ohne Fehler.
Ich wollte nur im Forum der Code mit einfachen Namen (richtige Namen sind für andere sehr unübersichtlich) und vereinfach präsentiert, ohne unnötigen Komplikationen und leider mit Fehler.
Es tut mit leid.
Danke für Korrektur.
-
Das braucht Dir überhaupt nicht leid tun. Wer arbeitet, macht Fehler ;)
Bernhard