| SYS : liste des unités d'un contrôleur |
|
Vous avez besoin de lister les unités d'un contrôleur pour automatiser une action (le dspctld ne permet pas de faire une sortie *outfile). Voici un exemple basé sur une api QDCRCTLD en utilisant le format CTLD0200. Le programme génère si le fichier n'existe pas, un fichier dans votre curlib LSTDEVDP le source c'est du sqlrpgle Voici le code : h DFTACTGRP(*NO) *------------------------------------------------------------------* * * * Ecriture des unités d'un contrôleur dans une table * * nom du fichier de sortie lstdevdp * * Parametre : * * Nom du contrôleur sur 10 caractères alpha * * * *------------------------------------------------------------------* /copy qsysinc/qrpglesrc,qusec /copy qsysinc/qrpglesrc,QDCRCTLD d* proptotypage du programme d lstdevd pr d 10 const d lstdevd pi d Ctlname 10 const d* proptotypage de l'API D RtvCtld PR extpgm('QDCRCTLD') D Receiver 1 OPTIONS(*VARSIZE) D LengthRcv 10i 0 const D format 8 const D Ctlname 10 const D Qusec likeds(qusec) ** copy dds format CTLD0200 D Receiver ds LIKEDS(QDCD020000) d based(ReceivePtr) d** copy dds format devices d device ds likeds(QDCLAD00) d based(devptr) d* variables de travail dReceiverSize s 10i 0 inz(8) Dctld s 10 Ddevd s 10 Dcount s 10i 0 /free EXEC SQL Set Option Commit = *NONE; exec sql CREATE TABLE LSTDEVDP(CTLD CHAR (10 ) NOT NULL WITH DEFAULT, DEVD CHAR (10 ) NOT NULL WITH DEFAULT) ; QUSBPRV = 0; ReceivePtr = %alloc(ReceiverSize); RtvCtld(Receiver :ReceiverSize :'CTLD0200' :Ctld :QUSEC); dow (Receiver.QDCBAVL01 > ReceiverSize); ReceiverSize = Receiver.QDCBAVL01; ReceivePtr = %realloc(ReceivePtr :ReceiverSize); RtvCtld(Receiver :ReceiverSize :'CTLD0200' :Ctld :QUSEC); enddo; if (Receiver.QDCNBRAD00 > 0); DevPtr = ReceivePtr + Receiver.QDCOAD; for Count = 1 to Receiver.QDCNBRAD00; devd = Device.QDCADN ; exec sql INSERT INTO LSTDEVDP VALUES(:ctld, :Devd); DevPtr = DevPtr + Receiver.QDCLAD; endfor; endif; dealloc ReceivePtr; *inlr = *on; /end-free |