/*
* Funktion wf_timer()
* Return: Long
* Arguments: (None)
*/
// Wird folgendermaßen aus dem timer() Event aufgerufen:
// DK: Test ob Cron-Tabelle Einträge enthält
//SELECT FIRST("it_cron"."bez")
//INTO :ls_taskplaner
//FROM "it_cron"
//USING sqlca;
// DK: Wenn nicht wird der neue Taskplaner genutzt
//IF sqlca.sqlcode = 100 THEN
//wf_timer()
//RETURN 0
//END IF
/***
* Prozesse Zeit gesteuert ausführen
*/
i_counter++
st_timer.text = "Timer-Event um: " + String(now()) + " Uhr"
// DK: Falls ein Prozess bereits aktiv ist herausspringen
IF processactive THEN
st_timer.text = "Prozess aktiv um " + String(now()) + " Uhr"
RETURN 0
END IF
DECLARE c_task CURSOR FOR
SELECT
/* Tasks */
COALESCE("it_taskplaner_task"."lfdnr", 0),
COALESCE("it_taskplaner_task"."text", ''),
COALESCE("it_taskplaner_task"."status", 20),
COALESCE("it_taskplaner_task"."kommando_lfdnr", 0),
/* Zeiten */
COALESCE("it_taskplaner_zeit"."lfdnr", 0),
COALESCE("it_taskplaner_zeit"."typ", 10),
COALESCE("it_taskplaner_zeit"."status", 20),
COALESCE("it_taskplaner_zeit"."startdatum", TODAY()),
COALESCE("it_taskplaner_zeit"."startzeit", NOW()),
COALESCE("it_taskplaner_zeit"."stopzeit", NOW()),
COALESCE("it_taskplaner_zeit"."intervall", 0),
COALESCE("it_taskplaner_zeit"."einheit_lfdnr", 0),
COALESCE("it_taskplaner_zeit"."argument", ''),
COALESCE("it_taskplaner_zeit"."sprache", 0)
FROM "it_taskplaner_task",
"it_taskplaner_zeit"
WHERE "it_taskplaner_task"."status" = 10 /* 10 = aktiv, 20 = inaktiv */
AND "it_taskplaner_task"."lfdnr" = "it_taskplaner_zeit"."task_lfdnr"
ORDER BY "it_taskplaner_zeit"."startdatum", "it_taskplaner_zeit"."startzeit"
USING sqlcur;
OPEN c_task ;
IF sqlcur.sqlcode <> 0 then
Error.of_Intern('w_it_batch','Fehler beim Aktualisieren der Tabelle it_taskplaner_task. (Cursor) ' + String(sqlcur.sqlcode))
END IF
mle_status.text = "Prozesscheck " + String( i_counter ) + "~r~n"
/***
* DK: In allen Einträgen in dieser Minute prüfen
* ob für aktuelle Zeit ein Auftrag vorliegt
*/
STRING ls_task_text, ls_zeit_argument
LONG ll_task_lfdnr, ll_task_status, ll_task_kommando_lfdnr, ll_zeit_lfdnr, ll_zeit_typ, ll_zeit_sprache, ll_zeit_status, ll_einheit_lfdnr
DATE ld_zeit_startdatum
TIME lt_zeit_startzeit, lt_zeit_stopzeit
DOUBLE ld_zeit_intervall
LONG weiter
weiter = 1
// DK: Fetch der Ergebnisse
DO WHILE weiter > 0
FETCH NEXT c_task INTO :ll_task_lfdnr, :ls_task_text, :ll_task_status, :ll_task_kommando_lfdnr, :ll_zeit_lfdnr,
:ll_zeit_typ, :ll_zeit_status, :ld_zeit_startdatum, :lt_zeit_startzeit, :lt_zeit_stopzeit,
:ld_zeit_intervall, :ll_einheit_lfdnr, :ls_zeit_argument, :ll_zeit_sprache;
// DK: Fetch in Ordnung
CHOOSE CASE sqlcur.sqlcode
CASE 0
LONG ll_kommando_lfdnr
STRING ls_kommando_text, ls_kommando_kommando
SELECT "it_taskplaner_kommando"."lfdnr",
"it_taskplaner_kommando"."text",
"it_taskplaner_kommando"."kommando"
INTO :ll_kommando_lfdnr,
:ls_kommando_text,
:ls_kommando_kommando
FROM "it_taskplaner_kommando"
WHERE "it_taskplaner_kommando"."lfdnr" = :ll_task_kommando_lfdnr
USING sqlca;
IF sqlca.sqlcode < 0 THEN
msg.MsgBox("Fehler", "Keine gültige Verknüpfung mit der Tabelle it_taskplaner_kommando vorhanden!")
HALT
END IF
STRING ls_task_einheit_text
LONG ll_task_einheit_lfdnr, ll_task_einheit_faktor
SELECT "it_taskplaner_zeit_einheit"."lfdnr",
"it_taskplaner_zeit_einheit"."text",
"it_taskplaner_zeit_einheit"."faktor"
INTO :ll_task_einheit_lfdnr,
:ls_task_einheit_text,
:ll_task_einheit_faktor
FROM "it_taskplaner_zeit_einheit"
WHERE "it_taskplaner_zeit_einheit"."lfdnr" = :ll_einheit_lfdnr
USING sqlca;
IF sqlca.sqlcode < 0 THEN
msg.MsgBox("Fehler", "Keine gültige Verknüpfung mit der Tabelle it_taskplaner_zeit_einheit vorhanden!")
HALT
END IF
// DK: Startdatum erreicht / überschritten
IF ld_zeit_startdatum >= TODAY() THEN
CHOOSE CASE ll_zeit_typ
// DK: Intervall
CASE 10
TIME lt_cur_time
STRING ls_cur_time, ls_zeit_startzeit, ls_zeit_stopzeit, ls_kalk_zeit
LONG ll_multiplikant
BOOLEAN lb_intervall, lb_fertig
// DK: Aktuelle Zeit
lt_cur_time = TIME(STRING(NOW(), "hh:mm"))
// DK: Zeiten aus der Tabelle als String
ls_cur_time = STRING(NOW(), "hh:mm")
ls_zeit_startzeit = STRING(lt_zeit_startzeit, "hh:mm")
ls_zeit_stopzeit = STRING(lt_zeit_stopzeit, "hh:mm")
// DK: Weitere Hilfsvariablen initialisieren
ll_multiplikant = 1
lb_intervall = FALSE
lb_fertig = FALSE
// DK: Kalkulierte Zeit auf Startzeit setzen
ls_kalk_zeit = STRING(lt_zeit_startzeit, "hh:mm")
// DK: Momentane Zeit kleiner / gleich Stopzeit
IF lt_cur_time <= lt_zeit_stopzeit THEN
// DK: Solange die kalkulierte Zeit kleiner / gleich der Stoppzeit ist und die Bedingung noch nicht durchlaufen wurde
DO WHILE ls_kalk_zeit <= ls_zeit_stopzeit AND lb_fertig = FALSE
// DK: Prüfe ob die aktuelle Zeit der kalkulierten Zeit entspricht
IF ls_cur_time = ls_kalk_zeit THEN
lb_intervall = TRUE
//-----------------------------------------------------------------------------
// Transfer
IF POS(ls_kommando_kommando,"transfer") > 0 THEN cbx_transfer.checked = TRUE
//-----------------------------------------------------------------------------
// Sprache
IF ll_zeit_sprache = 0 THEN rb_sprache1.checked = TRUE
IF ll_zeit_sprache = 1 THEN rb_sprache2.checked = TRUE
IF ll_zeit_sprache = 2 THEN rb_sprache3.checked = TRUE
IF ll_zeit_sprache = 3 THEN rb_sprache4.checked = TRUE
IF ll_zeit_sprache = 4 THEN rb_sprache5.checked = TRUE
IF ll_zeit_sprache = 5 THEN rb_sprache6.checked = TRUE
//-----------------------------------------------------------------------------
// Export
IF POS(ls_kommando_kommando,"exArtikelstamm") > 0 THEN cbx_artikelstamm_ex.checked = TRUE
IF POS(ls_kommando_kommando,"exGrundlagen") > 0 THEN cbx_grundlagen_ex.checked = TRUE
IF POS(ls_kommando_kommando,"exKundenstamm") > 0 THEN cbx_kundenstamm_ex.checked = TRUE
IF POS(ls_kommando_kommando,"exKonditionen") > 0 THEN cbx_konditionen_ex.checked = TRUE
IF POS(ls_kommando_kommando,"exOffenePosten") > 0 THEN cbx_op_ex.checked = TRUE
IF POS(ls_kommando_kommando,"exDispo") > 0 THEN cbx_dispo_ex.checked = TRUE
IF POS(ls_kommando_kommando,"exAdressen") > 0 THEN cbx_adressen_ex.checked = TRUE
IF POS(ls_kommando_kommando,"exBestand") > 0 THEN cbx_bestand_ex.checked = TRUE
//-----------------------------------------------------------------------------
// Upload
IF POS(ls_kommando_kommando,"ulArtikelstamm") > 0 THEN cbx_artikelstamm_ex.checked = TRUE AND cbx_transfer.checked = TRUE
IF POS(ls_kommando_kommando,"ulBestand") > 0 THEN cbx_bestand_ex.checked = TRUE AND cbx_transfer.checked = TRUE
IF POS(ls_kommando_kommando,"ulGrundlagen") > 0 THEN cbx_konditionen_ex.checked = TRUE AND cbx_transfer.checked = TRUE
IF POS(ls_kommando_kommando,"ulKundenstamm") > 0 THEN cbx_kundenstamm_ex.checked = TRUE AND cbx_transfer.checked = TRUE
IF POS(ls_kommando_kommando,"ulKonditionen") > 0 THEN cbx_konditionen_ex.checked = TRUE AND cbx_transfer.checked = TRUE
IF POS(ls_kommando_kommando,"ulOffenePosten") > 0 THEN cbx_op_ex.checked = TRUE AND cbx_transfer.checked = TRUE
IF POS(ls_kommando_kommando,"ulDispo") > 0 THEN cbx_dispo_ex.checked = TRUE AND cbx_transfer.checked = TRUE
IF POS(ls_kommando_kommando,"ulAdressen") > 0 THEN cbx_adressen_ex.checked = TRUE AND cbx_transfer.checked = TRUE
//-----------------------------------------------------------------------------
// Download
IF POS(ls_kommando_kommando,"dlKundenstamm") > 0 THEN cbx_kundenstamm_im.checked = TRUE AND cbx_transfer.checked = TRUE
IF POS(ls_kommando_kommando,"dlAuftraege") > 0 THEN cbx_auftraege_im.checked = TRUE AND cbx_transfer.checked = TRUE
IF POS(ls_kommando_kommando,"dlStatistik") > 0 THEN cbx_statistik_im.checked = TRUE AND cbx_transfer.checked = TRUE
IF POS(ls_kommando_kommando,"dlNewsletter") > 0 THEN cbx_newsletter_dl.checked = TRUE AND cbx_transfer.checked = TRUE
//-----------------------------------------------------------------------------
// Import
IF POS(ls_kommando_kommando,"imAuftraege") > 0 THEN cbx_auftraege_im.checked = TRUE
IF POS(ls_kommando_kommando,"imStatistik") > 0 THEN cbx_statistik_im.checked = TRUE
IF POS(ls_kommando_kommando,"imKundenstamm") > 0 THEN
cbx_kundenstamm_im.checked = TRUE
//msg.MsgBox("Info", "Kundenstamm markiert bei Intervall " + STRING(ld_zeit_intervall))
END IF
IF POS(ls_kommando_kommando,"executesql") > 0 THEN cbx_sql.checked = TRUE
IF POS(ls_kommando_kommando,"imNewsletter") > 0 THEN cbx_newsletter_dl.checked = TRUE
//-----------------------------------------------------------------------------
// Export Kundenindividuelle Daten
IF POS(ls_kommando_kommando,"exIndArtikelstamm") > 0 THEN ddlb_genartikel_pers.text = ls_zeit_argument
IF POS(ls_kommando_kommando,"exIndBestand") > 0 THEN ddlb_syncbestand_pers.text = ls_zeit_argument
//-----------------------------------------------------------------------------
// Media
IF POS(ls_kommando_kommando,"syncmedia") > 0 THEN cbx_media.checked = TRUE
//-----------------------------------------------------------------------------
// System
IF POS(ls_kommando_kommando,"shutdown") > 0 THEN
POST close(this)
POST close(w_haupt)
END IF
lb_fertig = TRUE
END IF
IF NOT lb_intervall THEN ll_multiplikant++
ls_kalk_zeit = STRING(RelativeTime(lt_zeit_startzeit, ll_multiplikant * ld_zeit_intervall * ll_task_einheit_faktor * 60))
ls_kalk_zeit = STRING(TIME(ls_kalk_zeit), "hh:mm")
LOOP
END IF
// DK: Fixzeit
CASE 20
// DK: Prüfen ob Startzeit der aktuellen Zeit entspricht
IF STRING(lt_zeit_startzeit, "hh:mm") = STRING(NOW(), "hh:mm") THEN
//-----------------------------------------------------------------------------
// Transfer
IF POS(ls_kommando_kommando,"transfer") > 0 THEN cbx_transfer.checked = TRUE
//-----------------------------------------------------------------------------
// Sprache
IF ll_zeit_sprache = 0 THEN rb_sprache1.checked = TRUE
IF ll_zeit_sprache = 1 THEN rb_sprache2.checked = TRUE
IF ll_zeit_sprache = 2 THEN rb_sprache3.checked = TRUE
IF ll_zeit_sprache = 3 THEN rb_sprache4.checked = TRUE
IF ll_zeit_sprache = 4 THEN rb_sprache5.checked = TRUE
IF ll_zeit_sprache = 5 THEN rb_sprache6.checked = TRUE
//-----------------------------------------------------------------------------
// Export
IF POS(ls_kommando_kommando,"exArtikelstamm") > 0 THEN cbx_artikelstamm_ex.checked = TRUE
IF POS(ls_kommando_kommando,"exGrundlagen") > 0 THEN cbx_grundlagen_ex.checked = TRUE
IF POS(ls_kommando_kommando,"exKundenstamm") > 0 THEN cbx_kundenstamm_ex.checked = TRUE
IF POS(ls_kommando_kommando,"exKonditionen") > 0 THEN cbx_konditionen_ex.checked = TRUE
IF POS(ls_kommando_kommando,"exOffenePosten") > 0 THEN cbx_op_ex.checked = TRUE
IF POS(ls_kommando_kommando,"exDispo") > 0 THEN cbx_dispo_ex.checked = TRUE
IF POS(ls_kommando_kommando,"exAdressen") > 0 THEN cbx_adressen_ex.checked = TRUE
IF POS(ls_kommando_kommando,"exBestand") > 0 THEN cbx_bestand_ex.checked = TRUE
//-----------------------------------------------------------------------------
// Upload
IF POS(ls_kommando_kommando,"ulArtikelstamm") > 0 THEN cbx_artikelstamm_ex.checked = TRUE AND cbx_transfer.checked = TRUE
IF POS(ls_kommando_kommando,"ulBestand") > 0 THEN cbx_bestand_ex.checked = TRUE AND cbx_transfer.checked = TRUE
IF POS(ls_kommando_kommando,"ulGrundlagen") > 0 THEN cbx_konditionen_ex.checked = TRUE AND cbx_transfer.checked = TRUE
IF POS(ls_kommando_kommando,"ulKundenstamm") > 0 THEN cbx_kundenstamm_ex.checked = TRUE AND cbx_transfer.checked = TRUE
IF POS(ls_kommando_kommando,"ulKonditionen") > 0 THEN cbx_konditionen_ex.checked = TRUE AND cbx_transfer.checked = TRUE
IF POS(ls_kommando_kommando,"ulOffenePosten") > 0 THEN cbx_op_ex.checked = TRUE AND cbx_transfer.checked = TRUE
IF POS(ls_kommando_kommando,"ulDispo") > 0 THEN cbx_dispo_ex.checked = TRUE AND cbx_transfer.checked = TRUE
IF POS(ls_kommando_kommando,"ulAdressen") > 0 THEN cbx_adressen_ex.checked = TRUE AND cbx_transfer.checked = TRUE
//-----------------------------------------------------------------------------
// Download
IF POS(ls_kommando_kommando,"dlKundenstamm") > 0 THEN cbx_kundenstamm_im.checked = TRUE AND cbx_transfer.checked = TRUE
IF POS(ls_kommando_kommando,"dlAuftraege") > 0 THEN cbx_auftraege_im.checked = TRUE AND cbx_transfer.checked = TRUE
IF POS(ls_kommando_kommando,"dlStatistik") > 0 THEN cbx_statistik_im.checked = TRUE AND cbx_transfer.checked = TRUE
IF POS(ls_kommando_kommando,"dlNewsletter") > 0 THEN cbx_newsletter_dl.checked = TRUE AND cbx_transfer.checked = TRUE
//-----------------------------------------------------------------------------
// Import
IF POS(ls_kommando_kommando,"imAuftraege") > 0 THEN cbx_auftraege_im.checked = TRUE
IF POS(ls_kommando_kommando,"imStatistik") > 0 THEN cbx_statistik_im.checked = TRUE
IF POS(ls_kommando_kommando,"imKundenstamm") > 0 THEN cbx_kundenstamm_im.checked = TRUE
IF POS(ls_kommando_kommando,"executesql") > 0 THEN cbx_sql.checked = TRUE
IF POS(ls_kommando_kommando,"imNewsletter") > 0 THEN cbx_newsletter_dl.checked = TRUE
//-----------------------------------------------------------------------------
// Export Kundenindividuelle Daten
IF POS(ls_kommando_kommando,"exIndArtikelstamm") > 0 THEN ddlb_genartikel_pers.text = ls_zeit_argument
IF POS(ls_kommando_kommando,"exIndBestand") > 0 THEN ddlb_syncbestand_pers.text = ls_zeit_argument
//-----------------------------------------------------------------------------
// Media
IF POS(ls_kommando_kommando,"syncmedia") > 0 THEN cbx_media.checked = TRUE
//-----------------------------------------------------------------------------
// System
IF POS(ls_kommando_kommando,"shutdown") > 0 THEN
POST close(this)
POST close(w_haupt)
END IF
END IF
END CHOOSE
END IF
// DK: Keinen weiteren Datensatz gefunden
CASE 100
weiter = 0
// DK: Es ist ein Fehler im Cursor aufgetreten
CASE ELSE
msg.MsgBox("Fehler", "Es ist ein Fehler im Cursor c_task aufgetreten!")
RETURN 0
END CHOOSE
LOOP
CLOSE c_task;
//-----------------------------------------------------------------------------
// Nun Prozesse ausführen
this.PostEvent ( "ue_startbat" )
RETURN 1