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

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

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

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

<この項の構成>
(1) サービス定義の定義例(C#の場合)
(2) カスタムレコードクラスの出力例(C#の場合,in_data.cs)
(3) クライアントスタブの使用例(CUP.NET,C#の場合(リモートAPI機能未使用時))
(4) クライアントスタブの使用例(CUP.NET,J#の場合(リモートAPI機能未使用時))
(5) クライアントスタブの使用例(CUP.NET,Visual Basicの場合(リモートAPI機能未使用時))

(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,J#の場合(リモートAPI機能未使用時))

package MyCompany;
import System.*;
import Hitachi.OpenTP1.*;
import Hitachi.OpenTP1.Client.*;

public class Caller2Sample
{
 public static void main(String[] args)
 {
   try {
     String name;
     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.get_i_basho()[0] = 56;  // (3) 入力データの設定
     inRecord.get_i_basho()[1] = 43;  // (3) 入力データの設定
     inRecord.get_i_basho()[2] = 18;  // (3) 入力データの設定
     // (4) 同期応答型RPCに設定
     server.set_Flags(TP1ClientFlags.DCNOFLAGS);
     // (5) GETDATA1を呼び出す
     server.GETDATA1(inRecord, outRecord);
     // (6) 応答データの取り出し
     name = outRecord.get_o_name().trim();
     clt.CloseRpc();                  // RPCクローズ
   } catch (TP1ClientException exp) {
     // Client .NETが検知したエラー
   } catch (TP1Exception exp) {
     // その他スタブなどが検知したエラー
   } catch (System.Exception exp) {
     // 予期しない例外
   }
 }
}

(5) クライアントスタブの使用例(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