Pause-Café Volubis

pause-café

rendez-vous technique
Pause-Café est une réunion technique
destinée aux informaticiens sur plateforme IBM i.
Elle a lieu 3 fois par an : en général en Bretagne et sur Paris.

Pause-café #82

Septembre 2019
le 25 à Paris (Mas), le 26 à Guipry (la Minoterie.) ,

V7R4


IBMi, version 7.4

Attention

 

 

 

Sinon, voyez la liste des PTF préalables : https://t.co/FNf1wWLOiq?amp=1

 

Installation, comme d'habitude...

passez par GO LICPGM, option 5 pour préparer l'installation



Gestion des logiciels sous licence - Edition cible (chargez les CD ou la clef USB)


impératif, acceptez les licences à l'avance, au mois pour le microcode et l'OS

 

Pensez bien à réserver un espace supplémentaire

 

 

 

Nous sommes parti d'une clef USB 3.0 (supportée par P8 et P9) plutôt qu'un catalogue d'images (ou de DVD)


pour cela téléchargez ce deux fichiers sur ESS

 

Lancez le .jar contenu dans "Utility for bootable Licenced machine Code ....zip"



Confirmez le formatage



C'est parti

copiez ensuite les fichiers .UDF correspondant aux autres produits.

Cette clef doit être considérée comme bootable :

 

Sur un Power8 indiquez l'unité comme unité alternative

 

sur un power9, cela doit faire partie des unités examinées automatiquement (attention au niveau de firmware)

car elle est formatée avec l'option *CONTAINER (voir developerWorks)

Faites un IPL-D








le système "reboot", puis

 

Si vous utilisez une clef USB




le système termine son IPL, et affiche




Faites GO LICPGM / option 11 et installez le reste...


Liste des différences/nouveautés :

 

Nouveautés SQL de la version 7.4

  • INSERT INTO <table> DEFAULT VALUES
    • Pour réserver une ligne ((assignation d’un champ Identity, puis mise à jour dans un 2ème temps)
    • Tester un trigger
    • ....

  • Fonctions de cryptage
    • HASH_MD5 (résultat de 128 bits)
    • HASH_SHA1 (160 bits)
    • HASH_SHA256 (256)
    • HASH_SHA512 (512)


    • La fonction nommée HASH en 7.3 , liée au partitionnement (au sens DB2 Multi-systèmes) devient HASH_VALUE

  • SYSTOOLS.SPLIT('série-éléments' , 'séparateur')
    • Fonction table qui retourne une ligne par élément rencontré
    • Exemple : Split('A/B/C/D/E' , '/')
  • QSYS.DATA_AREA_INFO : nouvelle fonction table qui donne des infos sur une *DTAARA



  • et la VUE du même nom


  • QSYS2.MESSAGE_FILE_DATA

    vue affichant le contenu des fichiers messages (*MSGF)

  • Vue SYSTOOLS.FIRMWARE_CURRENCY

    •FW_CURRENCY  VARCHAR(28)  Niveau actuel de firmware

    •FW_CURRENT_FIXPACK  VARCHAR(20)  service pack

    •FW_RELASE_DATE  DATE  date du niveau actuel

    •FW_MACHINE_TYPE_MODEL  VARCHAR(20)  type et modèle

    •FW_RECOMMENDED_UPDATE  VARCHAR(20)  niveau de mise à jour recommandé (même version)

    •FW_RECOMMENDED_UPGRADE VARCHAR(20)  version recommandée



  • SYSTOOLS.SPOOLED_FILE_DATA


    Fonction table retournant le contenu d'un spool (fait un CPYSPLF dans QTEMP et affiche le fichier)

Nouveautés RPG de la version 7.4

 

.Nouveautés disponibles seulement en 7.4

 

Tableaux dynamiques

2 possibilités pour les déclarer DIM(*AUTO:nbmax) ou DIM(*VAR:nbmax)

 

 

 

La fonction %ELEM admet un deuxième paramètre ce qui permet :

 

 

Tableaux chargés à la compilation

Il est maintenant possible de déclarer des tableaux chargés à la compilation sans indiquer le nombre de postes

 

 

Serveur de web services

Nous savions déjà déployer des programmes ILE (RPG ou COBOL) sous forme de Web services

 

Avec la 7.4 + SF99662 (ou SF99722[7.3], SF99713[7.2])

7.4 7.3 7.2
SF99662
+SI71125
SF99722/19
+SI71124

SF99713/32
+SI70478,SI71123


nous pouvons aussi déployer des web services (REST uniquement) basés sur SQL

 

 

Premier exemple, une requête SQL simple

 

 

Indiquez ici :

puis par le bouton Add, saisissez une requête SQL


 

Etape suivante

 

 

Paramètres

 

Choix du profil de référence (QWSERVICE/dft)

 

 

Puis récapitulatif :

 

Description du service

 

JDBC

 

Requête, méthode et format de sortie

 

 

une fois le service créé, vous pouvez

 

testons

SQLState en fonction des formats de données :


En cas d'erreur :


 


ici, un code pays sera transmis

 

placez alors dans la requête un ou plusieurs ?

La syntaxe des la requête est contrôlée lorsque vous cliquez sur « Continue » ou « Add »

ils serons détectés, en tant que paramètres, le type sera automatiquement attribué en fonction de la colonne testée

 

le lien est fait ici :

 

et cela se retrouve sur l'écran récapitulatif

 

Résultat

 

Single-row

 

 

la différence est là

 

 

 

 

 

Résultat (formaté par Firefox)

Particularités de liste de bibliothèques

Attention, ces valeurs sont liées et définissent la résolution des objets ou fonctions non qualifiées

  • Avec *SQL et « Default schema » = *LIBL, La bibliothèque par défaut sera la 1ère bibliothèque de « Library list » qui n’est pas *LIBL. A défaut, ce sera le profil utilisateur
  • Avec *SYS et « Default schema » = *LIBL, Pas de bibliothèque par défaut, utilisation de la liste de bibliothèques (via la JOBD)

Données binaires


depuis cette table


 

 

remarquez le type SQL retourné

 

et le type MIME déclaré

 

Résultat


Vous devez indiquer le type de données en retour

  • 1 seul type pris en compte
  • Si vous en indiquez plusieurs, seule la 1ère valeur est prise en compte

Résultat


Par exemple, avec un PDF :

Par exemple, avec un JPG :

Procédure stockées

Soit cette procédure, qui avec un paramètre en entrée (position de début de liste) retourne 50 producteurs




Déployons


Instruction SQL


Résultat "Multi-Row"


Lien avec le paramètre en entrée


Résultat


UDF

Vous pouvez utiliser directement des fonctions SQL ou des UDF conjointement avec VALUES :

 

Post / Put

exemple d'insertion de données (création d'une nouvelle ligne)

 

Cette fois, la requête est un INSERT

 

Les paramètres sont détectés

 

Renommons les



retour d'un status à 201 Created




et cochez Wrap Input parameters

pour tester, utilisons soapUI, méthode POST, remarquez le JSON envoyé



si vous avez oublié, le fichier swagger vous rappelle les paramètres attendus


Si vous cochez Do not Wrap Input parameters :


Vous devrez indiquer pour chaque valeur  le mode de passage correspondant. Possible si vous avez peu de colonnes dans la table en question !



Exemple d'appel :


POST /web/services/itemps?agent=User iTemps& ticket=R-000136& heure=02:30:00 HTTP/1.1

Host: neptune:10032
Content-Type: application/x-www-form-urlencoded
Accept: */* Content-Length:

 

 

En cas d'erreur, cherchez un job QZDASOINIT sous le profil QWSERVICE (ou celui indiqué dans le serveur)


Nom des éléments dans les données retournées

Multiple rows


 

Pour vous aider à automatiser

Prise en charge dans les fichiers de configuration.

Un nouveau script permet de retrouver le fichier de configuration d'un service existant.


getConfigurationFile.sh
-server 'server-name' -locationDirectory 'location-directory'
[ -type '*ML|*PROPERTY|*ALL' ]
[ -serviceList 'service-list|*ALL' ]



Quelques tests en cours

Mais impossible d’utiliser des paramètres dans des fonctions standard du langage :



 

  • Plusieurs problèmes de compilation Java liés à des noms en doubles ou mots-clés réservés Java (par exemple nom de procédure=nom paramètre)
  • Caractères spéciaux / accentués dans les messages personnalisés : plantage et obligation de désinstaller le service, sauf SI70949
  • Paramètre en sortie de procédure stockée : provoque HTTP500 et "Array index out of range"
  • Contrôle du header HTTP ? Du type MIME en sortie ?
  • Données binaires : impossible en entrée ...

 

 

 

 


Enfin les produits Open sources suivants sont disponibles


    • Driver unixODBC (ODBC en mode Pase)


      le driver d'IBMi Access lui même :

      Téléchargez le sur https://www-01.ibm.com/support/docview.wss?uid=isg3T1026805


      (la dernière ligne)

      Dézippez puis transférez le fichier dans un répertoire sur l'IBM i


      Installez le par :
      yum install ibm-iaccess-1.1.0.11-0.ibmi7.2.ppc64.rpm
      Il doit apparaitre, ici :


      La config se trouve dans /QOpenSys/etc/odbc.ini
      l'installation du driver à créé une entrée *LOCAL


      Vous pouvez l'utiliser en mode commande



    • tree


    • nodeJS 12


    • Maven


    • Lua


    • GDB : le debugger pour le compilateur GCC

    • langage R (le driver unixODBC peut être utilisé pour accèder à DB2)

    • ActiveMQ (compatible JMS)