Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Rak am 11.12.03 - 16:28:03

Titel: Hauptdokumente ohne Antwortdokumente
Beitrag 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
Titel: Re:Hauptdokumente ohne Antwortdokumente
Beitrag von: Glombi am 11.12.03 - 17:01:42
Das geht nicht so einfach. Du müsstet im Hauptdokument ein Feld haben, in dem gespeichert wird, ob es Antworten gibt.

Andreas
Titel: Re:Hauptdokumente ohne Antwortdokumente
Beitrag von: TMC am 12.12.03 - 20:15:50
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
Titel: Re:Hauptdokumente ohne Antwortdokumente
Beitrag von: Semeaphoros am 12.12.03 - 20:34:20
.... 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
Titel: Re:Hauptdokumente ohne Antwortdokumente
Beitrag von: eknori am 12.12.03 - 20:45:58
schon mal Form ="Maskenname" & !@IsResponseDoc probiert ?
Titel: Re:Hauptdokumente ohne Antwortdokumente
Beitrag von: TMC am 12.12.03 - 20:47:46
Zitat
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
Titel: Re:Hauptdokumente ohne Antwortdokumente
Beitrag von: eknori am 12.12.03 - 20:57:14
tjoo, da fehlt wohl die Formel @HasResponses
Titel: Re:Hauptdokumente ohne Antwortdokumente
Beitrag von: eknori am 12.12.03 - 20:59:43
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
Titel: Re:Hauptdokumente ohne Antwortdokumente
Beitrag von: TMC am 12.12.03 - 21:02:24
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
Titel: Re:Hauptdokumente ohne Antwortdokumente
Beitrag von: Gandhi am 12.12.03 - 21:09:15
100.000 Docs in einer Notes Datenbank? Da hast Du auf jeden Fall was falsch gemacht... ;)
Titel: Re:Hauptdokumente ohne Antwortdokumente
Beitrag von: eknori am 12.12.03 - 21:10:50
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
Titel: Re:Hauptdokumente ohne Antwortdokumente
Beitrag von: Semeaphoros am 13.12.03 - 00:08:11
Achtung TMC, da hast Du was falsch gelesen:

Zitat
2) diese Hauptdoks sollen nur angezeigt werden wenn ein Responsedoc existiert

Genau umgekehrt, er will sie haben, wenn keine Responsedokumente exisitieren.

Titel: Re:Hauptdokumente ohne Antwortdokumente
Beitrag von: Rak am 15.12.03 - 15:09:15
Hallo,

der Vorschlag von Glombi

Zitat
Du müsstet im Hauptdokument ein Feld haben, in dem gespeichert wird, ob es Antworten gibt.

klinkt ja ganz gut.

@TCM

Zitat
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!
Titel: Re:Hauptdokumente ohne Antwortdokumente
Beitrag von: Glombi am 15.12.03 - 15:26:13
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
Titel: Re:Hauptdokumente ohne Antwortdokumente
Beitrag von: Glombi am 15.12.03 - 15:28:37
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