Früheste Startzeit ändern

Ändern der frühesten Startzeit

Bei zeitgesteuerten Teilen eines Batches ist es bisweilen erforderlich, die üblicherweise fest eingetragenen Startzeiten zu verändern.Hier wird eine einfach Lösung, wie dies dynamisch erfolgen kann, vorgestellt.

Ausgangssituation

Eine alltägliche Situation: üblicherweise werden Dateien zu einer bestimmten Uhrzeit bereitgestellt, und nach einer Wartezeit zu einer festen Uhrzeit abgeholt. Nun hat sich die Bereitstellung am Vortag verzögert, und die verpätet bereitgestellten Dateien sollen nun im Batch des Folgetages so früh wie möglich eingelesen und verarbeitet werden. Eine Wartezeit ist nicht erforderlich. Allerdings soll nun nicht der Ablauf selber geändert werden, vielmehr soll diese Situation über eine Konfiguration ermöglicht werden.

Idealerweise soll die Lösung von allen Abläufen, die mit ähnlichen Konstrukten arbeiten, verwendet werden können.

Lösung

Im folgenden Fall werde ichaus Gründen der Übersichtlichkeit nur die früheste Startzeit von UC4 Tasks überspringen. Es versteht sich aber von selber, daß mit diesem Ansatz auch geänderte Startzeiten eingetragen werden können. Allerdings ist hierbei die Programmierung ein wenig aufwendiger, da zusätzlich Prüfungen sonnvoll sein können.

Eine Lösung könnte wie folgt ausschauen:

  • es gibt eine UC4 VARA, in der alle Objekte eingetragen werden, deren Startzeit verändert werden soll können. Die VARA enthält einen Eintrag für die Task, deren Startzeit geändert werden soll, sowie einen Eintrag "Y" oder "J", wenn die Startzeit geänerrt werden soll.
  • es gibt ein INCL, welches in die UC4 Objekte eingehängt wird, bei denen die Startzeit verändert werden soll können.
  • alle Objekte, welche obiges INCL enthalten, dürfen "Generieren zur Laufzeit" nicht aktiviert haben!
  • sinnvollerweise sollte die Veränderung der Laufzeit nur dann stattfinden, wenn die entsprechende Task in einem Jobplan aufgerufen wird - nicht aber, wenn sie von einem Benutzer direkt gestartet wird.

Das hiermit zu erstellende INCL könnte dann wie das folgende ausschauen. Es setzt die Startzeit auf die Uhrzeit 00:00 des aktuellen Tages - einen Zeitpunkt, der praktisch immer schon verstrichen ist. Damit läuft die entsprechende Tasks sofort los.

:set &SKIP_EARLIEST_VARA# = "VARA für Konfiguration SKIP_EARLIEST_STARTIME"
:set &my_name# = sys_act_me_name()
:set &par_type# = sys_act_parent_type(ACT)
:p "parent type = &par_type#"
! nur wenn wir nicht von einem Benutzer gestartet wurden!
:if &par_type# <> "USER"
:  set &skip_earliest_startime# = get_var(&SKIP_EARLIEST_VARA#, "&my_name#")
:  if &skip_earliest_startime# = "Y" or "J"
:    set &dt# = sys_date("YYYY-MM-DD")
:    set &tm# = sys_time_physical("HH:MM:SS", "TZ.CET")
:    p "starting: &dt# &tm#"
! alten Wert auslesen
:    set &earliest_old# = get_condition("EARLIEST_START_TIME")
:    p "curr. earliest startime is &earliest_old#"
! Wert auf 00/00:00 setzen
:    set &earliest_new# = "00/00:00"
:    p "setting earliest startime to &earliest_new#"
:    set_condition "EARLIEST_START_TIME" = "&earliest_new#"
! neuen Wert anzeigen
:    set &earliest_new2# = get_condition("EARLIEST_START_TIME")
:    p "new earliest startime is &earliest_new2#"
:  else
:    p "no entry &my_name# in &SKIP_EARLIEST_VARA#: letting EARLIEST_STARTTIME 'as is"'
:  endif
:else
:  p "&my_name# is activated by &par_type#: no EARLIEST_STARTTIME available"
:endif

Eine mögliche Erweiterung ist es, nach einer Änderung der Startzeit den Eintrag in der Konfigurations-VARA wieder zu entfernen oder auf "N" zu setzen. Man erspart sich damit die manuelle Pflege eines eigentlich als einmalige oder seltene Aktion vorgesehenen Eingriffes.