Académique Documents
Professionnel Documents
Culture Documents
T24
LORIEUX Vianney
AVANT PROPOS
Dans le livret 1, nous avons étudié le système jBASE et sa programmation en jBC, nous
étudierons la partie GLOBUS avec ce livret 2, en utilisant le plan :
Chaque fois qu’un consultant à besoin d’extraire des données de la base T24, il doit
passer par une ‘Enquiry’ s’il veut pouvoir reprendre et mémorisé son extraction.
Il peut également le faire à travers le langage jQL de jBASE, mais ici la présentation est
standard, tout est une question de présentation et surtout de véracité de l’information.
Pour pouvoir faire une saisie de donnée, il faut impérativement passer par une ‘version’, ce
qui correspond à un écran de saisie. Le noyau central du système contrôle la cohérence de la
saisie et assure une synchronisation avec la base en mettant à jour un ou plusieurs fichiers
directs ou indirects.
On ne peut en aucun cas se substituer au système, car il faudrait agir sur trop de paramètres et
cela imposerait une connaissance de jBASE et de T24, très pointu.
Il arrive parfois qu’un client désir réaliser une consultation, une saisie d’un nouveau
fichier, dans ce cadre, celui-ci doit faire des contrôles spécifiques pour des données locales, il
va donc y avoir des extensions par l’intermédiaires de routines en Basic (la tendance actuelle
de langage est le Java)
Temenos a normalisé l’écriture des routines en imposant une logique de mise en forme des
routines par des APIs Basic, par des Inclusions.
Ces consignes sont bien suivies au niveau des routines du noyau système. Le développeur du
Client devra se plier à cette logique qui n’a rien de bien astreignante.
1.1 LA CONNEXION
Quelle que soit sa connexion, l’utilisateur doit choisir son mode de connexion. Il y a 3 modes
en vigueur :
- Le mode Classique utilisé surtout par l’équipe d’exploitation et l’administration.
Il peut y avoir saisie dans certains cas comme la création de fichier par exemple.
- Le mode Desktop si l’utilisateur utilise le produit sur son PC, ce mode est souvent
utilisé par les développeurs.
- Le mode Browser, qui est le mode de l’utilisateur standard. La connexion se fait
via une adresse Url assurant la liaison avec le serveur intranet.
http://127.0.0.1:8080/BrowserWeb/servlet/BrowserServlet
127.0.0.1 correspond à l’adresse IP du serveur, ici le Laptop des consultants
Temenos. La tendance actuelle est la connexion en mode Browser.
Quand on lance la connexion, deux saisies sont demandées, et l’utilisateur donne son
SIGN.ON.NAME et son mot de passe. S’il y a une erreur, un message système indique une
violation de la sécurité.
Dans le cas du Desktop, il faut donner les informations pour initier une connexion Telnet. Il
faut soit donner le nom de la base, le mot de passe et le nom du serveur ou son adresse IP.
Il est important que le script ‘.profile’ sous Unix ou ‘jGlobus.bat’ (voir REMOTE.CMD
sous NT) soient correctement configurés. Ces fichiers initialisent les variables pour jBASE et
lance le processus jBASE jsh.
La commande TCL LISTU ou WHERE permet de voir les utilisateurs connectés jBASE. Si
la commande courante est EX, on sait que l’utilisateur est sous T24.
Depuis la version G14, il n’y a plus de problèmes de connexion, car on peut avoir pour le
même utilisateur les 3 modes de connexion.
Sur cette commande WHERE figure sous ntcon la connexion à T24 fait par Desktop avec
EX. La ligne jspprint indique l’initialisation d’une imprimante.
La ligne sous xterm faisant appel a OFS.CONNEXION.MANAGER correspond à un
utilisateur sous Browser.
Dans la définition de l’utilisateur, si vous voulez avoir des menus en français, il faut que votre
code langage soit 2. Le menu dans INITAPPLICATION doit être le numéro du menu traduit
ou le menu numéro 1.
Le browser est mis en œuvre par une connexion a l’url correspondante. L’utilisateur doit
introduire son SIGN.ON et son mot de passe.
Le bouton ‘pince’ indique des outils pour le choix dans le profile ou pour les compagnies.
Cet écran correspond à l’outil préférences. On définit le menu principal pour l’écran
composite utilisé. Les choix correspondent à la saisie du fichier
F.BROWSER.PREFERENCES.
Le bouton ‘x’ correspond à la fin de session, n’oublier pas de l’utiliser pour mettre à
jour les TOKEN.
Le bouton ‘rectangle’ permet d’ouvrir une nouvelle session
- Une partie ‘Etat’ qui donne la date système, la date de la banque, le profile en
cours, le numéro de port, ainsi que la version du Globus.
Dans beaucoup de cas, on retrouve les mêmes manipulations sur Desktop ou sur Browser.
Attention : La validation dans un champ utilise la touche ‘Enter’. Par contre, sous Browser il
faut utiliser la tabulation, car ‘Enter’ valide la transaction dans son état.
Le Desktop et le Browser suivent le même automate des fonctions. Celles-ci permettent une
évolution entre un état saisie INAU, l’information est dans un fichier Nom$NAU
Il existe une logique d’utilisation des fonctions sous T24. Après une saisie l’information se
trouve dans le fichier $NAU et il faut que le responsable autorise l’enregistrement.
La commande APPLICATION E permet d’avoir la liste des états de chaque enregistrement
du fichier.
Un état IHLD impose un passage en mode I de la saisie pour passer en INAU, puis une
manipulation d’autorisation permet de passer de l’état INAU à l’état live.
L’effacement ne peut se faire que sur un état INAU.
La visualisation, la copie ne se fait qu’à partir du fichier Live..
F.USER Ce fichier contient la définition des utilisateurs du site jBASE. Un utilisateur peut être
attaché à plusieurs compagnies. Un utilisateur peut avoir un menu principal pour ses manipulations. Il
peut avoir des restrictions sur l’utilisation des applications, de l’application ACCOUNT et de
l’application CUSTOMER.
Un utilisateur appartient à un groupe, on peut donner des possibilités aux utilisateurs du groupe.
Dans la restriction de compagnie, ALL indique le multi compagnies. Dans la partie application
ALL.PG indique l’utilisation de tous les programmes. Si on mentionne une application, les fonctions
s’appliquent à cette restriction. Field No, Data comparaison, Data from et Data to expriment un
domaine s’ils sont renseignés.
La clé doit être séquentielle, un M en option du nom oblige la saisie par un I F3. Pour d’autres
applications, le fichier F.AUTO.ID.START permet de définir la partie fixe de la clé.
La référence est reprise dans le fichier des utilisateurs. Les produits utilisés pour une compagnie doivent
être référencés dans son enregistrement.
ABBREVIATION Est plus général, les abréviations sont utilisées par tous les
utilisateurs alors que le fichier précédant ne concerne qu’un utilisateur particulier.
4 – LES ENQUIRIES
Le propre d’une base de données, est de pouvoir extraire et utiliser les données. La puissance
intrinsèque de T24 est la présentation des données à l’utilisateur. Une ‘ENQUIRY’ est une
interrogation que vous faites sur la base de données T24. Le processus est identique pour sélectionner
un enregistrement et extraire des données simples ou multiples.
L’Enquiry est le moyen consultatif le plus standard de Temenos, bien qu’il utilise des fonctionnalités
du langage jQL, il apporte quelques améliorations, au niveau des en-têtes, par exemple. Le principe
fonctionnel est simple :
Un fichier de paramètres F.ENQUIRY est pris en compte par l’application ENQ[UIRY] ou
QUERY en mode Browser. Cette application s’appuie sur une scrutation du fichier lu dans laquelle
chaque attribut, pour un enregistrement donné, est mis dans la variable T24 O.DATA. Si une
transformation a été programmée, celle-ci met le résultat dans O.DATA et c’est la valeur résultante
qui est visualisée.
Au niveau de la programmation, le développeur utilisera O.DATA ou R.RECORD pour avoir
l’enregistrement complet (enregistrement courant)
Cette logique s’applique au corps de la consultation. Si on veut préciser des valeurs constantes, il faut
les définir en début de définition avec en type de visualisation ONCE (DISPLAY.TYPE)
Si maintenant, on veut sortir des informations après le traitement du corps de la consultation, il faut
utiliser le type END.
L’Enquiry est appliqué à un fichier que l’on peut qualifié de fichier maître dans le sens
Backmann du terme. Ce fichier peut être trier en ordre croissant ou décroissant (utilisation du mot clé
DSND) On peut aussi demander d’appliquer des critères sur les champs. Ces critères sont statiques, si
on fige ceux-ci dans les paramètres de l’enquiry. Les critères dynamiques apparaissent après le
lancement de la consultation sous la forme d’une fenêtre de sélection. On peut être amené à fixer le
nombre de champs soumis à une sélection de même que l’on peut fixer l’opérateur relationnel et le fait
que ce choix soit obligatoire.
Ceci correspond à la partie principale de la saisie des paramètres de l’enquiry.
La version ENQUIRY,DESIGNER permet la saisie des enquiries. Sous Desktop, le choix dans Tools
de Enquiry Designer permet de réaliser la saisie des paramètres de la consultation.
♦ Le Enquiry Wizard (On va dans le menu Tools) pour vous aider à créer une liste simple.
Ici on fait que définir les champs en leur donnant une priorité dans l’apparition. Au niveau
Browser, le ‘Tools’ donne ces mêmes possibilités.
(on illustre ici les outils du Browser, mais le Wizzard est identique sous Desktop)
L’Enquiry Designer :
L’Enquiry Designer permet la création des Enquiries dans GLOBUS, en utilisant le système
des onglets du Desktop pour définir une nouvelle consultation ou la modifier.
Enquiry Designer
Toutes les saisies sont visibles avec l’onglet FULL VIEW. Chaque onglet est spécifique. Il
reprend les différentes sections y compris la partie Audit.
Ci-dessous, nous trouvons les éléments du FULL VIEW cette présentation est la seule façon de voir
les messages d’erreur au moment de la validation. Chaque champ de saisie a son importance dans la
consultation. Nous les analyserons ci-après.
1 PAGE.SIZE ........
2 FILE.NAME.........
3.1 FIXED.SELECTION
4.1 FIXED.SORT.....
5.1 SELECTION.FLDS.
6.1 SEL.FLD.OPER...
7.1 REQUIRED.SEL...
8.1 BUILD.ROUTINE..
9.1.1 HEADER......
10.1 FIELD.NAME.....
11.1.1 OPERATION...
12.1 COLUMN.........
13.1 LENGTH.MASK....
14.1.1 CONVERSION..
15.1.1 COMMENTS....
16.1 TYPE...........
17.1 DISPLAY.BREAK..
18.1 SINGLE.MULTI...
18.2 ……
D’une version à l’autre de T24, il y a des arguments supplémentaires surtout avec l’arrivée du
Browser, dans la mesure ou on peut intégrer des couleurs, des icônes des graphiques simples
(histogramme, camembert)
Dans le cas du Browser, pour avoir un FULL VIEW, il faut lancer la commande ENQUIRY,
Puis à la demande de la clé, on doit introduire le nom de l’enquiry.
Le choix entre Desktop et Browser, n’est souvent qu’une question d’habitude car les deux moyens
possèdent les mêmes possibilités.
L’information ici permet de définir une page écran qui sera utilisée pour la consultation. Cette
information n’est pas reprise automatiquement.
(1) XX,YY ou XX défini la première ligne de la page et YY la dernière. La valeur doit être
numérique et comprise entre 0 - 24, les deux informations sont séparées par une virgule.
(2) La valeur par défaut est 4,19
Ce fichier est le fichier consulté par T24. Il doit avoir une entrée dans le fichier F.FILE.CONTROL ou
avoir un nom commençant par ‘NOFILE.’ On demande ici le nom GLOBUS, c’est à dire sans ‘F.’ ou
‘FXXX.’ en préfixe.
FIXED.SELECTION
On implante ici les critères de sélection statiques. L’enquiry exécutera toujours cette
sélection. Son fonctionnement est comparable à la clause « WHERE » du SELECT SQL.
Exemple: APPLICATION.ID EQ LD
Si on à besoin de plusieurs critères, on utilise une sous valeur.
FIXED.SORT
On donne, ici, les critères de tri. On donnant le nom du descripteur. Le fonctionnement est
identique à ORDER BY de SQL ou le BY de jQL . Le tri se fait en ordre croissant ou
décroissant.
Exemples: CUSTOMER - tri par CUSTOMER.
ACCOUNT DSND - tri par ordre décroissant de compte
SELECTION.FLDS
SEL.FLD.OPER
Les opérateurs valides sont : NULL, EQ, RG, UL, LK, NR, GE, LE ou LT ou une combinaison
séparée par un espace.
REQUIRED.SEL
Cette information précise si la sélection dynamique est obligatoire ou non. Certaines enquiries
peuvent faire appel à des sélections spécifiques, C’est le cas lorsque le champ lance une
routine où utilise un concat file. La réponse est Y ou vide.
BUILD.ROUTINE
Le nom de la routine présente ici, permet une définition programmée des critères de sélection. Cette
routine passe un tableau dynamique en argument. Cet argument agit comme une liste de critères de
sélection. La routine prend en compte ces critères dynamiques.
FIELD.NAME
On définit, ici, un nom symbolique de colonne. Ce nom n’est pas forcement pris dans le
STANDARD.SELECTION. Si le champ est celui du STANDARD.SELECTION les
composants du champ sont pris par défaut.
Instruction Action
COLUMN
On exprime ici la position de la donnée à sortir. Une valeur indique un numéro de colonne exprimé par
rapport à la marge gauche. Si les numéros de colonnes sont séquentiels, il y a une sortie en mode grille
avec un calcul automatique de la largeur de colonnes. En mode Page, on est obliger de définir la bonne
position de sortie.
L’absence de valeur indique que la valeur n’est qu’une donnée de manœuvre.
Si la valeur s’exprime ‘col,ligne’ l’information sortira dans les 4 lignes d’en-tête.
‘Col,+n’ permet d’indiquer la ligne courante plus n, en générale ce type de sortie se fait avec le
BREAK DISPLAY ‘END’
Le code P indique un saut de page au moment de la rupture. Cette option est conforme à l’option P du
BREAK.SUP du langage jQL.
CONVERSION
Conversion Action
TYPE
DISPLAY.BREAK
Défini une précision sur le mode de sortie en indiquant si le traitement se fait en début ou en
fin d’Enquiry.
Défini le champ à manipuler quand une condition de rupture arrive. Dans le cas d’un champ
TOTAL, le total général sera visualise et le total courant efface.
Le nom des champs de rupture peut exprimer certaines conditions :
SINGLE.MULTI
On précise ici, que le processus demandé se fera pour des valeurs ou sous-valeurs multiples.
Le code ‘M’ indique la multi-valeur ou la sous-valeur. Toutes les valeurs/sous-valeurs sont
associées et alignées sur l’écran (le code S est pris par défaut)
ENQUIRY.NAME
SEL.CRITERIA
Critère de sélection pour le niveau Drill Down. Cette saisie ne concerne que les enquiries (on
ne l’utilise pas pour une application)
Les opérateurs corrects sont : EQ, NE, GT, LT, GE, LE, RG, NR, LK, et UL.
Exemple : CUSTOMER EQ CUST.ID
LABEL.FIELD
On précise ici, le nom du champ sur lequel un click droit fait apparaître l’enquiry,
l’application ou la version. C’est normalement la clé étrangère.
SMS.APPLICATION
SMS.ID
SMS.ABORT
USE.FIELD.NUMBERS
Spécifie si le numéro de champ entré dans la zone OPERATION est converti en nom de
champ du STANDARD.SELECTION. Peut être Y or NO.
CUSTOMER.NO.FLD
Indique le champ à sortir qui contient le numéro de CUSTOMER. Ceci est utilise en sortie
spool avec l’application ENQUIRY.REPORT, mais nous étudierons cet aspect plus tard dans
la suite du cours.
ACCOUNT.NO.FLD
Indique le champ qui contient le numéro d’ACCOUNT. On utilise cette information en sortie avec
l’application ENQUIRY.REPORT.
SPOOL.BRK.FLD
Spécifie le champ de rupture entre deux pages, certains rapports peuvent demander une sortie
particulière pour un CUSTOMER ou un ACCOUNT. Ou bien quand on veut un rapport pour
chaque CUSTOMER ou ACCOUNT. En indiquant le champ de rupture ici, un état spoolé est
généré à chaque rupture. Ce champ doit être défini dans l’enquiry dans la colonne FIELD NAME.
Passons aux exemples pour bien comprendre l’enquiry.
Noter que vous devez donner une position colonne pour que la donnée apparaisse. La taille de page
par défaut est positionnée à 4,19
Si vous voulez travailler à la colonne prés, il faut déclarer un attribut PAGE et définir la
véritable position de la colonne par rapport à la sortie.
Exemple 3
Donner un en-tête à chaque colonne. Noter que le champ HEADER est sous valué et que pour cela,
vous devez vous mettre en FULL VIEW.
Solution 3
Structure en mode FULL VIEW. Il faut utiliser ici l’insertion de la sous valeur. Dans le cas de
traduction il faut générer une autre valeur correspondant au code langage.
Exemple 4
Ajouter un lien au mnémonique du CUSTOMER et faites un tri par CUSTOMER. Assurez-
vous qu’aucune balance concernée sera négative ou nulle.
- C’est dans la conversion que se fait le lien.
- C’est dans la sélection statique que l’on précise la WORKING.BALANCE
On visualise les ACCOUNT d’un CUSTOMER avec un CUSTOMER par page. Pour faire cela, il faut
créer un champ pour la rupture qui spécifiera le changement de page au moment du changement de
numéro de CUSTOMER. On utilise le BREAK. CHANGE avec le positionnement P en colonne
indiquant une rupture par page. On doit visualiser le numéro et le nom du CUSTOMER dans l’en-tête.
Faites de ce rapport, un rapport de mode PAGE plutôt que de mode grille (voir ATTRIBUTES)
Opération (OPERATION)
Colonne (COLUMN)
Display Break (DISPLAY.BREAK)
ATTRIBUTES
Note: Votre enquiry doit apparaître en mode page.
Exemple 6
Restreindre les critères de votre consultation pour les descripteurs : ACCOUNT.NUMBER,
CUSTOMER et CURRENCY.
Solution 6
5. 1 SELECTION.FLDS. ACCOUNT.NUMBER
5. 2 SELECTION.FLDS. CUSTOMER
5. 3 SELECTION.FLDS. CURRENCY
Exemple 7
Ajouter un total pour la WORKING.BALANCE pour chaque CUSTOMER. Le total
apparaîtra à la rupture.
Exemple 8 : Faites une rupture sur la devise pour donner un sens au total. pour faire cela, le
total doit se faire sur une rupture de deux éléments, la devise et le Customer. Pour ce faire, un
champ réalisera la concaténation de CUSTOMER et de CURRENCY, puis la rupture portera
sur ce champ. Chaque fois que la valeur changera, il y aura un sous total. Vous pouvez
choisir si vous voulez un saut de page. Dans le cas du saut de page la CURRENCY doit
apparaître dans l’en-tête.
Quand vous ouvrez l’application CUSTOMER et que vous choisissez sur la barre de tâches, l’option
Enquiry, vous voyez une liste d’enquiries liées à l’application CUSTOMER
Si vous utilisez l’application ACCOUNT, vous aurez d’autres enquiries. Cette possibilité se
programme grâce à la technique des « CONTEXT.ENQUIRIES ».
Prenons un exemple :
ACCOUNT
Etape 1 : Créer une enquiry qui listera le nom du CUSTOMER et son adresse.
Le fichier utilisé : CUSTOMER
Maintenant que vous êtes familiarisé avec ‘CONTEXT ENQUERY’, étudions un autre point . Une
possibilité importante de l’enquiry est de pouvoir relancer d’autres enquiries ou des commandes de
saisie en sélectionnant une donnée. C’est ce que propose la technique du ‘Drill Down’. Prenons un
exemple :
Créer une enquiry qui listera les numéros de ACCOUNT et leur MNEMONIC. Faites le lien avec
l’enquiry ACCT.BAL.TODAY qui visualise les données des comptes spécifiés. Faire un Drill Down
sur le numéro de compte.
Enquiry (ENQUIRY.NAME), Sélection (SEL.CRIT), Champ en sur brillance (LABEL.FIELD),
Description (NXT.LVL.DESC)
Notez que le nom des champs doit être différents dans les deux enquiries pour que le lien soit possible.
Solution 13
32.1 ENQUIRY.NAME ACCT.BAL.TODAY
33.1.1 SEL.CRIT ACCOUNT.NUMBER EQ ACCT
34.1 LABEL.FIELD ACCT 1
35.1 NXT.LVL.DESC Acct Bal Today enquiry
Il faut changer le champ 10 ACCOUNT.NUMBER en ACCT, car on ne peut faire une jonction avec
des noms identiques de champ, même si en valeur les deux champs doivent être identiques.
Ici dans l’enquiry le numéro de compte sera défini comme ACCT puisque dans l’enquiry
ACCT.BAL.TODAY la zone correspond à ACCOUNT.NUMBER
Le ‘Context Based Workflow’ permet de populer une application, une version à partir d’une
enquiry. Les information listées deviennent des valeurs par défaut.
Prenons un exemple :
Créer une Enquiry qui listera le détail des clients. Depuis la liste, un click droit sur un customer
particulier permet de créer un compte pour le customer. Le numéro de customer est valorisé par défaut
dans le champ CUSTOMER.NUMBER de ACCOUNT. Le mnémonique est aussi pris par défaut
depuis le champ MNEMONIC de ACCOUNT.
Note: ACCREATE est le nom de la version qui est automatiquement appelé en saisie, la clé est
générée automatiquement et CUSTOMER et MNEMONIC sont renseignés par défaut.
Etape 2
Créer la version ACCOUNT,ACCREATE qui permet de créer un nouvel ACCOUNT.
4 .7 – ENQUIRY REPORT
Habituellement quand on fait une enquiry, la sortie se fait sur l’écran. Dans le cas ou la sortie d’une
enquiry doit être imprimée comme un rapport, il faut utiliser l’application ‘ENQUIRY.REPORT’.
L’application ENQUIRY.REPORT prend dans le compte des informations de détail comme le nom
de l’imprimante utilisée pour imprimer. La mise en page doit tenir compte de l’imprimante. Une entrée
‘SYSTEM’ doit exister dans le fichier PRINTER.ID. Ce nom est utilisé comme valeur par défaut de
DE.FORM.TYPE. Pour définir l’équivalent du SETPTR d’UniVerse. Pour sortir le rapport avec
ENQUIRY.REPORT, il faut se mettre en mode Verify.
PRINTER.ID
DE.FORM.TYPE
REPORT.CONTROL
ENQUIRY.REPORT
Nota : Pour exécuter l’édition pendant le COB, l’enregistrement du ENQUIRY.REPORT doit être pris
en compte dans les datas du BATCH pour le job EB.PRINT précédé de ENQ.
Quand on défini le rapport PAGE.SIZE doit être adapté. Il n’y a pas de restriction de largeur
ou de hauteur de rapport.
Réaliser les étapes pour que la sortie de l’enquiry LOANS.LIST sorte sur l’imprimante.
Etape 1 Définir l’imprimante dans PRINTER.ID, on peut utiliser une imprimante existante.
Etape 2 Définir la forme de l’imprimé dans DE.FORM.TYPE, on peut utiliser une définition
existante.
Etape 3 Créer un enregistrement dans REPORT.CONTROL pour faire le routage de
l’impression.
Etape 4 Créer un ENQUIRY.REPORT avec le nom de l’enquiry et la clé du
REPORT.CONTROL.
Etape 5 Pour lancer le rapport ouvrez ENQUIRY.REPORT avec la fonction ‘VERIFY’, puis
faites F5.
On donne la possibilité de faire des sélections de clés rapidement, voir des modifications si nécessaire.
Sélection
Rapport d’exécution
Colonne de l’enquiry
La zone Attribut de la définition de l’enquiry doit avoir le mot FASTPATH sélectionné (en
multivaleur) et pour pouvoir faire une modification, on utilise le mot clé EDIT au niveau du
DISPLAY TYPE .
Quand on veut éditer un grand nombre de colonnes, il est possible de cacher les colonnes et
les faire apparaître à la demande. Pour cela la colonne doit être indiquée HIDEN dans la partie
attribut de la colonne. Un bouton ‘>’ ou ‘<’ indique cette possibilité dans l’en-tête de la
colonne.
5 – LES VERSIONS
Introduction:
Dans T24, Les données partageables et spécifiques sont possibles dans un fichier nommé
‘SECURITY.MASTER’. Ce fichier contient 150 champs. Prenons le cas ou il y aurait 2 catégories
d’utilisateurs dans la banque, L’une qui opérera sur des transactions partageables et les autres sur des
transactions ‘spécifiques”. L’affichage de la totalité des champs pour les deux catégories d’utilisateurs,
compliquerait la situation et générerait le chaos. Pour résoudre ce problème, on a la possibilité de
saisir les champs partagés avec un écran de saisie et de faire la saisie des données spécifiques avec un
autre écran.
C’est exactement ce que permettent les versions. L’application “VERSION” est un standard des
applications GLOBUS. La version permet aux utilisateurs de créer des écrans adaptés pour la saisie,
les autorisations, les visualisations, etc. On peut aussi utiliser des automatismes de remplacement des
données dans les enregistrements. En fait, GLOBUS dans la majorité des applications utilise des
versions Il est possible d’ajouter des routines locales qui sont associées à un champ, une validation,
une autorisation. Ces petits programmes permettent une grande adaptation à l’utilisateur de GLOBUS.
Le Screen Designer est un outil graphique inclus dans le Desktop de GLOBUS ou dans le BROWSER
pour aider la création et l’aménagement d’un écran de saisie ( ou version) Vous pouvez utiliser la
technique du « drag and drop » pour implanter les champs à saisir.
Attention, la création d’une image écran ne peut se faire qu’à partir du Desktop.
Si on est sous Browser, il suffit de lancer VERSION,DESIGNER pour arriver aux mêmes onglets
que le mode Desktop
La partie principal permet de décrire l’application, le (ou les) code(s) langage, le nombre d’autoriseurs
si on a la valeur 0, la saisie est implicitement autorisée.
La version à suivre (Next Version) permet de lancer une autre version après la validation de la version
que vous définissez.
En générale, une version complexe se subdivise en plusieurs onglets comme la version qui permet la
création de version. Chaque version indiquée dans Versions sous onglets, correspondra à un onglet
avec comme intitulé le contenu de la description.
La partie valeur par défaut permet d’initialiser directement des champs par une constante chaîne
encadrée par guillemet.
Choisissez dans la barre d’outils Tools >Screen Designer, ceci à fin d’obtenir une grille de saisie.
La saisie du ‘Screen Designer’ se fait par l’intermédiaire de l’application VERSION,DESIGNER.
Avant de débuter la création d’une version, comprenez bien la signification des champs de
l’application.
20.1.1 TXT.118..132
21.1 ENRICHM.CHAR...
22.1 TABLE.COLUMN...
23.1 TABLE.LINE.....
24.1 RIGHT.ADJ.FIELD
25 REF.NO.IN.1ST.LINE
26.1 ID.AUTOM.SEQU..
27 NO.OF.AUTH........
28.1 NOINPUT.FIELD..
29.1 NOCHANGE.FIELD.
30.1 REKEY.FIELD.NO.
31.1 AUTOM.FIELD.NO.
32.1 AUT.OLD.CONTENT
33.1 AUT.NEW.CONTENT
34.1 MANDATORY.FIELD
35 MULTI.POSSIBLE....
36.1.1 VAL.ASSOC...
36.1.2 VAL.ASSOC...
36.2.1 VAL.ASSOC...
36.2.2 VAL.ASSOC...
36.3.1 VAL.ASSOC...
36.3.2 VAL.ASSOC...
37.1.1 SUB.ASSOC...
38 LOCAL.REF.FIELD...
39.1 VALIDATION.FLD.
40.1 VALIDATION.RTN.
41.1 D.SLIP.FORMAT..
42.1 D.SLIP.FUNCTION
43 D.SLIP.TRIGGER....
44.1 INPUT.ROUTINE..
45.1 AUTH.ROUTINE ..
46 REPORT.LOCKS......
47 GTS.CONTROL.......
48.1 GB DESCRIPTION.
49.1 ASSOC.VERSION..
50 NEXT.VERSION......
51 RESERVED.1........
52 RECORD.STATUS.....
53 CURR.NO...........
54.1 INPUTTER.......
55 DATE.TIME.........
56 AUTHORISER........
57 CO.CODE...........
58 DEPT.CODE.........
59 AUDITOR.CODE......
60 AUDIT.DATE.TIME...
PRINT.ONLY Cet indicateur précise la possibilité d’édition sur écran ou sur imprimante.
Un écran permet un colonage de 80 positions, pour une imprimante, on peut
avoir en standard 132 positions caractères en largeur. La valeur à donner est
‘Y’ dans le cas le plus général.
RECORDS.PER.PAGE
On indique ici si on veut visualiser plusieurs enregistrements par page
sur le même écran, en standard, il n’y a qu’un seul enregistrement par page
écran. Un cas typique de multi enregistrements serait dans le cadre de la
création d’une version permettant la saisie d’un taux d’échange de différentes
devises sur un seul écran.
FIELDS.PER.LINE
Cet indicateur précise la structure de l’écran concernant les champs, on
précise ici si on désir un ou plusieurs champs par ligne.
1 Indique un champ unique par ligne
MULTI Indique plusieurs champs par ligne.
LANGUAGE.CODE
Défini la langue dans laquelle les textes de la version doivent apparaître
(tel que l’en-tête, le nom des champs, les remarques, etc. ) Le code langage de
l’utilisateur est défini dans son profile figurant dans le fichier USER.
HDR.1.001..039
On implante ici les 40 premiers caractères du premier en-tête.
La première ligne d’en-tête correspond à la ligne 2, ici, les espaces
ne sont pas éliminés
FIELD.NO
Indique le nom du champ que l’utilisateur veut définir dans la version.
C’est le nom du champ pour l’application.
Quand FIELDS PER LINE (Chp 3) contient 1 et, s’il n’y a pas de nom
introduit, tous les champs sont visualises.
Autrement dit, le nom des champs peut être entré avec les formats
suivants :
d) “.” Quand l’utilisateur veut définir un champ avec des sous-valeurs, suivi
par « , »
COLUMN
EXPANSION
Indique si le nombre de champs prévus peut être augmenté dans la version en ligne..
Ce champ ne doit être renseigné que si FIELDS PER LINE (chp 3) est égal à MULTI L’utilisateur ne
peut pas étendre les multi valeurs ou les sous-valeurs. Si ce champ est vide, alors multi valeur est sous-
valeurs peuvent être étendues à l’utilisation de la version.
TEXT.CHAR.MAX
Indique la longueur maximum de texte relatif au champ défini précédemment (chp 13, FIELD
NO)Cette longueur définie le nombre de caractères.
TEXT
Indique le texte que l’utilisateur veut définir dans le champ spécifié dans FIELD NO (Field 13) Ce
n’est rien qu’un intitulé visualisé dans la version. Ce champ est sous-valué ce qui permet une
expansion vis à vis des textes dans des langues précises suivant le code langage. S’il n’y a pas de
saisie, aucun textes n’apparaîtront.
TXT.040..078
Indique le contenu du texte que l’utilisateur veut faire passer cette partie concerne les colonnes 40 à79.
Si on veut une ligne de séparation, il faut mettre « * » dans le champ FIELD.NO
Le champ n’est actif que s’ il y a « * » dans FIELD.NO.
ENRICHM.CHAR
Indique combien de caractères l’utilisateur désir pour visualiser le texte de la rubrique (Enrichment)
TABLE.LINE
RIGHT.ADJ.FIELD
Cette zone peut contenir le nom des descripteurs dont le contenu doit impérativement être cadré à
droite.
NOINPUT.FIELD
On impose à la liste de champs d’apparaître en sous brillance. Il n’y a pas de saisie possible.
NOCHANGE.FIELD
L’utilisateur peut définir un champ qui peut être protégé après sa saisie initiale, après autorisation.
Aucune saisie n’est alors possible.
REKEY.FIELD.NO
L’utilisateur demande d’avoir recourt à une autre saisie au moment de l’autorisation, afin de pouvoir
valider la valeur.
AUTOM.FIELD.NO
L’utilisateur peut définir un champ ayant une valorisation par défaut. La valeur du champ est fonction
des arguments de AUT.OLD.CONTENT /AUT.NEW.CONTENT.
AUT.OLD.CONTENT
L’utilisateur peut définir une valeur initiale qui serra remplacer par la nouvelle valeur par défaut. On
exprime cette possibilité conjointement avec AUTOMATIC.NEW.CONTENT (Field 33) et
AUTOMATIC. FIELD.NUMBER (Field 31)
Ce champ peut être une constante, un code IN2, un lien FICHIER>DESCRIPTEUR ou une routine
@Nom_routine.
AUT.NEW.CONTENT
MANDATORY.FIELD
VALIDATION.RTN
D.SLIP.FORMAT
D.SLIP.FUNCTION
D.SLIP.TRIGGER
INPUT.ROUTINE
On donne ici, le nom d’une routine à exécutée au moment de valider la transaction après autorisation.
AUTH.ROUTINE
REPORT.LOCKS
On définit ici, si les informations de verrous sont données à l’utilisateur durant son blocage. Si le
paramètre n’est pas à « NO », l’utilisateur recevra un message d’un fichier des verrous. Le nom du
user et son numéro seront visualisés, si la valeur est « NO », il n’y aura pas de message en cas de
verrou.
(1) YES or NO
GTS.CONTROL
On contrôle ici comment GTS prend en compte une erreur lorsqu’on manipule la version ; On
peut utiliser les code suivants :
Null ==== L’enregistrement étant rejeté, l’enregistrement GTS dans le répertoire de sortie, sera
implanté avec le code (90) Les recouvrements (overrides) validés par défaut apparaîtront avec un code
(00)
1 = La validation met l’enregistrement en état « hold », GTS mettra un code (80) Le recouvrement
ajoutera un code (00)
2 = L’erreur à la validation génère dans le répertoire de sortie un code (90) et le recouvrement un code
(81 L’état de l’enregistrement est « holdé »
GB DESCRIPTION
ASSOC.VERSION
C’est la liste des versions qui vont correspondre au différents onglets de la version principale.
Le premier caractère du descriptif peut être mis en majuscule souligné en utilisant la notation
« &lettre ».Cette zone est optionnelle.
La saisie de l’image de la saisie se fait par un outil simple qui permet de faire un drag-and-drop des
champs sur la surface écran.
Exemple : Créer une application qui permette, à un utilisateur, de créer un CUSTOMER avec le
minimum de détails. Assurez-vous que la version n’ai pas besoin d’autorisation.
14.5 COLUMN.........
15.5 EXPANSION......
16.5 TEXT.CHAR.MAX..
17.5.1 TEXT........
18.5.1 TXT.040..078
19.5.1 TXT.079..117
TXT.079..117
20.5.1 TXT.118..132
21.5 ENRICHM.CHAR...
22.5 TABLE.COLUMN...
23.5 TABLE.LINE.....
13.6 FIELD.NO....... NATIONALITY NATIONALITY
14.6 COLUMN.........
15.6 EXPANSION......
16.6 TEXT.CHAR.MAX..
17.6.1 TEXT........
TEXT........
18.6.1 TXT.040..078
19.6.1 TXT.079..117
20.6.1 TXT.118..132
21.6 ENRICHM.CHAR...
22.6 TABLE.COLUMN...
23.6 TABLE.LINE.....
13.7 FIELD.NO....... SECTOR SECTOR
14.7 COLUMN.........
15.7 EXPANSION......
16.7 TEXT.CHAR.MAX..
17.7.1 TEXT........
18.7.1 TXT.040..078
19.7.1 TXT.079..117
20.7.1 TXT.118..132
21.7 ENRICHM.CHAR...
22.7 TABLE.COLUMN...
23.7 TABLE.LINE.....
13.8 FIELD.NO....... LANGUAGE LANGUAGE
14.8
14.8 COLUMN.........
15.8 EXPANSION......
16.8 TEXT.CHAR.MAX..
17.8.1 TEXT........
18.8.1 TXT.040..078
19.8.1 TXT.079..117
20.8.1 TXT.118..132
21.8 ENRICHM.CHAR...
22.8 TABLE.COLUMN...
23.8 TABLE.LINE.....
24.1 RIGHT.ADJ.FIELD
RIGHT.ADJ.FIELD
25 REF.NO.IN.1ST.LINE
26.1 ID.AUTOM.SEQU..
27 NO.OF.AUTH........ 1
28.1 NOINPUT.FIELD..
29.1 NOCHANGE.FIELD.
30.1 REKEY.FIELD.NO.
31.1 AUTOM.FIELD.NO.
32.1 AUT.OLD.CONTENT
33.1 AUT.NEW.CONTENT
34.1 MANDATORY.FIELD
35 MULTI.POSSIBLE.... Y
36.1.1 VAL.ASSOC... RELATION.CODE
36.1.2 VAL.ASSOC... REVERS.REL.CODE
37.1.1 SUB.ASSOC...
38 LOCAL.REF.FIELD... LOCAL.REF
39.1 VALIDATION.FLD.
40.1 VALIDATION.RTN.
41.1 D.SLIP.FORMAT..
D.SLIP.FORMAT..
42.1 D.SLIP.FUNCTION
43 D.SLIP.TRIGGER....
44.1 INPUT.ROUTINE..
45.1 AUTH.ROUTINE ..
46 REPORT.LOCKS...... YES
47 GTS.CONTROL.......
48.1 GB DESCRIPTION.
49.1 ASSOC.VERSION..
50 NEXT.VERSION......
NEXT.VERSION......
51 RESERVED.1........
52 RECORD.STATUS.....
53 CURR.NO........... 4
54.1 INPUTTER....... 1208_TRAINEE05
55.1 DATE.TIME...... 20 NOV 00 11:20
56 AUTHORISER........ 1208_TRAINEE05
57 CO.CODE........... GB-
GB-001-
001-0001
58 DEPT.CODE......... 1
59 AUDITOR.CODE......
60 AUDIT.DATE.TIME...
2 RECORDS.PER.PAGE.. 1
3 FIELDS.PER.LINE... 1
4.1 LANGUAGE.CODE.. 1 English
5.1 HDR.1.001..039.
6.1 HDR.1.040..078.
7.1 HDR.1.079..117.
8.1 HDR.1.118..132.
HDR.1.118..132.
9.1 HDR.2.001..039.
10.1 HDR.2.040..078.
11.1 HDR.2.079..117.
12.1 HDR.2.118..132.
13.1 FIELD.NO....... CUSTOMER CUSTOMER
14.1 COLUMN.........
15.1 EXPANSION......
16.1 TEXT.CHAR.MAX..
17.1.1
17.1.1 TEXT........
18.1.1 TXT.040..078
19.1.1 TXT.079..117
20.1.1 TXT.118..132
21.1 ENRICHM.CHAR...
22.1 TABLE.COLUMN...
23.1 TABLE.LINE.....
13.2 FIELD.NO....... CATEGORY CATEGORY
14.2 COLUMN.........
15.2 EXPANSION......
16.2 TEXT.CHAR.MAX..
17.2.1 TEXT........
18.2.1 TXT.040..078
19.2.1 TXT.079..117
20.2.1 TXT.118..132
21.2 ENRICHM.CHAR...
22.2 TABLE.COLUMN...
23.2 TABLE.LINE.....
13.3 FIELD.NO....... CURRENCY CURRENCY
14.3 COLUMN.........
15.3 EXPANSION......
16.3 TEXT.CHAR.MAX..
17.3.1 TEXT........
18.3.1 TXT.040..078
19.3.1 TXT.079..117
20.3.1 TXT.118..132
21.3 ENRICHM.CHAR...
22.3 TABLE.COLUMN...
23.3 TABLE.LINE.....
24.1 RIGHT.ADJ.FIELD
25 REF.NO.IN.1ST.LINE
26.1 ID.AUTOM.SEQU..
27 NO.OF.AUTH........ 1
28.1 NOINPUT.FIELD..
29.1 NOCHANGE.FIELD.
30.1 REKEY.FIELD.NO.
31.1 AUTOM.FIELD.NO.
32.1 AUT.OLD.CONTENT
33.1 AUT.NEW.CONTENT
34.1 MANDATORY.FIELD
35 MULTI.POSSIBLE....
36.1.1 VAL.ASSOC... ACCR.CHG.CATEG
36.1.2 VAL.ASSOC... ACCR.CHG.SUSP
36.2.1 VAL.ASSOC... ACCR.CR.CATEG
36.2.2 VAL.ASSOC... ACCR.CR.SUSP
ACCR.CR.SUSP
36.3.1 VAL.ASSOC... ACCR.CR2.CATEG
36.3.2 VAL.ASSOC... ACCR.CR2.SUSP
36.4.1 VAL.ASSOC... ACCR.DR.CATEG
36.4.2 VAL.ASSOC... ACCR.DR.SUSP
36.5.1 VAL.ASSOC... ACCR.DR2.CATEG
36.5.2 VAL.ASSOC... ACCR.DR2.SUSP
36.6.1 VAL.ASSOC... BALANCE.CCY.MKT
36.6.2 VAL.ASSOC... MKT.CLEAR.BAL
36.7.1 VAL.ASSOC... VALUE.DATE
36.7.2 VAL.ASSOC... VALUE.DATED.BAL
36.8.1 VAL.ASSOC... ALT.ACCT.TYPE
36.8.2 VAL.ASSOC... ALT.ACCT.ID
36.9.1 VAL.ASSOC... PREMIUM.TYPE
PREMIUM.TYPE
36.9.2 VAL.ASSOC... PREMIUM.FREQ
36.10.1 VAL.ASSOC... JOINT.HOLDER
36.10.2 VAL.ASSOC... JOINT.NOTES
36.11.1 VAL.ASSOC... PENDING.ID
36.11.2 VAL.ASSOC... TOTAL.PENDING
36.12.1 VAL.ASSOC... FROM.DATE
36.12.2 VAL.ASSOC... LOCKED.AMOUNT
LOCKED.AMOUNT
36.13.1 VAL.ASSOC... DISPO.RESTRICT
36.13.2 VAL.ASSOC... RESTRICT.OFF
37.1.1 SUB.ASSOC...
38 LOCAL.REF.FIELD... LOCAL.REF
39.1 VALIDATION.FLD.
40.1 VALIDATION.RTN.
41.1 D.SLIP.FORMAT..
42.1 D.SLIP.FUNCTION
D.SLIP.FUNCTION
43 D.SLIP.TRIGGER....
44.1 INPUT.ROUTINE..
45.1 AUTH.ROUTINE ..
46 REPORT.LOCKS...... YES
47 GTS.CONTROL.......
48.1 GB DESCRIPTION.
49.1 ASSOC.VERSION..
50 NEXT.VERSION......
Considérer la situation ou un utilisateur saisi un enregistrement de CUSTOMER, il n’a pas besoin des
champs d’audit durant la saisie mais il doit les consulter pour avoir le nom de l’autoriser. On ne peut
pas saisir ces arguments s’ils ne sont pas intégrer dans la version initiale. Il faut simplement faire une
association de deux version sur la même application et chaque descriptif de la version apparaîtra sous
forme d’onglet.
Le champ utiliser, en multi-valeur est le champ ‘ASSOC.VERSION’ dans la version initiale.
6 - LA PROGRAMMATION T24
Les routines permettent à l’utilisateur de lire sur un ou plusieurs fichiers, de réaliser des extractions
complexes.
Ici EB.CUS est le préfixe, il n’y a pas de suffixe. Nous vous conseillons de constituer un
dossier de programmation avec l’impression des includes dont vous avez besoin pour
programmer. Dans votre routine, la première ligne exécutable est celle contenant
SUBROUTINE.
Le nom que vous donnez à la routine doit être le même que dans la déclaration
SUBROUTINE.
SUBROUTINE Nom_routine{(arg1, arg2, arg3,…,argn)
L’argument peut être :
- une constante
- un vecteur ou un tableau, il faut pour cela écrire MAT nom
- une variable simple
- une variable fichier ou liste
La logique Temenos veut que l’on fasse appel a des routines internes comme :
SUBROUTINE nom_routine
$INSERT I_COMMON
$INSERT I_EQUATE
$INSERT I_F.nom_fichier1
……….
$INSERT I_F.nom_fichiern
*------------------------------------------------
MAIN : *
GOSUB INITIALIZE ; * initialisation des varibales
GOSUB OPEN.FILES ; * vers les ouvertures de fichier
GOSUB PROCESS ; * vers le traitement proprement dit
GOSUB CLOSING ; * vers la fermeture des fichiers (non prévu mais ….)
*-------------------------------------------------
INITIALIZE : *
FN.nom= ‘F.nom_fichier’ ;* pour définir le nom du fichier
FV.nom=’’ ;* pour définir la variable fichier
Nom.ERRn=0 ;* pour définir les code erreur
R.mnemo.REC=’’ ;* pour définir les tableaux dynamiques
R.NEW ;* pour un nouvel enregistrement, c’est une variable
structurée
RETURN
La programmation de l’ouverture de la lecture des fichiers se fait en utilisant des routines déjà
existantes et fournies (une documentation pdf est fournie)
Nous prenons ici les cas les plus utilisés.
OUVERTURE DE FICHIER
CALL OPF(Variable_nom_fichier , Variable_fichier)
LECTURE DE FICHIER
SELECTION DE FICHIER
6.2 - LE TEMPLATE
Si vous voulez créer une application GLOBUS, vous devez créer un fichier et un programme
pour gérer cette application. TEMENOS donne un programme squelette TEMPLATE dans le
fichier GLOBUS.BP. Vous devez faire une copie dans votre programme et changer le nom de
la routine.
1 – Créer une définition de fichier dans F.FILE.CONTROL avec comme type 3 et un
modulo. Si votre fichier est partagés en général le nom doit être du type F.nom c’est à dire
que la classification est INT sinon pour les autres on a un nom avec FXXX.nom
XXX correspond a l’abréviation de la compagnie, pour une seule compagnie, XXX vaut BNK
Exemple: F.TFR.OBJECTS et FBNK.CUSTOMER
2 – En mode GLOBUS classique lancer sous Action CREATE.FILES pour créer un fichier
dans les répertoire xxx.data/lettre/ et xxx.dict
et dans le VOC.
3 – Copier TEMPLATE depuis GLOBUS.BP vers votre fichier des sources.
COPY GLOBUS.BP TEMPLATE
TO:(SOURCE.BP APPLICATION
4 – Modifier votre TEMPLATE à la ligne SUBROUTINE et au niveau de l’appel à d’autres
routines si nécessaire.
5 – Compiler et cataloger la routine ainsi adaptée
6 – Mettre à jour F.PGM.FILE en utilisant GLOBUS avec un enregistrement ou la clé
correspond au nom de votre routine. Valider et autoriser.
Note : Voici les types de codes:
Le programe FILE.LAYOUT est utilise pour faire la creation des includes comme
I_F.name. On génère ici des lignes avec des EQU donnant pour chaque champ le numéro
correspondant. Ce programme demande le nom du fichier et du prefixe comme par exemple
pour CUSTOMER on a CUST.
2 – Il faut créer le (ou les) fichier(s) par la commande CREATE.FILES qui ne peut se faire
que sous le mode classique. En voici les grandes lignes :
Finalement, on met en fichier et on compile par FIBC, mais on n’exécute pas car c’est une
subroutine qui doit être appelée par un programme ici BMCE.EX.
5 – Il faut maintenant mémoriser le fait que les programmes soient exécutables sous T24, pour
cela, on se met sous Desktop et après connexion, on lance au niveau commande
PGM.FILE, (la virgule indique que l’on fait une saisie, cas ici de BNM.STAGE)
On met ‘H’ pour l’enregistrement de l’application, car il indique que le fichier est fait pour
générer du $NAU et $HIS.
On renseigne la saisie du nom du produit, ici ST, puis on valide.
7 – Si votre fichier doit être utilié par d’autres, il faut pouvoir utiliser des équivalences comme
dans I_F.ACCOUNT.
BMCE>FILE.LAYOUT
Le fichier résultant est dans BP et non dans GLOBUS.BP, il faut donc le copier dedans par :
Command-
Command->
0001 * File Layout for BNM.STAGE Created 26 JUL 06 at 09:01PM by retail
0002 * PREFIX[BNM.] SUFFIX[]
0003 EQU BNM.CUSTOMER.NO TO 1, BNM.ORDER.DATE TO 2,
0004 BNM.ITEM
BNM.ITEM TO 3, BNM.QTC TO 4,
0005 BNM.CONFIRME TO 5, BNM.LOCAL TO 6,
0006 BNM.RECORD.STATUS TO 7, BNM.CURR.NO TO 8,
0007 BNM.INPUTTER TO 9, BNM.DATE.TIME TO 10,
0008 BNM.AUTHORISER TO 11, BNM.CO.CODE
BNM.CO.CODE TO 12,
0009 BNM.DEPT.CODE TO 13, BNM.AUDITOR.CODE TO 14,
0010 BNM.AUDIT.DATE.TIME TO 15
Dans la programmation des routines associées aux Enquiries, il faut savoir que le
développeur n’a pas besoin de faire la lecture du fichier. Il doit savoir que la lecture se fait
dans R.RECORD qui est ici un tableau dynamique et la valeur en cours de traitement se situe
dans la variable commune O.DATA. Les vriables communes sont :
ID clé courante
R.RECORD enregistrement courant, c’est un tableau dynamique
Une routine peut être capable de définir les critères de selection dynamique. Pour cela on
va utiliser un argument qui donne le nom d’un tableau dynamique ici Y.ENQ :
Y.ENQ est défini avec les champs suivants :
Y.ENQ<1> Nom de l’Enquiry
Y.ENQ<2,x> Champ sélection, x est le n° de la sélection, il indique une valeur.
Y.ENQ<3,x> Champ opérateurs (EQ,LT,GT,LE,GE,NE,LK,UK,RG,NR)
Y.ENQ<4,x,y> Donnée
Après une manipulation par un algorithme, il faut mettre le résultat dans O.DATA
Le nom de la routine à l’intérieure de la zone CONVERSION doit être @ nom (l’espace entre
@ et le nom est obligatoire) Ces routines sont attachées aux enquiries. Il y a deux endroits
dans la structure d’une enquiry ou l’on peut inclure l’appel a des types de routines :
♦ Build routine
♦ Conversion routine
Avec les routines utilisées dans les Enquiries, il faut tenir compte du fichier d’insertion
I_ENQUIRY.COMMON. C’est un fichier comme I_COMMON et I_EQUATE, mais il est
spécifiques aux enquiries et contient des variables communes comme O.DATA qui représente la
donnée en cours de traitement.
Par exemple, on veut avoir un cryptage du nom du client afin de faire une présentation client.
SUBROUTINE ENQ.CRYPT1.MT
$INSERT I_COMMON
$INSERT I_EQUATE
$INSERT I_ENQUIRY.COMMON
$INSERT I_F.CUSTOMER
O.DATA=ENCRYPT(O.DATA,"",1)
RETURN
Ces routines sont appelées après la spécification dynamique du user. Le nom de la routine doit
figurer dans le champ ‘BUILD ROUTINE’. Ces routines doivent passer un tableau
dynamique en argument. Ce tableau peut être vide ou avoir la structure suivante :
Créer une enquiry qui acceptera la catégorie d’un utilisateur et visualisera la liste des ACCOUNT qui
ont une balance supérieure a une valeur spécifique comme par exemple,
Pour la catégorie 6000 – la Balance doit être comprise entre 60000 et 70000
Pour la catégorie 7000 - la Balance sera comprise entre 20000 et 30000
Pour une catégorie > 7000 – la Balance devra se situer au-dessus de 50000
*------------------------------------------------------------
* reconstitution des critères dynamiques
*-------------------------------------------------------------------
SUBROUTINE AC.BUILD.BAL(ENQ.DATA)
$INSERT I_COMMON
$INSERT I_EQUATE
$INSERT I_ENQUIRY.COMMON
*--------------------------------------------------------------------
GOSUB EXTRATCATEGORY
GOSUB CHECKCATEGORY
RETURN
*--------------------------
EXTRACTCATEGORY:
CATEGORY = ENQ.DATA<4,1>
BEGIN CASE
CASE CATEGORY = 6000
ENQ.DATA<2,2> = 'WORKING.BALANCE'
ENQ.DATA<3,2> = 'RG'
ENQ.DATA<4,2> = '60000 70000'
CASE CATEGORY = 7000
ENQ.DATA<2,2> = 'WORKING.BALANCE'
ENQ.DATA<3,2> = 'RG'
ENQ.DATA<4,2> = '20000 30000'
CASE CATEGORY > 7000
ENQ.DATA<2,2> = 'WORKING.BALANCE'
ENQ.DATA<3,2> = 'GT'
ENQ.DATA<4,2> = '50000'
END CASE
RETURN
Etape 2 : Créer l’enquiry et renseigner le champ 8.1 BUILD.ROUTINE avec le nom de votre
subroutine.
Nom de l’enquiry : AC.BUILD.CAT.BAL
Champ à utiliser : 8.1 BUILD.ROUTINE
Valeur du champ 8.1 : AC.BUILD.BAL
6. 5 - ROUTINES DE CONVERSION
Les routines de conversion sont les plus utilisées car elles permettent une transformation simple des
données. Ces routines sont associées au champ CONVERSION. Prenons un exemple :
Exemple Créer une enquiry qui donne le numéro de contrat LD et les montants de consignation
correspondants. Dans le cas ou le montant est exprimé dans une devise étrangère, il faut faire la
conversion dans la devise locale. (Nota: Multiplier le montant par ‘BUY.RATE’ du fichier
CURRENCY)
Le format de sortie peut être :
Etape 1:
*----------------------------------------------------------------------------
* Cette routine fait l’extraction depuis un LD pour chaque enregistrement du montant et de la devise.
* si la devise n’est pas locale on utilise la routine standard EXCH.RATE
* ---------------------------------------------------------------------------------------
SUBROUTINE E.CONV.LD.AMOUNT
$INSERT I_COMMON
$INSERT I_EQUATE
$INSERT I_ENQUIRY.COMMON
$INSERT I_F.LD.LOANS.AND.DEPOSITS
$INSERT I_F.CURRENCY
*-----------------------------------
GOSUB INITIALIZE
GOSUB OPENFILES
GOSUB CHECK.CONVERT.CURRENCY
RETURN
*-----------------------------------
INITIALIZE:
LD.ID = ''
R.LD.RECORD = ''
LD.EXTRACTED.AMOUNT = 0
LD.EXTRACTED.CURRENCY = ''
FN.LD = 'F.LD.LOANS.AND.DEPOSITS'
FV.LD = ''
LD.ERROR1 = 0; NEW.LCY.AMOUNT = 0
RETURN
*-----------------------------------
OPENFILES:
CALL OPF(FN.LD,FV.LD)
RETURN
*------------------------------------
CHECK.CONVERT.CURRENCY:
LD.ID = O.DATA
CALL F.READ(FN.LD,LD.ID,R.LD.RECORD,FV.LD,LD.ERROR1)
LD.EXTRACTED.CURRENCY = R.LD.RECORD<LD.CURRENCY>
LD.EXTRACTED.AMOUNT = R.LD.RECORD<LD.AMOUNT>
IF LD.EXTRACTED.CURRENCY NE LCCY THEN
CALL EXCHRATE('1',LD.EXTRACTED.CURRENCY,
LD.EXTRACTED.AMOUNT,LCCY,'',''
,EXCH.RATE,'',NEW.LCY.AMOUNT,RET.CODE)
O.DATA = NEW.LCY.AMOUNT
END ELSE
O.DATA = LD.EXTRACTED.AMOUNT
END
RETURN
Dans la routine ci-dessus, le montant qui est mis dans O.DATA est extrait du fichier
‘LD.LOANS.AND.DEPOSITS’, puis multiplier par le taux présent dans le fichier CURRENCY. Dans
GLOBUS, la routine EXCHRATE peut être utilisée pour réaliser la conversion.
Si les données à presser dans l’enquiry n’existe pas dans un seul fichier. L‘enquiry doit
extraire les informations à partir d’une routine. Pour bien comprendre le mécanisme voici
comment le système travail.
La routine construit une liste des clés dans un tableau dynamique passé en argument,, puis
chaque clé est extraite et on construit un tableau dynamique qui contiendra les données à
visualiser. Normalement, on a besoin de 2 routines, une qui fait l’écriture de la liste des
données et une autre qui prend en compte la clé et reconstruit un enregistrement.
Si un champ est spécifié dans une enquiry, le type et la position du champ sont consultés
depuis le STANDARD.SELECTION du fichier mentionné dans la zone FILE.NAME.
FN.ACCOUNT = 'FBNK.ACCOUNT'
FV.ACCOUNT = ''
FV.CUST.ACC = ''
R.CUS.ACCT.REC = ''
R.ACCT.REC = ''
Y.CNT = 0
CUSACCT.COUNTER = 0
ACCOUNT.ID = 0
ACCOUNT.EXTRACTED.CURRENCY = ''
ACCOUNT.EXTRACTED.WORKING.BALANCE = 0
CUSTOMER.TOTAL.AMOUNT = 0
CUSTOMER.ARRAY = ''
RETURN
*----------------------------------------
OPENFILES:
*Ouverture CUSTOMER
CALL OPF(FN.CUSTOMER,FV.CUSTOMER)
*Ouverture concate file CUSTOMER.ACCOUNT
CALL OPF(FN.CUST.ACC,FV.CUST.ACC)
CALL OPF(FN.CUST.ACC,FV.CUST.ACC)
*Ouverture ACCOUNT
CALL OPF(FN.ACCOUNT,FV.ACCOUNT)
RETURN
CALCULATEAMOUNT: SEL.COMMAND = "SELECT " : FN.CUSTOMER
SEL.LIST = ""
CALL EB.READLIST(SEL.COMMAND,SEL.LIST,"",NO.OF.REC,CUSTOMER.ERR1)
LOOP
REMOVE CUSTOMER.FIRST.ID FROM SEL.LIST SETTING POS
WHILE CUSTOMER.FIRST.ID:POS
CALL F.READ(FN.CUST.ACC,CUSTOMER.FIRST.ID,R.CUS.ACCT.REC,
FV.CUST.ACC,CUS.ACCT.ERR2)
Y.CNT = DCOUNT(R.CUS.ACCT.REC,FM)
FOR CUSACCT.COUNTER = 1 TO Y.CNT
ACCOUNT.ID = R.CUS.ACCT.REC<CUSACCT.COUNTER>
CALL F.READ(FN.ACCOUNT,ACCOUNT.ID,R.ACCT.REC,
FV.ACCOUNT,ACCOUNT.ERR3)
ACCOUNT.EXTRACTED.CURRENCY = R.ACCT.REC<AC.CURRENCY>
ACCOUNT.EXTRACTED.WORKING.BALANCE =
R.ACCT.REC<AC.WORKING.BALANCE>
IF ACCOUNT.EXTRACTED.CURRENCY = LCCY THEN
CUSTOMER.TOTAL.AMOUNT +=
ACCOUNT.EXTRACTED.WORKING.BALANCE
END ELSE
CALL EXCHRATE('1',ACCOUNT.EXTRACTED.CURRENCY,
ACCOUNT.EXTRACTED.WORKING.BALANCE,
LCCY,'','',EXCH.RATE,'',LCY.AMOUNT,RET.CODE)
CUSTOMER.TOTAL.AMOUNT += LCY.AMOUNT
END
EXCH.RATE = 0; LCY.AMOUNT = 0
NEXT CUSACCT.COUNTER
IF CUSTOMER.TOTAL.AMOUNT GT 0 THEN
CUSTOMER.ARRAY<-1> = CUSTOMER.FIRST.ID:'*':CUSTOMER.TOTAL.AMOUNT
END
CUSTOMER.TOTAL.AMOUNT = 0
REPEAT
RETURN
Il y a trois types de routines qui peuvent être associées aux versions. Chacune d’entre elle est liée à des
évènements différents. Les trois types de routine sont :
♦ Routine de validation
♦ Routine d’entrée
♦ Routine d’autorisation
Routine de validation
Ces routines, comme le type l’indique, sont mises en fonction, au moment ou l’utilisateur appui sur
« enter ». Le champ à renseigner est VALIDATION.FLD. Voici un exemple.
Créer une version sur le module FT. Quand le débit du compte est saisi, on veut que la devise soit
renseignée par défaut dans le champ CURRENCY.
Etape 1
Créer une version sur l ‘application FT nommée FT,INPUT, celle-ci fera la saisie des contrats.
Etape 2
Créer la routine V.ACCT.CUR qui fera une extraction du numéro de compte (ACCOUNT.NUMBER)
permettant ainsi d’ouvrir le fichier ACCOUNT pour venir prendre la devise (CURRENCY). Une fois
extraite la devise sera mise dans la valeur par défaut de la version.
Cette routine extrait les numéros de compte entrés dans la transaction FT, ouvre le fichier ACCOUNT
et extrait la devise et l’implante dans le FT dans le champ DEBIT.ACCT.CURRENCY.
La variable COMI est utilisée pour maintenir la dernière valeur introduite.
La routine REBUILD.SCREEN est utilisée pour rafraîchir l’écran.
**************************************************************
SUBROUTINE V.ACCOUNT.CURRENCY
$INSERT I_COMMON
$INSERT I_EQUATE
$INSERT I_F.ACCOUNT
$INSERT I_F.FT.FUNDS.TRANSFER
MAIN : *
GOSUB INITIALIZE
GOSUB OPENFILES
GOSUB EXTRACTCURRENCY
RETURN
INITIALIZE:*
ACC.NO = 0
ACC.CURRENCY = ‘’
FN.ACCOUNT = ‘F.ACCOUNT’
FV.ACCOUNT = ‘’
ERR1=’’
R.ACC.REC=’’
RETURN
OPENFILES:*
CALL OPF(FN.ACCOUNT,FV.ACCOUNT)
ACC.NO = COMI
RETURN
EXTRACTCURRENCY:*
CALL F.READ(FN.ACCOUNT,ACCT.NO,R.ACC.REC,FV.ACCOUNT,ERR1)
ACC.CURRENCY = R.ACC.REC(AC.CURRENCY)
R.NEW(FT.DEBIT.CURRENCY) = ACCOUNT.CURRENCY
CALL REBUILD.SCREEN
RETURN
Etape 3
On attache la routine au champ ACCOUNT.NUMBER de la version.
Nom de la Version: FT,INPUT
Champs à utiliser dans la version:
39.1 VALIDATION.FLD DEBIT.ACCT.NO
40.1 VALIDATION.RTN V.ACCOUNT.CURRENCY
INPUT ROUTINE
Ces routines sont lancées au juste avant de faire F5 pour une transaction de type « unauthorise ». Ces
routines peuvent mettre à jour des fichiers locaux ou, peuvent faire un contrôle. A ce niveau de la
transaction, les valeurs par défaut et les validations ont été faites.
Exemple Créer une version pour FT dans laquelle l’appui sur F5 fait le contrôle suivant :
Le DEBIT.CURRENCY et le CREDIT.CURRENCY doivent être le même, sinon, un message
d’erreur doit apparaître.
Etape 2: Créer une routine nommée V.CHECK.CUR qui fait une extraction de
DEBIT.ACCOUNT.CURRENCY et CREDIT.ACCOUNT, qui contrôle si les valeurs sont identiques,
et qui émet un message d’erreur le cas échéant.
**********************************************************
SUBROUTINE V.CHECK.CURRENCY
$INSERT I_COMMON
$INSERT I_EQUATE
$INSERT I_FT.FUNDS.TRANSFER
MAIN : *
GOSUB INITIALIZE
GOSUB CHECKCURRENCY
RETURN
INITIALIZE: *
DEBIT.CURRENCY = ‘’
CREDIT.CURRENCY = ‘’
RETURN
CHECKCURRENCY: *
DEBIT.CURRENCY = R.NEW(FT.DEBIT.CURRENCY)
CREDIT.CURRENCY = R.NEW(FT.CREDIT.CURRENCY)
IF DEBIT.CURRENCY NE CREDIT.CURRENCY THEN
ETEXT = “Debit account currency and credit account currency not equal”
AF = FT.DEBIT.CURRENCY
CALL STORE.END.ERROR
END
RETURN
C’est une routine qui s’exécute à l’autorisation finale de la transaction. Plusieurs routines peuvent être
définies. Les routines appelées dans cette étape peuvent mettre à jour des fichiers locaux. A ce niveau
de la transaction, les valeurs par défaut et les validations ont été faites.
SUBROUTINE V.TRG.AUT.CNT.RTN
$INSERT I_COMMON
$INSERT I_EQUATE
$INSERT I_F.CUSTOMER
$INSERT I_F.CUSTOMER.ACCOUNT
GOSUB INIT
GOSUB OPENFILES
GOSUB PROCESS
RETURN
INIT: *
FN.CUS.ACC = 'F.CUSTOMER.ACCOUNT'F.CUS.ACC = ''Y.CUS.ID =
ID.NEWR.CUS.ACC = ''Y.CUS.ACC.ERR = ''RETURN
OPENFILES:CALL OPF(FN.CUS.ACC,F.CUS.ACC)
RETURN
PROCESS: *
IF ID.OLD = ‘’ THEN
R.NEW(EB.CUS.LOCAL.REF)<1,29> = 0 ; * No calculation is require
END ELSE
CALL F.READ(FN.CUS.ACC,Y.CUS.ID,R.CUS.ACC,F.CUS.ACC,Y.CUS.ACC.ERR)
IF Y.CUS.ACC.ERR NE ‘’ THEN
R.NEW(EB.CUS.LOCAL.REF)<1,29> = 0
END ELSE
R.NEW(EB.CUS.LOCAL.REF)<1,29> = DCOUNT(R.CUS.ACC,FM)
END
END
RETURN
Etape 4:
Compiler et cataloguer la routine et faire une entrée dans PGM.FILE avec le type mis
à ‘S’.
Lier la routine au champ ‘Auto New Content’ (Préfixer le nom de la routine par @)
dans la version.
Spécifier le champ LOCAL.REF (TOTAL.ACCOUNTS) dans le champ
‘AUTOM.FIELD.NO’.
2.1 CONNEXION 07
2.2 LA LIGNE DE COMMANDE 09
2.3 LOGIQUES DES FONCTIONS 11
3 QUELQUES TABLES SPECIFIQUES 13
4 LES ENQUIRIES 16
5 LES VERSIONS 38
6 PROGRAMMATION 53