Il existe de nouvelles fonctions Netdata en Version 4 de l'OS : @DTW_EXIT sortie anticipée de la macro @DTW_GETCOOKIE(nom, variable) place dans variable la valeur du cookie dont on a indiqué le nom en 1er argument. @DTW_rGETCOOKIE(nom) retourne la valeur du cookie dont a indiqué le nom @DTW_SETCOOKIE(nom, paramètres) place un cookie dont on indique le nom et les différents paramètres. @DTW_HTMLENCODE(origine, remplacement) transforme en code compatible HTML (<, >, transformés en code ascii) @DTW_rHTMLENCODE(origine) idem, mais sous forme de fonction @DTW_DATE et DTW_rDATE retourne la date du jour @DTW_TIME et DTW_rTIME retourne l'heure |
et enfin, @DTW_SENdMAIL(émetteur , destinataire, texte-du-message, sujet, carbon-copy, blind-carbon-copy, répondre-à, entreprise-de-l'émetteur) envoi un mail émetteur, destinataire, carbon-copy, blind-carbon-copy, répondre-à doivent être donnés sous la forme user@domaine.com tous les paramètres à partir de carbon-copy sont facultatifs. Pensez aussi à toutes les fonctions intégrées @DTW_UPPERCASE(), ... et au fait de pouvoir créer vos propres fonctions basées sur un appel implicite de programme HLL (RPG, C, ...) |
Pour déclarer un appel de programme : %function(dtw_directcall) verifdate( IN DEC(8) date , IN CHAR(3) format , OUT CHAR(1) ERREUR) { %exec{ VERIFDAT.PGM %} %} IN indique un paramètre envoyé au pgm sans valeur retournée OUT " une valeur retournée INOUT " un paramètre en "entrée/sortie" les type admis sont CHAR(x) ou CHARACTER(x) alpha, lg fixe VARCHAR(x) alpha, lg variable INT ou INTEGER/SMALLINT binaire 2 ou 4 octets REAL/DOUBLE(x,y) virgule flottante NUMERIC(x,y) numérique étendu DEC(x,y ou DECIMAL(x,y) numérique packé |
la clause %EXEC indique l'emplacement et le nom du pgm à appeller : %EXEC{ /qsys.lib/qgpl.lib/monprog.pgm %} ou %EXEC{ monprog.pgm %} dans ce dernier cas le pgm est recherché dans la bibliothèque indiquée par EXEC_PATH dans le fichier INI. ATTENTION, si vous indiquez DTW_PAD_PGM_PARMS = YES, les paramètres sont transmis avec des espaces sur la lg indiquée. Sinon, les paramètres alpha sont recu en tant que chaîne de caractère à terminaison 0.C'est à dire que le dernier caractère significatif est immédiatement suivi d'un zéro hexa (X'00). Ce sont les chaînes manipulées par le langage C [OPTION(*STR) en RGP4] -------------------------------------------------------------------------- Pour exécuter la fonction (donc le pgm) : @verifdate(DATCMD, DATFMT, RETOUR) |
Persistance : il s'agit de garder la "session" active sur plusieurs macros Net.DATA - les variables resteront chargées en mémoire (moins de paramètres) - il sera possible d'envisager COMMIT/ROLLBACK ces fonctions Net.DATA utilisent la persitance des pgm CGI apparue en V4R40. @DTW_STATIC() indique une macro persistante [Doit être le premier ordre] @DTW_RTVHANDLE(h) génère un handle pour une session (identifiant) ce handle doit être transmis en tant que premier paramètre à Net.DATA /netdata/$(handle)/chemin/fichier-macro.d2w/section @DTW_ACCEPT(h) doit doit en tête de chaque section de la même session sauf la dernière,qui va "clore" la session, par : @DTW_TERMINATE() |
le scénario est le suivant (fichier persist01.d2w) : @DTW_STATIC %DEFINE{ test ="" id ="" %} @DTW_RTVHANDLE(id) %html(affiche){ @DTW_ACCEPT(id) <HTML> <BODY> @DTW_ASSIGN(test, "essai") voici le contenu de test : $(test), voyez la <A HREF="/netdata/$(id)/html/macros/persist02.d2w/suite"> fin </A> </BODY> </HTML> %} |
puis, persist02.d2w @DTW_STATIC() %html(suite) { @DTW_ACCEPT(id) <HTML> <BODY> re-voici le contenu de test : $(test) , et maintenant la <A HREF="/netdata/$(id)/html/macros/persist02.d2w/fin"> fin </A> </BODY> </HTML> %} %html(fin) { @DTW_TERMINATE() <HTML> <BODY> transaction terminée </BODY> </HTML> %} |
Les PTF Net.DATA DE JUILLET 2001 apportent : a/ une meilleure gestion de l'historique DTW_TRACE_LOG_LEVEL = OFF : pas de trace APPLICATION: trace au niveau applicatif SERVICE : trace destinée à la maintenance IBM DTW_TRACE_LOG_DIR = répertoire de stockage des fichiers trace DTW_TRACE_MERGE_RECORD = YES | NO YES, NetData ne créé qu'un seul fichier trace (NETDATA.TRACE) NO, NetData créé un fichier trace par thread (NETDATA.TRACE.xxxxxx où xxxxx est l'identifiant du process et du thread) |
b/ une meilleure gestion des erreurs DTW_ERROR_LOG_LEVEL = OFF : pas de consignation des erreurs INFORMATION: log des messages d'info. ERROR : log des messages d'erreur INFORMATION+ERROR : les deux précédents ALL : tous les messages, même ceux gérés (séquences SQL) DTW_ERROR_LOG_DIR = répertoire de stockage des fichiers trace (fichier NETDATA.ERROR.LOG) DTW_DEFAULT_ERROR_MESSAGE "erreur générale Netdata" |
c/ il est possible de remonter un fichier du client vers le serveur, pour cela placez un formulaire contenant : <FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="ma-macro"> puis une zone de saisie <INPUT TYPE="FILE" name="FICHIER"> l'utilisateur pourra saisir un nom de fichier dans FICHIER et même verra apparaitre (dans le formulaire) un bouton "parcourir..." le fichier sera placé dans le répertoire indiqué par DTW_UPLOAD_DIR et sera nommé macro.variable.identifiant.nom-de-fichier - macro est le nom de la macro NetData - variable est le nom de la variable (ici FICHIER) - identifiant est : date/heure/centième + n° de process + N° thread - nom de fichier est le nom d'origine du fichier. (le nom complet [chemin compris] est placé dans FICHIER) |
Principales fonctions Net.Data : -------------------------------------------------------------------------- (*) disponibles avec les PTF de Juillet 2001 General Functions DTW_ADDQUOTE DTW_HTMLENCODE DTW_CACHE_PAGE DTW_QHTMLENCODE DTW_DATE DTW_SENDMAIL DTW_EXIT DTW_SETCOOKIE DTW_GETCOOKIE DTW_SETENV DTW_GETENV DTW_TIME DTW_GETINIDATA DTW_URLESCSEQ Math Functions Word Functions DTW_ADD DTW_DELWORD DTW_DIVIDE DTW_SUBWORD DTW_DIVREM DTW_WORD DTW_FORMAT DTW_WORDINDEX DTW_INTDIV DTW_WORDLENGTH DTW_MULTIPLY DTW_WORDPOS DTW_POWER DTW_WORDS DTW_SUBTRACT (*) DTW_EVAL (comme le COMPUTE COBOL) |
String Functions DTW_ASSIGN DTW_POS DTW_CHARTOHEX DTW_REPLACE DTW_CONCAT DTW_REVERSE DTW_DELSTR DTW_STRIP DTW_HEXTOCHAR DTW_SUBSTR DTW_INSERT DTW_TRANSLATE DTW_LASTPOS DTW_UPPERCASE DTW_LENGTH (*) DTW_PAD DTW_LOWERCASE (*) DTW_ISNUMERIC Table Functions (table NETDATA) il s'agit de table (zone mémoire à double entrée) 1/ vous manipulez la table afin de la charger (en ligne/colonne) 2/ vous demander à NET.DATA de vous générer des listes à partir de cette table en mémoire. |
manipulation d'une table DTW_TB_APPENDROW DTW_TB_INSERTCOL DTW_TB_COLS DTW_TB_INSERTROW DTW_TB_DELETECOL DTW_TB_SETN (attribuer un nom) DTW_TB_DELETEROW DTW_TB_SETV ( " une valeur) DTW_TB_QUERYCOLNONJ DTW_TB_GETN (retrouver le nom) DTW_TB_ROWS DTW_TB_GETV ( " la valeur) DTW_TB_SETCOLS DTW_TB_HTMLENCODE génération de HTML DTW_TB_TABLE génère une table HTML <table> <tr>, etc...</table>. DTW_TB_LIST " une liste HTML <UL>,<LI> ... DTW_TB_DLIST " " liste de définitions (<DL> <DT> ...) DTW_TB_SELECT " " liste déroulante (<SELECT> ...) DTW_TB_INPUT_CHECKBOX " série de cases à coher DTW_TB_INPUT_RADIO " série de boutons radio DTW_TB_INPUT_TEXT " " série de zones texte (<INPUT type="text"...) |
Flat File Interface Functions (fichiers IFS) DTWF_APPEND DTWF_UPDATE DTWF_CLOSE DTWF_WRITE DTWF_DELETE DTWF_SEARCH DTWF_INSERT (*) DTWF_READFILE > dans une variable DTWF_OPEN (*) DTWF_WRITEFILE < depuis une variable DTWF_READ (*) DTWF_COPY DTWF_REMOVE (*) DTWF_EXISTS Web Registry Functions (fichiers paramètres) DTWR_ADDENTRY DTWR_LISTSUB DTWR_CLEARREG DTWR_OPENREG DTWR_CLOSEREG DTWR_RTVENTRY DTWR_CREATEREG DTWR_UPDATEENTRY DTWR_DELENTRY DTWR_LISTREG DTWR_DELREG La Web registry est en fait l'équivalent d'un fichier INI, possédant deux colonnes (clé et données), complétement à la charge de Net.Data. |
Persistent Macro Functions (persistence, vue plus haut) DTW_ACCEPT DTW_RTVHANDLE DTW_COMMIT DTW_STATIC DTW_ROLLBACK DTW_TERMINATE Pour le détail des ces fonctions ainsi que les codes retour, voyez le site: http://www.as400.ibm.com/tstudio/netdata/docs/doc.htm ainsi que le site Net.Data sur AS/400 http://www.As400.ibm.com/netdata --> LE site Net.Data sur AS/400. http://www.zebranet.fr --> site francais avec des exemples. http://www.ignite400.org --> forum sur Net.Data,écrit en Net.Data |