Wird ein Objekt noch verwendet?

Die Pflege eines UC4 Systemes bewegt sich meist nur "in eine Richtung": es werden UC4 Objekte neu entwickelt oder verändert, dann in eine Test- und Abnahmeumgebung gebracht, und anschließend in die Produktion. Selten nur werden UC4 Objekt in einer dieser Umgebungen auch wieder gelöscht.

SQL Abfragen für die Verwendung von UC4 Objekten

Die Folge ist, daß sich in allen Mandanten immer mehr UC4 Objekte befinden, die gar nicht mehr benötigt werden. Diese Objekte manuell zu löschen ist möglich, wenn man nur einen oder zwei Mandanten einsetzt. Verfügt man aber über ein, zwei Dutzend Mandanten, mit einer Vielzahl von Mandanten, die selber mehrere funktional gleich aufgebaute Umgebungen besitzten, wird die manuelle Pflege schnell aufwendig oder unmöglich. Hilfe bieten hier SQL Abfragen, welche

  • anzeigen, wann ein UC4 Objekt zuletzt verwendet oder geändert wurde
  • anzeigen, ob und wo ein UC4 Objekt noch verwendet wird.

Letzte Verwendung oder Änderung eines Objektes

Für den ersten Fall - die Frage nach der letzten Verwendung oder Änderung - werden die Felder oh_lastdate und oh_moddate in der Tabelle oh angefragt Als Parameter werden das Objekt, dessen letzte Verwendung gesucht wird, sowie der Client, in dem sich das Objekt befindet, angegeben. Als Ergebnis wird das Datum der letzten Verwendung ausgegeben.

Die Abfrage kann mit einer SQL VARA erstellt werden; die Parameter müssen dann in der korrekten Reihenfolge (Client, Objektname) eingetragen werden.Die Abfrage sieht dann wie folgt aus:

parm 1 == client
parm 2 == object

select substr(t1.oh_lastdate, 1, 10), substr(t1.oh_moddate, 1, 10)
from oh t1
where t1.oh_deleteflag = 0
and t1.oh_client = ?
and t1.oh_name = ?

Die Angabe des oh_deleteflag verhindert, daß auch solche Objekt angezeigt werden, welche sich bereits im Papierkorb befinden.

Das Ergebnis dieser Anfrage kann - wie immer mit SQL VARA Ergebnissen - mittels :prep_process_var() verarbeitet werden. Bspw. können beide Felder mit einem Datum verglichen werden; sind die Felder älter oder leer, deutet das darauf hin, daß das fragliche Objekt nicht mehr aktiv verwendet wurde und gelöscht werden kann.

Verwendung eines Objektes

Ein anderes Problem bei Bereinigen nicht mehr benötigter Objekte ist zu prüfen, ob ein Objekt noch irgendwo verwendet wird. Dabei gibt es die beiden Möglichkeiten, daß ein Objekt direkt in einem anderen enthalten sein kann (wie ein JOBS in einem JOBP), oder daß ein Objekt - konkret: ein INCL - in einem der Scripte eines anderen Objektes auftaucht.

Verwendung von INCL

Die Verwendung von INCL läßt sich über das Feld oh_lastcnt in der Tabelle oh bestimmen. Wieder müssen Objektname - in diesem Fall das INCL - und Client angegeben werden.

parm1 == object
parm2 == client

select oh_lastcnt
from oh
where oh_name = ?
and oh_client = ?
and oh_otype = 'JOBI'
and oh_deleteflag = 0

Ist das Ergebnis der Abfrage 0, so wird das fragliche INCL nicht mehr verwendet.

Verwendung in JOBP

Im folgenden Beispiel möchten wir sehen, ob ein Objekt noch in einem JOBP enthalten ist.Dazu verwenden wir eine verschachtelte Abfrage. Das Beispiel läßt sich aber auch mit joins umsetzen.

parm1 == client
parm2 == name

select oh_name
from oh
where oh_client = ?
and oh_deleteflag = 0
and oh_idnr in (
select jpp_oh_idnr
from jpp
where jpp_object = ?
)

Hier werden die JOBP zurückgeliefert, in denen ein gegebenes Objekt enthalten sind.