| Modules / Editique | |
|
|
Attention Pour les accès/màj dans la base de données de l’ERP, utiliser maintenant ISQL (voir Maquettage_Editions). Idem pour lancer une procédure SQL (PL-SQL). Les instructions maquettes PROC1 et PROC2 peuvent cependant servir pour accéder à une autre base de données, ou lancer une procédure Shell ou Dos. |
Dans le paramétrage des maquettes, il existe une solution pour récupérer des informations d'une ou plusieurs tables à partir d'une requête SQL : PROC2.
Il est également possible de modifier des données dans une ou plusieurs tables via une autre procédure SQL : PROC1.
Le but de la première procédure se justifie dans le cas où les blocs ne contiennent pas l'information souhaitée. Au lieu de passer par une redéfinition totale de la vue via le moteur d’édition, il suffit de créer une procédure SQL qui rapatrie la ou les données à insérer dans la maquette.
Le but de la deuxième est de mettre à jour une ou plusieurs tables à partir d'informations contenues dans la maquette.
Une instruction maquette ISQL vous permet de mettre à jour des données ( requête SQL de type « update ») depuis une maquette d’édition.
|
|
Trucs et astuces Pour garantir de bons temps de réponse, nous vous préconisons fortement de lancer les ordres select par ISQL plutôt que par la solution PROC2. |
|
|
Attention Selon les capacités de votre système informatique, l'utilisation de PROC1 et PROC2 peut occuper un temps machine non négligeable. |
La procédure PROC1 sert uniquement pour la mise à jour de tables.
La procédure PROC2 sert uniquement pour la consultation de tables.
Elles peuvent être utilisées dans toutes les fonctions et maquettes d'ACE.
Les paramètres passés dans les PROC1 et PROC2 doivent être des variables fictives, déclarées et initialisées avant l'appel de la procédure. Le fichier appelé dans les procédures doit être un fichier exécutable de type « .bat » (chmod 777 nom_fichier pour le rendre exécutable sous UNIX, l’extension « .bat » suffit sous NT).
La procédure retourne un code retour qui doit être affecté à une variable fictive (de type numérique) dans le bloc où l'on veut lancer les procédures.
Le nombre des variables qu'il est possible de passer en paramètre est limité à 9.
Attention sous NT, les variables récupérées dans le fichier exécutable doivent être préfixées par un « & » et non un « $ ».
Pour utiliser les requêtes SQL « PROC1 » et « PROC2 » sous WINDOWS, le nom de fichier est soumis avec les paramètres alpha-numériques non entourés des guillemets (caractère "), hormis pour les paramètres alpha-numériques vides.
Il est possible de récupérer en DOS un paramètre entouré de guillemets sans vouloir récupérer les deux caractères ".
Il suffit d’utiliser la syntaxe suivante dans le fichier BAT lancé : %~1 à %~nn
Le paramètre maquette P SEPARATEUR_PARAM_PROC permet d’entourer chaque paramètre alpha-numérique d’un " (aussi sous WINDOWS).
PROC1
Vbb ~nnn=PROC1("nom du programme exécutable",~nnx,~nny,~nnz).
La maquette lance le programme exécutable et passe en paramètre les variables fictives
~nnx, ~nny, ~nnz.
Le programme exécutable ; nom_fichier.bat contient obligatoirement :
echo set heading off > proc.sql
echo set feedback off >> proc.sql
echo set pagesize 0 >> proc.sql
echo set verify of" >> proc.sql
echo set wrap off >> proc.sql
echo set tab off >> proc.sql
echo set line 120 >> proc.sql
Ensuite il suffit de coller la requête SQL de mise à jour uniquement :
echo update evp set qteperdu = $3 >> proc.sql
echo where codsoc=62 and typeve = '$1' and achvte = 'V' >> proc.sql
echo and numeve = $2; >> proc.sql
echo exit >> proc.sql
sqlplus -s soc1/infor1 @proc.sql > fichier.res
Les zones $1,$2,$3 correspondent aux variables déclarées dans la maquette ~nnx,~nny,~nnz.
Les fichiers proc.sql et fichier.res servent uniquement de fichiers tampon pour l'exécution de la procédure.
PROC2 :
Vbb ~nnn=PROC2("nom du programme exécutable",nom du fichier résultat,~nnx,~nny,~nnz).
La maquette lance le programme exécutable et passe en paramètre les variables fictives
~nnx, ~nny, ~nnz.
Le programme exécutable ; nom_fichier.bat contient obligatoirement :
echo set heading off > proc.sql
echo set feedback off >> proc.sql
echo set pagesize 0 >> proc.sql
echo set verify off >> proc.sql
echo set wrap off >> proc.sql
echo set tab off >> proc.sql
echo set line 120 >> proc.sql
echo select '~101=' || qtecde , '~102=\" ' || codva1 || '\" ' from evp >> proc.sql
echo where codsoc=62 and typeve = 'CDE' and achvte = '$1' >> proc.sql
echo and numeve = $2; >> proc.sql
echo exit >> proc.sql
sqlplus -s soc1/infor1 @proc.sql > fichier.res
Les zones $1,$2,$3 correspondent aux variables déclarées dans la maquette ~nnx,~nny,~nnz.
Attention sous NT la fonction de concaténation || ne fonctionne pas. Il suffit de la remplacer par CONCACT('~101=',qtecde) par exemple.
Les fichiers proc.sql et fichier.res servent uniquement de fichiers tampon pour l'exécution de la procédure.
Les variables fictives ~101 et ~102 doivent être déclarées dans la maquette et seront alimentées à chaque appel de la procédure
En commençant chaque procédure ( PROCx) par la ligne « @echo off », il vous est possible de ne plus diriger les commandes du fichier « .bat » dans le fichier « . log ».
Exemple dun « .bat »
@echo off
echo Test RPH > test-rph.lis
On obtient dans le log (extrait) :
Sans la ligne @echo off
08062005 17:48:20 ***** Produit traité : BR101
E:\ACE>echo Test RPH 1>test-rph.lis
08/06/2005 17:48:20 Fin du traitement de l'édition...
Avec la ligne @echo off
08062005 17:50:30 ***** Produit traité : BR101
08/06/2005 17:50:30 Fin du traitement de l'édition...
Exemple de PROC2 :
longueur 60
largeur 132
%CR
V ~001="zzzz.zz"
V ~002=C(16)
V ~003=C(30)
V ~004=C(3)
V ~005="999999999999"
V ~101="zzzzzzzzzz.zz"
V ~102="zzzzzzzzzz.zz"
V10 ~003="fichier.res"
V10 ~004=@002
V10 ~005=@003
V10 ~001=PROC2("ap$maq/testproc2.bat",~003,~004,~005)
%10 evt @003 ~101
%21 @134
V23 ~101=0
%42 Total client : @34 @130 @132 ~101
%41 Total devise : @134 @130 @132 ~101
Exemple de PROC1 :
longueur 60
largeur 132
%CR
V ~001="zzzz.zz"
V ~002=C(16)
V ~003=C(30)
V ~004=C(3)
V ~005="999999999999"
V ~006="9999999999.99"
V ~101="zzzzzzzzzz.zz"
V ~102="zzzzzzzzzz.zz"
V10 ~003="fichier.res"
%CR type d'evenement
V10 ~004=@002
%CR numero d'evenement
V10 ~005=@003
V10 ~005=98
%CR quantite commandee
V10 ~006=10
V10 ~001=PROC1("ap$maq/testproc.bat",~004,~005,~006)
%10 evt @003 ~101
%21 @134
V23 ~101=0
%42 Total client : @34 @130 @132 ~101
%41 Total devise : @134 @130 @132 ~101
On peut également définir un fichier <proc>.bat qui appelle un fichier SQL <proc>.sql.
Exemple :
V10 ~001=PROC2("ap$proc/proc2.bat","fichier.resultat",~002,~003)
Le fichier ap$proc/proc2.bat contient les informations suivantes :
Sqlplus soc1/infor1 @proc2.sql $1 $2
Exit
Le fichier proc2.sql (situé à la racine dans ce cas présent) contient :
set heading off
set feedback off
set pagesize 0
set verify off
set wrap off
set tab off
set line 120
spool fichier.res
select '~150=' || '"' || codemp || '"' from lsk
where codsoc=1 and sigdep='96' and codpro='&1' and numlot='&2';
spool off
exit
Cette fois-ci, on met les paramètres avec des « côtes » et des « & » : '&1', '&2' …
Attention : si on envoi des paramètres de type "char" au proc2.bat, il est obligatoire de les entourer de côte au sein de fichier proc2.bat :
Le même fichier édité précédemment donnera :
Sqlplus soc1/infor1 @proc2.sql '$1' '$2' Exit
|
|
Trucs et astuces Si la redirection du résultat du SQL par la commande shell > pose problème, penser à la solution « spool fichier.res » et « spool off ». La procédure PROC1 est à utiliser lorsqu’on lance une procédure sans récupérer d’information : généralement des requête de mise à jour, mais on peut aussi alimenter un fichier de travai La procédure PROC2 est à utiliser lorsqu’on lance une procédure à des fins de récupérer de l’information. La procédure peut cependant contenir des mises à jours. Utiliser l’instruction oracle « spool fichier.res » et « spool off » lorsque vous combinez plusieurs ordres sql : mise à jour, requête intermédiaire et select destiné au fichier résultat. |