Autor Thema: [Frage]: per Script Kalendereinträge erzeugen  (Gelesen 5472 mal)

Offline RalfK

  • Frischling
  • *
  • Beiträge: 49
  • Geschlecht: Männlich
[Frage]: per Script Kalendereinträge erzeugen
« am: 17.12.07 - 17:52:32 »
Hallo,

ich habe ein kleines Script umgeschrieben, welches mir aus einer Datenbank heraus per Schaltfläche einen Kalendereintrag vom Typ "Personal" erzeugt.

Dabei werden vorgegebene Felder gefüllt. Leider habe ich dabei 2 Probleme. Doch erst der Code

Code
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("", "")
'Variable für den Betreff deklarieren
Dim Subject As String
Subject = Uidoc.FieldGetText("CalEntrySubject")
'Variable für die Terminart deklarieren
Dim Terminart As String
Terminart = Uidoc.FieldGetText("termin")
' Mail-Datenbank öffnen
db.openmail
' Datumsvariable deklarieren
Dim Datum As String
Datum = Uidoc.FieldGetText("Datum")
'Kalenderfelder
Dim CalendarEntry As New NotesDocument(db)
Dim rtitem As New NotesRichTextItem(CalendarEntry, "Body")
Call rtitem.AddNewline(1)
Call rtitem.AppendText("Klicken Sie auf die Verknüpfung, um das Originaldokument zu sehen.")
Call rtitem.AddNewline(2)
Call rtitem.AppendDocLink(TheDocument, "Dokument")
UserName = Session.CommonUserName
CalendarEntry.Form = "Appointment"
CalendarEntry.Principal = UserName
CalendarEntry.Chair = Session.UserName
'CalendarEntry.ExcludeFromView = "D"
'CalendarEntry.OrgTable = "CO"
'CalendarEntry.SequenceNum = 1
CalendarEntry.Subject = Subject
CalendarEntry.KTE_SL_ART = Terminart
'Appointment Type 4 = Reminder , 3 = meeting, 2 = event, 1 = anniversary, 0 = Personal
'Kalenderfelder füllen
CalendarEntry.AppointmentType = "0"
CalendarEntry.StartDate = Cdat(Datum)
CalendarEntry.StartDateTime = Cdat(Datum)
CalendarEntry.CalendarDateTime = Cdat(Datum)
Call CalendarEntry.save(True, True)
End Sub

Mein erstes Problem.

Durch die Variable "Terminart" wird ein Feld im Kalenderdoc gefüllt, welches ein Symbol in der Kalenderansicht hervorruft. Erzeugt ich nun per button den Eintrag, wird dieses Symbol nicht angezeigt. Klicke ich im Kalender aber das Dokument an und speicher es erneut, wird es angezeigt.

Mein zweites Problem.

Es gibt auch noch das Feld TimeRange, welches die Start und Endzeit bestimmt. In meiner Maske habe ich ebenfalls ein Feld "Uhrzeit", indem ich die Dauer per Schieberegler einstelle und diese dann im Feld angezeigt wird. Meines Wissens werden die Werte dann in "StartDateTime" und "EndDateTime" abgelegt. Ist doch richtig oder?

Wie kann ich das Feld TimeRange mit diesen Werten füttern?

Für einen Hinweis wäre ich sehr dankbar.

Grüße
Ralf

Offline WildVirus

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 658
  • Geschlecht: Männlich
Re: [Frage]: per Script Kalendereinträge erzeugen
« Antwort #1 am: 17.12.07 - 19:00:26 »
Hallo Ralf,

erstmal fällt auf, dass das UIDocument nicht deklariert wurde.

Außerdem hat jeder Termin einen Beginn und ein Ende.

Was die Dauer betrifft, so empfehle ich in der Hilfe mal nach NotesDateRange class   zu suchen.

Viel Erfolg.

WV


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: [Frage]: per Script Kalendereinträge erzeugen
« Antwort #2 am: 17.12.07 - 19:47:57 »
Folgende Anmerkungen:
- Suche hier oder bei IBM Developerwork nach "Calendaring & Scheduling Schema". Bei dem von Dir offensichtlich irgendwo gefundenen Code werden etliche Items nicht belegt.
- Den AppointmentType "Personal" gibt es gar nicht (ist aber egal, o heisst vielmehr "Appointment")
- TimeRange gibt es nicht (im Standard-Mailfile)
- KTE_SL_ART gibt es ebenfalls nicht im Standard-Mailfile.

Bernhard

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: [Frage]: per Script Kalendereinträge erzeugen
« Antwort #3 am: 17.12.07 - 20:13:45 »
Zitat
Erzeugt ich nun per button den Eintrag, wird dieses Symbol nicht angezeigt. Klicke ich im Kalender aber das Dokument an und speicher es erneut, wird es angezeigt.

Ist klar. Du sett in Deinem Script das Feld "_ViewIcon" nicht. Wenn Du im UI die Maske öffnest und speicherst, wird es berechnet. Du musst es nur in deinem Code entspr. setzen.

Lese Dir das Thema , wie schon Bernhard beschrieben, genau durch.  ;)
Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: [Frage]: per Script Kalendereinträge erzeugen
« Antwort #4 am: 17.12.07 - 21:52:26 »
Wenn _ViewIcon gesetzt wird, wird der Code gerade mal ein Prozent besser.
Ich kann nur empfehlen, keinen Code zu verwenden, den man nicht verstanden hat. Und dieser Code ist wirklich "nichts".
Und wenn man dann noch Spezialisten (Admins) für Updates befragt, was die von solchen Appointment-Docs beim nächsten Reloease-Wechsel halten ...

Bernhard

Offline RalfK

  • Frischling
  • *
  • Beiträge: 49
  • Geschlecht: Männlich
Re: [Frage]: per Script Kalendereinträge erzeugen
« Antwort #5 am: 18.12.07 - 08:50:19 »
Folgende Anmerkungen:
- Suche hier oder bei IBM Developerwork nach "Calendaring & Scheduling Schema". Bei dem von Dir offensichtlich irgendwo gefundenen Code werden etliche Items nicht belegt.
- Den AppointmentType "Personal" gibt es gar nicht (ist aber egal, o heisst vielmehr "Appointment")
- TimeRange gibt es nicht (im Standard-Mailfile)
- KTE_SL_ART gibt es ebenfalls nicht im Standard-Mailfile.

Bernhard

Hallo Bernhard,

danke für die Tipps. Ich werde mir diese Thematik zu Gemüte führen. Wie du schon erkannt hast, ist es wirklich kein Standard Mail-File. Daher auch die anderen Feld Namen.

Wie du unten schon bemerkt hast, ist der Code "geklaut" und verändert. :-\ Leider finden sich selten Workarounds für allgemeine Themen, wie zB das erzeugen von Kalendereinträgen. Zumindest sind die von mir gefundenen Beispiele immer speziell und nicht generell.

Grüße
Ralf

Offline RalfK

  • Frischling
  • *
  • Beiträge: 49
  • Geschlecht: Männlich
Re: [Frage]: per Script Kalendereinträge erzeugen
« Antwort #6 am: 19.12.07 - 10:18:55 »
Hallo,

ich habe gestern mal etwas rumgebastelt und versucht, selbst etwas auf die Beine zu stellen, wobei sich meine Script Kenntnisse in Grenzen halten. Ich habe gerade begonnen mit dem R5 Script Buch von Addison-Wesley. Danke nochmal für den Hinweis der C & S.

Bisher klappt auch alles recht gut. Nur 1 Ding will noch nicht wie gewünscht. Doch erstmal der neue Code (Anmerkung: Ich erhebe nicht den Anspruch, einen tollen Code geschrieben zu haben ;) )

Code
Sub Click(Source As Button)
Dim db As New NotesDatabase("", "")
Dim ws As New notesuiworkspace
Dim session As New notessession
Dim uidoc As notesuidocument
Dim doc As notesdocument
Dim doc2 As notesdocument
Dim betreff As String
Dim datum As Variant
Dim beginn As Variant
Dim ende As Variant
Dim username As New NotesName(session.UserName)
Set uidoc = ws.currentdocument
Set doc = uidoc.document
betreff = uidoc.FieldGetText("Betreff")
datum1 = doc.GetItemValue("Datum")
beginn1 = doc.GetItemValue("Uhrzeit")
ende1 = doc.GetItemValue("Uhrzeit1")
datum = datum1(0)
beginn = beginn1(0)
ende = ende1(0)
Call db.OpenMail
Set doc2 = New NotesDocument(db)
doc2.ExcludeFromView = "D"
doc2.SequenceNum = 1
doc2.OrgTable = "C0"
doc2.Form = "Appointment"
doc2.AppointmentType = "0"
doc2.Principal = session.Username
doc2.Chair = session.UserName
doc2.Subject = betreff
doc2.Repeats = ""
doc2.StartDate = Cdat(datum)
doc2.EndDate = Cdat(datum)
doc2.StartDateTime = Cdat(beginn)
doc2.EndDateTime = Cdat(ende)
Dim rtitem As NotesRichTextItem
Set rtitem  = New NotesRichTextItem (doc2, "body")
Call rtitem.AddNewline(1)
Call rtitem.AppendText("Bitte hier klicken, um das Dokument zu öffnen.")
Call rtitem.AddNewline(1)
Call rtitem .AppendDocLink(doc, db.Title)
Call doc2.ComputeWithForm( True, False )
Call doc2.Save(True,False)
Msgbox "Ihr Termin wurde eingetragen"
End Sub

Ich kann damit einen Eintrag erzeugen, leider wird dieser nicht in der normalen $Calendar Ansicht gezeigt. Die Felder für die Maske und den Typen sind korrekt belegt. Rufe ich das Dokument in der Mail DB auf, wird es auch als Termin angezeigt mit den korrekten Daten. Nur nicht in der Kalenderansicht. Speicher ich das Dokument erneut, steht es in der korrekten Ansicht.  ???

Grüße

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: [Frage]: per Script Kalendereinträge erzeugen
« Antwort #7 am: 19.12.07 - 10:31:25 »
In ein kurzer Blick in die Ansicht ($Calendar) hätte Dich da schon aufgeklärt: CalendarDateTime ist ein kriegsentscheidendes Item.
Leider hilft Dir (und uns allen) ComputeWithForm bei Appointments nur sehr bedingt weiter - das meiste ist Handarbeit.

Bernhard

Offline RalfK

  • Frischling
  • *
  • Beiträge: 49
  • Geschlecht: Männlich
Re: [Frage]: per Script Kalendereinträge erzeugen
« Antwort #8 am: 19.12.07 - 10:52:48 »
Ein ziemlich kompliziertes Thema, wirklich. Ich hab diesen Eintrag echt überlesen, wobei in der "Usage" extra steht:

The CalendarDateTime is set to the starting date and time chosen by the Chair to make it appear in the Calendar view.. ::)

Hrmpf.

Dank dir für den Hinweis. Ich hoffe mal, ich bekomm das Konstrukt langsam mal zum laufen. Mir graut es schon davor, wenn ich mich um die Start- und EndDateTime kümmere.

Grüße
Ralf

Edit: Du hattest natürlich wieder recht. Klappt bestens.
« Letzte Änderung: 19.12.07 - 10:59:18 von RalfK »

Offline dirk_2909

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.173
  • Geschlecht: Männlich
  • Expand your Notes Client with ECM functionality..
    • d.velop
Re: [Frage]: per Script Kalendereinträge erzeugen
« Antwort #9 am: 19.12.07 - 12:38:55 »
@Bernhard

Zitat
Wenn _ViewIcon gesetzt wird, wird der Code gerade mal ein Prozent besser.

Aber 50% der Ausgangsfrage sind beantwortet.

Für die restlichen 99% habe ich ja auf Deine Antwort hingeiesen ;-)
Dirk

[IBM CLP R5]
[IBM CAD 6/6.5]
[IBM CAD 7]
[IBM CAD 8]


"Nein!! … Es genügt nicht Mails in einen anderen Ordner oder Datenbank zu verschieben, um sie zu archivieren!"

   
Disclaimer:
Ich Antworte nach besten Wissen und Gewissen. Sollte sich jemand durch meine Antwort persönlich angegriffen fühlen, ist dies nicht meine Absicht!
Ich bin auch nur ein Mensch, der Fehler machen kann. ....

Offline RalfK

  • Frischling
  • *
  • Beiträge: 49
  • Geschlecht: Männlich
Re: [Frage]: per Script Kalendereinträge erzeugen
« Antwort #10 am: 19.12.07 - 13:25:34 »
Wobei im Nachhinein betrachtet der erste Code wirklich nur die dringende Nachfrage nach einem Kalendereintrag befriedigen sollte und es auch prinzipiell tat. :D

Ich habe jetzt noch mit den Werten StartDateTime und EndDateTime zu tun. In meinem Beispiel nehme ich ja die Werte aus dem Array.

Habe ich in meinem Dokument 2 Felder (uhrzeit und uhrzeit1) welche mit Datum/Zeit gefüllt sind, klappt der Eintrag. Ich probiere es nun mit einem Steuerelement (mit Mehrfachwerten) und habe als Vorgabewert

Code
@TextToTime(@Text(StartDateTime) + "-" + @Text(EndDateTime))

da ich es komfortabler finde, mit den Schiebereglern die Zeit einzustellen.

Das Problem hier ist aber, das jetzt der zurückgelieferte Wert im Array nur noch die Uhrzeit enthält. Dadurch wird (verständlicherweise) das Datum auf den 30.12.1899 gesetzt.

Ich habe schon probiert, die Variable "ende" mit

Code
ende = datum1(0) & ende1(0)

zu kombinieren. Und bekomme dann eine "Type mismatch" Fehlermeldung. Liege ich richtig in der Annahme, das sie hervorgerufen wird, weil ich zwei Datentypen kombinieren möchte?

Grüße

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: [Frage]: per Script Kalendereinträge erzeugen
« Antwort #11 am: 19.12.07 - 13:38:07 »
Bei Deiner Variablenaufzählung sieht hier - glaube ich - niemand mehr durch.

Was soll das:
@TextToTime(@Text(StartDateTime) + "-" + @Text(EndDateTime))
und was hat das mit "Schiebereglern" zu tun??

Was ist dann datum1 und ende1? Was hat das alles mit uhrzeit und uhrzeit1 zu tun?

Um ein reines Date- und ein reines Time-Item zu kombinieren (bzw. seine Inhalte): Dafür nimmt man nun garantiert nicht den String Concenator "&", sondern ein "+". Und dann klappt das auch  ;)

Bernhard

Offline RalfK

  • Frischling
  • *
  • Beiträge: 49
  • Geschlecht: Männlich
Re: [Frage]: per Script Kalendereinträge erzeugen
« Antwort #12 am: 19.12.07 - 14:25:57 »
Nun, ich habe die mit aufgeführt um zu verdeutlichen, wo ich mein Problem mit den Datums/Zeitwerten habe. Natürlich kann ich auch in 2 Zeilern schreiben, die dann wiederum von dir in 1 Zeilern beantwortet werden Bernhard.

Manchmal kommt es einem so vor, als müsste man sich dafür entschuldigen, hier eine Frage zu stellen und dadurch die Notesgötter zu verunglimpfen.

Das man selbst an einer Lösung arbeitet, sollte klar sein, ich persönlich wünsche es mir hier auch nicht, dass mir auf eine Frage ein 100% funktionierendes Codeschnipselchen, überbracht auf einem Silbertablett, geliefert wird. Immerhin sind wir hier in einem Forum und nicht auf einer Verkaufsveranstaltung.

Für mich als relativ unbeleckten Freizeit LS Bastler ist natürlich der Einstieg mit einem komplexen Thema wie dem C&S Schema unglücklich gewählt, das kann ich nun auch nicht mehr ändern.

Ich hoffe, ich habe es dir nun etwas näher gebracht, warum ich durchaus versuche zu zeigen, wo es hakelt.

Grüße
Ralf


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: [Frage]: per Script Kalendereinträge erzeugen
« Antwort #13 am: 19.12.07 - 14:50:13 »
Ralf, es gibt keinen Grund für eine Bitte um Entschuldigung, und es gibt auch keine Notes-Götter.

Aber:
Nun, ich habe die mit aufgeführt um zu verdeutlichen, wo ich mein Problem mit den Datums/Zeitwerten habe.
Das ist Dir aus meiner Sicht dieses Mal gründlich misslungen - ich konnte nur noch eine Deutung versuchen und habe Dir das fehlende "+" aufgemalt.

Bernhard

Offline RalfK

  • Frischling
  • *
  • Beiträge: 49
  • Geschlecht: Männlich
Re: [Frage]: per Script Kalendereinträge erzeugen
« Antwort #14 am: 19.12.07 - 15:08:01 »
Das ist Dir aus meiner Sicht dieses Mal gründlich misslungen - ich konnte nur noch eine Deutung versuchen und habe Dir das fehlende "+" aufgemalt.

Bernhard

Okay, dann frage ich anders. :)

Ich habe ein Feld "Uhrzeit". Dort bestimme ich per Schieberegler, von wann bis wann ein Termin stattfindet.

Der Beginn und das Ende sollen jeweils in StartDateTime und EndDateTime der Appointment Maske übernommen werden. Für den Kalendereintrag.

In meinem obigen Script lasse ich mir dazu die Werte aus dem Array (Uhrzeit) auslesen. Zurückgeliefert bekomme ich, wenn ich das Script duch den Debugger jage für

StartDateTime = 19.12.2007 15:00
EndDateTime = 16:00

Mir fehlt also (und da weiss ich nicht warum) das Datum im Feld EndDateTime. Das wird dann auf den 30.12.1899 gesetzt. Unwissend wie ich bin habe ich mir gedacht "Okay, kombinierst du halt das Datum noch mit rein."

Durch das "+" addiert er die Werte. "&" ist ein String Befehl.

Mir fehlt also der Wert, den ich auf das Ende raufaddieren kann.

ich habe dir mal die Datei angehängt. Das erklärt wahrscheinlich mehr als 1.000 Beiträge von mir.

Grüße
Ralf

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: [Frage]: per Script Kalendereinträge erzeugen
« Antwort #15 am: 19.12.07 - 15:35:59 »
Ja, jetzt ist es klarer.

Start- und End-Datum/Zeit erhältst Du wie folgt:

'Übliche Deklarationen abseits des Problems fehlen!
Dim vStartDate As Variant
Dim vStartDateTime As Variant
Dim vEndDateTime As Variant

vStartDate = Datenumber (Year (doc.Datum (0), Month (doc.Datum (0), Day (doc.Datum (0))
vStartDateTime = vStartDate + doc.Uhrzeit (0)
vEndDateTime = vStartDate + doc.Uhrzeit (1)

Bernhard

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: [Frage]: per Script Kalendereinträge erzeugen
« Antwort #16 am: 19.12.07 - 15:44:29 »
Ich habe eben nochmal fix Deinen Code überflogen. Dir fehlen da aber noch ein paar essentielle Items, ich habe daher folgendes fix mal bei mir 'rausgeschnippelt:
Code
docCalendarEntry.~$AltPrincipal = docRequest.Requester (0)
docCalendarEntry.~$BusyName = docRequest.Requester (0)
Set itemTemp = docCalendarEntry.GetFirstItem ("$BusyName")
itemTemp.IsNames = True
docCalendarEntry.~$BusyPriority = "1"
docCalendarEntry.~$CSversion = "2"
docCalendarEntry.~$NoPurge = docRequest.EndDate (0)
docCalendarEntry.~$PublicAccess = "1"
docCalendarEntry.AltChair = docRequest.Requester (0)
docCalendarEntry.BookFreeTime = ""
docCalendarEntry.Chair = docRequest.Requester (0)
docCalendarEntry.ExcludeFromView = ArrayAdd ("D", "S")
docCalendarEntry.Principal = docRequest.Requester (0)
docCalendarEntry.tmpOwnerHW = "1"

$BusyName und $PublicAccess sind essentiell für C&S bzw. den Zugriff.

HTH,
Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz