Domino 9 und frühere Versionen > Entwicklung

Hauptdokumente ohne Antwortdokumente

<< < (3/3)

eknori:

--- Zitat 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?

--- Ende Zitat ---
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

Semeaphoros:
Achtung TMC, da hast Du was falsch gelesen:


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

--- Ende Zitat ---

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

Rak:
Hallo,

der Vorschlag von Glombi


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

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.

--- Ende Zitat ---

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!

Glombi:
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

Glombi:
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

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln