Domino 9 und frühere Versionen > Entwicklung

Dokumente automatisch erzeugen

(1/3) > >>

sinus:
Hallo,

ich stehe (mal wieder) vor einem Problem:

Ich habe mir eine Ansicht erzeugt, mit der ich Einträge in meiner
Datenbank vornehme.

Wie kann ich es erreichen, dass meine Maske automatisch bearbeitet wird, und vor allem, wie bestimme ich welche Werte von dieser Automatik eingetragen werden? Gibt es soetwas wie: CreateDocument(Maske,Feld=Inhalt,usw) ???
Vermutlich geht das nur mit einem Agenten oder??

Diese Maske soll dann Dokumente für alle User einer bestimmten Gruppe (zum Bsp. all_notes_user) erzeugen, aber wie sage ich der Aktion oder dem Agenten oder wem auch immer, dass er alle Benutzer einer bestimmten Gruppe durchgehen soll??

Tausend Dank schonmal, ich steh hier echt auf dem Schlauch :(

Gruss, sinus

Jérôme:

--- Zitat ---Wie kann ich es erreichen, dass meine Maske automatisch bearbeitet wird, und vor allem, wie bestimme ich welche Werte von dieser Automatik eingetragen werden? Gibt es soetwas wie: CreateDocument(Maske,Feld=Inhalt,usw)
--- Ende Zitat ---

Da müsstest du ins Ereignis "PostOpen" deiner Maske gehen und dort reinschreiben:

source.EditMode = True

Dann änderst du die Feldwerte mit source.FieldSetText (...).


--- Zitat ---Diese Maske soll dann Dokumente für alle User einer bestimmten Gruppe (zum Bsp. all_notes_user) erzeugen, aber wie sage ich der Aktion oder dem Agenten oder wem auch immer, dass er alle Benutzer einer bestimmten Gruppe durchgehen soll??
--- Ende Zitat ---

Die Maske selbst kann keine Dokumente erzeugen. Du müsstest da schon einen Agenten schreiben, der die Mitglieder der betreffenden Gruppe einzeln durchgeht und jenachdem ein Dokument für diesen erzeugt oder nicht.

manuel:
Hallo

Um ein Dokument zu erstellen benutzt du, wie du schon richtig bemerkt hast, die Methode CreateDocument. Ein Beispiel:

Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument

Set db = session.CurrentDatabase
Set doc = db.CreateDocument

Um den Inhalt eines Feldes anzugeben benutze entweder die Funktion doc.ReplaceItemValue(feld, inhalt) oder greife direkt auf das Feld mittels doc.Feldname = Inhalt zu. Auf diese Weise kannst du dem Dokument auch seine Maske (Form) zuweisen. Zum Beispiel:

doc.Form = "Maske1"
doc.Feld1 = "blabla"
doc.Feld2 = "lala"

Optional kannst du die Methode ComputeWithForm aufrufen. Hier werden die Feldinhalte dem tatsächlichen Feldtyp (zB Text, Zahl) angepasst und die Validierungsformeln ausgeführt, falls vorhandem (soweit ich das ganze verstanden habe). Also

Call doc.ComputeWithForm(True, True)

Dieses Dokument besteht aber bis jetzt nur im Speicher, es ist also noch nicht wirklich ein vorhandenes Dokument. Also muss es gespeichert werden.

Call doc.Save(True, True)

Jetzt müsste das Dokument (nach einer Aktualisierung) in der Ansicht sichtbar sein. Die Aktualisierung der Ansicht kannst du automatisch ausführen:

Dim ws As New NotesUIWorkspace
Call ws.ViewRefresh

Diesen Code kannst du dir nun zusammenschnippseln und in eine Aktion oder ähnlichem unterbringen, ich weiß nämlich nicht genau wo du die "Einträge in deiner Datenbank" mittels einer "Automatik" vornehmen willst.



Dein zweites Problem würde ich folgendermaßen lösen. Zuerst wird die Datenbank, in der sich die Gruppe befindet, geöffnet. Ich nehme mal an das normale Adressbuch. Dann wird in der Ansicht mit den Gruppen eine spezielle Gruppe gesucht und in einem NotesDocument gespeichert.

Dim dbNames As NotesDatabase
Dim viewGroups As NotesView
Dim docGroup As NotesDocument

Set dbNames = session.GetDatabase("DeinServer", "names.nsf")
Set viewGroups = dbNames.GetView("Groups")
Set docGroup = viewGroups.GetDocumentByKey("all_notes_user", True)

Nun wird das Feld mit den Mitglieder der Gruppe ausgelesen und mittels einer Schleife für jedes Mitglied ein neues Dokument erstellt.

Dim members As Variant
members = docGroup.GetItemValue("Members")

For i = Lbound(members) To UBound(members)
  ' ... hier kommen wieder die Variablen vom oberen Beispiel ins Spiel ...
  Set doc = db.CreateDocument
  doc.Form = "Maske"
  doc.Name = members(i)    'mittels members(i) wird auf das jeweilige Gruppenmitglied zugegriffen
  '... weitere Felder füllen und compute ....
  Call doc.Save(True, True)
Next


Ich hoffe das funktioniert und hilft dir weiter.

Schönen Gruß
Manuel

Jérôme:
hups... da hab ich wohl die Frage falsch verstanden   :-[

sinus:
Vielen lieben Dank, werd mich jetzt mal damit auseinandersetzen und ein wenig rumprobieren, aber ich denke das hilft mir schonmal ein ganz großes Stück weiter :)

Gruss, sinus

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln