[AS/400]コマンド一括実行スクリプト

概要

テキストボックスに、AS/400 コマンドを入れて実行ボタンを押すと、バッチ実行します。
複数コマンドも順番に実行します。
バッチ処理のテストの時に、エミュレータを1画面確保しなくても良しです。

良い子のお約束

このページに書かれている事を実行して、何が起こっても私は知りません。
まぁ、このページに到達された方なら大丈夫でしょうけど(^o^)。

環境とか

使い方

スクリプト re975001.hta の固定値をご自分の環境に合わせて変更し、起動して下さい。
上のテキストボックスには、AS/400 コマンドを改行で区切って好きなだけ入れて、実行ボタンを押して下さい。
下のテキストボックスには、実行コマンドとエラーメッセージが出ます。
正常終了時のメッセージ(コピー件数等)は出ません。
最初にライブラリリストの設定する事も出来ます。
実行は1ジョブですが、他の人と同時に実行した時にどうなるかは、未検証です。
iSeries Access とか Client Access は、自力でインストールして下さい。

スクリプトのソース

[re975001.hta:ここから]======================================================================
<html>
<head>
    <HTA:APPLICATION
        APPLICATIONNAME="AS/400 コマンド実行"
        ICON="winmine.exe" 
        BORDER="dialog"
        SCROLL="no"
    />
    <style type="text/css">
    <!--
        body,select,input,td    {
            font-family         : monospace;
            font-size           : 100%;
        }
        h1  {
            margin-top          : 0.5em;
            padding-top         : 0.2em;
            padding-bottom      : 0.2em;
            margin-bottom       : 0.2em;
            padding-left        : 1em;  
            color               : #3333ff;
            background-color    : #99ffff;
            font-size           : 130%;
        }
        textarea.cmd_list   {
            font-family         : monospace;
        textarea.log_list   {
            font-family         : monospace;
        }
        input.text  {
            width               : 8em;  
        }
        input.button    {
            font-size           : 80%;
        }
        p   {
            margin-top          : 0 em;
            padding-top         : 0.5 em;
            padding-bottom      : 0.5 em;
            margin-bottom       : 0 em;
        }
        span.UL {
            text-decoration     : underline;
        }
    -->
    </style>

</head>
<body onload="S_onload_proc()">
<form id="form_main" onsubmit="">
<h1 id="page_title"></h1>
<table><tr>
    <td>
    <select name="connect_AS" size="1" accesskey="a" >
        <option value="192.168.100.100" selected>自社</option>
        <option value="192.168.100.110" >客先</option>
    </select>
    </td>
    <td><input class="text" name="connect_user" accesskey="u" /></td>
    <td><input class="text" name="connect_pass" accesskey="w" type="password" /></td>
</tr></table>
<table><tr>
    <td>
        <textarea class="cmd_list" id="AS_commands" rows="14" cols="80">
# ASコマンドをを改行で区切って入れて下さい。右端で折り返しても、改行を入れていない場合は、1コマンド扱いとなります。
# 単一ジョブで連続実行されるので、ライブラリリストの設定等も有効です。
# また、行の先頭が『#』の場合、その行は実行されません。
# 小文字は、勝手に大文字に変えちゃいます。
</textarea>
    </td>
    <td>
        <textarea class="log_list" id="Init_LibL" rows="14" cols="10">
QTEMP  
DTALIB
PGMLIB
QGPL   </textarea>
    </td>
</tr></table>
<p class="cmdopt">
    <input name="Set_LibL" id="Set_LibL" type="checkbox" accesskey="l" /><label for="Set_LibL">(<span class="UL">L</span>)最初にライブラリリストを変更する。</label>
    <input name="Err_Stop" id="Err_Stop" type="checkbox" accesskey="s" /><label for="Err_Stop">(<span class="UL">S</span>)エラー発生時点で止める。</label>
<br>
    <input class="button" type=button onclick="S_AS_commands_check()" value="(Q)コマンドの実行" accesskey="q" />
    <input class="button" type=button onclick="S_AS_commands_clear()" value="(E)コマンドのクリア" accesskey="e" />
    <input class="button" type=button onclick="S_result_clear()" value="(D)実行結果のクリア" accesskey="d" />
</p>
<textarea class="log_list" id="results" rows="20" cols="94"></textarea>

</form>

<script language="VBScript">
    option explicit

    Const C_title_text = "AS/400 コマンド実行"
    Const C_initial_width = 710
    Const C_initial_height = 675

    Const C_DFT_AS_SYSTEM   = "192.168.100.100"
    Const C_DFT_AS_UID      = "USER"
    Const C_DFT_AS_PWD      = "PASS"

    dim L_AS400,L_AS_CMD

    dim L_ADO_con
    dim rt,i
    dim LA_commands()
    dim LA_Libl()
    dim L_constr

'--------------------------------------------------------------------------------
'実際のコマンドの実行
sub S_execute_command()
    dim L_conarray
    dim LA_temp_Libl,L_temp_Lib
    dim j
    dim L_cmd_str,L_Libl_str

    '1.AS/400接続
    Set L_AS400 = createobject("cwbx.AS400System")
    L_AS400.define document.all("connect_AS").value
    L_AS400.UserID  = document.all("connect_user").value
    L_AS400.Password    = document.all("connect_pass").value

    Set L_AS_CMD = createobject("cwbx.Command")
    Set L_AS_CMD.system = L_AS400

    On Error Resume Next
    '初期ライブラリリストの設定
    if document.all("Set_LibL").checked and document.all("Init_LibL").value <> "" then
        L_Libl_str = ""
        'オブジェクト名配列の作成:LA_objects
        LA_temp_Libl = Split(document.all("Init_LibL").value,vbcrlf)
        for i = 0 to UBound(LA_temp_Libl)   'それぞれのメンバー毎の処理
            L_temp_Lib = trim(LA_temp_Libl(i))
            if ( ( L_temp_Lib <> "" ) and ( left(L_temp_Lib,1) <> "#" ) ) then
                L_Libl_str = L_Libl_str & " " & L_temp_Lib
            end if
        next

        if L_Libl_str <> "" then 
            '実際のライブラリリストの変更
            L_cmd_str = "CHGLIBL (" & L_Libl_str & ")"
            S_add_result L_cmd_str              '結果メッセージの表示
            L_AS_CMD.run L_cmd_str
            If Err.Number <> 0 Then
                S_add_result Err.Description        '結果メッセージの表示
                Err.Clear
                if document.all("Err_Stop").checked then Exit sub
            end if
        end if
    end if

    for i = 0 to UBound(LA_commands)    'それぞれのメンバー毎の処理
        S_add_result LA_commands(i)             '結果メッセージの表示
        L_AS_CMD.run LA_commands(i)
        If Err.Number <> 0 Then
            S_add_result Err.Description        '結果メッセージの表示
            Err.Clear
            if document.all("Err_Stop").checked then Exit sub
        end if
    next 
    On Error Goto 0

end sub
'--------------------------------------------------------------------------------
'『コマンドの実行』ボタン押下時の処理
Sub S_AS_commands_check()

    dim LA_temp_commands,L_temp_command
    dim j

    if document.all("AS_commands").value <> "" then

        'オブジェクト名配列の作成:LA_objects
        LA_temp_commands = Split(document.all("AS_commands").value,vbcrlf)
        redim LA_commands(UBound(LA_temp_commands))
        j = -1
        for i = 0 to UBound(LA_temp_commands)   'それぞれのメンバー毎の処理
            L_temp_command = trim(LA_temp_commands(i))
            if ( ( L_temp_command <> "" ) and ( left(L_temp_command,1) <> "#" ) ) then
                j = j + 1
                LA_commands(j) = UCase(L_temp_command)
            end if
        next
        redim Preserve LA_commands(j)
        if j >= 0 then 
            '実際のコマンドの実行
            S_execute_command()
        else
            S_OK_msg "実行するコマンドを入力して下さい。"
        end if
    else
        S_OK_msg "実行するコマンドを入力して下さい。"
    end if

end sub
'--------------------------------------------------------------------------------
sub S_onload_proc()

    '初期値設定
    document.title = C_title_text
    document.all.page_title.innerText = C_title_text
    rt = window.resizeTo(C_initial_width,C_initial_height)

    document.all("connect_AS").value = C_DFT_AS_SYSTEM
    document.all("connect_user").value = C_DFT_AS_UID
    document.all("connect_pass").value = C_DFT_AS_PWD


end sub
'--------------------------------------------------------------------------------
sub S_add_result(P_msg)
    dim L_time,L_time_text

    L_time = time
    L_time_text = right("00" & datepart("h",L_time),2) & ":" & right("00" & datepart("n",L_time),2) & ":" & right("00" & datepart("s",L_time),2)

    document.all("results").value = document.all("results").value & L_time_text & " " & P_msg & vbcrlf
end sub

'--------------------------------------------------------------------------------
sub S_OK_msg(P_msg)
    msgbox P_msg,0,C_title_text
end sub

'--------------------------------------------------------------------------------
sub S_result_clear()
    document.all("results").value = ""
end sub
sub S_AS_commands_clear()
    document.all("AS_commands").value = ""
end sub

</script>
</body></html>
[re975001.hta:ここまで]======================================================================