クライアントスタブの使用例,およびXMLスキーマ例を次に示します。
この例で呼び出すSPPのサービスの情報は次のとおりです。
なお,コメント中の(1),(2)などは「3.3.2 クライアントスタブの使用方法」の説明の番号に対応しています。
#include "mydata.h"
/* 業務1のサービス定義 */
interface GYOUMU1 {
GETDATA1(in_data, out_data);
GETDATA2(in_data, out_data2);
}
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];
};
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;
}
}
…
}
}
<?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>
<?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>
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();
}
}
}
}
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();
}
}
}
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
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();
}
}
}
}
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();
}
}
}
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