Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Thunder 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
-
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!
-
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 (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 (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)
-
hier findest du was
http://www-10.lotus.com/ldd/46dom.nsf/55c38d716d632d9b8525689b005ba1c0/c78b3c6bd0ef237185256b89004967d6?OpenDocument&Highlight=0,calendarentry
und auch hier
http://www-10.lotus.com/ldd/46dom.nsf/55c38d716d632d9b8525689b005ba1c0/14b69a1c56854cd085256b8a003d46f6?OpenDocument&Highlight=0,calendarentry
-
Danke für die Antworten
Werde es sogleich mal austesten.
-
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.
-
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)"
-
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
-
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 ? ???