Tél : 01 41 19 27 72 | Contact
Nous avons rappelé dans la note Localisation des objets Paradox dans les alias l'importance d'utiliser des alias et précisé quelques règles permettant de répartir les objets Paradox dans ceux-ci. Nous nous préoccupons ici de la gestion proprement dite de ceux-ci.
La première solution est de définir les alias dans le fichier (idapi.cfg) de configuration du BDE (alias public). Nous avons déjà évoqué le rôle de ce fichier dans la note technique relative au paramétrage de l'IDAPI. La solution consiste à utiliser le même fichier de configuration pour l'ensemble des postes devant accéder à l'environnement Paradox et à définir dans le fichier idapi.cfg (ou le nom que vous lui donnerez) les chemins associés aux alias. Un inconvénient, sensible si vous prévoyez de déployer votre application dans un environnement que vous ne connaissez pas, est la nécessité de définir des chemins absolus pour chaque alias.
La solution que nous développons ici repose sur une gestion totalement dynamique des alias par l'application elle-même. Pour cela, nous allons définir une table, que nous appelerons par exemple ALIAS.DB dans laquelle nous allons indiquer nos différents alias et leur localisation. Un script de démarrage de l'application (nous appelerons ce script DEBUT.SSL) aura pour fonction de charger en mémoire les alias. Un des avantages de cette solution est de pouvoir travailler avec des chemins relatifs (par rapport au répertoire où se trouve le script alias par exemple).
Nous évoquerons en fin de cette note quelques autres possibilités offertes par cette solution.
Id_Alias| A10 ;Nom de l'alias |
Chemin_Alias| A64 ;Chemin relatif ou absolu de localisation de l'alias |
Description_Alias| F0 Texte documentaire |
Alias_Local|L Indicateur précisant que l'alias est local au poste de travail |
Dans l'exemple que nous allons prendre, les chemins relatifs seront exprimés par rapport à la localisation du script DEBUT (la table ALIAS est située dans le même répertoire que le script DEBUT). Nous préférons en effet cette solution à l'utilisation de l'alias TRAVAIL en raison du changement de nom de ce dernier selon les versions de Paradox (TRAVAIL ou WORK pour Paradox 10, les paris sont ouverts!). De la même façon, nous allons créer un alias que nous appelerons -MAITRE et correspondant à cette localisation de départ. Nous utiliserons systématiquement l'alias -MAITRE en lieu et place de TRAVAIL ou WORK pour éviter toute mauvaise surprise.
Remarque: Nous aimons bien commencer nos noms d'alias par un "-" car les alias ainsi nommés ne peuvent pas être créés autrement que par programmation; cela garantie des noms d'alias qui ne peuvent entrer en conflit avec un nom d'alias public (défini dans le fichier idapi.cfg de configuration du BDE).
Notre script va tout d'abord créer l'alias -MAITRE.
; récupération du répertoire d'où est lancé le script
splitFullFileName(getFileName(), UniteST, CheminST, FichierST, ExtensionST)
PathMaitreST = UniteST + CheminST
CheminAliasST = getAliasPath(":-MAITRE:")+"\"
if CheminAliasST.isblank() then
IF NOT addProjectAlias(":-MAITRE:", "STANDARD", PathMaitreST) THEN
msgStop("Démarrage - Erreur de répertoire",
"L'alias :-MAITRE: n'a pu être créé sur le répertoire '"
+ PathMaitreST +"'.\nDémarrage impossible.")
Return
ENDIF
else
if not (CheminAliasST = PathMaitreST) then
if not setAliasPath(":-MAITRE:",PathMaitreST) then
msgStop("Démarrage - Erreur de répertoire",
"L'alias :-MAITRE: est déjà affecté et ne peut être modifié '"
+ CheminAliasST +"'.\nDémarrage impossible.")
Return
endif
endif
endif
Le script ouvre ensuite la table ALIAS.DB et parcourt cette table en créant pour chaque enregistrement l'alias correspondant. Vous constaterez qu'il constitue le nom physique complet du répertoire associé à l'alias. Dans le cas d'un alias local, les chemins sont relatifs au répertoire privé. Si le répertoire local n'existe pas le script se chargera de créer le répertoire.
IF NOT aliasTC.open(":-MAITRE:ALIAS.DB") THEN
msgStop("Démarrage - Erreur de répertoire",
"Le répertoire '" + PathMaitreST + "' ne contient pas la table ALIAS.DB"
+"\nDémarrage impossible.")
Return
ENDIF
scan AliasTC:
pathAliasST = aliasTC.Chemin_Alias
Switch
Case pathAliasST.isBlank() :
pathAliasST = PathMaitreST
Case pathAliasST.match("@:..") :; Absolu avec lettre de lecteur
Case pathAliasST.match("\..") :; Absolu UNC
Otherwise :; Relatif
if AliasTC.Alias_Local then; il s'agit d'un alias local
pathAliasST = PrivDir()+"\"+AliasTC.Id_Alias
il n'est pas utile ici d'indiquer un chemin
IF NOT isDir(pathAliasST) then
IF not FS.makedir(pathAliasST) then
msgStop("Démarrageimpossible",ErrorMessage())
return
endif
endif
else pathAliasST = PathMaitreST + pathAliasST
endif
EndSwitch
IF NOT pathAliasST.match("..\") then
pathAliasST = pathAliasST + "\"
ENDIF
--- on vérifie que le répertoire existe
if not isDir(pathAliasST) then
msginfo("Pb alias","L'alias " + aliasTC.Id_Alias + " ne peut pas être créé,"
+ " le chemin " + pathAliasST + " n'existe pas")
return
endif
;--- Retirer l'alias au cas où un alias public de même nom auraitété déclaré ce qui empêche la création de l'alias de projet
OldPathST = upper(getAliasPath(aliasTC.Id_Alias))
If OldPathST.isBlank() Then; Alias n'existe pas
If Not addProjectAlias(aliasTC.ID_ALIAS, "Standard", pathAliasST) Then
ErrorShow()
EndIf
else Alias existe
If OldPathST.subStr(OldPathST.size()) <> "\" Then
OldPathST = OldPathST+ "\"
EndIf
NewPathST = upper(pathAliasST)
If NewPathST.subStr(NewPathST.size()) <> "\" Then
NewPathST = NewPathST + "\"
EndIf
If NewPathST <> OldPathST Then il faut effacer l'ancien
TRY
RemoveAlias(aliasTC.ID_ALIAS)
ONFAIL
ErrorShow()
ENDTRY
TRY
RemoveProjectAlias(aliasTC.ID_ALIAS)
ONFAIL
ErrorShow()
ENDTRY
If Not addProjectAlias(aliasTC.ID_ALIAS, "Standard", pathAliasST) Then
ErrorShow()
EndIf
EndIf
EndIf
endscan
AliasTC.Close()
1) Si vous localisez vous objets distribués dans des répertoires différents de ceux des sources, rien n'empêche de gérer dynamiquement ce paramètre dans le script. Par exemple, si l'extension du script est SSL, vous utilisez le répertoire indiqué dans la table, en revance si l'extension est SDL, vous pouvez utiliser un sous-répertoire fonction par exemple de la version de Paradox que vous utilisez (716 pour Paradox 7 16 bits, 732 pour Paradox 32 bits, 832 pour Paradox 8, 932 pour Paradox 9) ;
2) Si vous utilisez des bases de données autres que Paradox ou Dbase, vous pouvez ajouter une zone Pilote qui précisera le type la base de données, les paramètres de connexion de chaque alias étant précisés dans une seconde table ;
3) Si vous souhaitez diminuer la charge de votre réseau, vous pouvez dupliquer localement les répertoires non modifiables en exploitation (les programmes en particulier). Vous ajouterez dans ce cas un indicateur pour repérer ce type d'alias et un champ DateTime permettant de dater le répertoire du serveur. Au chargement, si le répertoire local n'existe pas où si la date du répertoire local (date qui sera mémorisée dans une table ou un fichier local au poste) est antérieure à la date du serveur, le contenu du répertoire du serveur sera recopié localement ;
4) Si des alias de sont utilisés qu'en développement, vous pouvez éviter de charger ceux-ci en ajoutant un indicateur ;
5) Vous pouvez vérifier que l'alias pointe vers le bon répertoire en contrôlant la présence d'un fichier témoin dans celui-ci ;
6) Vous pouvez gérer les alias de toutes vos applications dans une même table et filtrer selon l'application que vous lancez ;
et bien d'autres possibilités en fonction de votre environnement de travail, de votre application et de votre imagination ...
Si cette solution peut paraître un peu longue la première fois, vous profiterez dès votre seconde application de la souplesse qu'elle procure, alors n'hésitez pas, gérer vos alias en table...