université ibm i - notos.fr · la déclaration de ce type de procédure peut être dans un ......

39
IBM Power Systems - IBM i © IBM France 2016 Université IBM i 10 et 11 mai 2016 IBM Client Center de Bois-Colombes S45 - Les différentes techniques d'intégration PHP + RPG Mercredi 11 mai 15h15-16h45 Gautier DUMAS NoToS Dominique GAYTE - NoToS

Upload: dinhdien

Post on 16-Sep-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Université IBM i

10 et 11 mai 2016 – IBM Client Center de Bois-Colombes

S45 - Les différentes techniques d'intégration PHP + RPG

Mercredi 11 mai – 15h15-16h45

Gautier DUMAS – NoToS

Dominique GAYTE - NoToS

Page 2: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

NoToS

Expertise autour de l’IBM i

– Sécurité

– Regard moderne (DB2 Web Query)

Service

– Formation, audit, développement…

PHP sur IBM i avec Zend

Développement de progiciels

– Modernisation à valeur ajoutée des IBM i

2

Page 3: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Sommaire

Pourquoi se tourner vers des solutions PHP+RPG

Appeler du PHP depuis RPG

Appeler du RPG depuis PHP

Exposer une logique RPG par web service grâce à PHP

3

Page 4: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Pourquoi se tourner vers des solutions PHP+RPG

Apporter les applications RPG existantes dans les navigateurs

web et les smartphones rapidement et simplement sans

réécriture à 100 % de l’application

4

Page 5: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Pourquoi se tourner vers des solutions PHP+RPG

Evolution des équipes IBM i

– L’apprentissage facile de PHP et adapté aux développeurs RPG

– Un script PHP peut ne contenir qu’une seule ligne de code

– Pas besoin de tout connaitre ! L’apprentissage est évolutif

– RPG Free est comparable à PHP

– L’objet n’est pas obligatoire : approche procédurale puis objet

– Cohésion entre les équipes de développements

– Rapprochement et implication des équipes IBM i et Web

– Ressources développeurs web disponibles

– Jeunes diplômés et autodidactes

5

Page 6: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Pourquoi se tourner vers des solutions PHP+RPG

Le meilleur des deux mondes

RPG pour le langage de gestion

– Retourner la quantité en stock ou le tarif d’un article en suivant des

règles métiers parfois complexes

– Enregistrement d’une commande client

PHP pour les traitements à valeur ajoutée

– Les interfaces graphiques

– Construction d’Excel, de PDF avec fond de page

– Envoi de mails complexes (format HTML, pièce attachée, …)

– Communication avec l’extérieur (Web Service, FTP, bases de

données distantes)

6

Page 7: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Appeler du PHP depuis RPG

7

Page 8: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Appeler un script PHP depuis RPG

Utile pour déléguer des tâches à un script PHP comme :

– Convertir un spool produit par le *PGM RPG en PDF avec utilisation

d’un fond de page, de logos, de codes à barres ou QR Code etc…

– Enregistrement sur un stockage externe

– Indexation pour accessibilité au travers d’un moteur de recherche

8

Page 9: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Utilisation de QP2SHELL : côté RPG

Côté RPG : appeler un script PHP avec passage de

paramètres

Appel du script sendmail.php avec passage d’une adresse

mail en paramètre

On peut aussi utiliser la syntaxe traditionnelle à base de

CALL

9

Page 10: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

QP2SHELL2

A utiliser plutôt que QP2SHELL qui s’exécute dans un

nouveau groupe d’activation

Un Null Terminator (hexa 00) est nécessaire pour terminer

chaque paramètre !

La déclaration de ce type de procédure peut être dans un

include et intégré avec un /COPY

10

/COPY BIB/QRPGLESRC,INC_PRC

Page 11: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Réception de paramètres en PHP

Passage de paramètres traditionnels :

– Entre deux scripts PHP : $_GET, $_POST, $_SESSION

Comment recevoir des paramètres en PHP depuis un

programme RPG ?

argc et argv : il faut activer la directive !

$argv est un tableau de paramètres

– $argv[0] est toujours le nom du script appelé

– $argv[n] sont les paramètres qui sont transmis

$argc (argument count) est le nombre de paramètres

– Vérification de la bonne réception des paramètres

11

Page 12: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Réception du paramètre : côté PHP

12

<?php

if($argc){

$destMail = trim($argv[1]);

file_put_contents('/home/gdumas/demo.txt', $destMail);

$headers = 'From: [email protected]' . "\r\n" .

'Reply-To: [email protected]' . "\r\n" .

'X-Mailer: PHP/' . phpversion();

mail($destMail, 'Démo IBM i PHP RPG', 'Succès de la démonstration',$headers);

}else{

file_put_contents('/home/gdumas/demo.txt', 'sans parm');

mail('[email protected]', 'Démo IBM i PHP RPG', 'pas de parm reçu');

}

Page 13: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Rappel : Intégrateur

Lance une commande sur le poste de travail

Longueur de la commande passée au paramètre PCCMD

– IBM i Access for Windows et Personal Communications toujours de

123

– IBM i Access Client Solutions : 1023

Fortement dépendant de l’OS du poste de travail

13

PGM parm(&id)

DCL VAR(&CMD) TYPE(*CHAR) LEN(200)

DCL VAR(&PATH) TYPE(*CHAR) LEN(123)

DCL VAR(&id) TYPE(*CHAR) LEN(5)

STRPCO PCTA(*NO)

MONMSG IWS4010

CHGVAR VAR(&PATH) VALUE('"iexplore.exe" +

http://192.168.1.3/lorena/index.php?ent=crmibm&ht=' +

*TCAT &ID *TCAT '&dest=port')

CHGVAR VAR(&CMD) +

VALUE('rundll32 shell32,ShellExec_RunDLL ' *BCAT &PATH)

STRPCCMD PCCMD(&CMD) PAUSE(*NO)

ENDPGM

Page 14: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Appeler un programme RPG depuis PHP

14

Page 15: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Appeler un programme RPG sans paramètre

Si le programme RPG n’attends pas de paramètre, nous

pouvons l’appeler par une requête SQL en PHP par un

CALL BIB.PGM

Permet de lancer un traitement RPG

Possibilité de récupérer un ou plusieurs jeux de résultats

(ResultSet)

15

$cnx = db2_connect(HOST, USR, PWD);

$requete = "CALL IBM2016.RENVOIPS2";

$result = db2_exec($cnx, $requete);

Page 16: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Echanger des jeux de résultats

Pour les anciennes versions de l’OS/400, la solution la plus utilisée pour échanger des jeux de résultats est l’écriture des enregistrements dans une table DB2

Exemple : retourner la liste des factures d’un client

1. Appel depuis PHP du programme RPG faisant la liste des factures du client en passant le numéro client en paramètre et un identifiant de la demande

2. Le programme RPG écrit les résultats de la demande dans DB2

3. Récupération des résultats en PHP par lecture de DB2

Fonctionne techniquement mais nécessite le plus souvent de retoucher un peu les programmes RPG existants

16

Page 17: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Renvoyer un Result Set en RPG (SQL)

Un curseur peut être renvoyé sous forme de Result Set

Utiliser l’ordre SQL SET RESULT SETS Cursor C1

17

/FREE

EXEC SQL

Declare C1 cursor FOR

SELECT CLIENT, NUMCDE, TOTAL

FROM DGAYTE/ENTETE

FOR FETCH ONLY ;

EXEC SQL Open C1;

EXEC SQL SET RESULT SETS Cursor C1;

*inlr = *on;

/END-FREERenvoiPS2

Page 18: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Renvoyer un Result Set en RPG (Tableau ou DS)

Le Result Set renvoyé peut provenir d’un tableau ou de DS à

occurrence multiple

18

RenvoiPST

d Ret DS DIM(3) QUALIFIED

d z1 6

d Z2 5 2

d

/FREE

RET(1).Z1 = 'AAAAAA';

RET(2).Z1 = 'BBBBBB';

RET(3).Z1 = 'CCCCCC';

RET(1).Z2 = 123,45 ;

RET(2).Z2 = 234,56 ;

RET(3).Z2 = 345,67 ;

EXEC SQL

SET RESULT SETS FOR RETURN TO CALLER

array :Ret FOR 3 ROWS;

*inlr = *on;

/END-FREE

Page 19: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Récupérer et traiter les jeux de résultats en PHP

A exécuter comme une requête SQL DB2 classique

19

1. Connexion DB2

2. Appel du programme RPG

3. Parcours du premier jeu de

résultats

Page 20: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Renvoyer plusieurs Result Set en RPG

Pour renvoyer en une seule opération plusieurs listes de

données

20

/FREE

EXEC SQL

Declare C1 cursor FOR

SELECT CLIENT, NUMCDE, TOTAL

FROM DGAYTE/ENTETE

FOR FETCH ONLY ;

EXEC SQL Open C1;

EXEC SQL

Declare C2 cursor FOR

SELECT NUMCDE, count(*) AS NBCDE

FROM DGAYTE/DETAIL

GROUP BY NUMCDE

FOR FETCH ONLY ;

EXEC SQL Open C2;

EXEC SQL SET RESULT SETS Cursor C1, CURSOR C2 ;

*inlr = *on;

/END-FREE RenvoiPS3

Page 21: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Récupérer et traiter les jeux de résultats en PHP

21

1. Connexion DB2

2. Appel du programme RPG

3. Parcours du premier jeu de

résultats

4. Passage au prochain jeu de

résultats

5. Parcours du second jeu de

résultats

Page 22: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Appeler un programme RPG avec paramètres

Plusieurs solutions :

– Par procédures stockées externes

– Par le Toolkit IBM i PHP

Les exemples qui suivent se basent sur l’appel du

programme RPG IBM2016/STOCK retournant la quantité en

stock d’un article.

22

Page 23: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Première solution : à l’aide des procédures stockées externes

23

Page 24: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Procédures stockées externes

Permet d’appeler en SQL DB2 nos programmes RPG avec

paramètres

Création des procédures stockées externes par l’assistant de

System i Navigator ou en SQL

24

Page 25: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Procédures stockées externes

La procédure stockée externe en SQL

25

CREATE PROCEDURE IBM2016.STOCKP (

IN P1 CHAR(4) CCSID 297 ,

OUT P2 INTEGER )

LANGUAGE RPG

SPECIFIC IBM2016.STOCKP

NOT DETERMINISTIC

MODIFIES SQL DATA

CALLED ON NULL INPUT

EXTERNAL NAME 'IBM2016/STOCK'

PARAMETER STYLE GENERAL ;

Page 26: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Appeler une procédure stockée en PHP

26

1. Connexion DB2

2. Initialisation des paramètres

3. Préparation de l’appel

de la PS

4. Binding des paramètres

5. Exécution et

récupération du résultat

Page 27: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Deuxième solution : à l’aide du Toolkit PHP

27

Page 28: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Qu’est ce que le Toolkit ?

Ensemble de classes PHP pour appeler les objets natifs IBM i

Les programmes

– RPG, COBOL, CL …

Autres :

– Commandes IBM i

– Spools, Job logs, Active jobs, Valeurs système

– Data Area, User Spaces

Accès naturel depuis le code PHP

S’appuie sur la bibliothèque XMLSERVICE

Plus d’informations sur : http://yips.idevcloud.com/wiki/index.php/XMLService/XMLSERVICE

28

Page 29: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

A l’aide du Toolkit PHP

Pas de procédures stockées à maintenir

Le développeur PHP peut se concentrer sur le code PHP

29

Page 30: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Exposer une logique RPG par Web Service

30

Page 31: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Les web services en PHP

PHP est un langage prévu pour les web services

Facile et rapide à déployer

Normes SOAP ou REST

Permet de partager des logiques métiers (*PGM) avec :

– Des applications hors IBM i (réseau local ou internet)

– Un site internet (gestion de stocks, de données clients)

– D’autres interlocuteurs : clients, fournisseurs, partenaires…

En conservant la sécurité :

– Mise à disposition seulement des programmes choisis

– Ouverture d’un port web et pas DB2

31

Page 32: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Les web services en PHP

Avec les différentes techniques vues dans cette session,

nous pouvons appeler un programme RPG en PHP sans

difficulté

Il ne reste plus qu’à encapsuler dans un web service ces

appels :

– 1. Ecrire la fonction PHP

– 2. Déclarer le tableau retour du web service (équivalent d’une data

structure)

– 3. Déclarer la fonction PHP comme une méthode web service

Pour l’exemple suivant, la bibliothèque PHP nuSoap est

utilisée

32

Page 33: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

1. Ecrire la fonction PHP

Fonction CallRenvoips2

33

1. Déclaration de la fonction

2. Appel du programme RPG

3. Retour des résultats

Page 34: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

2. Déclaration du tableau retour

34

Tableau à 3

colonnes :

CLIENT

NUMCDE

TOTAL

Page 35: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

3. Déclaration de la méthode web service

35

Page 36: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Exemple complet (1)

36

Page 37: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Exemple complet (2)

37

Page 38: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Accessible depuis un navigateur

Description accessible depuis un navigateur

38

Page 39: Université IBM i - notos.fr · La déclaration de ce type de procédure peut être dans un ... COBOL, CL … Autres : ... Déclaration du tableau retour 34 Tableau à 3 colonnes

IBM Power Systems - IBM i

© IBM France 2016

Merci pour votre écoute !

Des questions ?

S45 - Les différentes techniques d'intégration PHP + RPG

Gautier DUMAS - [email protected]

Dominique GAYTE – [email protected]

04 30 96 97 31

www.notos.fr