Seite 1 von 1

SetupModul Implements ISetup

BeitragVerfasst: Fr 22. Jun 2012, 09:43
von Sten Schmidt
Hallo Zusammen,

es geht um den Feature Request #29, d.h. Erforderliche Tabellen bereits während des Imports mit dem ImportWizard zu erstellen.

Ich würde die Problemstellung an dieser Stelle gerne noch etwas mehr verallgemeinern und das Thema "Setup-Module" oder "Setup-Routinen" nennen.

Mir gefällt dass Josef's erster Ansatz eigentlich am besten:

Josef hat geschrieben:Lösungsansätze:
1.) wie bei den erforderlichen Verweisen in Codelib-Block ein Tag unterbringen, das auf ein Code-Modul (z. B. Klasse mit definierter Schnittstelle) verweist, über welches die Tabelle erzeugt wird. Dafür müsste das Code-Modul in die Anwendung kopiert und ausgeführt werden.


Was ich mir übergelgt habe ist die Setup-Routine am Ende des Imports mittels des <execute>-Tags auszuführen, Beispiel:

Code: Alles auswählen

'<codelib>
'  ...
'  <execute>SetupUSysRegInfo()</execute>
'  <execute>SetupProjectProperties()</execute>
'  ...
'</codelib>


<execute> wird einfach nur an Eval() weitergereicht, es müsste also auch möglich sein Methoden aufzurufen die (entweder Boolean oder Int/Long als Return-Value haben und) in einer "Statischen" Klasse (mit Attribute VB_PredeclaredId = True) definiert sind.

Prinzipiell könnte man die Setup-Routinen auch als Modul ausführen, wenn dann im <execute>-Tag der vollqualifizierte Name verwendet wird (da sonst Compiler-Fehler auftreten wenn man mehrere SetupModule gleichzeitig importieren will).


Fragen:

  • Klasse / statische Klasse / Modul ... was wollen wir nehmen?
  • Kann in VBA ein Modul auch eine Schnittstelle implementieren?
  • Wie sollte eine solche Schnittstelle eurer Meinung nach aussehen? (do's and don'ts)
  • Sollte es lieber eine allgemeine Schnittstelle "ISetup" geben oder lieber mehrere spezielle wie z.B. "ISetupTable", "ISetupProperties", ...?
  • Es wäre denkbar, das SetupModul nach dem Import wieder automatisch zu entfernen, was haltet Ihr davon?


Gruß Sten

Update

Das geht wohl doch nicht so einfach... der einzige Fall der im Test bereits funktioniert ist:

Code: Alles auswählen

Public Function SubTest()

    MsgBox "It Works"

End Function
 


und dann

Code: Alles auswählen

?eval("SubTest()")
 


Selbst der Aufruf ?eval("Modulname.SubTest()") funktioniert schon nicht mehr.
Ebenso wenn es eine Public Sub anstatt Public Function sein soll.

Kennt jemand noch einen anderen Weg?

/Update

Re: SetupModul Implements ISetup

BeitragVerfasst: Fr 22. Jun 2012, 11:53
von Josef Pötzl
Hallo!

Eine public Prozedur in einem Standardmodul lässt sich am einfachsten aufrufen.
Eine Schnittstelle ist meiner Ansicht nach nicht erforderlich, da man die Prozedur im codelib-Block angeben kann.

Es wäre denkbar, das SetupModul nach dem Import wieder automatisch zu entfernen, was haltet Ihr davon?

Das ist meiner Meinung nach sinnvoll, da dieser Code-Aufruf nur einmal benötigt wird.

mfg
Josef