クライアントスタブの使用例を次に示します。
この例で呼び出すSPPのサービスの情報は次のとおりです。
なお,コメント中の(1),(2)などは「4.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;
}
}
…
}
}
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) {
// 予期しない例外
}
}
}
}
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) {
// 予期しない例外
}
}
}
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