Autor Thema: Kalendereintrag per Script  (Gelesen 2663 mal)

Offline Thunder

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 728
  • Geschlecht: Männlich
Kalendereintrag per Script
« am: 08.10.03 - 10:18:55 »
Hallo experts.
bin Scriptneuling und möchte einen Kalendereintrag aus einer anderen NotesDB vornehmen können.Er sollte aus einer geöffneten Maske erfolgen und auch mehrere zusammenhängende Tage am Stück eintragen können. Wahrscheinlich relativ Simpel, aber ich muß mich noch in die Scriptsprache reinfuchsen.

danke..

R.Sander
Notes Server: 9.0.1 FP10
Workstations: 9.0.1 (ca.350)

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Kalendereintrag per Script
« Antwort #1 am: 08.10.03 - 10:29:15 »
Nö, ist alles andere als simpel.
Seit Jahren arbeite ich mit Kalender-Einträgen und voraussichtlich gibts an der DevCon04 (Name provisorisch, gemeint ist die deutsche Entwicklerkonferenz Ende Feb 04) eine eigene Session über das programmatische Erstellen von Kalendereinträgen. Es ist erstaunlich, welch hohe Komplexität hinter diesem für uns Menschlein so simpel erscheinenden Hilfsmittel wie der Kalender stecken. Ganz sicher kein Anfängerthema!
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:Kalendereintrag per Script
« Antwort #2 am: 08.10.03 - 14:39:49 »
Hi,

ich hab mal einen Wiedervorlage-Agent geschrieben. Der legt ein Kalenderdokument an. Vielleicht kannst du auszugweise was damit anfangen

Schau mal hier: http://www.atnotes.de/index.php?board=6;action=display;threadid=4615;start=0

Welche(s) Feld(er) für wiederholende Termine benötigt werden und wie sie gefüllt werden müssen kann ich dir leider auch nicht sagen. Das ließe sich aber relativ einfach rauskriegen. Lege einfach ein normales Kalenderdokument an und dann eines mit einem fortlaufenden Termin und schau dir über die Dokumenteigenschaften die Felder an.

Axel

PS:

Hier findest du noch mehr Infos: http://www-10.lotus.com/ldd/46dom.nsf/search?SearchView&Query=calendar%20AND%20script%20AND%20create&SearchOrder=1&SearchMax=0&SearchWV=FALSE&SearchFuzzy=FALSE&Start=1&Count=100
« Letzte Änderung: 08.10.03 - 14:49:42 von Axel »
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Thunder

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 728
  • Geschlecht: Männlich
Re:Kalendereintrag per Script
« Antwort #4 am: 09.10.03 - 09:26:39 »
Danke für die Antworten
Werde es sogleich mal austesten.
Notes Server: 9.0.1 FP10
Workstations: 9.0.1 (ca.350)

Offline Thunder

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 728
  • Geschlecht: Männlich
Re:Kalendereintrag per Script
« Antwort #5 am: 09.10.03 - 10:40:25 »
Ich habe mich für das Script von unserem holländischen Freund entschieden - läuft ganz gut.

Sub Click(Source As Button)
     Dim Session As New NotesSession
     Dim Workspace As New NotesUIWorkspace
     Dim TheDocument As NotesDocument
     Dim db As notesDatabase
     Dim UserName As String
     
     Set UIDoc = Workspace.CurrentDocument
     Set TheDocument = UIDoc.Document
     
     Set db = New NotesDatabase("", "")
' Open user's mail database
     db.openmail
     
' Notestime variabels
     Dim StartDatum As String
     Dim EindDatum As String
     
' Get variabels from document
     StartDatum = Uidoc.FieldGetText("gA_vom_1")
     EindDatum = Uidoc.FieldGetText("gA_bis_1")
     
' Converting startdate to us Datesetting (since my client is dutch but server resides us)
     Dim StartDagMnd As String
     Dim StartDag As String
     Dim StartMnd As String
     Dim StartJaar As String
     StartDagMnd$ = Left$(StartDatum, 5)
     StartDag$ = Left$(StartDagMnd,2)
     StartMnd$ = Right$(StartDagMnd,2)
     StartJaar$ = Right$(StartDatum,4)
     'StartDatum = StartMnd + "." + StartDag + "." + StartJaar
     
' Converting enddate in US Datemsetting
     
     Dim EindDagMnd As String
     Dim EindDag As String
     Dim EindMnd As String
     Dim EindJaar As String
     EindDagMnd$ = Left$(EindDatum, 5)
     EindDag$ = Left$(EindDagMnd,2)
     EindMnd$ = Right$(EindDagMnd,2)
     EindJaar$ = Right$(EindDatum,4)
     'EindDatum = EindMnd + "." + EindDag + "." + EindJaar
     
     
'Conversion for string to datefield
     Set datum1 = New NotesDateTime (StartDatum)
     Set datum2 = New NotesDateTime (EindDatum)
     Call datum2.AdjustDay( 1 )
     
     Startdatum = Cstr(datum1.DateOnly)
     Einddatum = Cstr(datum2.DateOnly)
     
'The do while places the calendar item everyday unit startdate and endate are the same.
     Do While StartDatum <> EindDatum
         
'Call calender
          Dim CalendarEntry As New NotesDocument(db)
          Dim rtitem As New NotesRichTextItem(CalendarEntry, "Body")
          Call rtitem.AppendText("Voor details bekijk bijgesloten verlof verzoek")
          Call rtitem.AddNewline(1)
          Call rtitem.AppendDocLink(TheDocument, "Verlof")
          UserName = Session.CommonUserName
         
          CalendarEntry.Form = "Appointment"
          CalendarEntry.Principal = UserName
         
          CalendarEntry.Chair = Session.UserName
          CalendarEntry.ExcludeFromView = "D"
          CalendarEntry.OrgTable = "CO"
          CalendarEntry.SequenceNum = 1
          CalendarEntry.Subject = "Urlaub (Zina)"
         
         
'Appointment Type 4 = Reminder , 3 = meeting, 2 = event, 1 = anniversary, 0 = Personal
'Place string in calender fields
          CalendarEntry.AppointmentType = "4"
          CalendarEntry.StartDate = Cdat(StartDatum)
          CalendarEntry.StartDateTime = Cdat(StartDatum)
          CalendarEntry.CalendarDateTime = Cdat(StartDatum)
          CalendarEntry.EndDateTime = Cdat(StartDatum)
         
          Call CalendarEntry.save(True, True)
          Call datum1.AdjustDay( 1 )
          Startdatum = Cstr(datum1.DateOnly)
          Einddatum = Cstr(datum2.DateOnly)
     Loop
End Sub

Die Umwandlung in das holländische Datumsformat kann rausgenommen werden. Habe da noch ein kleines Problem. Ich würde das gern in meine ZeiterfassungsDB übernehmen. Hier geben User an, wann Sie Urlaub, Gleittage, Seminare,... haben. Anschließend geht das ganze an den Abteilungsleiter und dieser muß das OK geben - erst dann wandert das Ganze an die Perso.
Ich hätte gern, daß in dem Moment, wo der Leiter sein OK gibt die Einträge in den Kalender des Anträgers wandern.
Der Name des Anträgers ist natürlich im Dokument gespeichert. (gA_Vorname ; gA_Nachname) Wie schreibe ich das Script so um, daß der Eintrag in diesen Kalender gehen und nicht in den des Leiters ?
(Wie gesagt - bin Neuling !)

Danke schon mal.
Notes Server: 9.0.1 FP10
Workstations: 9.0.1 (ca.350)

Offline Thunder

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 728
  • Geschlecht: Männlich
Re:Kalendereintrag per Script
« Antwort #6 am: 13.10.03 - 16:38:19 »
Ich bins wieder,

man kann doch bestimmt über Code und über das NAB die Mail-Datei des Users herausbekommen, oder ?
Ich hätte ja gedacht, wenn ich USERNAME = "Max Frisch" schreibe und die andere Zeile rausremme, er den Eintrag in den Kalender von M.F. machen würde. Aber nö..
Was müßte ich dafür ändern ?



'Call calender
          Dim CalendarEntry As New NotesDocument(db)
          Dim rtitem As New NotesRichTextItem(CalendarEntry, "Body")
          Call rtitem.AppendText("Voor details bekijk bijgesloten verlof verzoek")
          Call rtitem.AddNewline(1)
          Call rtitem.AppendDocLink(TheDocument, "Verlof")
          UserName = Session.CommonUserName
         
          CalendarEntry.Form = "Appointment"
          CalendarEntry.Principal = UserName
         
          CalendarEntry.Chair = Session.UserName
          CalendarEntry.ExcludeFromView = "D"
          CalendarEntry.OrgTable = "CO"
          CalendarEntry.SequenceNum = 1
          CalendarEntry.Subject = "Urlaub (Zina)"
Notes Server: 9.0.1 FP10
Workstations: 9.0.1 (ca.350)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Kalendereintrag per Script
« Antwort #7 am: 13.10.03 - 16:50:41 »
Wenn ich das jetzt richtig verstanden habe: Du willst aus irgendeiner DB einen Kalendereintrag im Mailfile irgendeines anderen Benutzers anlegen ?
Wie sieht es denn mit der Rechtesituation aus ? Darf bei Euch jeder im Mailfile jedes anderen Benutzers einen neuen Kalendereintrag anlegen ?

Natürlich kann man das Mailfile eines Notes-Users ermitteln (und dabei auch prüfen, ob dieses denn auch wirklich auf dem aktuellen Server liegt), aber trivial ist das beileibe nicht.
Prinzipiell heißt das:
- NAB ermitteln und öffnen (Problem: Bei lokaler Ausführung geht das in die Hose, wenn man nicht riesigen Aufwand betreibt)
- Personen-Doc des gewünschten Users ermitteln und öffnen
- Server prüfen
- Wenn Aktion auf HomeServer des gewünschten Users erfolgt: Kalendereintrag vornehmen.

Malst Du uns mal ein wenig mehr zu Deiner Problematik auf ? Vielleicht ergeben sich daraus andere Ansätze oder Hinweise für Dich.

Bernhard

Offline Thunder

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 728
  • Geschlecht: Männlich
Re:Kalendereintrag per Script
« Antwort #8 am: 14.10.03 - 09:00:50 »
OK - noch mal detailiert.
Ich habe eine DB geschrieben, mit der unsere Mitarbeiter Änderungen an Ihrer Zeiterfassung an die Personalabteilung übermitteln können. Normalerweise loggen wir uns mit Chipkarte an/ab.Wenn dieses nicht geht, wegen weil krank, Seminar, Urlaub, ... dann kann er dieses in dieser DB angeben und die Perso kann es dann übertragen. So erst einmal grundsätzlich.
Trägt ein Mitarbeiter zB einen Urlaub ein, so muß aber zunächst der Vorgesetzte diesen Urlaub auch genehmigen. Er bekommt also einen DocLink auf diese Anforderung und kann denn Status jetzt auf 'genehmigt' oder 'nicht genehmigt' setzen. Erst danach wandert das Dokument zur Perso. Diese setzen wiederum einen anderen Status auf 'erledigt', wenn die Daten übertragen wurden.
Jetzt zu meiner Problematik: Ich hätte gern einen Kalendereintrag in den Kalender des Antragstellers in dem Moment, wo der Vorgesetzte sein GO gibt. Aber Du hast Recht, da müßte der Vorgesetzte wohl Schreibrechte auf den Kalender besitzen. Könnte man das evt. durch einen Agent realisieren, wo das Ganze im Namen des Servers passiert ?   ???
Notes Server: 9.0.1 FP10
Workstations: 9.0.1 (ca.350)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz