Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Johnson am 15.11.05 - 14:46:54

Titel: %Include
Beitrag von: Johnson am 15.11.05 - 14:46:54
Hallöchen,

unter http://atnotes.de/index.php?topic=16387.0 wird ja schon einiges über dieses Thema gesagt.

Ich stehe jetzt vor folgendem Problem:
Können LS-Libraries auf diese Weise plattformabhängig eingebunden werden?
Ich denke da an %If WIN32 ...

Hintergrund:
Einige Prozeduren einer Library verwenden die ODBC-Klassen von LS.
Diese LS-Library sollte auch in einem Agenten eingebunden werden, verwendet allerdings die ODBC-Prozeduren nicht. Die Zeile Uselsx "*LSXODBC" wirft wärend der Laufzeit auf dem Server einen Fehler.
Jetzt dachte ich mir, erstelle einfach eine LSS-Datei, binde die "nlsxodbc.dll" je nach Plattform ein (mit %If WIN32 soll das ja möglich sein) und binde dann die LSS-Datei mit %INCLUDE ein.
=> "Error loading USE or USELSX module: *LSXODBC"
Titel: Re: %Include
Beitrag von: mrtachles am 15.11.05 - 15:18:57
Hi,

ich habe für solche Zwecke ein Lib, die eine Funktion zum dynamischen Einbinden von anderen Libs bietet. Brauche ich nun die entspr. Funktionen, die in einer Lib drin sind, nur unter Windows, rufe ich die Funktion ggf. auf und binde die Win-Spezifische Lib ein.

Function UseLib ( Byval argClassName As String ) As Variant
        If Not Iselement ( factories ( argClassName ) ) Then
                Dim script As String
                script = | Use "| & argClassName & |"
          Sub Initialize
               Set newObj_Factory = New | & argClassName & |Factory
          End Sub
          |
                Execute ( script )
                Set factories ( argClassName ) = newObj_Factory
        End If
        Set newObj = factories ( argClassName ).produce
End Function
Titel: Re: %Include
Beitrag von: Johnson am 15.11.05 - 15:33:46
Super!! Danke!! Es funkt.

Mein Fehler bei dieser Methode war immer, daß ich die Variablen nicht global Deklariert habe.
Somit wurden Objekte nach dem Execute terminiert.

Es tut, es tut, es tut, es tut  ;D
Titel: Re: %Include
Beitrag von: Johnson am 15.11.05 - 15:41:17
Allerdings tut´s ohne Syntaxüberprüfung beim Compilieren, da die Objekte in einem Variant zurückgegeben werden.  :-\
Das kann u.U. zu Fehlerquellen führen.

Aber den Tod sterbe ich gern.
Titel: Re: %Include
Beitrag von: mrtachles am 15.11.05 - 16:10:27
prima.
Aber wer arbeitet schon mit Syntaxprüfung  ;D.
Dann macht das Testen ja nur halb so viel Spaß

Gruss
Thomas
Titel: Re: %Include
Beitrag von: Johnson am 16.11.05 - 10:17:03
Es geht auch einfacher.

Das Uselsx Statement kann mit dem optionalen Prefix "?" eine DLL zu dem Zeitpunkt laden, an dem sie benötigt wird. z.B. Uselsx "?*LSXODBC".
Sofern man keine Funktionen aufruft, die die ODBCConnection & Consorten verwenden, kann ein Agent auf dem Server laufen.

s. Notes Designer Help zu Uselsx.


Zurück zum Thema: Welchen Zweck hat %Include eigentlich. Worin bestehen hier nun die Vor- und Nachteile?
Schließlich muss man in einem Entwicklerteam dafür sorgen, daß jeder der den Code compiliert die entsprechenden LSS-Dateien auf dem Filesystem hat. Die Designelemente, in denen eine LSS-Datei mittels %Include eingebunden wird, vergrößern sich ebenfalls, da der Code an dieser Stelle eingefügt wird. Folglich vergrößert sich das Design der ganzen DB, wenn man diese Technik exzessiv nutzt.

Was ist eure Meinung bzw. was sind eure Erfahrungen?