dimanche 11 mars 2007

Eradiquer l'infâmant « Public symbol is declared in another module: V_EMPTY »


Inclure les fichiers *.lss demeure le cauchemar des programmeurs Notes. En effet, de nombreux développeurs ont abandonné la pratique de %INCLUDE "LsConst.lss" ou d'autres bibliothèques dans leur code. Nombreux son ceux qui redéfinissent des constantes privées dans leurs bibliothèques, masques ou vues, ce qui n'est pas recommandable.

Une solution aurait été de définir les constantes globales du LotusScript et de Notes au sein d'un fichier .lsx connu de "Domino Designer". Mais IBM/Lotus n'a apparemment pas envisagé celà.

Jusqu'à maintenant, ma solution consiste à créer une bibliothèque "LsConst" référençable au sein des éléments de conception. Les constantes ne doivent être déclarées ni publiques ni privées et la bibliothèque débute par Option Public. Les bibliothèques, les masques ou les vues la référencent par Use "LsConst" et incluent indifféremment Option Private | Public et/ou Option Explicit | Declare; notez cependant que Option Declare est vivement recommandé !

Les avantages sont multiples :
  • "LsConst" est référençable SIMULTANEMENT dans les bibliothèques, les masques, les vues etc.. elle est INTEGRALEMENT réutilisée.
  • Les constantes présentes au sein des bibliothèques liées SONT accessibles e.g. je peux référencer la constante LSI_THREAD_CALLPROC dans mon code avec USE "LsConst" puisque la bibliothèque "LsPrcVal" est enchâssée dans "LsConst".
  • La taille des bibliothèques de script est réduite, (code source et code objet) en référençant "LsConst" comme décrit précédemment.
  • Aucune Option de compilation n'est imposée au développeur.
  • La bibliothèque "LsConst" n'est pas nécessaire en production (sauf dans les rares cas où les bibliothèques de script sont dynamiquement chargées à l'exécution...)
Quelques inconvénients demeurent:
  • L'installation d'une nouvelle version de Notes ou Domino nécessite une relecture attentive des librairies Lsconst.lss, Lserr.lss, Lsxbeerr.lss et lsxuierr.lss.
Les bibliothèques "LotusScript.exceptions" et "LotusScript.lang.Lsconst", du project public OpenDOM, exploitent ce mécanisme et sont consultables sur www.openntf.org.

Aucun commentaire:

Locations of visitors to this page