プログラミング・テクニック(その1)

可変行数の画面を表示させるには
次に作動するプログラムを、ボタンによって切り分ける
どのボタンが押されたかをプログラムで知る
エラーメッセージなどの表示は(その1)
エラーメッセージなどの表示は(その2)(メッセージによって色を変える)
Excel形式をダウンロードするには
簡単な入力チェックをブラウザー側で行うには
RPGから直接コマンドを実行させるには


■ 可変行数の画面を表示させるには
DSPFのサブファイルのような可変行数の画面を表示させれるは、#OUT_HTMLとともに
#STD_OUT関数を用います。
次のようなテクニックを使います。
 @HTMLファイルの中では、可変行以外の部分を記述する。
 A可変行が、挿入される部分に、<!-- #EXEC CMD="CALL XXXXXX" -->
 と記述する。
 BXXXXXXという名前のプログラムを作成し、その中で、#STD_OUTを用いて
 プログラム内から直接HTMLを出力する。

日付品番数量金額←ココまでをHTMLファイルで記述
01/10A010101200←ココからは#STD_OUTで出力
01/11B010202000
01/12C010303000


HTMLファイルプログラム(PG010)ブラウザーへの出力
<table><table>
<td>日付<td>品番<td>数量<td>金額<td>日付<td>品番<td>数量<td>金額
<!-- #EXEC CMD="CALL PG010"-->SETLL FILE
DO
READ FILE<td>01/10<td>A010<td>10<td>1200
CALLB '#STD_OUT"<td>01/11<td>B010<td>20<td>2000
END <td>01/12<td>C010<td>30<td>3000
SETON      LR
</table></table>
ページの先頭へ戻る

■ 次に作動するプログラムを、ボタンによって切り分ける
<form>タグのaction属性は、次に表示するページ(作動するプログラム)を指定しますが、
ひとつしか指定出来ませんので、そのままでは押されたボタンによって次の画面を変える事ができません。
このため、JavaScriptを用いて、action属性を書き換えます。
<script>
<!--
//------フォームサブミット
function form_submit(url){
      document.FORM.action=url;
      document.FORM.submit();
}
//-->
</script>
  ・
  ・
<button type="button" onClick="javascript:form_submit('PG010.PGM')">作成</button>
<button type="button" onClick="javascript:form_submit('PG020.PGM')">変更</button>

この例では、作成ボタンの場合はPG010が、変更ボタンの場合はPG020が作動します。
ページの先頭へ戻る

■ どのボタンが押されたかをプログラムで知る
<input>タグでtype=hiddenの入力項目を定義し、JavaScriptで書き換える
 ことにより、どのボタンが押されたかを知ることが出来ます
<script>
<!--
//------フォームサブミット
function form_submit(button){
      document.FORM.NEXT_ACTION.value=button;
      document.FORM.submit();
}
//-->
</script>
  ・
  ・
<form method="get" name="FORM" action="PG010.PGM">
<input type="hidden" name="NEXT_ACTION" size="10">
<button type="button" onClick="javascript:form_submit('CRT')">作成</button>
<button type="button" onClick="javascript:form_submit('CHG')">変更</button>

この例では、作成ボタンの場合は『CRT』が、変更ボタンの場合は『CHG』がPG010に渡されます。
ページの先頭へ戻る

■ エラーメッセージなどの表示は(その1)
HTMLファイルで
<font color="red">&&ERRMSG</font>
といい具合にコーディングします。
RPG側で、エラーがあった場合にERRMSGにメッセージをセットして、#OUT_HTMLを使います。
【HTMLファイル】
<font color="red">&&ERRMSG</font>
【RPG】
   TOKCOD  CHAIN  TOKMST         90
90           EVAL   DATA='ERRMSG=コードが正しくない'
             CALLB  '#OUT_HTML'
             PARM               LIB
             PARM               FILE
             PARM               MBR
             PARM               DATA
			
【説明】
ブラウザーへは、
@90がオンの場合、<font color="red">コードが正しくない</font>が送られ
A90がオフの場合、<font color="red"></font>が送られます
Aの場合、文字色がredが指定されていますが、表示する文字がないので何も表示されません。

90がオフの場合、DATAの中に、ERRMSGを定義する必要はありません。
#OUT_HTMLは、置換すべき値が見つからない場合、空白値でセットします。
ページの先頭へ戻る

■ エラーメッセージなどの表示は(その2)
エラーの内容によって、色を変えたい場合などは、HTML文ごとセットして、#OUT_HTMLを呼びます。
【HTMLファイル】
&&ERRMSG
【RPG】
   TOKCOD  CHAIN  TOKMST         90
 90          EVAL   DATA='ERRMSG=<font color="red"> +
                    コードが正しくない</font>'
N90          EVAL   DATA='ERRMSG=<font color="blue"> +
                    コードが見つかりました</font>'
             CALLB  '#OUT_HTML'
             PARM               LIB
             PARM               FILE
             PARM               MBR
             PARM               DATA
			
【説明】
ブラウザーへは、
@90がオンの場合、<font color="red">コードが正しくない</font>が送られ
A90がオフの場合、<font color="blue">コードが見つかりました</font>が送られます

#OUT_HTMLは、単純に置換処理を行いますので、HTML文がデータの中に入っていれば
そのまま置換します。
ページの先頭へ戻る

■ Excel形式をダウンロードするには
WebプログラムからCRTXLSF(EXCEL作成)コマンドを呼び出し、
IFSにEXCELファイルを作成し、さらにブラウザーに書き出す事により、
ブラウザー内に直接、EXCELを開く事が出来ます。
     
ブラウザーWEBプログラムサブプログラム
(ユーザーのCLP)   
−−−−−−−−−−−−−− −−−−−−−−−−−−−
条件入力1)・検索条件を読み込み
2)・ワークファイルを作成
3)・検索条件により
 ワークファイルに
 抜き出し
4)・CPYTOIMPFコマンドにより
 CSVファイルを作成
5)・CRTXLSFコマンドにて
 EXCELファイルを
 IFSに作成
EXCEL表示6)・IFS内のEXCEL
 ファイルをブラウザーに
 書き出し

これにより、面倒な操作無しに、条件入力の結果で、直ぐにExcelを開く事が出来ます。

IFS内のExcelファイルをブラウザーに書き出すには、次の方法が便利です。

次のタグを持ったページを書き出します。
  <META HTTP-EQUIV="Refresh" CONTENT="0;URL=http://xyz.co.jp/IFSのディレクトリー/Excelファイル名">
このとき、Excelファイル名の拡張子は、必ずXLSにして下さい。
ページの先頭へ戻る

■ 簡単な入力チェックをブラウザー側で行うには(未入力チェック)
簡単な入力は、チェックは、RPGプログラムに戻さなくても、
Javascriptを用いて、ブラウザー側で行う事が出来ます。

以下の例では、項目の未入力チェックを行い、メッセージを出します。
   
<script>
<!--
//------フォームサブミット
function form_submit(){
 if(input_chk()==false){return;}
 document.FORM.submit();
}
//------入力チェック
function input_chk(){
 //得意先コードのチェック
 if (document.FORM.TOKCD.value==""){
     window.alert("得意先コードが未入力");return false;}
  return true;
}
   ・
   ・
<form method="GET" name="FORM" >
得意先コード:<input type="text" name="TOKCD" size="6" >
<button type="button" onClick="javascript:form_submit()">送信</button>
</form>



ページの先頭へ戻る

■ RPGから直接コマンドを実行させるには
RPGの中から、(CLを呼び出すなどせずに)直接コマンドを実行出来ます。
ファイルにOVRDBFをかけてからOPENしたり、ジョブのCCSIDを5035に変えたり
いちいちCLを作らなくても簡単に処理できます。

下の例では、SYOHINというファイルをプログラム内でOVRDBFを行ってから、
OPENしています。
FSYOHIN    IF   E           K DISK    USROPN 
 *
C                   EVAL      cmd='OVRDBF SYOHIN CGILIB/SYOHIN'   
C                   CALL      'QCMDEXC'                            90(←真中の標識です) 
C                   PARM                    cmd             500       
C                   PARM      500           cmd_len          15 5     
C                   OPEN      SYOHIN
C                   READ      SYOHIN
 なお、D仕様書で以下の定義を行っておけば、
 90がオン(エラー発生)のときに、メッセージ番号が取得できます。
D                SDS                      
D CPF_MSGNO              40     46        

ページの先頭へ戻る