, , Utiliser ACS depuis votre IBM i ?

Tout le monde connait ACS en tant que client sur un poste windows , mac , ou linux.

Je rappelle la principale différence avec ses prédécesseurs c’est que ACS et un client Léger et que l’exécutable JAVA acsbundle.exe suffit pour exécuter une requête

Vous pouvez l’installer sur votre ibm i, pour 3 raisons

1) la mise à disposition et la mise à jour peut désormais se faire par PTF

Déploiement disponible par PTF V7.3 PTF 5770SS1-SI71934 et après mise à jour de l’exécutable, pratiquement plus d’administration à faire

2) Le partager avec vos utilisateurs

Vous montez un partage sur le répertoire ou vous l’avez installé et vous exécuter acsbundle.exe à partir de ce ce dernier.
Ca marche très bien vous pouvez faire la mise à jour de tous vos postes en changeant l’exécutable de votre répertoire.
C’est à déconseiller, si vous avez des accès réseaux peut efficaces ou si vous avez des populations nomades qui accèdent à plusieurs IBM i

3) Pour exécuter des requêtes ACS directement sur l’IBM i.

C’est du java et votre partition sait faire du java, et vous pouvez lancer des commandes unix par STRQSH .

La première chose à vérifier c’est que le produit est bien installé sur votre partition

Par défaut, il se trouve dans le répertoire QIBM/ProdData/Access/ACS/Base/ , mais il peut se trouver ailleurs, par exemple dans /home/ qui est souvent monté par netserver.

Si vous ne l’avez pas utilisé depuis longtemps, il est conseillé de mettre une version ACSBUNDLE.EXE plus récente

En fonction de ce que vous voulez utiliser dans ACS, on parle de plugin

Dans notre exemple on veut créer une un fichier xls à partir d’une requête SQL c’est le plugin cldownload

Voici la syntaxe

STRQSH CMD( »java –jar votre_exe_java +
/plugin=cldownload +
/system=votre_systéme +
/clientfile= votre_fichier.xls +
/sql= »votre_requete_sql« ‘)

Exemple :

STRQSH CMD(‘java -jar /QIBM/ProdData/Access/ACS/Base/acsbundle.jar +
/plugin=cldownload +
/system=NEPTUNE +
/clientfile= /temp/liste_options_pdm.xls +
/sql= »Select * from qgpl.qauoopt »‘)

Nous avons packagé un outil (CRTXLSFIC) qui permet de faire ca et vous pouvez le trouver sur Github à l’adresse :

https://github.com/Plberthoin/PLB/tree/master/GTOOLS

Dans le plugin cldownload vous avez des options , par exemple, pour ajouter des entêtes de colonne, /colheadings=1 , etc …
il existe d’autres plugins dans ACS pour exécuter des commandes, exécuter de transfert etc …

Quelques liens intéressants à connaitre

ftp://ftp.software.ibm.com/as400/products/clientaccess/solutions/GettingStarted_en.html
https://www.volubis.fr/news/liens/courshtm/clientaccess/client%20solution_install.html
https://www.ibm.com/support/pages/automating-acs-data-transfer
https://developer.ibm.com/technologies/systems/articles/i-acs-commandline/
https://ibmsystemsmag.com/Power-Systems/02/2020/acs-shipped-with-ibm-i

, , Utiliser un scripte SQL pour faire du FTP

On est souvent amené, à envoyer des fichiers soit par mail ou par FTP, voici une solution simple en utilisant SQL

— génération de la table à transférer
create table votrebib.votrefic as (select …) with data;
— conversion en CSV , paramétrage excel
CL: CPYTOIMPF FROMFILE(votrebib.votrefic)
TOSTMF(votrefic.csv)
STMFCCSID(PCASCII) RCDDLM(CRLF)
STRDLM(NONE) FLDDLM(‘;’) ADDCOLNAM(SQL) ;

— Envoi par mail

cl: SNDSMTPEMM RCP((‘plb@gaia.fr’))
SUBJECT(‘liste du fichier votrefic’)
NOTE(‘Ci-joint le fichier votrefic.csv’)
ATTACH((VOTREFIC.CSV));

— Envoi par ftp

CL: CRTPF FILE(votrebib/FTPSRC) RCDLEN(192) ;
INSERT INTO votrebib/QFTPSRC VALUES(‘User_FTP Mot_de_passe’) ;
INSERT INTO votrebib/QFTPSRC VALUES(‘put votrefic.csv’) ;
INSERT INTO votrebib/QFTPSRC VALUES(‘quit’) ;

–re routage stdin
cl: OVRDBF FILE(INPUT)
TOFILE(votrebib/QFTPSRC) +
OVRSCOPE(*JOB) ;
— lancement ftp
CL: FTP RMTSYS(VOTRE_SYSTEME);
— suppression du fichier de commande FTP
CL: DLTF FILE(votrebib/FTPSRC);

REMARQUE :

Vous pourrez améliorer ce scripte en utilisant un mot de passe que vous récupérez à l »exécution, pensez bien à supprimer le fichier scripte FTP même dans QTEMP.

Vous pouvez également demander la log, en re-routant le stdout

Si vous utilisez le mail , l’utilisateur doit être inscrit à smtp ,

, 5 choses à savoir sur les logs de votre IBMi

1) Choisir le mode de production

C’est essentiellement fixé par 2 valeurs système

La première valeur système est QLOGOUTPUT

*JOBEND L’historique du travail sera généré par le
travail lui-même. Si l’historique du travail
ne peut pas générer son propre historique du
travail, celui-ci sera généré par un serveur
d’historique du travail.

*JOBLOGSVR L’historique du travail sera généré par un
serveur d’historique du travail.

*JOBEND est la valeur historique, cette valeur est beaucoup moins performante sur les nouveaux

systèmes que *JOBLOGSVR.

Il est donc conseillé de mettre en place la valeur *JOBLOGSVR.

la deuxième valeur système est QJOBMSGQFL
*NOWRAP
La file d’attente de messages du travail ne fait pas
l’objet d’un bouclage.

*WRAP
La file d’attente de messages du travail fait l’objet
d’un bouclage.

*PRTWRAP
La file d’attente de messages du travail fait l’objet
d’un bouclage et les messages écrasés sont imprimés.

il est conseillé pour éviter d’avoir des messages bloquants de mettre *WRAP,
qui permettra d’avoir les dernières informations loguées.

2) Choisir le niveau de log adapté

C’est les paramètres LOG() LOGCLPGM() du travail .

ils sont fixés par JOBD ou par les paramètres de la commande SBMJOB .

On divise généralement en trois les types les travaux de votre IBM i

Les travaux sensibles qui devront à voir le niveau de log maximum

LOG(4 00 SECLVL) LOGCLPGM(YES)

Les travaux communs , batchs traditionnels sessions interactives

LOG(3 00 SECLVL) LOGCLPGM(NO)

Les travaux qui ne doivent pas avoir de log , pour des questions de sécurité, ou des travaux trop nombreux et souvent très courts

LOG(0 99 NOLIST) LOGCLPGM(NO)

le niveau peut être ajusté par programme, CHGJOB LOG( ) LOGCLPGM( )

3) Choix du mode d’épuration

La meilleur solution est d’utiliser le cleanup standard de la machine.

Vous pouvez voir les paramètres par la commande ==> go cleanup

par l’option 1 vous voyez le paramétrage
si le ménage est possible, l’heure de démarrage et la durée .
Le plus souvent on est reglé à 30 jours

Pour démarrer le ménage c’est la commande STRCLNUP , il est conseillé de la mettre dans le programme STRUP de votre partition.

Les spools de log sont placés dans l’outq QEZJOBLOG, vous pouvez éventuellement épurer des spools particuliers, le mieux étant de ne pas les produire.

4) Nouveautés de SQL AS A service

Il y a plusieurs vues, et fonction table qui peuvent, vous aidez, voici les 2 principales :

La fonction table QSYS2.JOBLOG_INFO() permet de voir le contenu d’une joblog.

Exemple :

SELECT * FROM TABLE(QSYS2.JOBLOG_INFO(‘378809/QUSER/QZDASOINIT’)) A

pour voir la log du job identifié

La vue QSYS2.OUTPUT_QUEUE_ENTRIES permet de voir la liste des spools d’une OUTQ.

Exemple

select * from QSYS2.OUTPUT_QUEUE_ENTRIES where OUTPUT_QUEUE_NAME = ‘QEZJOBLOG’

pour voir les spools de l’outq des joblogs

5) Remarques générales

Il est souvent inutile de sauvegarder des spools de log , sauf à avoir une réel raison et un moyen de suivi.

Un surveillance quotidienne est plus efficace qu’une recherche hypothétique dans un spool de 10 mois

Attention, un spool qui reste est une place de travail occupé dans la table des travaux.

Vous pouvez décoreller les spools des travaux mais ce n’est pas culturel et ça peut compliquer vos recherches futurs.

Attention au programme en mode debug avec du SQL, l’optimiseur rempliera rapidement la log.

L’ILE produit plus de log que l’OPM, c’est normale vous avez un niveau de plus à gérer, ca peut doubler les lignes écrites !!!

Pour avoir une vue de des spools de log, pensez à la commande, WRKJOBLOG

Un travail n’a pas forcément de log , la seule qu’il laisse dans tous les cas c’est un message CPF1124 pour son démarrage et un message CPF1164 pour indiquer sa fin.