分散トランザクション処理機能 TP1/Connector for .NET Framework 使用の手引
クライアントスタブの使用例,および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
All Rights Reserved. Copyright (C) 2006, 2009, Hitachi, Ltd.