Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Rak am 11.12.03 - 16:28:03
-
Hallo,
ich habe in eine Datenbank Haupt- und Antwortdokumente soweit sogut. ;D
Jetzt brauche ich aber eine Ansicht in der nur die Hauotdokumente angezeigt werden die noch kein Antwortdokument haben. ???
Danke
-
Das geht nicht so einfach. Du müsstet im Hauptdokument ein Feld haben, in dem gespeichert wird, ob es Antworten gibt.
Andreas
-
kann mich nur Andreas anschließen.
Logik:
Beim Anlegen eines Antwort-Docs wird zwar im Antwort-Doc die Referenz zum Hauptdokument gespeichert, aber das Hauptdokument "bekommt davon nix mit".
Das wiederum bedeutet, dass Du z.B. über einen (einmaligen) Script-Agenten aber im Hauptdokument ein Feld wie 'ExistingAnswer' mit "1" oder so füllen könntest.
TMC
-
.... wobei mit Script die Sache relativ einfach ist, da man die direkten Nachkommen mit der Eigenschaft Responses im NotesDocument als DocColl zurückbekommt. Ist sie leer, hat es keine. Gibt es da keine @Function für das?
Hmmm, @Responses funktioniert hier nicht, weil das die angezeigten Antworten anzeigt ....... sieht so aus, wie wenn es das sonst nicht gibt
-
schon mal Form ="Maskenname" & !@IsResponseDoc probiert ?
-
schon mal Form ="Maskenname" & !@IsResponseDoc probiert ?
Hab ich auch erst gedacht, aber er will ja
1) nur Hauptdokumente
2) diese Hauptdoks sollen nur angezeigt werden wenn ein Responsedoc existiert
TMC
-
tjoo, da fehlt wohl die Formel @HasResponses
-
http://www-10.lotus.com/ldd/46dom.nsf/55c38d716d632d9b8525689b005ba1c0/4dfd4b98245615ee85256c0800512cf1?OpenDocument (http://www-10.lotus.com/ldd/46dom.nsf/55c38d716d632d9b8525689b005ba1c0/4dfd4b98245615ee85256c0800512cf1?OpenDocument)
auch nicht die Lösung, aber da mal weitersuchen
-
jip, aber würde dies nicht etwas die Performance durcheinanderschmeißen bei z.B. 100.000 Docs?
Der @HasResponses müsste ja dann alle durchgehen (bzw. alle derselben Maske)
- bist Du response von mir -> joo -> 1
- bist Du response von mir -> nöö -> 0
oder so....
Alleine schon aus Performancegründen würde ich beim Erstellen von Responses hier gleich was ins Haupt-Doc schreiben. Zwecks Migration bestehender Docs würd ich nen Agenten schreiben.....
TMC
-
100.000 Docs in einer Notes Datenbank? Da hast Du auf jeden Fall was falsch gemacht... ;)
-
jip, aber würde dies nicht etwas die Performance durcheinanderschmeißen bei z.B. 100.000 Docs?
k.A. da ich nicht weiss, wie die entgültige Funktion in Assembler aussieht.
Aber deine Idee mit Flag setzen oder so ist gut. Sollte sich auch in diesem Fall realisieren lassen, bevor man nach einer Lösung sucht, die es gar nicht gibt
-
Achtung TMC, da hast Du was falsch gelesen:
2) diese Hauptdoks sollen nur angezeigt werden wenn ein Responsedoc existiert
Genau umgekehrt, er will sie haben, wenn keine Responsedokumente exisitieren.
-
Hallo,
der Vorschlag von Glombi
Du müsstet im Hauptdokument ein Feld haben, in dem gespeichert wird, ob es Antworten gibt.
klinkt ja ganz gut.
@TCM
Das wiederum bedeutet, dass Du z.B. über einen (einmaligen) Script-Agenten aber im Hauptdokument ein Feld wie 'ExistingAnswer' mit "1" oder so füllen könntest.
Wie kann denn so ein Agent aussehen? Habe von Script keine Ahnung.
Beim löschen des Antwortdokuments müsste dann das Feld wieder geändert werden.
Kommt mann denn nicht über $Ref und DocUniqueID an die Sache ran?
Danke für die Antworten!
-
Folgendes muss berücksichtigt werden:
1) Ersteller von Antworten haben i.d.R. kein Bearbeitenrecht für das Hauptdokument.
2) Ersteller des Hauptdokuments dürfen i.d.R. die Antworten nicht bearbeiten.
Ergo: Es muss ein servergestützter Agent sein (periodisch)
Am besten ist, Du machst eine Ansicht mit der Formel
SELECT !@IsResponseDoc
Dann in Script
dim session as NotesSession
dim db as NotesDatabase
dim view as NotesView
dim doc as NotesDocument
dim dc as NotesDocumentCollection
dim saveDoc as Integer
set session = New NotesSession
set db = session.CurrentDatabase
set view = db.GetView("Name der Ansicht - s.o.")
set doc = view.GetFirstDocument
while not (doc is nothing)
saveDoc = false
set dc = doc.Responses
if dc.Count > 0 then
if doc.DocHasResponse(0) <> "1" then
doc.DocHasResponse = "1"
saveDoc = true
else
if doc.DocHasResponse(0) <> "0" then
doc.DocHasResponse = "0"
saveDoc = true
end if
end if
if saveDoc then
call doc.save(false,true,true)
end if
set doc = view.GetNextDocument(doc)
wend
Nachteil: Hauptdokumente werden vom Server ggf. geändert => Ungelesen für User + Gefahr von Replizierkonflikten
Andreas
-
Um das ganze zu initialisieren, baust Du das Feld DocHasResponse (Textfeld, Berechnet beim Anlegen) in die Maske für das Hauptdokument ein und lässt einmal folgenden Agenten laufen:
dim session as NotesSession
dim db as NotesDatabase
dim view as NotesView
dim doc as NotesDocument
dim dc as NotesDocumentCollection
dim saveDoc as Integer
set session = New NotesSession
set db = session.CurrentDatabase
set view = db.GetView("Name der Ansicht - s.o.")
set doc = view.GetFirstDocument
while not (doc is nothing)
saveDoc = true
set dc = doc.Responses
if dc.Count > 0 then
doc.DocHasResponse = "1"
else
doc.DocHasResponse = "0"
end if
end if
if saveDoc then
call doc.save(false,true,true)
end if
set doc = view.GetNextDocument(doc)
wend