4.3.4 サービス定義から生成したクライアントスタブの使用例
クライアントスタブの使用例を次に示します。
この例で呼び出すSPPのサービスの情報は次のとおりです。
-
サービスグループ名:SVGRP1
-
サービス定義名称:GYOUMU1
-
呼び出すサービス名(サービス名):GETDATA1
-
入力用カスタムレコードクラス名:in_data
-
出力用カスタムレコードクラス名:out_data
-
リモートAPI機能:未使用
なお,コメント中の(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