クライアントスタブの使用例を次に示します。
この例で呼び出すSPP.NETのサービスメソッドの情報は次のとおりです。
なお,コメント中の(1),(2)などは「4.5.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.Server;
namespace MyCompany
{
public class CallerSample2Impl : SPPBase, ICallerSample2
{
private GYOUMU1Stub server = null;
…
public override void InitializeSPP()
{
// (1) クライアントスタブの生成
server = new GYOUMU1Stub("SVGRP1");
}
public override void FinalizeSPP()
{
server = null;
}
[TP1RpcMethod]
public string CallGETDATA1()
{
string ret;
try {
// (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 = TP1ServerFlags.DCNOFLAGS;
// (5) GETDATA1を呼び出す
server.GETDATA1(inRecord, outRecord);
// (6) 応答データの取り出し
ret = outRecord.o_name.Trim();
return ret;
} catch (TP1UserException exp) {
// GETDATA1()からユーザ例外がスローされた
} catch (TP1RemoteException exp) {
// GETDATA1()で予期しない例外発生
} catch (TP1ServerException exp) {
// OpenTP1(クラスライブラリ)が検知したエラー
} catch (TP1Exception exp) {
// その他OpenTP1が検知したエラー
} catch (Exception exp) {
// 予期しない例外
}
}
}
}
package MyCompany;
import System.*;
import Hitachi.OpenTP1.*;
import Hitachi.OpenTP1.Server.*;
public class CallerSample2Impl
extends SPPBase implements ICallerSample2
{
private GYOUMU1Stub server = null;
…
public void InitializeSPP() throws TP1ServerException
{
// (1) クライアントスタブの生成
server = new GYOUMU1Stub("SVGRP1");
}
public void FinalizeSPP()
{
server = null;
}
/** @attribute TP1RpcMethod() */
public String CallGETDATA1()
{
String ret;
try {
// (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(TP1ServerFlags.DCNOFLAGS);
// (5) GETDATA1を呼び出す
server.GETDATA1(inRecord, outRecord);
// (6) 応答データの取り出し
ret = outRecord.get_o_name().trim();
return ret;
} catch (TP1UserException exp) {
// GETDATA1()からユーザ例外がスローされた
} catch (TP1RemoteException exp) {
// GETDATA1()で予期しない例外発生
} catch (TP1ServerException exp) {
// OpenTP1(クラスライブラリ)が検知したエラー
} catch (TP1Exception exp) {
// その他OpenTP1が検知したエラー
} catch (System.Exception exp) {
// 予期しない例外
}
}
}
Imports System
Imports Hitachi.OpenTP1
Imports Hitachi.OpenTP1.Server
Namespace MyCompany
Public Class CallerSample2Impl
Inherits SPPBase
Implements ICallerSample2
Private server As GYOUMU1Stub
…
Public Overrides Sub InitializeSPP()
' (1) クライアントスタブの生成
server = New GYOUMU1Stub("SVGRP1")
End Sub
Public Overrides Sub FinalizeSPP()
server = Nothing
End Sub
<TP1RpcMethod()> _
Public Function CallGETDATA1 () As String _
Implements ICallerSample2.CallGETDATA1
Try
Dim ret As String
' (2) 入力用カスタムレコードの生成
Dim inRecord As in_data = New in_data()
' (2) 出力用カスタムレコードの生成
Dim outRecord As out_data = 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 = TP1ServerFlags.DCNOFLAGS
' (5) GETDATA1を呼び出す
server.GETDATA1(inRecord, outRecord)
' (6) 応答データの取り出し
ret = outRecord.o_name.Trim()
Catch exp As TP1UserException
' GETDATA1()からユーザ例外がスローされた
Catch exp As TP1RemoteException
' GETDATA1()で予期しない例外発生
Catch exp As TP1ServerException
' OpenTP1(クラスライブラリ)が検知したエラー
Catch exp As TP1Exception
' その他OpenTP1が検知したエラー
Catch exp As Exception
' 予期しない例外
End Try
End Function
End Class
End Namespace
using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Server;
namespace MyCompany
{
public class Caller2Sample
{
…
public static void Main(string[] args)
{
try {
// (1) クライアントスタブの生成
GYOUMU1Stub server = new GYOUMU1Stub("SVGRP1");
Rpc.Open(); // RPCオープン
Adm.Complete(); // SUP.NET開始処理完了通知
// (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 = TP1ServerFlags.DCNOFLAGS;
// (5)GETDATA1を呼び出す
server.GETDATA1(inRecord, outRecord);
// (6) 応答データの取り出し
string name = outRecord.o_name.Trim();
Rpc.Close(); // RPCクローズ
} catch (TP1UserException exp) {
// GETDATA1()からユーザ例外がスローされた
} catch (TP1RemoteException exp) {
// GETDATA1()で予期しない例外発生
} catch (TP1ServerException exp) {
// OpenTP1(クラスライブラリ)が検知したエラー
} catch (TP1Exception exp) {
// その他OpenTP1が検知したエラー
} catch (Exception exp) {
// 予期しない例外
}
}
}
}
package MyCompany;
import System.*;
import Hitachi.OpenTP1.*;
import Hitachi.OpenTP1.Server.*;
public class Caller2Sample
{
…
public static void main(String[] args)
{
try {
String name;
// (1) クライアントスタブの生成
GYOUMU1Stub server = new GYOUMU1Stub("SVGRP1");
Rpc.Open(); // RPCオープン
Adm.Complete(); // SUP.NET開始処理完了通知
// (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(TP1ServerFlags.DCNOFLAGS);
// (5) GETDATA1を呼び出す
server.GETDATA1(inRecord, outRecord);
// (6) 応答データの取り出し
name = outRecord.get_o_name().trim();
Rpc.Close(); // RPCクローズ
} catch (TP1UserException exp) {
// GETDATA1()からユーザ例外がスローされた
} catch (TP1RemoteException exp) {
// GETDATA1()で予期しない例外発生
} catch (TP1ServerException exp) {
// OpenTP1(クラスライブラリ)が検知したエラー
} catch (TP1Exception exp) {
// その他OpenTP1が検知したエラー
} catch (Exception exp) {
// 予期しない例外
}
}
}
Imports System
Imports Hitachi.OpenTP1
Imports Hitachi.OpenTP1.Server
Namespace MyCompany
Public Class Caller2Sample
…
Public Shared Sub Main(ByVal args() As String)
Dim name As String
Dim inRecord As in_data
Dim outRecord As out_data
Try
' (1) クライアントスタブの生成
Dim server As GYOUMU1Stub = _
New GYOUMU1Stub("SVGRP1")
Rpc.Open() ' RPCオープン
Adm.Complete() ' SUP.NET開始処理完了通知
' (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 = TP1ServerFlags.DCNOFLAGS
' (5) GETDATA1を呼び出す
server.GETDATA1(inRecord, outRecord)
' (6) 応答データの取り出し
name = outRecord.o_name.Trim()
Rpc.Close() ' RPCクローズ
Catch exp As TP1UserException
' GETDATA1()からユーザ例外がスローされた
Catch exp As TP1RemoteException
' GETDATA1()で予期しない例外発生
Catch exp As TP1ServerException
' OpenTP1(クラスライブラリ)が検知したエラー
Catch exp As TP1Exception
' その他OpenTP1が検知したエラー
Catch exp As Exception
' 予期しない例外
End Try
End Sub
End Class
End Namespace