4.3.4 サービス定義から生成したクライアントスタブの使用例,およびXMLスキーマ例
クライアントスタブの使用例,およびXMLスキーマ例を次に示します。
この例で呼び出すSPPのサービスの情報は次のとおりです。
-
サービスグループ名:SVGRP1
-
サービス定義名称:GYOUMU1
-
呼び出すサービス名(サービス名):GETDATA1
-
入力用カスタムレコードクラス名:in_data
-
出力用カスタムレコードクラス名:out_data
なお,コメント中の(1),(2)などは「4.3.2 クライアントスタブの使用方法」の説明の番号に対応しています。
- 〈この項の構成〉
-
-
(8) クライアントスタブの使用例(ASP.NET Webアプリケーション,C#,RPCデータのXMLマッピング機能を使用した場合)
-
(9) クライアントスタブの使用例(ASP.NET Webアプリケーション,J#,RPCデータのXMLマッピング機能を使用した場合)
-
(10) クライアントスタブの使用例(ASP.NET Webアプリケーション,Visual Basic,RPCデータのXMLマッピング機能を使用した場合)
-
(11) XMLスキーマ例(クライアントスタブ生成コマンド(spp2cstub)の-Xオプションにnormalを指定した場合1)
-
(12) XMLスキーマ例(クライアントスタブ生成コマンド(spp2cstub)の-Xオプションにdatasetを指定した場合1)
-
(13) XMLスキーマ例(クライアントスタブ生成コマンド(spp2cstub)の-Xオプションにnormalを指定した場合2)
-
(14) XMLスキーマ例(クライアントスタブ生成コマンド(spp2cstub)の-Xオプションにdatasetを指定した場合2)
-
(15) XMLスキーマ例(クライアントスタブ生成コマンド(spp2cstub)の-Xオプションにdatasetを指定した場合3)
(1) サービス定義の定義例
(a) サービス定義の定義例(業務1のサービス定義)
#include "mydata.h" /* 業務1のサービス定義 */ interface GYOUMU1 { GETDATA1(in_data, out_data); GETDATA2(in_data, out_data2); }
(b) データ型定義の定義例(mydata.h)
struct in_data { long i_basho[3]; long i_kakaku; }; struct out_data { char o_name[20]; char o_basho[16]; long o_kakaku; char o_inf[80]; }; struct out_data2 { int o_count; struct data { char o_name[20]; char o_basho[16]; long o_kakaku; char o_inf[80]; } data_t[100]; };
(2) カスタムレコードクラスの出力例(C#の場合,in_data.cs)
using Hitachi.OpenTP1.Common; namespace MyCompany { public class in_data : RecordImpl { public in_data() : base("default") { … } public in_data(string recordName) : base(recordName) { … } … private int[] _I_basho; public int[] I_basho { get { return _I_basho; } set { _I_basho = value; } } private int _I_kakaku = 0; public int I_kakaku { get { return _I_kakaku; } set { _I_kakaku = value; } } … } }
(3) 入力データ用XMLスキーマ例(in_data.xsd)
<?xml version="1.0" encoding="utf-8"?> <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="in_data" type="in_data" /> <xs:complexType name="in_data"> <xs:sequence> <xs:element minOccurs="0" maxOccurs="1" name="i_basho" type="ArrayOfInt" /> <xs:element minOccurs="1" maxOccurs="1" name="i_kakaku" type="xs:int" /> </xs:sequence> </xs:complexType> <xs:complexType name="ArrayOfInt"> <xs:sequence> <xs:element minOccurs="0" maxOccurs="unbounded" name="int" type="xs:int" /> </xs:sequence> </xs:complexType> </xs:schema>
(4) 出力データ用XMLスキーマ例(out_data.xsd)
<?xml version="1.0" encoding="utf-8"?> <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="out_data" type="out_data" /> <xs:complexType name="out_data"> <xs:sequence> <xs:element minOccurs="0" maxOccurs="1" name="o_name" type="xs:string" /> <xs:element minOccurs="0" maxOccurs="1" name="o_basho" type="xs:string" /> <xs:element minOccurs="1" maxOccurs="1" name="o_kakaku" type="xs:int" /> <xs:element minOccurs="0" maxOccurs="1" name="o_inf" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:schema>
(5) クライアントスタブの使用例(ASP.NET Webアプリケーション,C#の場合)
using System; using Hitachi.OpenTP1; using Hitachi.OpenTP1.Connector; namespace MyCompany { public class MyForm1 : System.Web.UI.Page { … private void Button1_Click(object sender, System.EventArgs e) { TP1Connection tc = null; // このボタンがクリックされたら // OpenTP1<TP1Host1>のサービス要求を行う try { // グローバル変数のアプリケーション状態から // TP1ConnectionManagerを取得 // (1) TP1ConnectionManagerクラスの生成 TP1ConnectionManager tcm = (TP1ConnectionManager)this.Application["tcmTP1Host1"]; // (2) TP1Connectionオブジェクトの取得 tc = tcm.GetConnection(); // (3) クライアントスタブの生成 GYOUMU1Stub server = new GYOUMU1Stub(tc, "SVGRP1"); // (4) RPC呼び出し形態 server.Flags = RpcInfo.DCNOFLAGS; // (4) 最大応答待ち時間 server.WatchTime = 180; // (5) 入力用カスタムレコードの生成 in_data inRecord = new in_data(); // (5) 出力用カスタムレコードの生成 out_data outRecord = new out_data(); inRecord.i_basho[0] = 56; // (6) 入力データの設定 inRecord.i_basho[1] = 43; // (6) 入力データの設定 inRecord.i_basho[2] = 18; // (6) 入力データの設定 // (7) GETDATA1を呼び出す server.GETDATA1(inRecord, outRecord); // (8) 応答データの取り出し this.textBox1.Text = outRecord.o_name.Trim(); } catch (TP1ConnectorException exp) { // Connector .NETが検知したエラー } catch (TP1Exception exp) { // その他スタブなどが検知したエラー } catch (Exception exp) { // 予期しない例外 } finally { // (9) コネクションをコネクションプールに戻す if (tc != null) tc.Dispose(); } } } }
(6) クライアントスタブの使用例(ASP.NET Webアプリケーション,J#の場合)
package MyCompany; import System; import Hitachi.OpenTP1; import Hitachi.OpenTP1.Client; public class MyForm1 extends System.Web.UI.Page { … private void Button1_Click(Object sender, System.EventArgs e) { TP1Connection tc = null; // このボタンがクリックされたら // OpenTP1<TP1Host1>のサービス要求を行う try { // グローバル変数のアプリケーション状態から // TP1ConnectionManagerを取得 // (1) TP1ConnectionManagerクラスの生成 TP1ConnectionManager tcm = (TP1ConnectionManager)this.get_Application(). Get("tcmTP1Host1"); // (2) TP1Connectionオブジェクトの取得 tc = tcm.GetConnection(); // (3) クライアントスタブの生成 GYOUMU1Stub server = new GYOUMU1Stub(tc, "SVGRP1"); // (4) RPC呼び出し形態 server.set_Flags(RpcInfo.DCNOFLAGS); // (4) 最大応答待ち時間 server.set_WatchTime(180); // (5) 入力用カスタムレコードの生成 in_data inRecord = new in_data(); // (5) 出力用カスタムレコードの生成 out_data outRecord = new out_data(); inRecord.get_i_basho()[0] = 56; // (6) 入力データの設定 inRecord.get_i_basho()[1] = 43; // (6) 入力データの設定 inRecord.get_i_basho()[2] = 18; // (6) 入力データの設定 // (7) GETDATA1を呼び出す server.GETDATA1(inRecord, outRecord); // (8) 応答データの取り出し this.textBox1.set_Text(outRecord.get_o_name().Trim()); } catch (TP1ConnectorException exp) { // Connector .NETが検知したエラー } catch (TP1Exception exp) { // その他スタブなどが検知したエラー } catch (System.Exception exp) { // 予期しない例外 } finally { // (9) コネクションをコネクションプールに戻す if (tc != null) tc.Dispose(); } } }
(7) クライアントスタブの使用例(ASP.NET Webアプリケーション,Visual Basicの場合)
Imports System Imports Hitachi.OpenTP1 Imports Hitachi.OpenTP1.Connector Namespace MyCompany Public Class MyForm1 Inherits System.Web.UI.Page … Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim tcm As TP1ConnectionManager Dim tc As TP1Connection Dim ret As Integer Dim ids(2) As String ' このボタンがクリックされたら ' OpenTP1<TP1Host1>のサービス要求を行う Try ' グローバル変数のアプリケーション状態から ' TP1ConnectionManagerを取得 ' (1) TP1ConnectionManagerクラスの生成 tcm = CType(Application("tcmTP1Host1"), _ TP1ConnectionManager) ' (2) TP1Connectionオブジェクトの取得 tc = tcm.GetConnection() ' (3) クライアントスタブの生成 Dim server As GYOUMU1Stub = New GYOUMU1Stub(tc, "SVGRP1") ' (4) RPC呼び出し形態 server.Flags = RpcInfo.DCNOFLAGS ' (4) 最大応答待ち時間 server.WatchTime = 180 ' (5) 入力用カスタムレコードの生成 Dim inRecord As in_data = New in_data ' (5) 出力用カスタムレコードの生成 Dim outRecord As out_data = New out_data inRecord.i_basho(0) = 56 ' (6) 入力データの設定 inRecord.i_basho(1) = 43 ' (6) 入力データの設定 inRecord.i_basho(2) = 18 ' (6) 入力データの設定 ' (7) GETDATA1を呼び出す server.GETDATA1(inRecord, outRecord) ' (8) 応答データの取り出し textBox1.Text = outRecord.o_name.Trim() Catch exp As TP1ConnectorException ' Connector .NETが検知したエラー Catch exp As TP1Exception ' その他スタブなどが検知したエラー Catch exp As Exception ' 予期しない例外 Finally If Not(tc Is Nothing) Then ' (9) コネクションをコネクションプールに戻す tc.Dispose() End If End Try End Sub End Class End Namespace
(8) クライアントスタブの使用例(ASP.NET Webアプリケーション,C#,RPCデータのXMLマッピング機能を使用した場合)
using System; using System.Xml; using Hitachi.OpenTP1; using Hitachi.OpenTP1.Connector; namespace MyCompany { public class MyForm1 : System.Web.UI.Page { … private void Button1_Click(object sender, System.EventArgs e) { TP1Connection tc = null; // このボタンがクリックされたら // OpenTP1<TP1Host1>のサービス要求を行う try { // グローバル変数のアプリケーション状態から // TP1ConnectionManagerを取得 // (1) TP1ConnectionManagerクラスの生成 TP1ConnectionManager tcm = (TP1ConnectionManager)this.Application["tcmTP1Host1"]; // (2) TP1Connectionオブジェクトの取得 tc = tcm.GetConnection(); // (3) クライアントスタブの生成 GYOUMU1Stub server = new GYOUMU1Stub(tc, "SVGRP1"); // (4) RPC呼び出し形態 server.Flags = RpcInfo.DCNOFLAGS; // (4) 最大応答待ち時間 server.WatchTime = 180; // (5) 入力用カスタムレコードの生成 XmlDocument inDoc = GetInputData(); // (6) 入力データの設定 inDoc.SelectSingleNode( "/in_data/i_basho[1]").InnerText = "56"; // (6) 入力データの設定 inDoc.SelectSingleNode( "/in_data/i_basho[2]").InnerText = "43"; // (6) 入力データの設定 inDoc.SelectSingleNode( "/in_data/i_basho[3]").InnerText = "18"; // (7) GETDATA1ByXmlを呼び出す XmlDocument outDoc = server.GETDATA1ByXml(inDoc); // (8) 応答データの取り出し this.textBox1.Text = outDoc.SelectSingleNode("/out_data/o_name" ).InnerText.Trim(); } catch (TP1ConnectorException exp) { // Connector .NETが検知したエラー } catch (TP1Exception exp) { // その他スタブなどが検知したエラー } catch (Exception exp) { // 予期しない例外 } finally { // (9) コネクションをコネクションプールに戻す if (tc != null) tc.Dispose(); } } } }
(9) クライアントスタブの使用例(ASP.NET Webアプリケーション,J#,RPCデータのXMLマッピング機能を使用した場合)
package MyCompany; import System.*; import System.Xml.*; import Hitachi.OpenTP1.*; import Hitachi.OpenTP1.Connector.*; public class MyForm1 extends System.Web.UI.Page { … private void Button1_Click(Object sender, System.EventArgs e) { TP1Connection tc = null; // このボタンがクリックされたら // OpenTP1<TP1Host1>のサービス要求を行う try { // グローバル変数のアプリケーション状態から // TP1ConnectionManagerを取得 // (1) TP1ConnectionManagerクラスの生成 TP1ConnectionManager tcm = (TP1ConnectionManager)this.get_Application(). Get("tcmTP1Host1"); // (2) TP1Connectionオブジェクトの取得 tc = tcm.GetConnection(); // (3) クライアントスタブの生成 GYOUMU1Stub server = new GYOUMU1Stub(tc, "SVGRP1"); // (4) RPC呼び出し形態 server.set_Flags(RpcInfo.DCNOFLAGS); // (4) 最大応答待ち時間 server.set_WatchTime(180); // (5) 入力用カスタムレコードの生成 XmlDocument inDoc = GetInputData(); // (6) 入力データの設定 inDoc.SelectSingleNode( "/in_data/i_basho[1]").set_InnerText("56"); // (6) 入力データの設定 inDoc.SelectSingleNode( "/in_data/i_basho[2]").set_InnerText("43"); // (6) 入力データの設定 inDoc.SelectSingleNode( "/in_data/i_basho[3]").set_InnerText("18"); // (7) GETDATA1ByXmlを呼び出す XmlDocument outDoc = server.GETDATA1ByXml(inDoc); // (8) 応答データの取り出し this.textBox1.set_Text( outDoc.SelectSingleNode("/out_data/o_name" ).get_InnerText().Trim()); } catch (TP1ConnectorException exp) { // Connector .NETが検知したエラー } catch (TP1Exception exp) { // その他スタブなどが検知したエラー } catch (System.Exception exp) { // 予期しない例外 } finally { // (9) コネクションをコネクションプールに戻す if (tc != null) tc.Dispose(); } } }
(10) クライアントスタブの使用例(ASP.NET Webアプリケーション,Visual Basic,RPCデータのXMLマッピング機能を使用した場合)
Imports System Imports System.Xml Imports Hitachi.OpenTP1 Imports Hitachi.OpenTP1.Connector Namespace MyCompany Public Class MyForm1 Inherits System.Web.UI.Page … Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim tcm As TP1ConnectionManager Dim tc As TP1Connection Dim ret As Integer Dim ids(2) As String Dim inDoc, outDoc As XmlDocument ' このボタンがクリックされたら ' OpenTP1<TP1Host1>のサービス要求を行う Try ' グローバル変数のアプリケーション状態から ' TP1ConnectionManagerを取得 ' (1) TP1ConnectionManagerクラスの生成 tcm = CType(Application("tcmTP1Host1"), _ TP1ConnectionManager) ' (2) TP1Connectionオブジェクトの取得 tc = tcm.GetConnection() ' (3) クライアントスタブの生成 Dim server As GYOUMU1Stub = _ New GYOUMU1Stub(tc, "SVGRP1") ' (4) RPC呼び出し形態 server.Flags = RpcInfo.DCNOFLAGS ' (4) 最大応答待ち時間 server.WatchTime = 180 ' (5) 入力用カスタムレコードの生成 inDoc = GetInputData() ' (6) 入力データの設定 inDoc.SelectSingleNode( _ "/in_data/i_basho[1]").InnerText = "56" ' (6) 入力データの設定 inDoc.SelectSingleNode( _ "/in_data/i_basho[2]").InnerText = "43" ' (6) 入力データの設定 inDoc.SelectSingleNode( _ "/in_data/i_basho[3]").InnerText = "18" ' (7) GETDATA1ByXmlを呼び出す outDoc = server.GETDATA1ByXml(inDoc) ' (8) 応答データの取り出し textBox1.Text = _ outDoc.SelectSingleNode("/out_data/o_name" _ ).InnerText.Trim() Catch exp As TP1ConnectorException ' Connector .NETが検知したエラー Catch exp As TP1Exception ' その他スタブなどが検知したエラー Catch exp As Exception ' 予期しない例外 Finally If Not(tc Is Nothing) Then ' (9) コネクションをコネクションプールに戻す tc.Dispose() End If End Try End Sub End Class End Namespace