Autor Thema: Sommerzeit per Agent in Kalenderdoks einstellen?  (Gelesen 4501 mal)

Offline CLP-Alex

  • Junior Mitglied
  • **
  • Beiträge: 55
Sommerzeit per Agent in Kalenderdoks einstellen?
« am: 05.02.08 - 16:50:55 »
Hy Lotusprofis,

ich habe ein Problem, muß in einer 5er Umgebung Kalendereinträge durchscannen und auf Winter/Sommerzeit umstellen. Scriptseitig eigentlich kein Problem nur wie bekomme ich raus wann die Sommerzeit startet bzw. endet???

Ich muß wohl eine Routine programmieren die mir entsprechend den März und Oktober auf den letzten Sonntag scannt.

Gerade Jahrestage über 10 oder 20 Jahre stellen mein Problem dar.
OK - haben keine relevante Uhrzeit.

Wird es reichen in der Sommerzeit alle Datumsfelder mit CEDT zu versehen oder sind das nur bestimmte Felder. Wenn keiner eine Lösung hat muß ich das wohl in meiner Testumgebung rausfinden.

Danke für die Hilfe.

Gruß Alex
 

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Sommerzeit per Agent in Kalenderdoks einstellen?
« Antwort #1 am: 05.02.08 - 18:09:51 »
Wegen Beginn und Ende der Sommerzeit brauchst Du nichts zu scannen - das lässt sich über den Wochentag des 31.3. bzw. 31.10. simpelst ausrechnen.

Wenn Du IsDST setzt, wird sofort die Uhrzeit verändert, aus 11:00:00 CET wird 12:00:00 CEDT, die Zeit muss also mit angepasst werden.
Wenn auf der Box, auf der der Code abläuft, bereits auf Sommerzeit umgestellt wurde, dann reicht es auch aus, den bisherigen Wert in eine DT-Variant-Variable zu holen, die Stunde anzupassen und wieder zu speichern. IsDST wird dabei automatisch gesetzt.

Und ja: Es müssen alle Items geändert werden (ausser $Revisions  ;D), in denen ein komplettes Datum (also Tag und Uhrzeit) enthalten ist.

HTH,
Bernhard

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Sommerzeit per Agent in Kalenderdoks einstellen?
« Antwort #2 am: 05.02.08 - 18:13:32 »
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline CLP-Alex

  • Junior Mitglied
  • **
  • Beiträge: 55
Re: Sommerzeit per Agent in Kalenderdoks einstellen?
« Antwort #3 am: 06.02.08 - 08:24:03 »
Guten Morgen zusammen,

mein plan ist wie folgt, als erstes einen Agenten in PostOpen aller Maildatenbanken starten der die Arbeitsumgebungen auf die Sommer/Winterzeit einstellt. Somit werde ich alle User zwingen die Umstellung vorzunehmen und sie können keine falschen Kalendereiträge mehr erfassen.
Desweiteren wird am Wochenende ein Agent laufen der alle Kalender scannt und neu berechnet. Damit habe ich wohl ausgeschlossen das wieder falsche Werte in die Agenten kommen.

@Bernhard
So einfach ist es wohl wirklich, weekday ist schon ne schöne Funktion wenn man dran denkt, danke

Gruß Alex

Offline Matthias1974

  • Aktives Mitglied
  • ***
  • Beiträge: 140
  • Geschlecht: Männlich
    • Matthias Schlimm
Re: Sommerzeit per Agent in Kalenderdoks einstellen?
« Antwort #4 am: 07.02.08 - 20:33:38 »
Hallo CLP-Alex,

ich hatte letztes Jahr die gleiche Hürde zu nehmen da bei uns der Haken "Automatisch von Sommer-/Winterzeit umstellen" nicht  aktiv war. Ich habe darauf hin zusammen mit der Hilfe vom IBM Support einen Agent geschrieben der unsere Zeitzonen und Kalendereinträge anpasst. Allerdings habe ich die Finger von wiederkehrenden Einträgen gelassen, diese werden nicht modifiziert.

Ich kann Dir ja mal die Scripte zukommen lassen.
Matthias Schlimm

76829 Landau i.d. Pfalz

Domino-Server V7.0.2 auf iSeries und Windows, Clients V7.0.1,Commontime mNotes/Suite, Windows2k, 2003, WinXP, Citrix PS 4.5, Sametime 7.5

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Sommerzeit per Agent in Kalenderdoks einstellen?
« Antwort #5 am: 07.02.08 - 21:16:18 »
Allerdings habe ich die Finger von wiederkehrenden Einträgen gelassen, diese werden nicht modifiziert.

Warum? Das ist doch das gleiche Procedere ... Okay, ggf. ist noch ein weiteres Dokument beteiligt, aber (alle) C&S-Dokumente kann man sich im Mail-File ja nun einfach greifen.

Bernhard

Offline Matthias1974

  • Aktives Mitglied
  • ***
  • Beiträge: 140
  • Geschlecht: Männlich
    • Matthias Schlimm
Re: Sommerzeit per Agent in Kalenderdoks einstellen?
« Antwort #6 am: 08.02.08 - 07:14:34 »
Hallo Bernhard,

vielleicht erinnerst Du dich an den folgenden Beitrag http://atnotes.de/index.php?topic=35155.msg221331

.. da hatte ich das Thema angesprochen, das Problem war sobald ich den wiederholenden Eintrag per Agent geändert hatte ist dieser aus der Kalenderansicht verschwunden.

Zitat
Gerade Jahrestage über 10 oder 20 Jahre stellen mein Problem dar.
OK - haben keine relevante Uhrzeit.

... mein Script geht nicht ganz auf die Frage von Alex ein, da die wiederkehrenden Einträge ja nicht modofiziert werden  :-X

Das Script habe ich für V7 erstellt, unter V5 habe ich es nicht getestet, sollte aber keine Probleme machen
und wie immer voher das Script testen, testen, testen  ;D

Code

'This Agent adjust the Lotus Notes Calendar to the correct German Timezone
' 09.03.2007 Matthias Schlimm


Sub Initialize
	Dim s As New notessession 
	Dim Sadjusted As notesdatetime 
	Dim Eadjusted As notesdatetime 
	Dim startDST As Variant 
	Dim endDST As Variant
	Dim tzInDST As Variant
	Dim tzOutDST As Variant
	Dim dc As NotesDocumentCollection
	Dim FileName As String
	Dim FileNbr As Integer
	Dim CheckAgent As String 
	
	Dim Db As String
	Dim DbName As String
	Dim maildoc As NotesDocument
	Dim dbs As NotesDatabase
	Dim rtbody As NotesRichTextItem
	Dim isDST As New NotesDateTime ("25.03.2007 02:00:00")
	
	If Not (isDST.isDST) Then
		Messagebox ("Bitte kontrollieren Sie unter Start -> Einstellungen -> 
Systemsteuerung ->  Datum/Uhrzeit, ob bei 'Zeitzone' -> 'Uhr auf Sommer-/Winterzeit umstellen' aktiv ist. 
Sollte dies nicht der Fall sein, korrigieren Sie dies bitte bzw. wenn Sie dafür nicht die benötigte 
Berechtigung haben, kontaktieren Sie bitte Ihren Systembetreuer. Anschließend starten Sie 
Ihren Notes-Client neu !")
		Exit Sub 
	End If
	
	Set dbs = s.CurrentDatabase
	Set maildoc = New NotesDocument (dbs)
	
	
	cntInDST=0
	cntOutDST=0
	cntTZTrue=0
	cntTZFalse=0
	CheckAgent="no"
	notespath=s.GetEnvironmentString("Directory",True)
	CheckAgent=s.GetEnvironmentString("$CheckAgentIfRunning2k7",True)
	If CheckAgent="yes" Then Exit Sub
	Call s.SetEnvironmentVar("CheckAgentIfRunning2k7","no")
	
	startDST = Datevalue("25.03.2007")
	endDST = Datevalue("28.10.2007")
	tzInDST = "Z=-1$DO=1$DL=3 -1 1 10 -1 1$ZX=81$ZN=W. Europe"
	tzOutDST = "Z=-1$DO=0$ZX=81$ZN=W. Europe"
	
	
	On Error Goto ErrHandle
	
	Print "Zeitzonenumstellung wird vorbereitet..."
	
	Set dc=s.currentdatabase.AllDocuments
	db=dc.Parent.FilePath
	dbname=dc.Parent.FileName
	'Datenbanken ausschließen
	If dbname="test.nsf" Then Exit Sub  ' Dieses Datenbank von der Umstellung ausschließen
	Msgbox "Hinweis:Die Kalendereinträge werden nun für die Sommerzeit vom "& startDST & " bis zum " & endDST & " korrigiert !"
	Print "Bitte warten...."
	FileName =notespath+"\AgentAdjustCalender_ "+dbname+".log"
	FileNbr= Freefile()
	Open FileName For  Output  As FileNbr
	Print #Filenbr,"LogDatei des Agent zur Zeitzonenkorrektur des Kalenders"
	Print #FileNbr, "Datenbank: "+db
	
	maildoc.form="Memo"
	maildoc.subject = "Bericht Zeitzonenumstellung für "+db
	Set RtBody = New NotesRichTextItem( maildoc, "Body" )
	Call rtbody.AppendText ("Wiederkehrende Kalendereinträge werden nicht korrigiert, 
diese müssen manuell umgestellt werden")
	Call rtbody.AddNewline(2)
	Call rtbody.AppendText("Folgende Kalendereinträge wurden korrigiert:")
	Call rtbody.AddNewline(2)
	maildoc.sendTo = s.UserName
                'Zentrale Mail-DB für Logfiles hier eintragen
	maildoc.BlindCopyTo = "MailInDB@cfirma.de"
	
	
	For i = 1 To dc.Count
		On Error Goto ErrHandle
		CalenderEntry=0
		Set doc =dc.GetNthDocument(i)			
		Set Form=doc.getfirstItem("Form")
		If doc.hasitem("Form")=False Then Goto NextDocument
		Print "Prüfe Dokument  Nr. "&Str$( i)& " von  "&Str$(dc.Count)& " / Typ:  "&Form.values(0)
		If  Form.values(0)="Appointment" Then
			Set startdatetime=doc.getfirstitem("StartDateTime") 
			If doc.hasitem("StartDateTime")=False Then Goto NextDocument
			Set startdate=doc.getfirstitem("StartDate") 
			If doc.hasitem("StartDate")=False Then Goto NextDocument
			Set starttime=doc.getfirstitem("StartTime") 
			If doc.hasitem("StartTime")=False Then Goto NextDocument
			Set calendardatetime=doc.getfirstitem("CalendarDateTime") 
			If doc.hasitem("CalendarDateTime")=False Then Goto NextDocument
			Set starttimezone=doc.getfirstitem("StartTimeZone")
			If doc.hasitem("StartTimeZone")=False Then Goto NextDocument
			Set Subject=doc.getfirstitem("Subject")
			Set enddatetime=doc.getfirstitem("EndDateTime") 
			If doc.hasitem("EndDateTime")=False Then Goto NextDocument
			Set enddate=doc.getfirstitem("EndDate") 
			If doc.hasitem("EndDate")=False Then Goto NextDocument
			Set endtime=doc.getfirstitem("EndTime") 
			If doc.hasitem("EndTime")=False Then Goto NextDocument
			Set endtimezone=doc.getfirstitem("EndTimeZone")
			If doc.hasitem("EndTimeZone")=False Then Goto NextDocument
			Set Repeats=doc.getfirstitem("Repeats")
			Set AppointmentType=doc.getfirstitem("AppointmentType")
			Set Sadjusted= startdatetime.datetimevalue
			Set Eadjusted=enddatetime.datetimevalue
		End If
	'Prüfen ob der Eintrag kein Jahrestag / AppointmentType=1 oder eine
	'ganztätige Veranstaltung / AppointmentType=2 ist. 		
		If  Form.values(0)="Appointment" Then
			If AppointmentType.values(0)="1"  Or AppointmentType.values(0)="2" Then 
				CalenderEntry=0
			Else
				CalenderEntry=1
			End If	
		Else
		'Prüfen ob der Eintrag eine Aufgabe ist
			If Form.values(0)="Task" Then CalenderEntry=0
		End If
		If CalenderEntry=1 Then
			If startdatetime.text="ERROR:" Then Goto NextDocument
			Print "Dokument "&Subject.values(0)& " am " &startdatetime.values(0)&" wird geprüft.. !"
			Print #FileNbr,"Dokument "&Subject.values(0)& " am " &startdatetime.values(0)&" wird geprüft.. !"
			On Error Goto ErrHandle
	    'Prüfen ob das Kalenderdatum innerhalb der Sommerzeit liegt
			If startdate.values(0) >= startDST And startdate.values(0) <= endDST Then
				If doc.hasitem("Repeats") Then
					If Repeats.values(0)="1" Then
						Print "Dokument "&Subject.values(0)& " am "  &startdatetime.values(0)&" ist ein 
wiederkehrender Eintrag und wird nicht korrigiert. 
Bitte prüfen Sie den Eintrag manuell"
						Print #FileNbr,"Dokument "&Subject.values(0)& " am " &startdatetime.values(0)&" ist ein 
wiederkehrender Eintrag und wird nicht korrigiert. 
Bitte prüfen Sie den Eintrag manuell"
						Call rtbody.AppendText ("Dokument "&Subject.values(0)& " am " &startdatetime.values(0)&" ist ein 
wiederkehrender Eintrag und wird nicht korrigiert. 
Bitte prüfen Sie den Eintrag manuell")
						Call rtbody.AddNewline(1)
						Goto NextDocument
					End If
				End If
				cntInDST=cntINDST+1
				If starttimezone.values(0) <> tzInDST Then 
					Call Sadjusted.adjusthour(-1) 
					Call sadjusted.ConvertToZone(sadjusted.TimeZone, True)
					Call Eadjusted.AdjustHour(-1)
					Call Eadjusted.converttozone(eadjusted.timezone, True) 
					doc.starttimezone = tzINDST
					doc.endtimezone = tzInDST
					cntTZFalse=cntTZFalse+1
					Print "Dokument "&Subject.values(0)& " am " &startdatetime.values(0)&" ->>>> 
fehlerhafte Zeitzone wird korrigiert.. !"
					Print #FileNbr,"Dokument "&Subject.values(0)& " am " &startdatetime.values(0)&" ->>>> 
fehlerhafte Zeitzone korrigiert.. !"	
					Call rtbody.AppendText ("Dokument "&Subject.values(0)& " am " &startdatetime.values(0)&" ->>>> 
fehlerhafte Zeitzone wurde korrigiert.. !")
					Call rtbody.AddNewline(1)
				Else
					Call Sadjusted.adjusthour(0)   
					Call Eadjusted.AdjustHour(0)
					cntTZTrue=cntTZTrue+1
					Print "Dokument "&Subject.values(0)& " am " &startdatetime.values(0)&" ->>> 
Zeitzone ist o.k, keine Korrektur notwendig"
					Print #FileNbr,"Dokument "&Subject.values(0)& " am " &startdatetime.values(0)&"  ->>> 
Zeitzone ist o.k, keine Korrektur notwendig"					
				End If	
				Set startdatetime.datetimevalue=Sadjusted
				Set startdate.datetimevalue=Sadjusted 
				Set starttime.datetimevalue=Sadjusted 
				Set calendardatetime.datetimevalue=Sadjusted
				Set enddatetime.datetimevalue=Eadjusted
				Set enddate.datetimevalue=Eadjusted 
				Set endtime.datetimevalue=eadjusted 
				Call doc.save(True,True)
			End If	
		End If
		Goto NextDocument
ErrHandle:
		On Error Resume Next
		Print  #FileNbr,"Ein Dokument war fehlerhaft und konnte nicht geprüft werden !"
		On Error Goto ErrHandle
		
NextDocument:		
	Next
	Close FileNbr	
	Call s.SetEnvironmentVar("CheckAgentIfRunning2k7","yes")
	Call s.SetEnvironmentVar("DST","1",True)
	Call s.SetEnvironmentVar("Timezone","-1",True)
	Call s.SetEnvironmentVar("DSTLAW","3,-1,1,10,-1,1",True)
	maildoc.Send (False)
	Call DisplayMessages(cntINDST,cntOutDST,cntTZTrue,cntTZFalse)
	
End Sub


Sub DisplayMessages (cntInDST,cntOutDST,cntTZTrue,cntTZFalse)
	If cntInDST<>0 And cntTZFalse<>0 Then
		Messagebox "Es wurde(n) "& cntInDST &" Dokumente in der 
Sommerzeit gefunden, "& cntTZFalse & " Dokument(e) davon wurde(n) auf die 
richtige Zeitzone eingestellt !"
	End If
	If cntOutDST<>0 And CntTZFalse<>0 Then
		Messagebox "es wurden(n) " & cntOutDST &" Dokumente ausserhalb der 
Sommerzeit gefunden, "& cntTZFalse & " Dokument(e) davon wurde(n) auf die 
richtige Zeitzone eingestellt !"
	End If	
End Sub


« Letzte Änderung: 08.02.08 - 11:29:27 von Matthias1974 »
Matthias Schlimm

76829 Landau i.d. Pfalz

Domino-Server V7.0.2 auf iSeries und Windows, Clients V7.0.1,Commontime mNotes/Suite, Windows2k, 2003, WinXP, Citrix PS 4.5, Sametime 7.5

Offline CLP-Alex

  • Junior Mitglied
  • **
  • Beiträge: 55
Re: Sommerzeit per Agent in Kalenderdoks einstellen?
« Antwort #7 am: 11.02.08 - 15:32:50 »
Hy zusammen,

bin jetzt erst wieder online.
Zuerst mal danke an Matthias, werde mir das Script mal anschauen.
Über den Plan werde ich euch dann informieren wenn er in Script steht

Danke und Gruß
Alex

Offline CLP-Alex

  • Junior Mitglied
  • **
  • Beiträge: 55
Re: Sommerzeit per Agent in Kalenderdoks einstellen?
« Antwort #8 am: 04.03.08 - 08:35:22 »
Hallo Leute,

erstmal danke an Matthias1974, habe mich von deinem Script inspirieren lassen, und komplett auf 5er angepasst, auch das mit den Wiederholungen habe ich in den Griff bekommen. 

Auch danke an Bernhard für seine hilfreichen Tipps.

Es wurden Fehlerfrei 250 Mailsfiles mit ca. 1.250.000 Appointment Dokumenten umgestellt. Nach 5 Stunden war der Agent fertig  ;D

Gruß Alex

Ach ja, Notes kann wirklich alles wenn man ihm zeigt wie es geht  ;D ;D ;D

Offline ata

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 5.092
  • Geschlecht: Männlich
  • drenaiondrufflos
    • Anton Tauscher Privat
Re: Sommerzeit per Agent in Kalenderdoks einstellen?
« Antwort #9 am: 04.03.08 - 10:30:29 »
Zitat
Ach ja, Notes kann wirklich alles wenn man ihm zeigt wie es geht  ;D ;D ;D

... na ja - fast alles  ;D

Toni
Grüßle Toni :)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz