分散トランザクション処理機能 TP1/Connector for .NET Framework 使用の手引

[目次][用語][索引][前へ][次へ]

3.3.4 サービス定義から生成したクライアントスタブの使用例,およびXMLスキーマ例

クライアントスタブの使用例,およびXMLスキーマ例を次に示します。

この例で呼び出すSPPのサービスの情報は次のとおりです。

なお,コメント中の(1),(2)などは「3.3.2 クライアントスタブの使用方法」の説明の番号に対応しています。

<この項の構成>
(1) サービス定義の定義例
(2) カスタムレコードクラスの出力例(C#の場合,in_data.cs)
(3) 入力データ用XMLスキーマ例(in_data.xsd)
(4) 出力データ用XMLスキーマ例(out_data.xsd)
(5) クライアントスタブの使用例(ASP.NET Webアプリケーション,C#の場合)
(6) クライアントスタブの使用例(ASP.NET Webアプリケーション,J#の場合)
(7) クライアントスタブの使用例(ASP.NET Webアプリケーション,Visual Basicの場合)
(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

(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)

[図データ]