Autor Thema: Wiederholenden Jahrestag mit Script erstellen  (Gelesen 4594 mal)

Offline Alexander 28

  • Aktives Mitglied
  • ***
  • Beiträge: 190
  • Geschlecht: Männlich
  • Meistens gibt es eine Lösung!
Wiederholenden Jahrestag mit Script erstellen
« am: 19.11.11 - 10:48:54 »
Hallo zusammen. Ich bin am Ende. Sitze nun 2 volle Tage an einem Problem und finde nicht den Fehler. Da ich inzwischen nun total blockiert bin, hoffe ich, dass die Script Profis in diesem Forum mir auf die Sprünge helfen können.

Zunächst meine Ausstattung: Client + Designer 8.5.3, Server 8.5.2 FP3

Problemstellung:
Ich habe eine Mitarbeiter DB. Dort entnehme ich das Geburtsdatum und möchte es in den persönlichen Kalender als Jahrestag mit Script eintragen. Besonderheit: Der Geburtstag soll natürlich als jährlicher Wiederholungstermin gesetzt werden, für z. B. die nächsten 70 Jahre. In meinem nachstehenden Beispiel mache ich es (zum testen) nur mit 4 Jahren!

Bisheriges Ergebnis:
Die Einträge werden ordnungsgemäß erzeugt und auch in den gewünschten Jahren zum richtigen Termin angezeigt. Nun aber das Problem: Wenn ich einen solch' erzeugten Eintrag im Kalender öffne und ihn wieder speichern möchte, dann erhalte ich die folgende Fehlermeldung:

"The maximum number of repeat instance has been reached. Pleace reduce the Number of instances that will be crated."

Auch im Kalendereintrag selbst gibt es ja so eine klein "Plus"-Schaltfläche die die wiederholenden Tage einblendet. Die Liste ist aber leer!?

Ich bin so vorgegangen, dass ich einen manuellen Eintrag im Kalender erzeugt und die aus meiner Sicht relevanten Felder dann in das Script eingebaut habe. Ich denke also, dass es keine wesentlichen Unterschiede zum Eintrag aus dem Frontend gibt. Dennoch klappt es nicht. Ich habe irgendwie das Gefühl, dass es mit den Felder OrgRepeat und/oder Repeats zu tun hat. Die sind aber gesetzt!?

Ich habe stundenlang dieses Forum durchsucht und auch die IBM Hilfe http://www-10.lotus.com/ldd/ddwiki.nsf/dx/cs_schema_index hoch und runtergelesen. Ich finde einfach keinen Hinweis wo sich der Fehler versteckt.
Auffällig ist auch, dass bei der manuellen Erstellung des Kalendereintrages z.B. die Felder EndDate nur ein Datum und EndTime nur einen Zeitwert enthalten. Wenn man dann den Kalendereintrag nochmal editiert und neu speichert haben beide Felde einen Datum-Zeitwert.
Warum mal so und mal so?
Ich habe jedenfalls beides mit dem Script probiert, aber es macht keinen Unterschied. Ich habe übrigens auch zahlreiche Scripte aus diesem Forum versucht, aber leider keines gefunden, welches sich auf einen wiederholenden Jahrestag bezieht.

Also nachstehend nun mein Script. Sorry, dass es etwas wirrwarr ist, aber ich habe schon ziemlich viel rumprobiert. Sicher gibts generell Optimierungsmöglichkeiten. Aber der eigentliche Fehler versteckt sich woanders:

Code
	searchFormula$ = {Form="Mitarbeiter" & GBDatum!="" & Inaktiv!="1"}
	Set collection = db.Search( searchFormula$, Nothing, 0 )   
	
	anzahlF = collection.count
	
	Set note = collection.GetFirstDocument
	Do While Not (note Is Nothing)
		
		Dim rtitem As NotesRichTextItem
		
		Dim iDays As Integer
		Dim aStartDateTime() As Variant
		
		iDays = 0
		
		Dim thisStartDateTime As NotesDateTime
		Dim thisEndDateTime As NotesDateTime
		
		Set thisStartDateTime = New NotesDateTime(note.GBDatum(0)& " 04:00:00")     
		Set thisEndDateTime = New NotesDateTime(thisStartDateTime.Lslocaltime)
		Call thisEndDateTime.Adjustyear(3)
		
		While thisStartDateTime.TimeDifference(thisEndDateTime) <= 0
			Redim Preserve aStartDateTime(iDays)
			
			aStartDateTime(iDays) = thisStartDateTime.LSLocalTime
			
			iDays = iDays + 1
			Call thisStartDateTime.Adjustyear(1)' Um einen Tage erhöhen
		Wend
		
		'Ende Liste aufbauen
		Dim i As Integer
		Dim EndTerminListe(3) As Variant 
		Dim StartEndTermin As New NotesDateTime(note.GBDatum(0)& " 04:00:00")
		Dim StartEndTerminEnde As New NotesDateTime(note.GBDatum(0)& " 20:00:00")
		Dim EndTermin As New NotesDateTime(note.GBDatum(0)& " 20:00:00")
		For i = 0 To 3
			EndTerminListe(i) = EndTermin.LSLocalTime
			Call EndTermin.Adjustyear(1)
		Next  

		Dim newtermin As NotesDocument
		Set newtermin = maildb.CreateDocument
		
		Dim BeginnTermin As NotesDateTime
		Set BeginnTermin = New NotesDateTime( note.GBDatum(0)& " 04:00:00" )     
		Dim EndeTermin As NotesDateTime
		Set EndeTermin = New NotesDateTime( note.GBDatum(0)& " 20:00:00" )     
		
		'Deklaration der Werte für NUR Datum und NUR Zeit Ende
		Dim BeginnTerminDate As New NotesDateTime(BeginnTermin.DateOnly)				
		Call BeginnTerminDate.SetAnyTime
		Set newtermin.StartDate = StartEndTermin 'BeginnTerminDate
		
		Dim BeginnTerminTime As New NotesDateTime(BeginnTermin.TimeOnly)				
		Call BeginnTerminTime.SetAnyDate
		Set newtermin.StartTime = StartEndTermin 'BeginnTerminTime
		Set newtermin.AppendStartTime = BeginnTerminTime '08:00:00
		
		'Deklaration der Werte für NUR Datum und NUR Zeit Ende
		Dim EndeTerminDate As New NotesDateTime(EndeTermin.DateOnly)				
		Call EndeTerminDate.SetAnyTime
		Set newtermin.EndDate = StartEndTerminEnde 'EndeTerminDate
		
		Dim EndeTerminTime As New NotesDateTime(EndeTermin.TimeOnly)				
		Call EndeTerminTime.SetAnyDate
		Set newtermin.EndTime = StartEndTerminEnde 'EndeTerminTime			
		Set newtermin.AppendEndTime = EndeTerminTime
		
		newtermin.StartDateTime = aStartDateTime 'BeginnTermin.LSLocalTime
		newtermin.CALENDARDATETIME = aStartDateTime 'BeginnTermin.LSLocalTime
		newtermin.RepeatInstanceDates = aStartDateTime 'BeginnTermin.LSLocalTime
		newtermin.OriginalStartDate = StartEndTermin.Lslocaltime
		
		'newtermin.RepeatDates = aStartDateTime
		
		newtermin.EndDateTime = EndTerminListe
		
		newtermin.Form = "Appointment"
		newtermin.AppointmentType = "1"
		
		Dim ohneView(0 To 1) As String
		ohneView(0) = "D"
		ohneView(1) = "S"
		newtermin.ExcludeFromView = ohneView
		
		Call newtermin.ReplaceItemValue("$PublicAccess", "1")
		Call newtermin.ReplaceItemValue("_ViewIcon", 63)
		Call newtermin.ReplaceItemValue("$NoPurge", EndTerminListe(3)) 
		Call newtermin.ReplaceItemValue("$TableSwitcher", "Description")
		Call newtermin.ReplaceItemValue("dspNum", 4)
		Call newtermin.ReplaceItemValue("IsBroadcast", "0")
		Call newtermin.ReplaceItemValue("Logo", "StdNotesLtr25")
		Call newtermin.ReplaceItemValue("OrgTable","A0")
		Call newtermin.ReplaceItemValue("txtNum", CStr(4))
		Call newtermin.ReplaceItemValue("UpdateSeq", 1)
		Call newtermin.ReplaceItemValue("WebDateTimeInit", "1")
		Call newtermin.ReplaceItemValue("xAMtg", "a Meeting")
		Call newtermin.ReplaceItemValue("xAToDo", "a To Do")
		Call newtermin.ReplaceItemValue("xMtg", "Meeting")
		Call newtermin.ReplaceItemValue("xToDo", "To Do")
		Call newtermin.ReplaceItemValue("$BusyPriority", "2")
		Call newtermin.ReplaceItemValue("$BorderColor", "7F96A3")
		Call newtermin.ReplaceItemValue("OrgConfidential", "1")
		Call newtermin.ReplaceItemValue("$PublicAccess", "1")
		Call newtermin.ReplaceItemValue("$BusyName", session.Username)
		newtermin.CHAIR = session.UserName
		newtermin.AltChair = session.UserName
		newtermin.SchedulerSwitcher = "1"
		newtermin.APPTUNID = newtermin.UniversalID
		newtermin.Principal = session.UserName
		newtermin.Repeats = "1"
		newtermin.OrgRepeat = "1"
		newtermin.BookFreeTime = "1" 
		newtermin.SequenceNum = 1
		
		Dim watchitems(15) As Variant
		watchitems(0) = "$S"
		watchitems(1) = "$L"
		watchitems(2) = "$B"
		watchitems(3) = "$R"
		watchitems(4) = "$E"
		watchitems(5) = "$W"
		watchitems(6) = "$O"
		watchitems(7) = "$M"
		watchitems(8) = "RequiredAttendees"
		watchitems(9) = "INetRequiredNames"
		watchitems(10) = "AltRequiredNames"
		watchitems(11) = "StorageRequiredNames"
		watchitems(12) = "OptionalAttendees"
		watchitems(13) = "INetOptionalNames"
		watchitems(14) = "AltOptionalNames"
		watchitems(15) = "StorageOptionalNames"
		
		'Call newtermin.ReplaceItemValue("$WatchedItems", watchitems)
		
		Dim CSWISL(15) As Variant
		CSWISL(0) = "$S:1"
		CSWISL(1) = "$L:1"
		CSWISL(2) = "$B:1"
		CSWISL(3) = "$R:1"
		CSWISL(4) = "$E:1"
		CSWISL(5) = "$W:1"
		CSWISL(6) = "$O:1"
		CSWISL(7) = "$M:1"
		CSWISL(8) = "RequiredAttendees:1"
		CSWISL(9) = "INetRequiredNames:1"
		CSWISL(10) = "AltRequiredNames:1"
		CSWISL(11) = "StorageRequiredNames:1"
		CSWISL(12) = "OptionalAttendees:1"
		CSWISL(13) = "INetOptionalNames:1"
		CSWISL(14) = "AltOptionalNames:1"
		CSWISL(15) = "StorageOptionalNames:1"
		
		'Call newtermin.ReplaceItemValue("$CSWISL", CSWISL)
		
		Call newtermin.ReplaceItemValue("StartTimeZone", "Z=-1$DO=1$DL=3 -1 1 10 -1 1$ZX=96$ZN=W. Europe")
		Call newtermin.ReplaceItemValue("EndTimeZone", "Z=-1$DO=1$DL=3 -1 1 10 -1 1$ZX=96$ZN=W. Europe")
		
		newtermin.Subject = "Geburtstag: " & note.MA_Auswahl(0)
		
		Set rtitem = New NotesRichTextItem( newtermin, "Notes" )
		Set rtitem = New NotesRichTextItem( newtermin, "Body" )
		Call rtitem.AppendText( "Dieser Geburtstag wurde am " & Now & " von " & user.Common & " aus der Datenbank UKS in den Kalender übernommen." )
		Call newtermin.Save(True, False, True)
	
		Set note = collection.GetNextDocument(note)
		Erase aStartDateTime
		Erase EndTerminListe
		iDays = 0
		
	Loop




Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Wiederholenden Jahrestag mit Script erstellen
« Antwort #1 am: 19.11.11 - 13:04:35 »
Überlese ich im Code etwas, oder legst Du tatsächlich nur ein Dokument an? Wo ist das Response-Document, welches Du für wiederholende Termine benötigst?

Bernhard

Offline Alexander 28

  • Aktives Mitglied
  • ***
  • Beiträge: 190
  • Geschlecht: Männlich
  • Meistens gibt es eine Lösung!
Re: Wiederholenden Jahrestag mit Script erstellen
« Antwort #2 am: 19.11.11 - 13:09:30 »
Hallo koehlerbv, Danke für Dein Feedback.

Ein Responsedoc lege ich nicht an!?  Brauche ich das/die??????

Wo, oder wie bzw. an welcher Stelle ist das bzw. die denn notwendig? Könntest Du ein Scriptauszug posten wie das auf mein Beispiel bezogen aussehen müsste? Wäre wirklich toll!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Wiederholenden Jahrestag mit Script erstellen
« Antwort #3 am: 19.11.11 - 13:29:54 »
Das sollte auch im C&S Schema stehen. Als Vorlage kann Dir Dein Beispiel-Jahrestag dienen (bzw. dessen ResponseDoc).

Bernhard

Offline Alexander 28

  • Aktives Mitglied
  • ***
  • Beiträge: 190
  • Geschlecht: Männlich
  • Meistens gibt es eine Lösung!
Re: Wiederholenden Jahrestag mit Script erstellen
« Antwort #4 am: 19.11.11 - 18:56:20 »
Schade, hab' leider nix dazu gefunden.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Wiederholenden Jahrestag mit Script erstellen
« Antwort #5 am: 19.11.11 - 19:27:12 »
Schau Dir doch bitte einfach die *zwei* Dokumente an, die bei einem Wiederholungseintrag erzeugt werden.

Bernhard

Offline WildVirus

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 658
  • Geschlecht: Männlich
Re: Wiederholenden Jahrestag mit Script erstellen
« Antwort #6 am: 19.11.11 - 21:21:21 »
Hallo Alexander,

C&S ist ein spannendes Thema und nichts für Einsteiger.

Wenn Du die Herausforderung annimmst, dann erstmal viel Erfolg und ich empfehle die Lektüre von diesem Artikel incl. seinen weiterführenden Links.

CU,
Axel

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich

Offline Alexander 28

  • Aktives Mitglied
  • ***
  • Beiträge: 190
  • Geschlecht: Männlich
  • Meistens gibt es eine Lösung!
Re: Wiederholenden Jahrestag mit Script erstellen
« Antwort #8 am: 20.11.11 - 10:42:10 »
Ja, das habe ich in der Tat nicht gelesen. Hochinteressant. Zunächst vielen Dank, werd' mich da mal durchkämpfen.

Eine Frage aber noch: Ich hatte testweise mal das Feld RepeatDates mit der CalendarDateTime Liste beschrieben. Hatte dann die Situation, dass die wiederholenden Tage im Doc auch richtig angezeigt wurden. Es kam beim öffnen des Docs lediglich der Hinweis, dass das Doc nicht editiert werden kann und bei Bedarf das "OriginalDoc" zu ändern ist. Das wäre für mich durchaus OK! Spricht etwas dagegen, dieses Feld zu beschreiben?

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Wiederholenden Jahrestag mit Script erstellen
« Antwort #9 am: 20.11.11 - 11:29:51 »
In Deinem Vorlage-Eintrag ist RepeatDates auch belegt - das hättest Du doch leicht feststellen können. Und Du schriebst doch, Du hättest den C&S-Artkel gelesen? Im Teil 6 ist das sauber dokumentiert:
http://www-10.lotus.com/ldd/ddwiki.nsf/page.xsp?documentId=80D2352DBB10A218852577A7007F2F78&action=openDocument&SessionID=D0J7KZC3WZ

Bernhard

Offline Alexander 28

  • Aktives Mitglied
  • ***
  • Beiträge: 190
  • Geschlecht: Männlich
  • Meistens gibt es eine Lösung!
Re: Wiederholenden Jahrestag mit Script erstellen
« Antwort #10 am: 20.11.11 - 11:40:11 »
Yep! So is dat, wenn man zu lange über einem problem brütet. irgendwann sieht man den wald nicht mehr weil die bäume davor stehen! zunächst vielen dank, koehlerbv. ma gucken ob ich nun weiterkomme.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz