Das Public Domain-Projekt ProjectHookX

Mathias Gronau

Mit der Einführung von Visual FoxPros Project Hooks im Jahre 1998 entstand der Wunsch, über eine Art Masterhook zu verfügen, der in der Lage ist, Aufgaben an mehr als eine Klasse zu delegieren. Durch das Public Domain-Projekt ProjectHookX sind Entwickler in der Lage, Project Hooks aus unterschiedlichen Quellen gleichzeitig zu nutzen. Das Konzept dieser Klasse ist sehr einfach, aber für alle Entwickler sehr sinnvoll. Die
Idee ist...

Die übergeordnete Hook-Klasse

    Klasse: cPJXHookX
    Klassenbibliothek: PJXHookX.VCX
    Basisklasse: ProjectHook

Eigenschaften:

Ahooks[1] Eine Eigenschaft vom Typ Array, das eine Objektreferenz auf jeden Hook enthält.
cSelectForm Der Name des Formulars, das von der Methode SelectHooks benutzt wird. Vorgabewert ist frmSelectHooks.
lAlwaysProceed Eine Eigenschaft vom Typ logisch, die entscheidet, ob das Fehlschlagen eines Hooks das Fehlschlagen aller Hooks bewirkt. Ein Beispiel: Der Master Project Hook wurde instanziiert, ein gehookter Hook kann nicht instanziiert werden und lAlwaysProceed steht auf .F.. In diesem Fall stoppt der Prozess der Instanziierung, und auch der Master Hook wird nicht instanziiert. Wenn lAlwaysProceed auf .T. steht, werden die anderen Hooks wie auch der Master Hook instanziiert.

NHookCount

Die Anzahl der Hooks in der Eigenschaft aHooks.

Methoden:

A)           Init

Die Methode Init des Master Hook-Objekts sucht nach der Tabelle PHXHooks im Verzeichnis des Projekts. Wird diese Tabelle nicht gefunden, wird die Methode CreateHookTable aufgerufen, von der die Tabelle erstellt wird. Nachdem die Tabelle gefunden oder erstellt wurde, prüft der Master Hook, ob dem Projekt Hooks zugeordnet sind. Ist dies nicht der Fall, wird die Methode SelectHooks aufgerufen, die es dem Anwender ermöglicht, Hooks für das Projekt auszuwählen. Diesen Hooks kann der Anwender durch Verschieben in der Liste Prioritäten zuordnen. Die Project Hook-Information wird in der Tabelle gespeichert.

Zum Schluss werden alle in der Tabelle referenzierten Hooks eingerichtet und es wird im Array aHooks eine Objektreferenz gespeichert.

B)         CreateHookTable

Diese Methode erstellt die Project Hooks-Tabelle (PJXHooks) im Verzeichnis des Projekts. Die Tabelle hat die folgende Struktur:
cPjxName

M

256
mHookName M

mHookLibrary M

Der Projektname wird gespeichert, um mehrere Projekte im gleichen Verzeichnis halten zu können.

C)         SelectHooks

Die Methode SelectHooks zeigt ein Formular an, in dem der Anwender die zum aktuellen Projekt gehörenden Hooks auswählen kann. Das angezeigte Formular wird in der Eigenschaft cSelectForm angegeben.

D)        Andere Methoden

Alle Methoden, die von den Project Hooks kontrolliert werden, beinhalten einen Code wie den folgenden:

LOCAL ;
       loHook, ;
       llReturn
 
llReturn = .T.
 
FOR EACH loHook IN This.aHooks
       IF NOT loHook.<Method>() AND NOT This.lAlwaysProceed
       llReturn = .F.
       EXIT
ENDIF
ENDFOR
IF NOT llReturn
       NODEFAULT
ENDIF
RETURN

Anwendungs-Project Hook

Es gibt nur zwei Einschränkungen für jeden einzelnen Project Hook:

1.       Die Methode Init muss ein Parameter mit dem Typen des Objekts akzeptieren. Dieser Parameter ist die Objektreferenz auf das Projekt. Wir empfehlen, dass die Objektreferenz in einer Eigenschaft der Project Hook-Klasse gespeichert wird.

Jede Methode, die für eine Interaktion mit dem Projekt aufgerufen wird, z. B. QueryAddFile, QueryRemoveFile, QureyRunFile, muss einen logischen Wert zurückgeben. Damit wird entschieden, ob durch den Master Project Hook ein NODEFAULT für diese Methode ausgeführt wird.