Job-Kalender Termine mit externen Kalendern synchronisieren: Unterschied zwischen den Versionen

Aus GEVITAS
Wechseln zu: Navigation, Suche
(Google-Kalender-Einträge einlesen)
(Ablauf einer Synchronisation)
Zeile 56: Zeile 56:
 
=== Externe Kalender-Einträge einlesen ===
 
=== Externe Kalender-Einträge einlesen ===
  
a. Daten aus dem Google-Kalender, Exchange o.ä im Zeitraum von DatumVon bis DatumBis (DatumVon + Anzahl Tage) in den Speicher einlesen und dort untersuchen:
+
Daten aus dem Google-Kalender, Exchange o.ä im Zeitraum von DatumVon bis DatumBis (DatumVon + Anzahl Tage) in den Speicher einlesen und dort untersuchen:
  
b. Kalender-Einträge durchlaufen:
+
=== Daten verarbeiten ===
 +
 
 +
a. Kalender-Einträge durchlaufen:
 
* Den Key (z.B. "EventID") des Termins in der Tabelle MAufJob.CLOUD_EVENT_ID suchen.
 
* Den Key (z.B. "EventID") des Termins in der Tabelle MAufJob.CLOUD_EVENT_ID suchen.
 
* Wenn der dort nicht (mehr) gespeichert ist: Kalender-Item löschen!
 
* Wenn der dort nicht (mehr) gespeichert ist: Kalender-Item löschen!
  
c. Tabelle MAufJob durchlaufen
+
b. Tabelle MAufJob durchlaufen
 
* Wenn dort kein Eintrag im Feld MAufJob.CLOUD_EVENT_ID steht: Kalender-Item einfügen!
 
* Wenn dort kein Eintrag im Feld MAufJob.CLOUD_EVENT_ID steht: Kalender-Item einfügen!
  
d. Tabelle MAufJob durchlaufen
+
c. Tabelle MAufJob durchlaufen
 
+
* MAufJob.CLOUD_EVENT_ID das Kalender-Item einlesen, die Einträge miteinader vergleichen
// ---------------------------------------------------------------
+
* Wenn es irgendwo einen Unterschied gibt: Kalender-Item updaten!
// 4. MAufJob durchlaufen, (in DM.qryMAufJob)
 
// Anhand MAufJob.CLOUD_EVENT_ID das Google-Kalender-Item einlesen, EInträge vergleichen,
 
// wenn Unterschied (irgendwo): Item updaten!
 
// iErrorCode = -1: Erfolgreich, sErrorMessage
 
// iErrorCode > 0 :  sErrorMessage beinhaltet Fehlertext
 
// ---------------------------------------------------------------
 
DM.FindCalendarItemsToUpdate( chkSyncAdresseFest.Checked,editFesteMailAdresse.Text,iErrorCode , sErrorMessage );
 
if iErrorCode = -1 then
 
FrmMainGooCalTest.memoProt.Lines.Add( FormatDateTime('dd/mm/yyyy', Date) + ' ' + FormatDateTime('hh:mm:ss:zzz', Time) + ': '  + 'Updated items: ' + sErrorMessage );
 
if iErrorCode > 0 then
 
begin
 
FrmMainGooCalTest.memoProt.Lines.Add( FormatDateTime('dd/mm/yyyy', Date) + ' ' + FormatDateTime('hh:mm:ss:zzz', Time) + ': '  + '* Error on Update new items: ' + sErrorMessage );
 
 
 
// Kalender initialisieren:
 
FrmMainGooCalTest.memoProt.Lines.Add( FormatDateTime('dd/mm/yyyy', Date) + ' ' + FormatDateTime('hh:mm:ss:zzz', Time) + ': '  + '* Try to reconnect...' );
 
DM.InitCalendar( strIniFile ); //JC//220901//
 
 
 
FrmMainGooCalTest.memoProt.Lines.Add( FormatDateTime('dd/mm/yyyy', Date) + ' ' + FormatDateTime('hh:mm:ss:zzz', Time) + ': '  + '* 2nc try FindCalendarItemsToUpdate...' );
 
DM.FindCalendarItemsToUpdate( chkSyncAdresseFest.Checked,editFesteMailAdresse.Text,iErrorCode , sErrorMessage );
 
 
 
end;
 
 
 
 
 
// Daten aktualisieren:
 
// --------------------
 
 
 
// Daten Aus MAufJob:
 
DM.MakeSQL_MAufJob_Pers( DM.qryMAufJob, Date {dDatumVon}, speditAnzahlTage.Value {iAnzahlTage},
 
chkNurPersMitSyncStatus.Checked
 
);
 
 
 
// Daten aus dem Google-Kalender:
 
DM.GetCalendarItemsClientDateSet( Date {dDatumVon}, speditAnzahlTage.Value {iAnzahlTage}, iErrorCode, sErrorMessage );
 
  
 
== Links ==
 
== Links ==

Version vom 16. Februar 2026, 11:50 Uhr

1 Allgemeines

Hier wird beschrieben, wie man Termine aus dem JobKalender mit einem externen System synchronisieren kann.

Dabei wird davon ausgegangen, dass der JobKalender das führende System ist. Das bedeutet:

  • Für einen Termin gibt es drei Synchronisations-Momente:
    • Termin wurde angelegt
    • Termin wurde geändert. Das kann der Zeitraum, die Ressource/Person, der Text usw. sein.
    • Termin wurde gelöscht
  • Auftrags-Termine werden ausschließlich im JobKalender angelegt, geändert oder gelöscht.

Basis der Beschreibung ist das Zusatz-Modul GooCal, das Termine aus dem JobKalender mit Google©-Kalendern synchronisiert.


2 Ablauf einer Synchronisation

2.1 Termin-Daten aus dem JobKalender (MAufJob) einlesen

Dazu kann dieser SQL-Script verwendet werden:

select MAufJob.LFDNR, MAufJob.AUFTRNR, MAufJob.DATUM, MAufJob.DATUMBIS, MAufJob.UHRZEITVON, MAufJob.UHRZEITBIS, MAufJob.PERSONEN,
MAufJob.text, MAufJob.ORT, MAufJob.ERFDAT, MAufJob.ERFUSER,
MAufJob.BETREFF,MAufJob.ADRKURZNAME, MAufJob.AENDDAT, MAufJob.AENDUSER,
MAufJob.TERMINART, MAufJob.ID_STRING, MAufJob.TERMSTATUS, MAufJob.TERMIN_GANZTAEGIG, MAufJob.Changed, MAufJob.TerminTyp,
MAufJob.Anzahl, MAufJob.OBERGRUPPE, MAufJob.GRUPPE, MAufJob.UNTGRUPPE, MAufJob.ARTNR, MAufJob.MENGENTERMIN,
MAufJob.ZU_MAUFJOB_LFDNR, MAufJob.BeauftragungsArt, MAufJob.JobCalChanged, MAufJob.BemerkungIntern, MAufJob.BemerkungExtern,
MAufJob.VeranstOrt, MAufJob.VeranstRaum, MAufJob.CLOUD_EVENT_ID,
MAUFKO.VERANSTNAME, MAUFKO.BEARBEITER,
Pers.PERSNR, Pers.KURZZEICHEN, Pers.VORNAME, Pers.NACHNAME, Pers.SPRACHE, Pers.SyncStatus, Pers.SyncAddress
from MAufJob MAufJob
left outer join pers Pers on Pers.KURZZEICHEN=MAufJob.PERSONEN
left outer join maufko MAUFKO on MAUFKO.AUFTRNR=MAufJob.AUFTRNR

-- Nur TerminTyp 3=Arbeitszeit-Termine:
where MAufJob.TerminTyp=3

-- Nur Personen/Ressourcen mit Kennzeichen > 0: 1=Google 2=Outlook/Exchange
-- Das wird in den Personen-Stammdaten in REFLEX so festgelegt.
and ( Pers.SyncStatus = 1 or Pers.KURZZEICHEN is null )

-- Nur wenn in den Personen-Stammdaten eine Synch-Adresse steht:
and Pers.SyncAddress > 
  
-- Auch überlappende Termine (wie in der Dispo):
and ( (MAufJob.DATUM <= 'DatumVon'
       AND
	(MAufJob.DATUMBIS >= 'DatumVon'
    )

-- Nur Termine mit diesem Status:
-- 1=Zugesagt, Bestätigt 4=Angefragt 6=Bestellung (Überhang)
and ( MAufJob.TERMSTATUS=1 or MAufJob.TERMSTATUS=4 or MAufJob.TERMSTATUS=6)
order by MAufJob.DATUM

2.2 Externe Kalender-Einträge einlesen

Daten aus dem Google-Kalender, Exchange o.ä im Zeitraum von DatumVon bis DatumBis (DatumVon + Anzahl Tage) in den Speicher einlesen und dort untersuchen:

2.3 Daten verarbeiten

a. Kalender-Einträge durchlaufen:

  • Den Key (z.B. "EventID") des Termins in der Tabelle MAufJob.CLOUD_EVENT_ID suchen.
  • Wenn der dort nicht (mehr) gespeichert ist: Kalender-Item löschen!

b. Tabelle MAufJob durchlaufen

  • Wenn dort kein Eintrag im Feld MAufJob.CLOUD_EVENT_ID steht: Kalender-Item einfügen!

c. Tabelle MAufJob durchlaufen

  • MAufJob.CLOUD_EVENT_ID das Kalender-Item einlesen, die Einträge miteinader vergleichen
  • Wenn es irgendwo einen Unterschied gibt: Kalender-Item updaten!

3 Links

JobKalender

Datenbank-Beschreibung zum Job-Kalender