Autor Thema: Dokumente automatisch erzeugen  (Gelesen 1858 mal)

Offline sinus

  • Junior Mitglied
  • **
  • Beiträge: 91
  • Geschlecht: Männlich
  • Dumdidum...
Dokumente automatisch erzeugen
« am: 26.11.02 - 12:38:33 »
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
« Letzte Änderung: 26.11.02 - 12:39:08 von sinus »

Offline Jérôme

  • Aktives Mitglied
  • ***
  • Beiträge: 108
  • Geschlecht: Männlich
  • Teigwaren heißen Teigwaren weil sie mal Teig waren
    • jerome-gamez.de
Re:Dokumente automatisch erzeugen
« Antwort #1 am: 26.11.02 - 16:24:04 »
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)

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

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.

Offline manuel

  • Senior Mitglied
  • ****
  • Beiträge: 377
  • Geschlecht: Männlich
  • el pueblo unido
Re:Dokumente automatisch erzeugen
« Antwort #2 am: 26.11.02 - 16:32:15 »
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
V 5.0.2c | Windows 2000

Offline Jérôme

  • Aktives Mitglied
  • ***
  • Beiträge: 108
  • Geschlecht: Männlich
  • Teigwaren heißen Teigwaren weil sie mal Teig waren
    • jerome-gamez.de
Re:Dokumente automatisch erzeugen
« Antwort #3 am: 26.11.02 - 16:33:45 »
hups... da hab ich wohl die Frage falsch verstanden   :-[

Offline sinus

  • Junior Mitglied
  • **
  • Beiträge: 91
  • Geschlecht: Männlich
  • Dumdidum...
Re:Dokumente automatisch erzeugen
« Antwort #4 am: 26.11.02 - 18:33:42 »
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

Offline sinus

  • Junior Mitglied
  • **
  • Beiträge: 91
  • Geschlecht: Männlich
  • Dumdidum...
Re:Dokumente automatisch erzeugen
« Antwort #5 am: 26.11.02 - 18:55:00 »
So, habe jetzt erfolgreich ein paar Dokumente automatisch erstellen lassen.
Nun wäre es natürlich nicht schlecht, wenn ich die Inhalte, die ich dann in die einzelnen Felder schreibe, vorher abfragen könnte.

Wenn ich also als Benutzer die Aktion ausführe, soll er mich abfragen für welchen Monat und welches Jahr die Dokumente erstellt werden sollen.

Weil Jahr und Monat nachher in die Felder geschrieben werden sollen...

Kann man das irgendwie mit einem Dialog den Benutzer abfragen?? So dass er Jahr und Monat eingibt und ich das dann weiter verwenden kann beim Erstellen der Dokumente??

Gruss, sinus

Offline sinus

  • Junior Mitglied
  • **
  • Beiträge: 91
  • Geschlecht: Männlich
  • Dumdidum...
Re:Dokumente automatisch erzeugen
« Antwort #6 am: 26.11.02 - 19:26:45 »
kann es sein, dass in

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

noch ein fehler ist??

ich bekomme immer die fehlermeldung

Object variable not set

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re:Dokumente automatisch erzeugen
« Antwort #7 am: 26.11.02 - 22:31:38 »
... die Fehlermeldung deutet darauf hin, daß das docGroup nicht initialisiert wurde...

... im Beispiel von oben findet er in die Gruppe "all_notes_user" nicht in deinem Adressbuch...

ata
Grüßle Toni :)

Offline sinus

  • Junior Mitglied
  • **
  • Beiträge: 91
  • Geschlecht: Männlich
  • Dumdidum...
Re:Dokumente automatisch erzeugen
« Antwort #8 am: 27.11.02 - 14:13:18 »
Hi,

so ähnlich, es lag daran, dass ich einen deutschen Server benutze und dieser natürlich mit Set viewGroups = dbNames.GetView("Groups") nichts anfangen konnte, mit Set viewGroups = dbNames.GetView("Gruppen") ging es dann, aber danke für den Tip!!

Gruss, sinus

PS: Vielleicht kann mir ja noch jemand bei dem Dialogproblem weiterhelfen??

Offline manuel

  • Senior Mitglied
  • ****
  • Beiträge: 377
  • Geschlecht: Männlich
  • el pueblo unido
Re:Dokumente automatisch erzeugen
« Antwort #9 am: 27.11.02 - 14:38:20 »
Hallo

Wegen deinem Dialogproblem:
Erstelle eine neue Maske, die zwei Zahlenfelder beinhaltet, eins für das Monat und ein für das Jahr. Ich nenne sie hier "MaskeDialog".

Füge nun folgenden Code in deine Aktion ein. Es wird eine DialogBox mit der "MaskeDialog" angezeigt. Vorher wird ein NotesDocument (docDialog) erzeugt und der Methode DialogBox übergeben, um anschließend die eingegebenen Werte aus der Variable docDialog auszulesen.


Dim ws As New NotesUIWorkspace  'wenn ws bereits deklariert wurde, lass diese Zeile weg
Dim docDialog As NotesDocument
Dim monat As Integer
Dim jahr As Integer

Set docDialog = db.CreateDocument
flag = ws.DialogBox("MaskeDialog", True, True, False, False, False, False, "Angabe Monat und Jahr", docDialog)

If flag = False Then Exit Sub   'wenn Abbrechen (Cancel) geklickt wurde, wird aus der Prozedur gesprungen

' Felderwerte werden ausgelesen und in Variablen gespeichert
monat = docDialog.Monat(0)
jahr = doc.Dialog.Jahr(0)



Diese zwei Variablen monat und jahr kannst du in deinem Code, der neue Dokument erstellt, verwenden.


In die beiden Felder Jahr und Monat der Maske schreibst du am besten in die Eingabevalidierungen folgende Formeln, damit sichergestellt ist, dass die Felder nicht leer bleiben.

@If (Monat = ""; @Failure("Bitte geben Sie ein Monat an."); @Success)

und

@If (Jahr = ""; @Failure("Bitte geben Sie ein Jahr an."); @Success)


Schönen Gruß
Manuel
V 5.0.2c | Windows 2000

Offline sinus

  • Junior Mitglied
  • **
  • Beiträge: 91
  • Geschlecht: Männlich
  • Dumdidum...
Re:Dokumente automatisch erzeugen
« Antwort #10 am: 28.11.02 - 01:46:49 »
tja, da kann ich mich nur ganz recht herzlich bedanken, du hast mir sehr weitergeholfen...habe nun alles so hinbekommen...vielen dank!!

 :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz