■Webアプリケーションのサンプル
ASP.NETのWebアプリケーションからサーバスクリプトを呼び出すサンプルです。ホストとの接続、キー入力などのサーバスクリプトのメソッドを呼び出す例を記載しています。一時的にエミュレータ画面を表示したり、WSMGRマクロを呼び出すサンプル例も含まれます。
サンプルアプリケーションの画面例
サンプルHTMLの格納先は次のようになります。
<インストール先フォルダ配下>\wwwroot\sample\ServerScript\ 例) C:\wsmgrweb\wwwroot\sample\ServerScript\
C#のサンプルHTMLのURLは次のようになります。
<WebサーバのURL>/<仮想ディレクトリ>/sample/ServerScript/Sample1/cs/Sample1.aspx 例) http://www.example/wsmgrweb/sample/ServerScript/Sample1/cs/Sample1.aspx
VBのサンプルHTMLのURLは次のようになります。
<WebサーバのURL>/<仮想ディレクトリ>/sample/ServerScript/Sample1/vb/Sample1.aspx 例) http://www.example/wsmgrweb/sample/ServerScript/Sample1/vb/Sample1.aspx
サンプルの構成は以下のとおりです。
Webアプリケーションの実装 | Sample1.aspx |
WSMGRマクロ | zaiko.scr |
Webアプリケーションの実装例(C#版Sample1.aspx)
<%@ Page Language="C#" AutoEventWireup="true" ClassName="ScriptSample" %> <%@ Register TagPrefix="wsmgrweb" Namespace="Fujitsu.Wsmgrweb.ServerApi" Assembly="Fujitsu.Wsmgrweb.Emulator, Version=1.0.0.0, PublicKeyToken=43bd721f4ef10ce7, Culture=neutral" %> <%@ Import Namespace="Fujitsu.Wsmgrweb.ServerApi" %> <%@ Import Namespace="System.Threading" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>ユーザスクリプトサンプル</title> <script runat="server"> public delegate void SetLabelDelegate(string text); protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { } else { } } private WsmgrDspemu dspemu = null; //起動 protected void ButtonConnect_Click(object sender, EventArgs e) { try { WsmgrConnectInfo info = new WsmgrConnectInfo(); info.User = UserName.Value; info.Icon = IconName.Value; info.Pw = Password.Value; if (info.Init() != 0) { SetLabel("WsmgrConnectInfo 認証失敗"); return; } dspemu = new WsmgrDspemu(info); if (dspemu.GetError() == 0) { SetLabel("WsmgrDspemu 初期化成功"); } else { SetLabel("WsmgrDspemu 初期化失敗"); info.Uninit(); return; } if (dspemu.Session.Connect(1)) { SetLabel("WsmgrDspemu 接続成功"); } else { SetLabel("WsmgrDspemu 接続失敗"); info.Uninit(); } SetInfo(Context, info); SetDspemu(Context, dspemu); } catch (Exception ex) { SetLabel(string.Format("WsmgrDspemu初期化例外 {0}:{1}", ex.GetType(), ex.Message)); } } protected void ButtonDisconnect_Click(object sender, EventArgs e) { dspemu = GetDspemu(Context); try { if (dspemu != null) { if (dspemu.Session.Disconnect()) { SetLabel("WsmgrDspemu 切断成功"); string varName = getVarName() + "info"; WsmgrConnectInfo info = GetInfo(Context); if (info != null) { info.Uninit(); SetLabel("WsmgrDspemu Uninit"); } } else { SetLabel("WsmgrDspemu 切断失敗"); } } else { SetLabel("WsmgrDspemu = null"); } } catch (Exception ex) { SetLabel(string.Format("WsmgrDspemu切断例外 {0}:{1}", ex.GetType(), ex.Message)); } } // Type protected void ButtonType_Click(object sender, EventArgs e) { dspemu = GetDspemu(Context); try { dspemu.Macro.Type(TypeText.Value); dspemu.Macro.Wait(); SetTable(dspemu.Screen.ToTable()); } catch (Exception ex) { SetLabel(string.Format("WsmgrDspemu例外 {0}:{1}", ex.GetType(), ex.Message)); } } // 画面取得 protected void ButtonGetScreen_Click(object sender, EventArgs e) { dspemu = GetDspemu(Context); try { int row1 = int.Parse(ScreenRow1.Value); int col1 = int.Parse(ScreenCol1.Value); int row2 = int.Parse(ScreenRow2.Value); int col2 = int.Parse(ScreenCol2.Value); SetTable(dspemu.Screen.ToTable(row1, col1, row2, col2)); } catch (Exception ex) { SetLabel(string.Format("WsmgrDspemu例外 {0}:{1}", ex.GetType(), ex.Message)); } } // Forward protected void ButtonForward_Click(object sender, EventArgs e) { dspemu = GetDspemu(Context); try { dspemu.Document.Forward(ForwardUrl.Value, Server, Context); } catch (Exception ex) { SetLabel(string.Format("WsmgrDspemu例外 {0}:{1}", ex.GetType(), ex.Message)); } } // ExecMacro protected void ButtonExecMacro_Click(object sender, EventArgs e) { dspemu = GetDspemu(Context); try { if (dspemu != null) { if (dspemu.Macro.ExecMacro(MacroName.Value)) SetLabel("ExecMacro 実行成功"); else SetLabel("ExecMacro 実行失敗"); SetTable(dspemu.Screen.ToTable()); } else { SetLabel("WsmgrDspemu = null"); } } catch (Exception ex) { SetLabel(string.Format("WsmgrDspemuマクロ実行失敗例外 {0}:{1}", ex.GetType(), ex.Message)); } } // ExecMacro2 protected void ButtonExecMacro2_Click(object sender, EventArgs e) { dspemu = GetDspemu(Context); try { if (dspemu != null) { dspemu.Macro.SetPrivateValue("hostid", "hostid1"); dspemu.Macro.SetPrivateValue("hostpw", "hostpw1"); dspemu.Macro.SetPrivateValue("customer", CustomerName.Value); if (dspemu.Macro.ExecMacro("zaiko")) { // マクロの実行結果を取得 SetLabel("zaiko: error: " + dspemu.Macro.GetPrivateValue("error")); SetLabel("zaiko: message: " + dspemu.Macro.GetPrivateValue("message")); String[][] zaiko = (String[][])dspemu.Macro.GetPrivateValue("zaiko"); SetTable(zaiko); } } else { SetLabel("WsmgrDspemu = null"); } } catch (Exception ex) { SetLabel(string.Format("WsmgrDspemuマクロ実行失敗例外 {0}:{1}", ex.GetType(), ex.Message)); } } public void SetLabel(string text, bool clear = false) { if (clear) Label1.Text = text + "<br>"; else Label1.Text += text + "<br>"; } public void SetTable(string[][] data) { foreach (string[] cols in data) { TableRow tr = new TableRow(); foreach (string col in cols) { TableCell tc = new TableCell(); tc.Text = col; tr.Cells.Add(tc); } Table1.Rows.Add(tr); } } private string getVarName() { string varName = string.Format("WsmgrDspemu_{0}_{1}", UserName.Value, IconName.Value); return varName; } public WsmgrConnectInfo GetInfo(HttpContext context) { string varName = getVarName() + "_info"; return (WsmgrConnectInfo)context.Session[varName]; } public void SetInfo(HttpContext context, WsmgrConnectInfo info) { string varName = getVarName() + "_info"; context.Session[varName] = info; } public WsmgrDspemu GetDspemu(HttpContext context) { string varName = getVarName(); return (WsmgrDspemu)context.Session[varName]; } public void SetDspemu(HttpContext context, WsmgrDspemu dspemu) { string varName = getVarName(); context.Session[varName] = dspemu; } </script> <style type="text/css"> .auto-style1 { width: 100%; } .auto-style2 { height: 23px; } </style> </head> <body> <form id="form2" runat="server"> サーバスクリプトサンプル<br /> <br /> WsmgrConnectInfo<table bgcolor="#EEEEEE" class="auto-style1"> <tr> <td width="25%">ユーザ名</td> <td width="50%"> <input id="UserName" type="text" value="user1" runat="server" /></td> <td rowspan="3"> <asp:Button ID="ButtonConnect" runat="server" OnClick="ButtonConnect_Click" Text="Connect" /> <br /> <asp:Button ID="ButtonDisconnect" runat="server" OnClick="ButtonDisconnect_Click" Text="Disconnect" /> </td> </tr> <tr> <td class="auto-style2" width="25%">パスワード</td> <td class="auto-style2" width="50%"> <input id="Password" type="text" value="" runat="server" /></td> </tr> <tr> <td width="25%">接続アイコン</td> <td width="50%"> <input id="IconName" type="text" value="接続" runat="server"/></td> </tr> </table> <br /> Dspemuオブジェクト<table bgcolor="#EEEEEE" class="auto-style1"> <tr> <td width="25%">入力キー</td> <td width="50%"> <input id="TypeText" type="text" value="[ENTER]" runat="server" /></td> <td> <asp:Button ID="ButtonType0" runat="server" OnClick="ButtonType_Click" Text="Type" /> </td> </tr> <tr> <td width="25%">エミュレータ座標</td> <td width="50%"> <input id="ScreenRow1" type="text" runat="server" size="2" value="1" /><input id="ScreenCol1" type="text" runat="server" size="2" value="1" /><input id="ScreenRow2" type="text" runat="server" size="2" value="24" /><input id="ScreenCol2" type="text" runat="server" size="2" value="80" /></td> <td> <asp:Button ID="ButtonGetScreen0" runat="server" OnClick="ButtonGetScreen_Click" Text="画面取得" /> </td> </tr> <tr> <td width="25%">エミュレータ画面</td> <td width="50%"> <input id="ForwardUrl" type="text" value="/wsmgrweb/emu/Emulator.aspx" runat="server" /></td> <td> <asp:Button ID="ButtonForward" runat="server" OnClick="ButtonForward_Click" Text="Forward" Height="21px" /> </td> </tr> <tr> <td width="25%">マクロ名</td> <td width="50%"> <input id="MacroName" type="text" value="Macro1" runat="server" /></td> <td> <asp:Button ID="ButtonExecMacro" runat="server" OnClick="ButtonExecMacro_Click" Text="ExecMacro" /> </td> </tr> </table> <br /> マクロ連携サンプル<table bgcolor="#EEEEEE" class="auto-style1"> <tr> <td width="25%">検索顧客名</td> <td width="50%"> <input id="CustomerName" type="text" value="顧客" runat="server" /></td> <td> <asp:Button ID="ButtonExecMacro2" runat="server" OnClick="ButtonExecMacro2_Click" Text="在庫検索" /> </td> </tr> </table> <%--<wsmgrweb:Emulator ID="Emulator1" runat="server" />--%> <asp:Table ID="Table1" runat="server" BorderStyle="Solid"> </asp:Table> <br /> 状態<asp:Label ID="Label1" runat="server"></asp:Label> </form> </body> </html>
WSMGRのマクロ例(zaiko.scr)
PROC MAIN ; 処理結果の格納領域 CrtString(zaiko[][]) ; 在庫情報(2次元配列) CrtString(message) ; ホスト画面上のメッセージ CrtInt(error, 0) ; マクロ実行結果 ; スクリプトから渡された情報 CrtString(hostid) ; ホストログオンID CrtString(hostpw) ; ホストログオンパスワード CrtString(customer) ; 検索対象の顧客名 PutValue(hostid, GetPrivateValue("hostid")) PutValue(hostpw, GetPrivateValue("hostpw")) PutValue(customer, GetPrivateValue("customer")) ; キーアンロックタイムの調整(ログオンするまでは長めに設定) SetKeyUnlockTime(0, 200) ; ログオン処理 Wait("SYSTEM READY") CrtString(str) PutValue(str, "LOGON AIM,,PROC1,") PutValue(str, Att(str, hostid)) PutValue(str, Att(str, ",")) PutValue(str, Att(str, hostpw)) PutValue(str, Att(str, "[ENTER]")) Type(str); Wait("*** 業務メニュー ***") IF(Large(GetError(), 0) ; ログオンエラー時の処理 PutValue(error, GetError()) ; エラー番号 PutValue(message, GetString(22, 1, 22, 80)) ; ホスト画面上のエラーメッセージ GOTO(EXIT1) ENDIF ; キーアンロックタイムを調整(ログオン成功後は短く調整) SetKeyUnlockTime(0, 10) ; メニュー番号の入力 Type("2[ENTER]") Wait("*** 検索条件 ***") PutValue(str, customer) PutValue(str, Att(str, "[ENTER]")) Type(str); Wait("*** 在庫照会 ***"); CrtString(totalPage) ; すべてのページ数 CrtString(currentPage) ; 現在のページ番号 PutValue(totalPage, GetString(21, 72, 21, 72)) WHILE(TRUE) CrtString(work[][]) PutValue(work, GetTable(8, 11, 19, 71)) AppendArray(zaiko, work) ; 終了ページまで繰り返す PutValue(currentPage, GetString(21, 69, 21, 69)) IF(Equ(totalPage, currentPage)) Type("[PF12]" ; 終了 PutValue(message, "検索正常終了") BREAKWHILE ELSEIF Type("[PF7]") ; 次ページへ ENDIF ENDWHILE EXIT1: ;スクリプトへ処理結果を返却 SetPrivateValue("zaiko", zaiko) SetPrivateValue("message", message) SetPrivateValue("error", error) ENDPROC