Architecture IBM i

Initiation au développement



Comme la définition de la base de données qui 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

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)

 


Le reste du programme était historiquement basé sur des spécif C (de traitement, Compute) et a été remplacé par du RPG dit "free" en V5R10 (2001)

 il s'agit de lignes blanches (sans la lettre C en colonne 6) 
  situées entre /free et /end-free (colonne 7)                

 l'instruction peut être éclatée sur plusieurs lignes (sans caractère + )
  la fin de CHAQUE instruction étant marquée par " ; "                
  
/free       test(E) date ;
    // commentaire
       if not %error ; 
        date = date + %DAYS(1) ;
        nbjours = %DIFF(date : undimanche : *DAYS);
        joursemaine = %rem(nbjours : 7);
        if joursemaine < 1; 
          joursemaine = joursemaine + 1;
        endif;
     *inlr = *on;
     endif;
     return; 
/end-free


par exemple, un pgm de vérification de l'adresse mail


peut maintenant être écrit :


ILE permettant d'écrire nos propres fonctions, afin d'enrichir le langage

Depuis la version 7, les déclarations peuvent elles-mêmes être saisies en format libre

 

ainsi, ce code :


Devient

les procédures cataloguées (ou stockées)

une procédure cataloguée peut retourner une liste de valeurs
 par un ordre SQL SET RESULT SETS

CREATE PROCEDURE AF4TEST/LISTEMAIL ( CHAR(50) ))   
         EXTERNAL NAME 'AF4TEST/SRVMAIL(CHKMAIL)'    
 
          PARAMETER STYLE GENERAL                    
           

Cet enregistrement est mémorisé dans SYSPROCS de QSYS2

les fonctions définies par l'utilisateur [UDF]

une fonction retourne UNE valeur.


une fonction est un programme ou une procédure dans un programme de service
 enregistré(e) dans les catalogues SQL par CREATE FUNCTION.


 par exemple :

notre routine RGP4 de vérification de mail, peut devenir

Être compilée par CRTRPGMOD puis CRTSRVPGM SRVMAIL ... EXPORT(*ALL)

et enfin, être déclarée à SQL, par :

    CREATE FUNCTION AF4TEST/CHKMAIL ( CHAR(50) ) RETURNS CHAR(1)   
         EXTERNAL NAME 'AF4TEST/SRVMAIL(CHKMAIL)'    (1)
 
          PARAMETER STYLE GENERAL                    (2)
           RETURNS NULL ON NULL INPUT  ;             (3)

 

(1) fait référence à CHKMAIL dans SRVMAIL (*SRVPGM)
(2) le passage de paramètres se fait sans gestion de la val. nulle
(3)
  la fonction retourne nul si un des argument est nul (il n'y aura pas d'appel)

Cet enregistrement est mémorisé dans SYSFUNCS de QSYS2

Quand un exécutable a été enregistré en tant que procédure ou fonction, cela est indiqué dans l'exécutable directement et une simple restauration
sur une autre machine doit l'enregistrer à nouveau.

Mais, Vous pouvez aussi créer des procédures et des fonctions à l'aide du PL/SQL, cela créé un exécutable (objet *PGM).


Dans le cadre des services web, il n'y a pas d'enregistrement de l'exécutable en tant que web-service, il faut re-déployer à nouveau dans le serveur d'application.

Ce dernier propose des scripts pour réaliser cette opération en automatique

installWebservice.sh 
     
Command usage: 
   installWebService.sh 
   -server 'server-name' -programObject 'program-object' 
   [-service 'service-name'] [-pcml 'pcml-file'] [-userid 'userid'] 
   [-libraryList 'library-list'] [ -printErrorDetails ] [ -help ] 

WDSc est un produit IBM faisant partie du produit 5722WDS, RDI et RDP sont facturés séparément

Ils sont basés sur ECLIPSE, un IDE en licence publique d'initiative IBM, comprenant :.

RDP, est la version IBM i de ce produit, et comprenant :

 

 

© AF400 - Volubis