Code source wiki de Procédures publiques et privées
Modifié par Julien EYMERY le 2015/08/13 09:19
Afficher les derniers auteurs
| author | version | line-number | content |
|---|---|---|---|
| 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 |