Autor Thema: [Frage]: per Script Kalendereinträge erzeugen  (Gelesen 5332 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