Modifié par Julien EYMERY le 2015/08/13 09:19

Afficher les derniers auteurs
1 (((
2 = Introduction =
3 )))
4
5 Le but est de comprendre les différences et particularités des **(% style="color: rgb(255,102,0);" %)procédures de type(%%)(% style="color: rgb(255,102,0);" %)public(%%)** par rapport aux **(% style="color: rgb(255,102,0);" %)procédures de type(%%)(% style="color: rgb(255,102,0);" %)privé(%%)**.
6 (((
7 == Procédures internes, rappel ==
8 )))
9
10 (% style="color: rgb(0,0,0);" %)(% style="color: rgb(0,0,0);" %)(% style="color: rgb(0,0,0);" %)Il est possible de créer des **(% style="color: rgb(255,102,0);" %)procédures internes(%%)** à un programme interactif, batch ou serveur Adélia.(%%)
11 (% style="color: rgb(0,0,0);" %)Pour cela il faut aller dans l’arborescence du programme au moyen du menu contextuel sur la racine « **(% style="color: rgb(255,102,0);" %)PGM(%%)** » et choisir l’**(% style="color: rgb(255,102,0);" %)option Créer(%%)**, puis l’(% style="color: rgb(255,102,0);" %)**option Procédure**(%%).(%%)
12 (% style="color: rgb(0,0,0);" %)Un bloc **(% style="color: rgb(255,102,0);" %)PROC(%%)** est alors créé dans l’arborescence ainsi que dans le source L4G.(%%)
13 (% style="color: rgb(0,0,0);" %)Il convient de renommer ce bloc au moyen du menu contextuel sur le bloc **(% style="color: rgb(255,102,0);" %)PROC(%%)**, par l’option **(% style="color: rgb(255,102,0);" %)Renommer(%%)**, afin de lui donner un nom en adéquation avec sa fonction. Par exemple : CALCUL_TVA, CALCUL_TTC.(%%)
14
15 (% style="color: rgb(0,0,0);" %)Si une procédure contient des paramètres, ceux-ci doivent être déclarés en variables locales dans la procédure.(%%)
16
17 (% style="color: rgb(0,0,0);" %)L'appel de la procédure s'effectue depuis l'un des blocs traitement du programme au moyen de l'instruction **(% style="color: rgb(255,102,0);" %)TRAITER_PROC(%%)** suivie des éventuels paramètres attendus par la procédure(%%).
18 (%%)(%%)
19
20
21 {{code title="Exemple" language="none"}}
22 TRAITER_PROC CALCUL_TVA WMONT_HT WMONT_TTC
23 {{/code}}
24
25
26
27 Une procédure de même nom doit exister dans l'arborescence
28
29
30
31 {{code title="procédure CALCUL_TVA" language="none"}}
32 [DECLARATION]
33 /* déclaration des variables paramètre de la procédure
34 NUM_E(13,2) PMONT_HT
35 NUM_E(13,2) PMONT_TTC
36 /* déclaration des paramètres gérés en entrée/sortie par la procédure
37 PARAM PMONT_HT PMONT_TTC
38
39 [Traitement]
40 /* traitement de calcul du montant TTC à partir du HT et du taux
41 TVA PMONT_TTC = PMONT_HT * 1,186
42 {{/code}}
43
44 (((
45 == Définir le type de la procédure : (% style="color: rgb(255,102,0);" %)Client(%%), (% style="color: rgb(255,102,0);" %)Serveur(%%) ou (% style="color: rgb(255,102,0);" %)Commun(%%) ==
46 )))
47
48 (% style="color: rgb(255,102,0);" %)(% style="color: rgb(0,0,0);" %)Par défaut une procédure est de **(% style="color: rgb(255,102,0);" %)type Client(%%)**. Mais si celle-ci contient des traitements serveur, et si la totalité de ses traitements peut s’exécuter en serveur, il conviendra de modifier le type pour le définir en **(% style="color: rgb(255,102,0);" %)type Serveur(%%)**.
49 Particulièrement lorsque la procédure est appelée dans une boucle de traitements serveurs. Par exemple une boucle de lecture d’un curseur.(%%)
50 (% style="color: rgb(0,0,0);" %)Pour cela, dans l’arborescence choisir l’**(% style="color: rgb(255,102,0);" %)option Définir le type(%%)** du menu contextuel sur la procédure, puis l’**(% style="color: rgb(255,102,0);" %)option Serveur(%%)**, et ensuite sélectionner le serveur logique requis.(%%)
51
52 (% style="color: rgb(0,0,0);" %)Si les traitements de la procédure ne font aucun accès base de données et peuvent s’exécuter soit en client soit en serveur selon les besoins du traitement principal, la procédure peut être définie de (% style="color: rgb(255,102,0);" %)type Commun(%%). Ainsi, le module de traitement de la procédure sera généré en **(% style="color: rgb(255,102,0);" %)client(%%)** dans le répertoire des objets clients, et en **(% style="color: rgb(255,102,0);" %)serveur(%%)** sur le serveur d’application métier. Et elle pourra ainsi être appelée soit dans une partie **(% style="color: rgb(255,102,0);" %)client(%%)** soit dans une partie **(% style="color: rgb(255,102,0);" %)serveur(%%)** du programme principal.(%%)(%%)
53 (((
54 === (% style="color: rgb(255,102,0);" %)(% style="color: rgb(0,0,0);" %)Procédure de type client (% style="color: rgb(255,102,0);" %)Privé(%%)(%%)(%%) ===
55 )))
56
57 (% style="color: rgb(255,102,0);" %)(% style="color: rgb(0,0,0);" %)(% style="color: rgb(0,0,0);" %)Dans un programme Visual Adélia batch ou Serveur Adélia, il est possible de créer des procédures de type client **(% style="color: rgb(255,102,0);" %)Public(%%)** ou **(% style="color: rgb(255,102,0);" %)Privé(%%)**. Une procédure de type **(% style="color: rgb(255,102,0);" %)Privé(%%)** est une procédure interne au programme où elle est créée, et elle ne peut être appelée que par celui-ci par l’instruction **(% style="color: rgb(255,102,0);" %)TRAITER_PROC(%%)**, comme dans l’exemple précédent.(%%)
58 (% style="color: rgb(0,0,0);" %)Une procédure client **(% style="color: rgb(255,102,0);" %)Privé(%%)** peut être appelée par une procédure client (% style="color: rgb(255,102,0);" %)**Public**(%%) dans un programme de service comme nous le verrons ci-dessous.(%%)(%%)(%%)
59 (((
60 === (% style="color: rgb(255,102,0);" %)(% style="color: rgb(0,0,0);" %)Procédure de type client (% style="color: rgb(255,102,0);" %)Public(%%)(%%)(%%) ===
61 )))
62
63 (% style="color: rgb(0,0,0);" %)(% style="color: rgb(0,0,0);" %)Il est possible de créer des procédures de type client **(% style="color: rgb(255,102,0);" %)Public(%%)** dans un programme Visual Adélia batch ou Serveur Adélia. Ceci afin de créer des programmes dits de **(% style="color: rgb(255,102,0);" %)services(%%)** regroupant un ensemble de procédures pouvant être appelées par différents programmes Visual Adelia et, dans le cas d’un programme serveur Adelia de services, par différents programmes Web Adélia.(%%)
64
65 (% style="color: rgb(0,0,0);" %)Pour cela, après avoir créé et renommé la procédure, dans l’arborescence, choisir l’option **(% style="color: rgb(255,102,0);" %)Définir le type(%%)** du menu contextuel sur la procédure, puis l’option **(% style="color: rgb(255,102,0);" %)Client(%%)** et ensuite sélectionner l’option **(% style="color: rgb(255,102,0);" %)Public(%%)**.(%%)
66 (% style="color: rgb(0,0,0);" %)Les paramètres gérés par une procédure **(% style="color: rgb(255,102,0);" %)Public(%%)** doivent bien évidemment être déclarés en variables locales dans la procédure.
67 (%%)(%%)
68 (((
69 ==== (% style="color: rgb(0,0,0);" %)(% style="color: rgb(0,0,0);" %)Exemple : (%%)(%%) ====
70 )))
71
72
73
74 {{code title="Procédure CALC_MENSUEL" language="none"}}
75 [DECLARATION]
76 * Variables paramètre de la procédure CALC_MENSUEL du programme batch VA_PERSO_PROC.
77 NUM_E(13,2) ww_total_mensuel
78 NUM_E(13,2) ww_moy_salaire
79 NUM_E(13,2) ww_max_salaire
80 NUM_E(13,2) ww_min_salaire
81 ALPHA(1) ww_code_sexe
82
83 * déclaration des paramètres gérés en entrée/sortie par la procédure
84 PARAM ww_code_sexe ww_total_mensuel ww_moy_salaire ww_max_salaire ww_min_salaire
85
86 [(Traitement)
87 * Récupération de la masse salariale du personnel, du salaire moyen, du salaire maximum et du
88 * salaire minimum pour tous les employés ou, soit uniquement pour les hommes, soit uniquement
89 * pour les femmes. Le traitement se fait sur le serveur logique CENTRAL.
90 DEBUT_SRV CENTRAL
91 Si ww_code_sexe = 'T'
92 lire_sql personnel *col(somme(PE_MTT_SALAIRE) :ww_total_mensuel, -
93 moyenne(PE_MTT_SALAIRE) :ww_moy_salaire, max(PE_MTT_SALAIRE) :ww_max_salaire, -
94 min(PE_MTT_SALAIRE) :ww_min_salaire)
95 sinon
96 lire_sql personnel *col(somme(PE_MTT_SALAIRE) :ww_total_mensuel, -
97 moyenne(PE_MTT_SALAIRE) :ww_moy_salaire, max(PE_MTT_SALAIRE) :ww_max_salaire, -
98 min(PE_MTT_SALAIRE) :ww_min_salaire) *cond(Pe_COD_SEXE_PER = :ww_code_sexe)
99 Fin
100 FIN_SRV
101 ]
102 {{/code}}
103
104 (((
105 ==== Appel d’une procédure de type client (% style="color: rgb(255,102,0);" %)Public(%%) depuis un programme (% style="color: rgb(0,0,0);" %):(%%) ====
106 )))
107
108 (% style="color: rgb(0,0,0);" %)(% style="color: rgb(0,0,0);" %)L’appel d’une procédure de type client « Public » depuis un programme appelant se fait directement par l’instruction (% style="color: rgb(255,102,0);" %)**APPELER**(%%).
109 Syntaxe type :(%%)(%%)
110
111 (% style="margin-left: 30.0px;" %)
112 (% style="color: rgb(0,0,0);" %)(%%)APPELER NomProgramme.NomProcédure Suite de Paramètres attendus par la procédure.
113
114
115
116 {{code title="Exemple" language="none"}}
117 * Depuis un programme interactif d’affichage de données statistiques sur la table du personnel,
118 * récupération de la masse salariale mensuelle, des salaires moyen, maximum et minimum par appel
119 * de la procédure CALC_MENSUEL du programme Visual Adélia batch VA_PERSO_PROC.
120
121 APPELER VA_PERSO_PROC.CALC_MENSUEL lbr_sexe:valeur cho_masse_salariale_mensuelle:valeur -cho_moy_salariale:valeur
122 cho_max_salaire:valeur cho_min_salaire:valeur
123 {{/code}}
124
125
126 {{hardis-info type="note" icon="true"}}
127 Il est déconseillé de créer des procédures de type client « Public » de service dans un programme batch ou serveur Adélia n’étant pas un programme de services mais un programme de gestion classique. Il est préférable de regrouper toutes les procédures susceptibles d’être exécutées par plusieurs programmes au sein d’un même programme de services.
128 {{/hardis-info}}
129
130
131 {{hardis-info type="note" icon="true"}}
132 Si les traitements d’une procédure de type client « Public » font des accès base de données, et si l’intégralité de ceux-ci peut s’exécuter en serveur, il convient de créer cette procédure dans un programme « Serveur » Adélia. En effet, un programme Visual Adélia Client/Serveur est composé d’une DLL « cliente » et d’un à plusieurs modules serveurs. Son appel se fait donc par l’instruction APPELER sans affectation de serveur logique.
133 {{/hardis-info}}
134
135
136 (((
137 ==== Appel d’une procédure de type client (% style="color: rgb(255,102,0);" %)Privé(%%) (% style="color: rgb(0,0,0);" %)depuis une procédure de type client (% style="color: rgb(255,102,0);" %)Public (%%)(%%) : ====
138 )))
139
140
141 {{code title="Procédure NB_EMPLOYE_SOCIETE" language="none"}}
142 [DECLARATION]
143 * Variables paramètre de la procédure NB_EMPLOYE_SOCIETE de type client « Public »
144 ALPHA(300) wrequete
145 ALPHA (30) wnom_societe
146 NUM_BIN_4 wnb_employe
147 ALPHA(1) ww_code_sexe
148 LISTE lsm_nb_empl_societe wnom_societe wnb_employe
149 CURSEUR cur_nb_emp_societe :wrequete
150
151 * déclaration des paramètres gérés en entrée/sortie par la procédure
152 PARAM ww_code_sexe lsm_nb_empl_societe
153
154 [(Traitement)
155 * appel de la procédure REQUETE de type client « Privé »
156 TRAITER_PROC REQUETE wrequete ww_code_sexe
157
158 DEBUT_SRV CENTRAL
159 ouvrir_sql_c cur_nb_emp_societe
160 lire_av_sql_c cur_nb_emp_societe :wnom_societe, :wnb_employe
161 tant_que *sqlcode = *normal
162 inserer_elt lsm_nb_empl_societe
163 lire_av_sql_c cur_nb_emp_societe :wnom_societe, :wnb_employe
164 refaire
165 fermer_sql_c cur_nb_emp_societe
166 FIN_SRV
167 ]
168 {{/code}}
169
170
171
172 {{code title="Procédure REQUETE" language="none"}}
173 [DECLARATION]
174 * Variables paramètre de la procédure REQUETE de type client « Privé »
175 ALPHA(300) pwrequete
176 ALPHA(1) pww_code_sexe
177
178 * déclaration des paramètres gérés en entrée/sortie par la procédure
179 PARAM pwrequete pww_code_sexe
180
181 [(Traitement)
182 Pwrequete = *blank
183 si pww_code_sexe = 'T'
184 pwrequete = 'select SOLSOC, count(PEPMAT) from exiws.personp, exiws.societe where PECSTE=SOCSTE group by SOLSOC'
185 sinon
186 pwrequete = 'select SOLSOC, count(PEPMAT) from exiws.personp, exiws.societe where PECSTE=SOCSTE and' /// -
187 ' PEPSEX = ''' /// pww_code_sexe /// '''' /// ' group by SOLSOC'
188 fin
189
190 {{/code}}
191
192
193