Modernisation IBM i


 


La base de données DB2 for I est globale (il n'y a pas de possibilité de créer plusieurs bases indépendantes,
sauf iASP depuis la V5R20). Ce qui s'en rapproche le plus est la notion de bibliothèque.

Chaque bibliothèque contient des fichiers base de données autonomes, contenant leur propre description (objets au sens IBM i) :

Rappels sur les concepts de développement



La définition de la base de données peut être fait de deux manières :

  1. Langage historique SDD ou DDS
  2. SQL permettant le support de plus de types de données (voir ci-dessous)

L'accès à la base peut se faire selon deux modes :

  1. Accès séquentiel indexé (dit "natif")
  2. SQL embarqué

L'accès natif :

 

Les fichiers sont déclarés par le biais de "spécif F", une par fichier manipulé :

Attention, chaque nom doit être unique :

nom de fichier ET nom de format
 (pourtant SQL par défaut donne un nom de format identique à la table, il faut alors utiliser RENAME)

nom de fichier ET nom de zone

noms de zone identiques ayant des attributs différents
 (nocli qui fait 6 dans le fichier clients et 7 dans le fichier commandes)

Quand le fichier est déclaré, le compilateur prévoit un "buffer" pour recevoir les lignes lues :

mais aussi

Le compilateur RPG a aussi prévu une variable RPG par colonne base de données, et celles-ci sont automatiquement alimentées par des spécif "I"

 

A noter qu'il se passe exactement l'opération inverse lors d'une écriture

 

Le compilateur doit être appelé, il va créé un objet *PGM, autonome quant à son exécution.

En cas de modification de la structure, pour éviter un décalage lors des lectures :

 

Ce n'est pas le cas avec SQL qui utilise des curseurs

 

et place directement les données du curseur dans des variables RPG (pas de buffer)

 


 

 

Comment moderniser la base de données / SQL vs DDS.

 

Le langage SQL est composé de sous ensembles

DDL


Data Definition Language (DDL) , instructions de création et de maintenance de la structure base de données

DML


Data Manipulation Language (DML) instructions de manipulation de données:

DCL


Data Control Language (DCL) instructions de gestion des droits:

 

Autant l'utilisation de DML se démocratise chez les clients IBM i , autant DDL reste minoritaire...

 

Pourtant IBM préconise l'utilisation de SQL (DDL) pour concevoir la base de données.

 

 

 

Voici la vision d'IBM concernant la phase de transition de modernisation de la base de données



Modernisation, phase 1

la phase 2 consiste à faire des modules d'accès à la base (*SRVPGM par exemple)

la phase 3 à reporter sur la base de données un maximum de logique métier

enfin, la phase 4 propose d'externaliser l'accès aux données

 

Revenons à l'étape 1, le principe est le suivant :

  1. Conversion des fichiers physiques en tables SQL
  2. Création d'un logique SDD ayant le même format que l'ancien physique
  3. Recréation des différents logiques

Partons donc d'un fichier physique existant (bibliothèque FORMATION1) que nous souhaitons "moderniser" dans le Schéma TEST1

dont voici l'identifiant de format (3D99B1000F5D9)

La fonction génération d'instructions SQL permet de retrouver le source SQL
y compris des fichiers créés par SDD

Les fonctions non supportées sont notées en commentaire

Que nous transformons en :

Nous aurions aussi pu ajouter une zone AS ROW CHANGE TIMESTAMP, par exemple.

Créons ensuite le logique portant le même nom que l'ancien physique SDD

Vérifions




Proposition de stratégie pour moderniser les programmes

 

 

Exemple

Il parait assez simple d'imaginer un programme réalisant (de manière autonome) la mise à jour d'un fichier

Regardons plutôt un programme de constitution d'une liste de données valorisées.


Soit un programme (sans doute avec une partie du code hérité d'un ancien traitement)

Qui retourne des informations concernant les 15 producteurs qui suivent (SETGT) celui passé en paramètre


Ce pgm a trois paramètres en entrée

  1. Pr_code pour le positionnement
  2. NbProd pour retourner le nombre lu
  3. Retour DS à 15 occurrences     


Ce programme peut facilement être transformé en Web service (ici SOAP)




Testons

Mais aussi, avec les derniers niveaux de PTF, en web service REST




et voilà

Donc lancé, depuis une simple URL


voire, utilisé en SQL (fonction HTTPGETBLOB + XMLTABLE)


Ou si vous le préférez, transformé en Procédure stockée (on ajoute une interface pour gérer le RESULT SET SQL)



ET il devient utilisable directement, via JDBC/ODBC


Enfin, le monde 5250 n'est pas oublié pour autant

soi le DSPF suivant (avec sous fichier)


ET le PGM RPG

déclarations

boucle principale

Sous programme de chargement d'une page


On ne charge que 14 lignes par page (SFLPAG)

     Remarquez la gestion de l'indicateur 31, qui teste s'il y a 15 lignes (au moins encore une ligne = ROLLUP autorisé)

Résultat

© AF400 - Volubis