Autor Thema: Sommerzeit per Agent in Kalenderdoks einstellen?  (Gelesen 4663 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