System API で装置記述などの状態を把握する (V5R4)

装置記述や制御装置記述、回線記述などの状態を取得する API があります。

Retrieve Configuration Status (QDCRCFGS) という API で、ほとんどその名のとおり RTVCFGSTS コマンドと同じような情報が取れるものです。

ただし、もちろん API の方が RTVCFGSTS コマンドの結果より多くの情報が取れるようになっています。↓がこの API で取得できる情報ですね。

CFGS0100 Format

Offset Type Field
Dec Hex
0 0 BINARY(4) Bytes returned
4 4 BINARY(4) Bytes available
8 8 BINARY(4) Current status: numeric code
12 C CHAR(7) Date information retrieved
19 13 CHAR(6) Time information retrieved
25 19 CHAR(20) Current Status: displayable text
45 2D CHAR(10) Job name
55 37 CHAR(10) User name
65 41 CHAR(6) Job number
71 47 CHAR(10) Pass-through device
81 51 CHAR(3) Reserved
84 54 BINARY (4) Offset to list of active conversations
88 58 BINARY(4) Number of active conversations
92 5C BINARY(4) Entry length for list of active conversations
96 60 BINARY(4) Offset to list of multiple job information
100 64 BINARY(4) Number of multiple jobs
104 68 BINARY(4) Entry length for list of multiple jobs
These fields repeat for each active conversation BINARY(4) Conversation status numeric value
CHAR(20) Conversation status text value
CHAR(10) Conversation mode name
CHAR(10) Conversation job name
CHAR(10) Conversation user name
CHAR(6) Conversation job number
These fields repeat for each additional job CHAR(10) Multiple job name
CHAR(10) Multiple job user name
CHAR(6) Multiple job number

RTVCFGSTS コマンドで取れる情報は↑の情報の中の「Current status: numeric code」のサブセットのみですし、また、システム負荷も多少軽かろうという期待感もありますよね。(特別に測ってはいませんが)

ということで、カンタンなサンプルを作ってみました。

      *                                                                                             
      *  CREATE TABLE CFGLST.CFGINF                                                                 
      *  (CONFIGD CHAR ( 10) NOT NULL WITH DEFAULT,                                                 
      *   TYPE CHAR ( 10) NOT NULL WITH DEFAULT,                                                    
      *   JOB CHAR ( 10) NOT NULL WITH DEFAULT,                                                     
      *   USER CHAR ( 10) NOT NULL WITH DEFAULT,                                                    
      *   JOBN0 CHAR ( 6) NOT NULL WITH DEFAULT,                                                    
      *   STATUS INTEGER NOT NULL WITH DEFAULT,                                                     
      *   STATUS_TEXT CHAR ( 20) NOT NULL WITH DEFAULT,                                             
      *   ROW_TIMESTAMP TIMESTAMP NOT NULL WITH DEFAULT)                                            
      *                                                                                             
     **-- Header specifications:  --------------------------------------------**                    
     H Option( *SrcStmt ) dftactgrp( *no )                                                          
     **                                                                                             
     D GetCfgSts       PR                                                                           
     D  cfgD                         10a                                                            
     D  type                         10a                                                            
     D GetCfgSts       PI                                                                           
     D  pcfgD                        10a                                                            
     D  ptype                        10a                                                            
     **                                                                                             
     **-- Api error data structure:                                                                 
     D ERRC0100        Ds                  Qualified                                                
     D  BytPro                       10i 0 Inz( %Size( ERRC0100 ))                                  
     D  BytAvl                       10i 0 Inz                                                      
     D  MsgId                         7a                                                            
     D                                1a                                                            
     D  MsgDta                      128a                                                            
     **-- Global variables:                                                                         
     D ApiRcvSiz       s             10u 0                                                          
     **                                                                                             
     D CFGS0100        Ds                  Based( pCfgDInf )  Qualified                             
     D  BytRtn                       10i 0                                                          
     D  BytAvl                       10i 0                                                          
     D  CurSts                       10i 0                                                          
     D  Date                          7a                                                            
     D  Time                          6a                                                            
     D  CurStsText                   20a                                                            
     D  Job                          10a                                                            
     D  user                         10a                                                            
     D  JobNo                         6a                                                            
     D  PasThrDev                    10a                                                            
     D  rsvd1                         3a                                                            
     D  ofs2actconv                  10i 0                                                          
     D  actconvno                    10i 0                                                          
     D  entlenactconv                10i 0                                                          
     D  ofs2mltjobs                  10i 0                                                          
     D  mltjobsno                    10i 0                                                          
     D  entlenmltjobs                10i 0                                                          
     **                                                                                             
     **-- Retrieve CfgD information:                                                                
     D RtvCfgSts       Pr                  ExtPgm( 'QDCRCFGS' )                                     
     D  spRcvVar                  65535a   Options( *VarSize )                                      
     D  spRcvVarLen                  10i 0 Const                                                    
     D  spFmtNam                      8a   Const                                                    
     D  spCfgDTyp                    10a   Const                                                    
     D  spCfgDNam                    10a   Const                                                    
     D  spError                   32767a         Options( *VarSize: *Omit )                         
     **                                                                                             
      /Free                                                                                         
                                                                                                    
             *inLR = *on;                                                                           
                                                                                                    
             ApiRcvSiz = 65535;                                                                     
             pCfgDInf   = %Alloc( ApiRcvSiz );                                                      
             CFGS0100.BytAvl = *Zero;                                                               
                                                                                                    
             If pcfgD  =  *blanks ;                                                                 
                return ;                                                                            
             EndIf ;                                                                                
                                                                                                    
             If ptype  =  *blanks ;                                                                 
                return ;                                                                            
             EndIf ;                                                                                
                                                                                                    
             DoU  CFGS0100.BytAvl <= ApiRcvSiz     Or                                               
                  ERRC0100.BytAvl  > *Zero;                                                         
                                                                                                    
               If  CFGS0100.BytAvl > ApiRcvSiz;                                                     
                 ApiRcvSiz  = CFGS0100.BytAvl;                                                      
                 pCfgDInf    = %ReAlloc( pCfgDInf: ApiRcvSiz );                                     
               EndIf;                                                                               
                                                                                                    
               RtvCfgSts ( CFGS0100                                                                 
                         : ApiRcvSiz                                                                
                         : 'CFGS0100'                                                               
                         : ptype                                                                    
                         : pcfgD                                                                    
                         : ERRC0100                                                                 
                          );                                                                        
              EndDo;                                                                                
                                                                                                    
              If  ERRC0100.BytAvl = *Zero;                                                          
                                                                                                    
                exec SQL                                                                            
                   INSERT INTO CFGLST.CFGINF                                                        
                     VALUES(                                                                        
                            :pcfgD,                                                                 
                            :ptype,                                                                 
                            :CFGS0100.job,                                                          
                            :CFGS0100.user,                                                         
                            :CFGS0100.jobno,                                                        
                            :CFGS0100.cursts,                                                       
                            :CFGS0100.curststext,                                                   
                            CURRENT_TIMESTAMP                                                       
                            ) ;                                                                     
                                                                                                    
              EndIf;                                                                                
                                                                                                    
              exec SQL  COMMIT ;                                                                    
                                                                                                    
              Dealloc pCfgDInf ;                                                                    
                                                                                                    
              return;                                                                               
                                                                                                    
      /End-Free                                                                                     

[Top Pageに戻る]

Ads by TOK2