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