pause-café
rendez-vous technique
Pause-Café est une réunion technique
destinée aux informaticiens sur plateforme IBM i.
destinée aux informaticiens sur plateforme IBM i.
Elle a lieu 3 à 4 fois par an : en Bretagne et sur internet.
Pause-café #11
Février 1997
Y2K Gestion de l'AN 2000. Quel sont les problèmes : -tri 24/12/99 classé avant 05/01/01 - comparaison de dates entre elles 25/12/96 plus grand que 01/01/01 - contrôle de saisie 02/01/00 est une date invalide
Répercussions : + les fichiers Base de données numérique 7 dt 0 ? EDTCDE(Y) Possible numérique 8 dt 0 ? pas d'EDIT CODE format DATE ? ==> la solution, mais RPGIV + les écrans , les états faut-il les modifier ? (pas sûr) + les programmes routines de contrôle calcul (RPGIV possède tout ce qu'il faut)
Les trois méthodes répertoriées : l'expensions transformer vos variables en 8,0 ou en DATE le fenêtrage fixe (on "voit" de 1940 à 2039) glissant (on "voit 60 ans en arrière) le codage après 99, 9A ? Quelques éléments techniques
CHGPF avec SRCFILE renseigné ou CPYF ou "ALTER TABLE" SQL En début de V3R60,les conversions numérique vers date posent des problèmes MAIS CELA FONCTIONNE à partir de la cumulative C6_338_360. Nous sommes limités aux possibilités suivantes : tout format numérique <--> tout format numérique les dates avec année sur 2, sont comprises entre 1940 et 2039, elles sont considérée par défaut au format du job, elles contiennent le séparateur dans le cas du caractère. <--> date au format *YMD, *DMY , *MDY numérique étendu --> date au format *ISO, *USA, *EUR caractère <--> date *YMD, *DMY, ... (idem) --> date *EUR, *USA, ... date <--> date (changement de format transparent)
manipulation de DATES en RPGIV Toute comparaison de dates entre elles, est cohérente indépendamment du format ! La conversion est assurée par MOVE,MOVEL : date <-> date, etc..., changement de format transparent. numérique,caractère <-> Date numérique,caractère <-> heure numérique,caractère <-> horodatage le facteur 1 permet alors de préciser le format de l'élément numérique ou caractère. Exemple : DNUMDAT S 6 0 INZ(950715) DWDATISO S D DATFMT(*ISO) C *YMD move numdat wdatiso
Le nouveau code opération TEST, permet de tester la validité. TEST Date en ZR indic (mis ON si err) en pos. << Si le facteur 2 est une variable numérique ou caractère, il faudra : - Indiquer un format en facteur 1 - Indiquer une option : (D), (T), (Z). Exemple : C *YMD TEST(D) datchar 80 Une date caractère doit doit être éditée ==> contenir les séparateurs. C'est le seul moyen de gérer les dates à la saisie : Les DSPF (et PRTF) , ne reconnaissant pas ces formats, SDA et RLU générent des variables alpha. (8 ou 10, suivant le format), qu'il faut renommer.
Notion de durée : le code opération ADDDUR permet d'ajouter une durée à une date (le résultat est une date) Le code opération SUBDUR permet 1/ de soustraire une durée à une date (le résultat est une date) 2/ de soustraire une date à une date (le résultat est une durée) Une durée est un entier numérique (constante ou variable [15 maxi]) suivi d'un code (sépararé par :), représentant la signification : *YEARS ou *Y : la durée est exprimée en nbr d'années *MONTHS ou *M nbr de mois *DAYS ou *D nbr de jours *HOURS ou *H nbr d'heures *MINUTES ou *MN nbr de minutes *SECONDS ou *S nbr de secondes *MSECONDS ou *MS nbr de microsecondes
Exemples: dat2 = dat1 + 12 mois C DAT1 ADDDUR 12:*M DAT2 dat2 = dat2 + 45 jours C eval nbj = 45 C ADDDUR nbj:*D DAT2 dat2 = dat1 - 3 mois C DAT1 SUBDUR 3:*M DAT2 nbm = nombre de mois d'écart entre dat1 et dat2 C DAT1 SUBDUR DAT2 nbm:*M ATTENTION ! Vous ne pouvez pas tester "IF nbm > 3", le système considère qu'il y a 3 mois d'écart entre 15/07/95 et 31/10/95 (le nombre de mois est une information qui ne tient pas compte des jours) Pour tester que dat2 n'est pas > de plus de 3 mois à dat1, écrivez : C DAT1 ADDDUR 3:*M DATMAXI C IF dat2 > datmaxi
Une date ne peut pas être nulle il faut attendre %NULLIND() en V3R70 ! Une durée peut être négative. Ajouter -90 jours (= soustraire 90 jours, qui l'eut cru ?) Le résultat d'une différence peut être négatif (si dat1 < à dat2) Il n'y a pas de fonction pour retrouver le dernier jour du mois (mais le changement de mois lors d'un ajout de jours est cohérent) Il est enfin possible d'extraire une partie d'une date/heure/horodatage. avec EXTRCT : C EXTRCT DAT2:*M mois
APIs ILE de manipulation DATES Toutes ces APIs sont dans un programme de service : Elles ne sont donc utilisables qu'avec un langage ILE =============== quelques notions ========================================= Pour toutes ces APIs une date lilian exprime une date en nombre de jours depuis le 15 Octobre 1582 (jour 1, qui est le premier jour du calendrier Grégorien) jusqu'au 31 décembre 9999 ! Jour 0 est donc le 14 Octobre 1582 est n'est utilisé que pour les calculs. jour 148887 est le 4 Juin 1990. toutes ces APIs utilisent la notion d'image qui est la représentation caractère du format de la date (une espèce de mot d'édition) =======================================================================
! D E F I N I T I O N D E S I M A G E S D E D A T E ! ======================================================================= Caractère d'Image Signification Exemple !------------------------------------------------------------! ! Y ! année sur 1 chiffre ! 0- ! ! YY ! sur 2 ! 00- ! ! YYY ! sur 3 ! 000-999 ! ! YYYY ! année sur 4 chiffres ! 1582-9999 ! !------------------------------------------------------------! ! MM ! mois sur 2 chiffres ! 01-12 ! ! ZM ! mois sur 1 ou 2 chiffres ! 1-12 ! !------------------------------------------------------------! ! RRRR ! mois en notation romaine ! I-XII (cadré à g) ! !------------------------------------------------------------! ! MMM ! mois (3 C.), en majuscules! JAN-DEC ! ! Mmm ! mois (3 C.), min/MAJ ! Jan-Déc ! ! MMMMMMMMMM ! mois (20 C.) en majuscules! JANVIER-DECEMBRE ! ! Mmmmmmmmmm ! mois (20 C.), min/MAJ ! Janvier-Décembre ! ! MMMMMMMMMZ ! espaces ignorés ! JANVIER-DECEMBRE ! ! Mmmmmmmmmz ! idem (min/MAJ) ! Janvier-Décembre ! !------------------------------------------------------------!
! DD ! jour sur 2 chiffres ! 01-31 ! ! ZD ! jour sur 1 ou 2 chiffres ! 1-31 ! ! DDD ! n° de jour (date julienne)! 0-365 ! !------------------------------------------------------------! ! W ! Jour de la semaine (1c.) ! D, L, M, M, J, V,S! ! WWW ! jour de la semaine (3c.) ! DIM-SAM ! ! Www ! Jour de la sem(3c.)min/MAJ! Dim-Sam ! ! WWWWWWWWWW ! jour de la semaine (10c.) ! DIMANCHE-SAMEDI ! ! Wwwwwwwwww ! Jour sur 10c.min/MAJ ! Dimanche-Samedi ! ! WWWWWWWWWZ ! espaces supprimés ! DIMANCHE-SAMEDI ! ! Wwwwwwwwwz ! espaces supprimés ! Dimanche-Samedi ! !------------------------------------------------------------! Exemples d'images reconnues -> valeur possible DD/MM/YY 13/02/97 DD Mmmmmmmmmm YY 13 Février 97 WWW, ZM/ZD/YY HH:MI AP JEU, 13/2/97 10:42 PM Wwwwwwwwww, DD Mmm YYYY, ZH:MI:SS Jeudi , 16 Fév 1997, 9:42:00 Wwwwwwwwwz, DD Mmm YYYY, ZH:MI:SS Jeudi, 13 Fév 1997, 9:42:00
+ CEEDAYS = conversion date vers format lilian [CALLB(D)] - CHAR(?) date en format caractère - CHAR(?) image de la date (cf le tableau en fin de cours) - BIN(4) date lilian en retour facultatif - token gestion d'erreur (vrai pour toutes les APIs ILE, cf les erreurs ILE) + CEEDATE = conversion date vers format caractère [CALLB(D)] - BIN(4) date lilian - CHAR(?) image de la date - CHAR(?) date (format caractère) en retour + CEEDYWK = calcul du n° de jour dans la semaine à partir d'une date lilian (1 = Dimanche, 2 = Lundi ...) - BIN(4) date lilian - BIN(4) N° de jour en retour
+ CEESCEN = fixe le siècle par défaut pour une date avec année sur 2 positions. - BIN(4) le siècle est fixé en indiquant l'année à laquelle vous souhaitez que se fasse le changement de siècle. (nbre d'années à soustraire à partir d'aujourd'hui) ex: 80 (val par défaut) en 1995 indique une plage temporelle de 1915 à 2014 50 en 1995 indique une plage de 1945 à 2044. + CEEOCEN = retrouve la valeur précédente. - BIN(4) valeur en retour
La modification des triggers en V3R20 / V3R70 peut être une aide : Un trigger recoit un buffer contenant : - des informations système - la version AVANT de l'enregistrement - la version APRES. la commande ADDPFTRG accepte un nouveau paramètre ALWREPCHG. lorsque ce paramètre est renseigné à oui, lors d'un ajout ou d'une mise à jour l'enregistrement ajouté ou remplacé est celui du buffer tel qu'il a été renseigné par le trigger. le trigger peut donc maintenant faire de la substitution de données et remplacer certaines informations renseignées par le programme. ce sont les données du trigger qui seront placées dans la base et non celles initialement indiquées par le programme.
Divers en télécommunication : Il existe maintenant une possibilité qui permet de tester toutes les fonctionnalités APPC (ou TCP/IP, avec TCP over APPC d'ANYNET) il faut créer un contrôleur APPC par : CRTCTLAPPC CTLD(LOCAL) LINKTYPE(*LOCAL) Puis créer DEUX unités APPC rattachées au même contrôleur. (elles devront être en fonction toutes les deux) CRTDEVAPPC DEVD(ICI) RMTLOCNAME(ICI) LCLLOCNAME(LABAS) CTL(LOCAL) APPN(*NO) SECURELOC(*YES) TEXT('pour aller ICI) CRTDEVAPPC DEVD(LABAS) RMTLOCNAME(LABAS) LCLLOCNAME(ICI) CTL(LOCAL) APPN(*NO) SECURELOC(*YES) TEXT('pour aller LABAS') DDM, passe-système, etc ..., vous pouvez tout tester en local !
Les versions V3R20, V3R60 ammènent un certain nombre de nouveautés en matière de communication APPC. -DDM : reconnait maintenant les DTAQ et DTAARA éloignées. CRTDTAQ DTAQ(essai) TYPE(*DDM) RMTDTAQ(QGPL/ESSAI) RMTLOCNAME(S44xxxxx) et CRTDTAARA DTAARA(essai) TYPE(*DDM) RMTDTAARA(QGPL/ESAI) RMTLOCNAME(S44xxxxx) -APING : nouvelle commande qui permet de tester l'état d'une ligne (équivalent au PING TCPIP) APING RMTLOCNAME( ) MODE(*NETATR) RMTUSER(*NONE) RMTPWD(*NONE) <-------paramètres facultatifs----------->
-AREXEC : nouvelle commande qui permet de passer une commande sur un AS/400 distant sans utiliser DDM. la commande RUNRMTCMD offre les mêmes services, mais est capable de travailler par dessus IP (REXEC) ou par dessus SNA (AREXEC), AREXEC est dédié à SNA. AREXEC CMD( ) RMTLOCNAME( ) RMTUSER(*NONE) RMTPWD(*NONE) <--paramètres facultatifs--> ObjetConnect disponible en V3R10 sous forme de PRPQ (5799-FNR) est devenu l'option 22 de 5716SS1 (l'OS/400 en V3R60) et apporte des commandes permettant de faire des transferts d'objets sans utiliser SNADS. c'est un peu plus rapide, et surtout plus automatique.
SAVRSTLIB LIB( ) RMTLOCNAME( ) SAVRSTOBJ OBJ( ) LIB( ) RMTLOCNAME( ) OBJTYPE(*ALL) SAVRSTCHG OBJ( ) LIB( ) RMTLOCNAME( ) OBJTYPE(*ALL) REFDATE(*SAVLIB) SAVRSTDLO DLO( ) RMTLOCNAME( ) FLR(*ANY) SAVRST RMTLOCNAME( ) OBJ('*') --> Pour IFS. et SAVRSTCFG OBJ( ) RMTLOCNAME( ) OBJTYPE(*ALL) les types admis sont : + Les listes de configuration (*CFGL) + Les listes de connexion (*CNNL) + Les descriptions de classes de service (*COSD) + Les descriptions IPX (*IPXD) + Les descriptions de modes (*MODD) + Les descriptions NetBIOS (*NTBD)
Il existe une nouvelle fonctionnalité intégrée par IFS QFileSrv.400. il s'agit d'offrir l'équivalent de la fonction dossiers partagés, mais entre AS/400. On utilise les mêmes ressources, c'est à dire un JOB dans le sous-système QSERVER. le répertoire QFileSrv.400 dans la racine IFS représente l'ensemble des AS/400 connectables. Vous devez "monter" (comme sur UNIX) le système de fichier que vous voulez voir, par la commande MD (ou MKDIR : make a directory) MD machine.domaine.réseau : sous TCP/IP MD appn.système : sous APPC/APPN.
Exemple : le système S44R1234 est un AS/400 auquel je suis relié par un lien télécom (LAN, SDLC, X25 , peu importe) " MD APPN.S44R1234 " (si le nom de mon réseau est APPN) Attention cette commande n'est pas persistante. c'est à dire que la référence à ce système via IFS sera perdue au prochain IPL. Maintenant, /QFileSrv.400/APPN.S44R1234/MICRO : représente le répertoire "MICRO" sur le système S44R1234
TCP/IP - V3R20, V3R70 : SLIP ou IP sur réseau commuté Possible avec tout modem suportant les commandes AT derrière une carte: 2609, 2612 et 6152.(elles s'attachent à un IOP 2623 ou un MFIOP) 1/ Création d'une ligne asynchrone 2/ Configuration du modem CFGTCPPTP (Point à point) Option 11 3/ Définition d'un profil, associant un modem,une ligne et une adresse IP (WRKTCPPTP) Le profil peut-être : *ANS : *DIAL (avec un script de connexion) 4/ et STRTCPPTP
Client Access propose maintenant une nouvelle version client : WINDOWS 95 Il s'agit du produit 5763XD1 en version V3R1M1 (utilisable en V3R60) - il apporte : + l'intégration à WINDOWS 95 (les dossiers partagés sont vus comme des unités réseau à traves l'explorer ou le voisinage réseau) + un driver ODBC 32 bits + la gestions des commandes entrantes + le support de TCP/IP + le routeur NETSOFT
ce produit peut utiliser les routeurs suivants : - un routeur 16 bits (celui de CAWIN 3.11 compris) - MSDLC de microsoft (livré avec WINDOWS 95 ou disponible sur FTP.MICROSOFT.COM) - IPX (lui aussi, livré avec WINDOWS 95) - TCP/IP (idem) - TCP/IP LAN - TCP/IP SLIP (réseau commuté) - SNA SERVEUR - le routeur NETSOFT qui est devenu LE routeur de client access
le routeur NETSOFT supporte les connexions : + carte LAN en 802.x (MSDLC) + carte SDLC + liaison Asynchrone (attention carte asynchrone sur l'AS/400) + ANYNET (APPC sur TCP/IP) - sur TCP/IP LAN - sur TCP/IP SLIP TCP/IP étant géré par WINDOWS 95 Client Access directement sur TCP/IP a quelques particularités : - les unités écrans se nomment QPADEVxxx (PC5250 simulant TELNET) - il n'y a pas d'émulation imprimante possible - ODBC et transfert de fichier sont reconnus.
et une une nouveauté : la gestion des commandes entrantes vous pouvez avec RUNRMTCDE passer une commande destinée à un PC depuis n'importe quel JOB : + un AUTRE micro + un terminal passif + un travail Batch Si la commande produit un résultat caractère (session DOS) le résultat est redirigé sur AS/400 sous forme de spool Si la commande produit un résultat graphique (sessions WINDOWS), il est affiché sur le micro.
en TCP/IP Sur le micro : - Choisissez propriétés de Client Access dans le panneau de configuration - et affichez l'onglet "commande à distance" Vous pouver indiquer les systèmes et les utilsateurs autorisés à passer des commandes, et leur attribuer un mot de passe. Une étoile '*' dans une entrée équivaut à ne pas restreindre (* dans la zone système signifie, n'importe quel système) la notion de profil/mot de passe est purement micro, il n'y a pas de correspondance avec les profils AS/400. le progamme à activer est : CWBRXD et pour arreter ce service CWBRXDSD
Quand vous passerez la commande RUNRMTCMD il faudra renseigner profil/mot de passe tel qu'indiqué ici. Lancer une commande à distance (RUNRMTCMD) Indiquez vos choix, puis appuyez sur ENTREE. Commande . . . . . . . . . . . . dir ... Lieu éloigné: Nom ou adresse . . . . . . . . 129.1.1.3 Type . . . . . . . . . . . . . *IP *SNA, *IP ID utilisateur éloigné . . . . . QSECOFR Valeur alpha, *NONE, *CUR Mot de passe éloigné . . . . . . MOTDEPASSE Valeur alpha, *NONE
en APPC Le programme à activer est AREXECDW sur des stacks APPC (SNA SERVEUR) AREXECDN sur le routeur NETSOFT il faut paramétrer le routeur de manière à indiquer un programme de transaction (TP) , qui doit être appellé pour réaliser la commande. le nom de la transaction doit être AREXECD La séquence de mise en place est la suivante : - choisir NETSOFT administrateur - sur une connexion -> bouton droit / propriétés - onglet "données communes" - bouton "propriétés avancées" - onglet "programme de transaction locaux" (ouf !)
là, utilisez le bouton ajout et renseignez : ######################################################################### # # # nom de profil. . . . . . . . . AREXECD # # # # nom de TP . . . . . . . . . . AREXECD # # # # spécification de fichier TP. . c:\progra-1\ibm\client-1\arexecdn # # # # paramètres . . . . . . . . . . # # # # ........... ................. # # : OK : : Annulation : # # :.........: :...............: # ######################################################################### en remplacant "-" par le tilde espagnol (à coté de "é")