Vous connaissez tous le mot clé WINDOW dans les DDS qui vous permet d’afficher une fenêtre.
Cette solution a certaine contraintes comme les réaffichages par exemple.
Voici une alternative qui permet d’afficher une fenêtre sans utiliser ce mot clé
Le code l’écran
A*%%TS SD 20231003 225454 PLB REL-V7R4M0 5770-WDS
A* EXEMPLE DE FENETRE SANS WINDOW
A*
A*%%EC
A DSPSIZ(24 80 *DS3)
A USRDSPMGT
A INDARA
A R FMT01
A*%%TS SD 20231003 225454 PLB REL-V7R4M0 5770-WDS
A CA03(03)
A CA12(12)
A SLNO(01)
A CLRL(*NO)
A TITRE 25A O 15 45DSPATR(HI)
A DSPATR(RI)
A 16 45' '
A DSPATR(HI)
A DSPATR(RI)
A TEXTE01 21A O 16 47
A 16 69' '
A DSPATR(HI)
A DSPATR(RI)
A 17 45' '
A DSPATR(HI)
A DSPATR(RI)
A TEXTE02 21A O 17 47
A 17 69' '
A DSPATR(RI)
A DSPATR(HI)
A 18 45' '
A DSPATR(HI)
A DSPATR(RI)
A TEXTE03 21A O 18 47
A 18 69' '
A DSPATR(HI)
A DSPATR(RI)
A 19 45' F2=Valider F3=Fin '
A DSPATR(HI)
A DSPATR(RI)
Le programme RPGLE
**free
// Affiche une fenêtre sans window
// renvoi OK si vous appuyez sur <ENTER>
// renvoi KO si vous appuyez sur F3 ou F12
// call fenetre ('Titre' 'texte01' 'texte02' 'texte03' ' ')
dcl-f fenetre workstn ;
dcl-pi *N ;
Titre char(25); // Titre fenêtre
Texte01 char(21); // texte première ligne
Texte02 char(21); // texte deuxiéme ligne
Texte03 char(21); // texte troisième ligne
Retour char(2); // code retours
end-pi ;
if %parms = 0 ;
dsply ('Ce programme nécessite 6 paramètres') ;
else ;
// Affichage format
Exfmt FMT01 ;
if *in03 or *in12 ;
Retour = 'KO' ;
else ;
Retour = 'OK' ;
endif ;
endif;
// Fin de programme
*inlr = *on ;
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-10-04 06:08:522023-10-04 06:08:54Fenêtre sans le mot clé WINDOW
Vous faites le l’administration, le plus souvent en 5250 sous l’écran de commandes IBMI ==> call QCMD
Vous voulez effacer la log que vous voyez par la commande DSPJOBLOG.
La première solution consiste à vous déconnecter, du coup la log est effacée ou transformée en spool.
Cette méthode efface tout le contexte mis en place, liste de bibliothèques , variables d’environnement, objets dans QTEMP que vous avez peut être mis beaucoup de temps à construire dans vos tests.
L’idée c’est d’avoir une solution moins radicale qui permette de n’effacer que la log de votre travail, c’est pourquoi vous devriez avoir dans vos tools un outil comme celui la
Une commande qu’on a appelé astucieusement CLRLOG que vous pouvez trouver ici
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-09-17 16:31:212023-09-17 16:42:33Effacer la log de votre travail
Vous avez encore des développements en 5250 avec des DSPF et vous vous posez la question : dois je utiliser une touche CA ou CF ?
Nous allons essayer de vous apporter quelques éclaircissements sur les usages et les bonnes pratiques
Première chose, vous pouvez utiliser une touche de fonction de 2 manières
CA03(03) ou CA03 uniquement
Avec CA03(03), vous testerez *IN03 dans vos programmes RPGLE et &IN03 en CLLE. Avec CA03, vous testerez *INKC dans vos programmes RPGLE et c’est plus compliqué à gérer en CLLE.
Jusque la on utilisait les indicateurs *inka … pour économiser les indicateurs de 01 à 24 (99 disponibles), sur les nouveaux développement on utilise moins d’indicateurs et plus de fonctions intégrées comme %EOF(). Il est donc conseillé d’utiliser les indicateurs *IN01 à *IN24 ; de plus vous pouvez les renommer pour rendre plus lisible dans les programmes !
Pour ce faire, vous devez déclarer votre écran en INDARA pour indiquer que les indicateurs sont séparés du flux des données.
A* Niveau fichier dans le dds : A INDARA
Dans le source du programme RPG : dcl-f MONECR WORKSTN indds(DS_Ind) ; Dans les déclaration :
Dcl-DS DS_Ind len(99); // Touches de fonctions Sortie ind pos(3); Liste ind pos(4); Reaffichage ind pos(5); Creer ind pos(6); Valider ind pos(10); Annuler ind pos(12); … End-DS;
Conseil
Comme vous devez vous baser sur la NORME AUA , vous pouvez faire un include avec ces touches de fonction.
dans le code vous pouvez indiquer :
IF SORTIE ;
Comment déclarer les touches dans vos DDS ? Vous pouvez les déclarer
au niveau du fichier, votre touche sera utilisable dans tous les formats. C’est le cas par exemple de CA03 pour sortir.
au niveau du format, on ne peut pas redéclarer une touche déjà décrite au niveau fichier
Exemple :
A* niveau fichier A CA03(03) A R PREMIER A A R DEUXIEME A* niveau du format A CA12(12)
vous pourrez utiliser : CA03 sur le format PREMIER CA03 et CA12 sur le DEUXIEME
Plus vous serez précis dans vos déclarations, plus vos programmes serons clairs et précis. Toutes les touches déclarées dans les formats doivent être traitées dans le code. Si vous utilisez une touche dans un programme et qu’elle n’est pas traitée … ça peut poser problème, du genre mise à jour sans lecture de l’écran.
Pourquoi CA et pas CF !?
Pour vous expliquer nous avons choisi de faire ce petit exemple (écran + programme RGPLE)
A*%%TS SD 20230914 164942 PLB REL-V7R4M0 5770-WDS
A*%%EC
A DSPSIZ(24 80 *DS3)
A R FMT01
A*%%TS SD 20230914 164942 PLB REL-V7R4M0 5770-WDS
A CA07(07)
A CF08(08)
A 4 10'Test pour comprendre la différence-
A entre une touche CA et CF'
A DSPATR(HI)
A 9 10'Saisir une valeur ici '
A 9 33':'
A ZONE 1A B 9 35VALUES('1' '2')
A 9 38'Veuillez saisir 1 ou 2'
A DSPATR(HI)
A 20 10'CA07==> Sortir sans lecture'
A 21 10'CF08==> Sortir avec lecture'
Où il est possible d’utiliser les touches de fonction 07 déclarée CA et 08 déclarée CF.
f
Premier test
Vous tapez directement F7 ou F8, le comportement est le même si votre buffer n’a pas été modifié, il n’y a pas de lecture. Pour déterminer si le buffer est modifié le système se sert d’un octet attribut (dans le format ou dans la zone) dans le quel on un MDT qui sera à *ON. Si le buffer ou la zone à été modifiée. vous devrez forcer ce tag dans le cas ou contrôlez des données.
C’est le mot clé DSPATR(MDT) dans les DDS qui permet ça, vous pouvez le conditionner par un indicateur.
Deuxième test
Vous saisissez 9 dans l’écran. F7 sort directement et tient pas compte de la saisie, c’est ce qui convient pour les touches F3 ou F12. F8 déclenche une lecture avant de sortir et comme on a fait le choix de contrôler la valeur saisie à 1 ou 2, on est bloqué jusqu’à ce qu’on ait renseigné la zone à la bonne valeur, C’est ce qui convient pour les touches F6 ou F10. On imagine bien que si vous avez 10 zones avec contrôles, ça poser problèmes quel que soit le contrôle
Rappel sur l’ordre à faire sur vos contrôles
1) Contrôle de valeurs, gérer par VALUES() ou CHECK() dans le DDS, aucun code à traiter côté programme.
2) Contrôles de dépendance exemple borne début < borne de fin (toutes les informations de l’écran sont suffisantes pour le contrôle).
3) Contrôles nécessitants une ressource externe, le plus souvent en base de données (saisie d’un numéro de client à contrôler).
La règle si la valeur saisie n’est pas bonne ce n’est pas la peine de faire le contrôle suivant !
Conseil : Soyez précis dans vos déclarations dans le niveau format ou tous les format au fichier. et n’utilisez les touches CF que quand vous devrez traiter les données de l’écran.
Comment gérer simplement les informations de modifications sur les enregistrements utilisateur + date de création ou de modification
Vous connaissez la méthode applicative par sql ou update
Vous connaissez la méthode par trigger after, vous modifiez les zones dans le buffer après avec les informations en cours.
Voici un solution ou vous n’avez rien à faire, vous laissez faire SQL
Soit la table suivante des applications :
CREATE TABLE APPLICATION1 FOR SYSTEM NAME APPLICAT1 ( DESCRIPTION_APPLICATION FOR COLUMN DES_APP CHAR(50) NOT NULL WITH DEFAULT, APPLICATION_CODE FOR COLUMN APP_COD CHAR(8) NOT NULL WITH DEFAULT,
/* Informations de mise à jour */ APPAUSRCHG VARCHAR(18) GENERATED ALWAYS AS (USER), APPATMPCHG TIMESTAMP FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP NOT NULL, APPAUSRCRT CHAR(18) NOT NULL DEFAULT USER IMPLICITLY HIDDEN, APPATMPCRT TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP IMPLICITLY HIDDEN ) Explications :
GENERATED ALWAYS AS (USER), indique que la zone est systématiquement forcée avec l’utilisateur en cours FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP indique qu’a chaque modification, vous aurez la date en cours DEFAULT USER indique valeur par défaut utilisateur en cours DEFAULT CURRENT_TIMESTAMP indique valeur par défaut date en cours HIDDEN indique que la zone n’apparaitra pas dans un select *
UPDATE GDATA.APPLICATION1 SET DESCRIPTION_APPLICATION = ‘TEST2’, APPLICATION_CODE = ‘test2’ WHERE DESCRIPTION_APPLICATION = ‘TEST’
Visualisation du résultat
Sauf zones cachées
SELECT * ROM GDATA.APPLICATION1
Avec les zones cachés
SELECT DESCRIPTION_APPLICATION, APPLICATION_CODE, APPAUSRCHG, APPATMPCHG, APPAUSRCRT, APPATMPCRT FROM GDATA.APPLICATION1
Remarques : Les zones user devront être sur 18 en varchar Vous devez utiliser le format explicite pour la création Voila , Simple et efficace Merci à Patrick pour son exemple de code
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-09-07 21:19:252023-09-12 11:35:57Tables avec informations de création et modification
Vous devez coder un source en UIM, qui correspond aux déclarations que vous avez indiqué dans votre DSPF :
:PNLGRP.
:HELP NAME = 'GPARAME' .AIDE (GPARAME).
:XH3. AIDE GPARAME.
:P.
Ce programme vous permet de (ici descriptif général du programme)
:EHELP.
:HELP NAME = 'GPARAME/GLOG' .AIDE (GLOG).
:XH3. AIDE GLOG.
:P.
Cette zone (ici descriptif de la zone)
:EHELP.
...
:EPNLGRP.
C’est relativement simple à faire, vous pouvez utiliser tout le langage UIM.
Pour en savoir plus sur UIM : https://www.ibm.com/docs/en/i/7.4?topic=interfaces-user-interface-manager
Voici un exemple de ce que cala donne en faisant <F1> sur une Zone ici numéro de série
Pour vous aider, nous proposons un outil qui vous permet de générer les mots clés nécessaires pour le DSPF et le squelette de votre panel de groupe. Vous pouvez trouver l’outil ICI il s’appelle GENUIMDSP :
Vous devez indiquer le fichier écran , le source avec les mots clés ici QDDSSRC, le squelette du panel ici dan QPNLSRC.
Remarque :
L’outil n’est pas parfait mais, il vous aide bien, si vous voulez contribuer, n’hésitez pas !
L’ajout des mots clés dans le DSPF ne change pas la commande de compile, ni les niveaux des formats dans lesquels vous ajoutez des aides.
La liaison est dynamique et si l’aide n’est pas trouvée, il n’y a pas de plantage donc pas de régression applicative, vous aurez « juste » le message suivant :
Ça peut être intéressant quand vous faites de la maintenance d’ajouter des aides, et avec notre méthode c’est rapide, simple et efficace.
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-09-04 12:49:122023-09-05 17:42:35Ajouter de l’aide à vos DSPF
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-08-11 10:18:442023-08-16 07:26:46IA et développement IBMI
C’est une solution à base d’UIM qui permet de gérer des sous fichiers sans écran DDS, en utilisant un panel de groupe et des API pour le manipuler.
Toutes les commandes WRKXXX de votre IBMi sont codées avec cette solution.
Nous allons vous présenter un exemple pour les PF par exemple vous trouverez le code sur github ici https://github.com/Plberthoin/PLB/tree/master/WRKPF
Cet article est inspiré à l’origine d’un article de mcpressonline, j’ai remis le RPG à jour
Vous devrez avoir un PNLGRP avec la structure suivante, pour indiquer les listes
Vous aurez un programme ici en RPG qui va utiliser les API suivantes :
Api Utilisation
QUIOPNDA Ouverture du panel création du Handle QUIPUTV Renseignement variable QUIADDLE Ecriture d’un poste dans la liste QUIDSPP Affichage du panel QUIDLTL Suppression du contenu de la liste QUICLOA Fermeture du panel
Rappel, vous pouvez chercher les APIs disponibles sur votre IBMi avec API-FINDER disponible
C’est une solution standard qui ne nécessite pas de DSPF, mais qui nécessite de connaitre un peu le langage UIM. Avec un squelette de PNL et de programme on peut créer des outils WRKXXX rapidement, idéal pour les outils d’administration par exemple
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-08-08 07:55:242023-08-11 15:55:44Exemple de panel liste
En sélectionnant la bibliothèque et le fichier, vous pouvez soit utiliser le résultat dans un programme CLLE. Ou directement dans un select avec la fonctions SQL QCMDEXC
3) Sans générer de fichier
Cette méthode est moins connue, mais elle permet de traiter tous les membres d’un fichier sans générer de fichier intermédiaire
Vous allez avoir un programme CLLE, qui aura cette logique
Vous allez récupérer le premier membre RTVMBRD FILE(LIB/FIL) MBR(*FIRSTMBR) RTNMBR(&MBR) MONMSG MSGID(CPF0000) EXEC(do) ENDDO
Vous allez ensuite boucler sur les suivants RTVMBRD FILE(LIB/&FIL) MBR(&MBR *NEXT) RTNMBR(&MBR) MONMSG MSGID(CPF3049) EXEC(leave)
Vous allez ainsi lire tous vos membres de votre fichier.
Vous pouvez également utiliser cette méthode pour traiter des membres de transfert qui arriveraient dans votre fichier.
Conclusion :
Vous avez 3 solutions pour les traiter les membres d’un fichier, à vous de choisir la méthode la plus adapter à votre traitement
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-07-25 12:10:102023-08-11 16:02:47Traiter les membres d’un fichier
Sur le site https://adresse.data.gouv.fr/ En cliquant sur l’item « Outils et API », on accède librement à la documentation des API en rapport avec les adresses. Nous choisissons donc celle sobrement intitulée « API Adresse ». La documentation montre différentes manières d’utiliser cette API. Le retour est un geojson FeatureCollection respectant la spec GeoCodeJSON.
Récupération et manipulation des données
But du programme
Nous allons réaliser un programme qui permettra, en écrivant partiellement une adresse, de récupérer une adresse complète d’après une liste déroulante de 50 occurrences.
Nous choisirons pour notre programme une interrogation relativement simple et nous n’extrairons qu’une partie des données du geojson.
Nous écrirons les adresses dans un fichier, sous forme d’une fiche client contenant les éléments suivants :
Identifiant (integer auto incrémenté)
Raison Sociale (varchar)
Adresse (varchar)
Code Postal (varchar)
Ville (varchar)
Coordonnées géographiques (ST_POINT)
Préparation du fichier
create table GGEOLOC.MESCLIENTS
(ID int GENERATED ALWAYS AS IDENTITY (
START WITH 1 INCREMENT BY 1
NO MINVALUE NO MAXVALUE
NO CYCLE NO ORDER
CACHE 20 ),
RAISOC varchar(64),
ADRESSE varchar(128),
CODEPOS varchar(16),
VILLE varchar(64),
COORDGEO QSYS2.ST_POINT);
Programme de saisie
**free
ctl-opt dftactgrp(*no) ;
// Fichiers
dcl-f FORMCLIE workstn indds(DS_Ind) usropn;
// Procédures
dcl-pr Touche_F4 EXTPGM('TOUCHE_F4');
p_Sql char(1024) ;
p_Titre char(35);
p_Ret char(116);
end-pr;
// Variables
dcl-s reqSqlDelete varchar(2000);
dcl-s reqSqlCreate varchar(2000);
dcl-s reqSqlDrop varchar(2000);
dcl-s coordonees varchar(64) ;
dcl-s queryapi varchar(64);
dcl-s httpText varchar(256);
dcl-s pIndicators Pointer Inz(%Addr(*In));
// Pour F4 : liste des fichiers
dcl-s w_Sql char(1024) ;
dcl-s w_Titre char(35);
dcl-s w_Ret char(116);
// DS Informations Programme
dcl-ds *N PSDS;
nom_du_pgm CHAR(10) POS(1);
nom_du_prf CHAR(10) POS(358);
end-ds;
// Déclaration des indicateurs de l'écran
Dcl-DS DS_Ind based(pIndicators);
Ind_Sortie ind pos(3);
Ind_Liste ind pos(4);
Ind_Annuler ind pos(12);
Ind_Valider ind pos(17);
Ind_SFLCLR ind pos(40);
Ind_SFLDSP ind pos(41);
Ind_SFLDSPCTL ind pos(42);
Ind_SFLEnd ind pos(43);
Ind_DisplayCoord ind pos(80);
Ind_RaisonS ind pos(81);
Ind_5Lettres ind pos(82);
Ind_CodePos ind pos(84);
Ind_Ville ind pos(85);
Indicators char(99) pos(1);
End-DS;
// Paramètres en entrée
dcl-pi *N;
end-pi;
// SQL options --------------------------------------------- //
Exec SQL
Set Option
Naming=*Sys,
Commit=*None,
UsrPrf=*User,
DynUsrPrf=*User,
Datfmt=*iso,
CloSqlCsr=*EndMod;
//--------------------------------------------------------- //
// Contrôle taille écran
Monitor;
Open FORMCLIE;
On-Error;
Dsply 'Nécessite un écran 27 * 132';
*inlr=*on;
Return;
EndMon;
Dou Ind_Sortie or Ind_Annuler;
znompgm = nom_du_pgm;
znomprf = nom_du_prf;
Exfmt FMT01;
select ;
when Ind_Sortie ;
leave;
when Ind_Annuler;
leave;
when Ind_Liste;
if %len(%trim(zadresse)) <= 4 ;
Ind_5Lettres = *on;
iter;
endif;
traitementListe();
when Ind_Valider;
if zraisoc = *blanks;
Ind_RaisonS = *on ;
endif;
if zcodpos = *blanks;
Ind_CodePos= *on ;
endif;
if zville = *blanks;
Ind_Ville = *on ;
endif;
if %subst(indicators:81:4) <> '0000';
iter ;
endif;
Exec SQL
insert into MESCLIENTS (RAISOC, ADRESSE, CODEPOS, VILLE, COORDGEO)
values (:zraisoc, :zadresse, :zcodpos, :zville,
QSYS2.ST_POINT(:zlongit, :zlatit)) ;
Ind_DisplayCoord = *off;
clear FMT01;
endsl ;
Enddo;
*inlr = *on;
//======================================================================== //
// Procédures //
//======================================================================== //
//------------------------------------------------------------------------ //
// Nom : rechercheAdresse //
// But : lister des adresses recueillies via une API //
// à partir d'une chaine de plus de 4 caractères //
// Retour : N/A //
//------------------------------------------------------------------------ //
dcl-proc rechercheAdresse ;
dcl-pi *n ;
l_httpText varchar(256) value;
end-pi;
reqSqlDrop = 'drop table QTEMP/WADRESSE' ;
Exec sql Execute immediate :reqSqlDrop ;
reqSqlCreate = 'create table QTEMP/WADRESSE' +
' (address varchar(128), numero varchar(8), street varchar(128), ' +
'postcode varchar(16), city varchar(64), coordinates blob)' ;
Exec sql Execute immediate :reqSqlCreate ;
reqSqlDelete = 'delete from QTEMP/WADRESSE' ;
Exec sql Execute immediate :reqSqlDelete ;
Exec sql
insert into QTEMP/WADRESSE
(select ltrim(ifnull(numero, '') || ' ' ||
coalesce(street, locality, '') || ' ' ||
postcode || ' ' || city),
ifnull(numero, ''), coalesce(street, locality, ''),
postcode,
city,
QSYS2.ST_POINT(longitude, latitude)
from json_table(QSYS2.HTTP_GET(:l_httpText, ''), '$.features[*]'
COLUMNS
(numero varchar(8) PATH '$.properties.housenumber',
street varchar(128) PATH '$.properties.street',
locality varchar(128) PATH '$.properties.locality',
name varchar(128) PATH '$.properties.name',
municipality varchar(128) PATH '$.properties.municipality',
postcode varchar(8) PATH '$.properties.postcode',
city varchar(64) PATH '$.properties.city',
longitude float PATH '$.geometry.coordinates[0]',
latitude float PATH '$.geometry.coordinates[1]'))
);
end-proc ;
//------------------------------------------------------------------------ //
// Nom : traitementListe //
// But : Affichage d'une liste de 50 adresses maximum //
// Retour : N/A //
//------------------------------------------------------------------------ //
dcl-proc traitementListe ;
queryapi = %scanrpl(' ':'+':%trim(zadresse)) ;
httpText ='https://api-adresse.data.gouv.fr/search/?q=' +
queryapi + '&limit=50' ;
rechercheAdresse(httpText);
clear w_ret ;
w_sql =
'select address from QTEMP/WADRESSE' ;
w_titre = 'Adresses proposées';
touche_f4(W_Sql: W_titre : w_ret) ;
if (w_ret <> ' ') ;
clear zadresse;
clear zcodpos;
clear zville;
Exec SQL
select
ltrim(ifnull(numero, '') || ' ' || street), postcode, city,
REPLACE(
REPLACE(QSYS2.ST_asText(COORDINATES), 'POINT (', ''), ')', '')
into :zadresse, :zcodpos, :zville, :coordonees
from QTEMP.WADRESSE
where address = :w_ret ;
if sqlcode = 0 ;
Ind_DisplayCoord = *on ;
zlongit = %dec(%subst(coordonees: 1 : %scan(' ':coordonees)):15:12) ;
zlatit = %dec(%subst(coordonees: %scan(' ':coordonees) + 1
: %len(%trim(coordonees)) - %scan(' ':coordonees)):15:12) ;
endif;
endif ;
end-proc ;
Quelques explications sur les fonctions SQL utilisées
Tout d’abord nous choisissons de ne pas utiliser la propriété « label » proposée par l’API Adresse. En effet, si celle-ci semble pratique de prime abord, elle n’est pas toujours significative (voir photo du milieu qui où elle ne contient que le nom de la municipalité)
Nous, préférerons donc reconstituer cette adresse en concaténant des zones que l’on retrouve dans chaque occurrence du fichier JSON.
QSYS2.ST_POINT : Cette fonction est utilisée lors de la collecte des données fournie par l’API Adresse.
Elle permet de transformer les coordonnées longitude, latitude en une variable de type BLOB qui représente un point précis et qui est utilisable par les fonctions Géospatiales du SQL.
QSYS2.ST_ASTEXT : Cette fonction permet de transformer un champ géométrique (ST_POINT, ST_LINESTRING, ST_POLYGON, …) en un champ WKT (well-known-text) qui nous sera plus compréhensible.
Cinématique du programme
Ce programme est un simple écran qui nous permet la saisie d’un formulaire avec la possibilité de rechercher ou compléter une adresse en utilisant la touche F4 (la fonction externe appelée n’est pas décrite dans cet article). Une fois le formulaire validé, on l’efface.
Tout d’abord on commence à remplir le formulaire mais on ne connait pas précisément l’adresse.
Donc, après avoir tapé un morceau d’adresse on presse F4
On valide, le formulaire est alors complétement rempli
On presse F17 pour valider celui-ci (et réinitialiser l’écran).
Vérification des données enregistrées
Version BLOB
Version WKT (well-known-text)
Conclusion
Nous avons montré ici un exemple simple de l’utilisation d’une API couplée avec les fonctions géospatiales proposées par IBM. Il est possible d’envisager des requêtes plus complexes incluant le code postal, la ville ou encore le type de donnée (rue, lieu-dit ou municipalité). On peut aussi envisager des requêtes d’après les coordonnées géographiques pour retrouver une adresse. Le champ des possibles, comme le monde, est vaste …
https://www.gaia.fr/wp-content/uploads/2021/07/GG-2.jpg343343Guillaume GERMAN/wp-content/uploads/2017/05/logogaia.pngGuillaume GERMAN2023-07-10 08:34:102023-08-11 16:38:36RETROUVER UNE ADRESSE GRACE AUX API
Dans la dernière TR est apparue une nouveauté très intéressante « API RSE », c’est un ensemble d’API REST fournies avec votre système d’exploitation au travers du serveur ADMIN5.
Ces APIs sont utilisables depuis le web et permettent de lancer des commandes, accéder à l’IFS, de lancer de requêtes SQL…
Ce service ne fonctionne qu’en TLS vous devrez donc le sécuriser par l’administration http ://Votre_systeme:2001/HTTPAdmin
Vous devez ensuite le démarrer s’il ne l’est pas c’est le serveur ADMIN5
https://www.gaia.fr/wp-content/uploads/2017/02/team3.png600600Pierre-Louis BERTHOIN/wp-content/uploads/2017/05/logogaia.pngPierre-Louis BERTHOIN2023-06-27 07:16:592023-06-27 07:17:00Débuter avec API RSE