Version vvv vvv 444 RRRRRRRRRRRR 222222222222 vvv vvv 444 RRRRRRRRRRRRR 222 222 vvv vvv 444 RRR RRR 222 vvv vvv 444 RRR RRR 222 vvv vvv 44444444444444 -- RRR RRR 222 vvv vvv 44444444444444 -- RRRRRRRRRRRRR 222 vvv vvv 444 444 RRRRRRRRRRRR 222 vvv vvv 444 RRR RRR 222 vvvvv 444 RRR RRRR 22222222222222 444 de l'OS/400 ... |
D'abord deux grandes annonces. A/ DOMINO sur l'AS/400 - c'est le serveur domino UNIX transporté sur l'AS/400 grace à sa compatibilité de plus en plus grande (5 % de réécriture seulement) - cela apporte à l'OS le multithreading ° on supporte plusieurs serveurs en parallèle. ° on parle de 10.000 utilisateurs maxi. B/ JAVA sur l'AS/400 - machine virtuelle JAVA complète intégrée à l'OS. - exécution en mode interpréte (JVM) ou compilé ((Class transformer) - support de RMI (Remote Method Invocation) et de remote AWT (AWT sont les classes qui gèrent l'interface graphique) |
- JAVA toolbox for OS/400 JAVA Toolbox for OS/400 est un ensemble de classes qui permettent : ° une transformation des écrans 5250 (DDS) en classes AWT ° un accès aux programmes sur l'AS/400 ° DTAQ/Data area ° fichiers IFS ° fichiers base de données via JDBC/SQL ° fichiers BD en mode ligne à ligne ° imprimantes AS/400 ° des classes de conversion de types (packé vers integer, ...) - cette boite à outils est intégrée à + Visual Age for JAVA (version entreprise) + JBUILDER de BORLAND (équivalent à DELPHI mais en JAVA) |
divers OS/400 : nouvelles commandes CRTLINPPP, CHGLINPPP PPP sur TCP/IP CRTNWIATM, CHGNWIATM protocole ATM CHGDDMTCPA, CHGDHCPA, CHGTCPDMN (cf TCP/IP) quelques commandes bizarres STRDSKRGZ / ENDDSKRGZ (réorganisation des disques) ANZUSROBJ (analyse des objets utilisateur) STRQSH (démarrer le shell-interpreteur) versions supportés (previous release) V4R1M0 V3R7M0 V3R2M0 |
DB2/400 ° Remote journaling (uniquement via APIs) vous pouvez journaliser vos fichiers avec un récepteur distant. ° DRDA et DDM sur TCP/IP (One phase COMMIT seulement) il y a donc une nouvelle commande CHGTCPDDMA AUTOSTART(*YES|*NO) PWDRQD(*YES|*NO) ° nouvelles fonctions CAST : conversion, CAST( expression AS nouveau-type) exemple SELECT CAST(CODART AS CHAR) CAST(SALAIRE AS INTEGER) ... |
CASE : condition à la réalisation d'une expression Exemples : SELECT MATRICULE, NOM, CASE SUBSTR(SERVICE, 1, 3) WHEN 'INF' THEN 'INFORMATIQUE' WHEN 'PER' THEN 'PERSONNEL' WHEN 'PRO' THEN 'PRODUCTION' WHEN 'COM' THEN 'COMMERCIAL' ELSE 'Divers ....' END FROM personnel WHERE ... SELECT CODART, LIBART, PRIX, CASE WHEN PRIX < 0 THEN 'prix négatif' WHEN CODART = 1557 THEN 'pas de prix' ELSE 'prix normal' END FROM ... WHERE ... |
SELECT * FROM COMMANDES WHERE (CASE WHEN PRIXMOYEN = 0 THEN PRIXTARIF * QTE ELSE PRIXMOYEN * QTE) > 10000 le test peut être IS NULL / IS NOT NULL la valeur retournée (THEN|ELSE) peut être le mot réservé NULL (THEN NULL) Sécurité à la colonne : GRANT SELECT , UPDATE(numtel,email) ON TABLE personnel TO richard; les droits ne sont accordés que via SQL mais peuvent être visualisés par DSPOBJAUT, EDTOBJAUT. |
Contraintes d'entité : il s'agit de définir les valeurs pouvant être placées dans une colonne par exemple : CONSTRAINT service_valide CHECK(service IN (10, 20, 30, 40)) ce qui peut être indiqué par la commande : ADDPFCST ADDPFCST FILE(personnel) TYPE(*CHKCST) CST(salairecst) CHKCST('salaire< 1000000 AND prime<= salaire') ou par SQL ALTER TABLE personnel ADD CONSTRAINT salairecst CHECK (salaire < 1000000 AND prime<= salary) |
procédures cataloguées écrites en PL/SQL CREATE PROCEDURE proclib/proc1 (IN p_empno CHAR(10), IN new_level INT, OUT retcode int) language SQL proc1: BEGIN DECLARE var_level INT; DECLARE EXIT HANDLER FOR SQLEXCEPTION set retcode = sqlcode; SELECT level FROM employee INTO var_level WHERE empno = p_empno; IF new_level > var_level THEN UPDATE employee SET level = new_level, salary = salary + salary * .15 WHERE empno = p_empno; END IF; END |
la structure générale d'une procédure devient : dans un CREATE PROCEDURE (qui lui n'est pas nouveau) BEGIN ATOMIC|NOT ATOMIC ATOMIC indique que si un ordre génère une erreur, un ROLLBACK doit être exécuté. DECLARE nom-variable type-variable (voir les types SQL) ou bien, déclaration d'une reprise face à erreur : DECLARE [CONTINUE] HANDLER FOR SQLSTATE VALUE 'codesql' ; [EXIT ] SQLEXECPTION [UNDO ] SQLWARNING NOT FOUND (corps de la procédure) END; |
les nouveaux ordres SQL constituant le corps sont : SET variable = expression; CASE (idem CASE dans un select) WHEN condition THEN instruction-SQL-1; WHEN condition THEN instruction-SQL-2; ... END CASE WHILE condition instruction-sql; END WHILE IF condition THEN instruction-SQL1 ELSEIF condition2 THEN instruction-SQL2; ELSE instruction-SQL3; END IF |
exemple : BEGIN DECLARE nouveau_salaire DECIMAL(9, 2); DECLARE var_matricule CHAR(6) DEFAULT '001757' SELECT salaire INTO nouveau_salaire FROM personnel WHERE matricule = var_matricule; IF code = 1 THEN SET nouveau_salaire = nouveau-salaire * 1,1; ELSEIF code = 2 THEN SET nouveau_salaire = nouveau-salaire * 1,05; END IF UPDATE personnel SET salaire = nouveau_salaire WHERE matricule = var_matricule END; |
FOR nom_variables AS nom_curseur CURSOR FOR SELECT ........ DO instructions devant être réalisées pour chaque ligne du curseur. END FOR; LOOP instructions à réaliser plusieurs fois END LOOP LOOP provoque une boucle infinie, vous devez sortir avec LEAVE LOOP FETCH C1 INTO ..... IF SQLCODE <> 0 THEN LEAVE; ... traitement ... END LOOP; CLOSE C1; |
Hélas, cette fonctionnalité génère un source ILE/C400 contenant du SQL intégré (embedded SQL). Il faut donc le Compilateur ILE/C pour que tout cela fonctionne ( 8 Kf en groupe de facturation P05) ____________________________________________________________________________ On annonce la compatibilité complète de DB2/400 avec UDB support des BLOBs (Binary large OBjects) ==> images, etc ... support des types de variables définis par l'utilisateur " des fonctions définies par l'utilisateur |
Opération navigator a été amélioré afin de mieux intégrer l'accès à DB2/400 il va supporter les fonctions définies par un tiers (via API) il va permettre de plus en plus d'administration en client/serveur TCP/IP - configuration - serveur à démarrer - configuration HTTP - DNS NetworkStation / Firewall Ultimedia System Facility (USF) gestion de la fonction journal Domino, ... |
Pendant que l'on parle de TCP/IP, quelques nouveautés pêle-mêle : +----------------------------------------------------------------------+ | ° DHCP | attribution dynamique d'adresses IP | +----------------------------------------------------------------------+ | ° DNS | centralisation de la correspondance | | | nom/adresse ip (plus de fichier HOSTS) | +----------------------------------------------------------------------+ | ° RIP2 | routage dynamique | +----------------------------------------------------------------------+ | ° PPP | TCP/IP point à point sur réseau commuté | +----------------------------------------------------------------------+ | ° NUMERIS | support de numéris en direct via PPP | +----------------------------------------------------------------------+ | ° TCP/IP sur ATM | nouveauté de la V4R2 (plus de 50 Mbs) | +----------------------------------------------------------------------+ | ° TCP/IP / Twinax | avec les cartes 5250 EXPRESS | | | (au fait, le 5250 a été "boosté" à 2Mbs) | +----------------------------------------------------------------------+ | ° TELNET | nom d'écran significatif | | | support de l'intrégrateur (STRPCO, STRPCCMD) | | | saut de l'écran de SIGNON possible | +----------------------------------------------------------------------+ |
Dans la foulée, Client Access V3R1M3 Support des noms d'écran en TELNET (Client Access en IP) sessions imprimantes en IP nouveau routeur NETSOFT 3.0 en SNA transferts de fichiers barre de menu avec options ouvrir/sauvegarder nouveau format HTML en sortie possibilité d'ajouter une bibliothèque à *LIBL le transfert de fichier est l'option appellée depuis PC5250 INSTALLATION mémorisation de la saisie pour répéter une installation en mode silencieux (avec un fichie réponse) choix de la fréquence pour le contrôle de version |
Accès à la base de données le projet "lightning" devient "AS/400 SDK for Active/X and OLE DB" il s'agit de classes permettant l'accès à DB2/400 de manière plus légère et plus universelle que ODBC. (Microsoft propose un produit identique dans SNA server) Le run-time est intégré à Client Access, les outils de developpement sont encore en béta-test (récupérables sur le WEB) on trouve entre-autre un assistant (Wizzard) pour Visual BAsic. ODBC on peut maintenant demander à faire du cache avec les PACKAGE SQL. (ils sont stockés sur le disque dur et non plus sur l'AS/400) ODBC pour NT devient multi-utilisateurs, ce qui peut éviter une config. sur chaque client (si vous avez un serveur NT) |
NT justement, nouvel FSIOP (ou IPCS) pour WINDOWS NT. Il vous faut un IPCS particulier (Pentium 200), avec une entrée souris/clavier, une sortie VGA. il faut installer un soft OS/400 d'intégration avec NT (7 KF) le FSIOP peut utiliser ensuite les disques, CD et bandes de l'AS. vous achetez un NT 4.0 chez votre revendeur et vous installez à partir de la console. ATTENTION! LE NIVEAU D'INTEGRATION DE L'OS/400 AVEC NT EST FAIBLE. il faut, par exemple, faire un vary off du lecteur de bande pour que NT puisse l'utiliser. ou bien, vous ne voyez pas NT dans l'arborescence IFS (comme LANserveur) |
Voisinage réseau (ou NETSERVER), permettant l'installation de Client Access. l'OS/400 implémente le protocole SMB qui est utilisé par NT/WARP. (vous installez un micro sous 95/NT et un AS/400 sur le même LAN et SANS SOFT supplémentaire, vos micros voient l'AS/400) Vous indiquerez via Operation Navigator, les bibliothèques et les OUTQ que vous souhaitez partager. Puis sur vos micros vous choiissez "rechercher/un ordinnateur" et vous verrez l'AS/400. vous pouvez assigner un lecteur réseau ('I:') et reconnectez automatiquement au démarrage. |
SDD et Dates. le langage SDD va (enfin) admettre les dates (type L) sur les DSPF/PRTF les mots-clés DATFMT / DATSEP sont acceptés bien sur. SDD apporte en plus un nouveau mot-clé complémentaire MAPVAL qui permet d'établir des correspondances entre : (valeur dans le programme / valeur à l'écran) (jusqu'à 100 correspondances) exemple : A R FORMAT A DATSUP L DATFMT(*DMY) DATSEP('/') A MAPVAL(('01/01/40' *BLANK)) lors d'un affichage si la zone contient '01/01/40' on affiche des blancs, et si l'utilisateur entre des blancs on envoi '01/01/40' au programme. |
Pour finir, RPG-IV : ° support des variables à longueur variable (VARLEN en SDD) ° variables utilisateur de type indicateur (N) et possibilité d'associer votre propre DS à un écran avec le mot-clé INDARA. ° nouvelles fonctions pour tester le résultat d'une entrée/sortie fichier ° options de compilation pouvant être indiquées sur la spécif H pluôt que sur la commande de compil. (pour utiliser l'option 14 de PDM) ° nouvelles fonctions de traitement de chaînes de caractères ° le mot-clé OVERLAY peut faire référence à une DS ° le format *CYMD est modifié, la valeur de "C" pouvant être 2 pour 21xx 3 pour 22xx ... 9 pour 28xx |
Nouveaux mots-clés en spécif H + ACTGRP définition du groupe d'activation + DFTACTGRP appartenance(ou non) au groupe d'activation/défaut + ALWNULL support(ou non) des valeurs nulles + BNDDIR référence à un répertoire de liage indiquant la liste des programmes de service utilisés. + INDENT indentation du source + SRTSEQ séquence de tri + LANGID code langage ... bref tous les paramètres de la commande de compil. (sauf DBGVIEW qui n'est pas indiqué dans la documentation) |
Spécif F INDDS(nom d'une DS constituée de variables de type N) Spécif D VARYING définition d'une variable à longueur variable Spécif C nouvelles fonctions %CHAR(date|heure|horodatage, expression) conversion au format caractère %REPLACE(c1:c2[:p[:lg]]) remplace par c1 la chaîne de caractère commencant à la position (p) dans c2 sur (lg) caractères. exemple eval x = %scan('4':var1) [var1 = 'AS/400'] eval var2 = %replace('5':var1:x:1) [var2 = 'AS/500'] ou directement eval var2 = %replace('5':var1:%scan('4':var1):1) |
%OPEN(fichier) retourne '1' si le fichier est ouvert %EOF(fichier) retourne '1' si on est en fin de fichier %STATUS(fichier) retourne 0 si la dernière entrée/sortie est normale, sinon retourne le status. %ERROR et extension (E) , vous pouvez sur tous les ordres acceptant un indicateur d'erreur (<<) indiquer une extension (E) et tester (if %error) ensuite. %EQUAL retourne 1 si le dernier SETLL ou le dernier LOOKUP a trouvé l'égalité. %FOUND retourne 1 si le dernier SETLL, SETGT, DELETE, CHAIN a trouvé un enregistrement ou si le dernier CHECK, CHECKR, SCAN a trouvé la chaîne de caractère. |
Exemples : vous remarquerez que les indicateurs ne sont pas indiqués sur la ligne de l'opération d'entrée/sortie, ils sont devenus facultatifs. 1. C code chain ARTICLE C IF %FOUND C .... C .... C ENDIF 2. C code chain ARTICLE C code chain ENTETCDE C IF NOT %FOUND(ARTICLE) AND %FOUND(ENTETCDE) C .... C .... C ENDIF toutes ces fonctions vont vers la limitation des 99 indicateurs |