Hitachi

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


4.3.4 サービス定義から生成したクライアントスタブの使用例

クライアントスタブの使用例を次に示します。

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

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

〈この項の構成〉

(1) サービス定義の定義例(C#の場合)

(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) クライアントスタブの使用例(CUP.NET,C#の場合(リモートAPI機能未使用時))

using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Client;
 
namespace MyCompany
{
  public class Caller2Sample
  {
    public static void Main(string[] args)
    {
      try {
        TP1Client clt = new TP1Client();  // TP1Clientの生成
        GYOUMU1Stub server = null;
        // (1) クライアントスタブの生成
        server = new GYOUMU1Stub(clt, "SVGRP1");
        clt.OpenRpc();             // RPCオープン
        // (2) 入力用カスタムレコードの生成
        in_data inRecord = new in_data();
        // (2) 出力用カスタムレコードの生成
        out_data outRecord = new out_data();
        inRecord.i_basho[0] = 56;  // (3) 入力データの設定
        inRecord.i_basho[1] = 43;  // (3) 入力データの設定
        inRecord.i_basho[2] = 18;  // (3) 入力データの設定
        // (4) 同期応答型RPCに設定
        server.Flags = TP1ClientFlags.DCNOFLAGS;
        // (5) GETDATA1を呼び出す
        server.GETDATA1(inRecord, outRecord);
        // (6) 応答データの取り出し
        string name = outRecord.o_name.Trim();
        clt.CloseRpc();            // RPCクローズ
      } catch (TP1ClientException exp) {
        // Client .NETが検知したエラー
      } catch (TP1Exception exp) {
        // その他スタブなどが検知したエラー
      } catch (Exception exp) {
        // 予期しない例外
      }
    }
  }
}

(4) クライアントスタブの使用例(CUP.NET,Visual Basicの場合(リモートAPI機能未使用時))

Imports System
Imports Hitachi.OpenTP1
Imports Hitachi.OpenTP1.Client
 
Namespace MyCompany
  Public Class Caller2Sample
    Public Shared Sub Main(ByVal args() As String)
      Dim clt As TP1Client
      Dim server As GYOUMU1Stub
      Dim name As String
      Dim inRecord As in_data
      Dim outRecord As out_data
      Try
        clt = New TP1Client()  ' TP1Clientの生成
        ' (1) クライアントスタブの生成
        server = New GYOUMU1Stub(clt, "SVGRP1")
        clt.OpenRpc()             ' RPCオープン
        ' (2) 入力用カスタムレコードの生成
        inRecord = New in_data()
        ' (2) 出力用カスタムレコードの生成
        outRecord = New out_data()
        inRecord.i_basho(0) = 56  ' (3) 入力データの設定
        inRecord.i_basho(1) = 43  ' (3) 入力データの設定
        inRecord.i_basho(2) = 18  ' (3) 入力データの設定
        ' (4) 同期応答型RPCに設定
        server.Flags = TP1ClientFlags.DCNOFLAGS
        ' (5) GETDATA1を呼び出す
        server.GETDATA1(inRecord, outRecord)
        ' (6) 応答データの取り出し
        name = outRecord.O_name.Trim()
        clt.CloseRpc()            ' RPCクローズ
      Catch exp As TP1ClientException
        ' Client .NETが検知したエラー
      Catch exp As TP1Exception
        ' その他スタブなどが検知したエラー
      Catch exp As Exception
        ' 予期しない例外
      End Try
    End Sub
  End Class
End Namespace