RPG から CL コマンドの実行 (system() 関数を使って)

RPG で C ランタイム関数を使用する」で紹介した方法で、ILE 環境のRPG からは C の標準関数に加えてC のランタイム・ライブラリ関数が使えます。UNIX 互換の関数なども使えます。
今回は system() の機能を使って CL コマンドを実行する方法を見てみましょう。

System API の使用例 - CL から RPG への書き直し -」などの中では RPG から CL コマンドを実行させるのに QCMDEXC を使用しています。
その CL コマンドの実行は、 system() 関数を使用しても同じように実行させることができます。つまり、これで「System API の使用例 - CL から RPG への書き直し -」の中の該当部分を差し替えることもできるわけですね。

'_EXCP_MSGID' というシンボルを import しておくことで、戻ってくる CPF メッセージをモニターして適切な処理を組み込むこともできます。(QCMDEXC を使ってエラー処理も含めてまったく同じように書き直してみたものが「RPG でのエラー処理 (QCMDEXC)」に載っています。そちらも参考にしてみてください)

     H BNDDIR('QC2LE')  DFTACTGRP(*NO)                                                              
      *                                                                                             
     D CPFMSG          S              7a   import('_EXCP_MSGID')                                    
      *                                                                                             
     D system          PR            10i 0 extProc('system')                                        
     D  cmdString                      *   VALUE                                                    
     D                                     Options(*STRING)                                         
      *                                                                                             
     D CLRPFM          S             21a   INZ('CLRPFM FILE(QCHKACTJ)')                             
      *                                                                                             
      /Free                                                                                         
                                                                                                    
             if (system(CLRPFM) <> 0);                                                              
                if (CPFMSG <> *BLANKS);  
                                                            
                   select ;                                             
                   when (CPFMSG = 'CPF3142');                                      
                      dsply 'NOT EXIST';                                              
                   when (CPFMSG = 'CPF3156');                                       
                      dsply 'IN USE';                                                       
                   other;                                                       
                      dsply ('error ' + CPFMSG);                                 
                   endsl;                                                        

                endif;                                                                              
             endif;                                                                                
                                                                                                    
             *inLR = *on ;                                                                         
             return ;                                                                              
                                                                                                    
      /End-Free

実行してみましょう。

PF がない場合 (CPF3142) は"NOT EXIST" のメッセージが表示され、PF を作ってからの実行 (CPF メッセージのない状態) では、ちゃんと「消去された」というメッセージが出てきています。

別のジョブから ALCOBJ でファイルをロック (他のジョブからは CPF3156) してから実行すると、

"IN USE" のメッセージが出てきます。

[Top Pageに戻る]

Ads by TOK2