バイナリデータを使用する場合のCallメソッドの使用例を次に示します。
この例で呼び出すSPPのサービスの情報は次のとおりです。
using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Client;
namespace MyCompany
{
public class MyApplication1
{
…
public static void Main(string[] args)
{
try {
TP1Client clt = new TP1Client(); // TP1Clientの生成
clt.OpenRpc("TP1Host1"); // RPCオープン
int maxInLen = 512; // 入力データ格納領域長
int maxOutLen = 512; // 応答データ格納領域長
int inLen = 0; // 入力データ長
int outLen = maxOutLen; // 応答データ最大長
byte[] inData; // 入力データ格納領域
byte[] outData; // 応答データ格納領域
String inStr = "Say Hello to OpenTP1!"; // 入力データ
String outStr = null; // 応答データ
byte[] inDataTemp;
inData = new byte[maxInLen];
System.Text.Encoding enc = System.Text.Encoding.Default;
inDataTemp = enc.GetBytes(inStr);
System.Array.Copy( // 入力データの設定
inDataTemp, 0, inData, 0, inDataTemp.Length);
inLen += inDataTemp.Length;
outData = new byte[maxOutLen];
// RPC実行
clt.Call("SVGRP1", "SERV1", inData, inLen,
outData, ref outLen, TP1ClientFlags.DCNOFLAGS);
outStr = enc.GetString(outData, 0, outLen);
clt.CloseRpc(); // RPCクローズ
} catch (TP1ClientException exp) {
// Client .NETが検知したエラー
} catch (TP1Exception exp) {
// Client .NET(OpenTP1共通クラス)が検知したエラー
} catch (Exception exp) {
// 予期しない例外
}
}
}
}
package MyCompany;
import System.*;
import Hitachi.OpenTP1.*;
import Hitachi.OpenTP1.Client.*;
public class MyApplication1
{
…
public static void main(String[] args)
{
try {
TP1Client clt = new TP1Client(); // TP1Clientの生成
clt.OpenRpc("TP1Host1"); // RPCオープン
int maxInLen = 512; // 入力データ格納領域長
int maxOutLen = 512; // 応答データ格納領域長
int inLen = 0; // 入力データ長
int outLen = maxOutLen; // 応答データ最大長
ubyte[] inData; // 入力データ格納領域
ubyte[] outData; // 応答データ格納領域
String inStr = "Say Hello to OpenTP1!"; // 入力データ
String outStr = null; // 応答データ
ubyte[] inDataTemp;
inData = new ubyte[maxInLen];
System.Text.Encoding enc =
System.Text.Encoding.get_Default();
inDataTemp = enc.GetBytes(inStr);
System.Array.Copy( // 入力データの設定
inDataTemp, 0, inData, 0, inDataTemp.length);
inLen += inDataTemp.length;
outData = new ubyte[maxOutLen];
// RPC実行
clt.Call("SVGRP1", "SERV1", inData, inLen,
outData, outLen, TP1ClientFlags.DCNOFLAGS);
outStr = enc.GetString(outData, 0, outLen);
clt.CloseRpc(); // RPCクローズ
} catch (TP1ClientException exp) {
// Client .NETが検知したエラー
} catch (TP1Exception exp) {
// Client .NET(OpenTP1共通クラス)が検知したエラー
} catch (System.Exception exp) {
// 予期しない例外
}
}
}
Imports System
Imports Hitachi.OpenTP1
Imports Hitachi.OpenTP1.Client
Namespace MyCompany
Public Class MyApplication1
…
Public Shared Sub Main(ByVal args() As String)
Dim clt As TP1Client
Dim maxInLen As Integer = 512 ' 入力データ格納領域長
Dim maxOutLen As Integer = 512 ' 応答データ格納領域長
Dim inLen As Integer ' 入力データ長
Dim outLen As Integer ' 応答データ最大長
Dim inData(maxInLen - 1) As Byte ' 入力データ格納領域
Dim outData(maxOutLen - 1) As Byte ' 応答データ格納領域
Dim inStr As String ' 入力データ
Dim outStr As String ' 応答データ
Dim inDataTemp() As Byte
Dim enc As System.Text.Encoding
Try
clt = New TP1Client() ' TP1Clientの生成
clt.OpenRpc("TP1Host1") ' RPCオープン
inLen = 0
outLen = maxOutLen
inStr = "Say Hello to OpenTP1!"
enc = System.Text.Encoding.Default
inDataTemp = enc.GetBytes(inStr)
System.Array.Copy(inDataTemp, 0, inData, _
0, inDataTemp.Length) ' 入力データの設定
inLen += inDataTemp.Length
' RPC実行
clt.Call("SVGRP1", "SERV1", inData, inLen, _
outData, outLen, TP1ClientFlags.DCNOFLAGS)
outStr = enc.GetString(outData, 0, outLen)
clt.CloseRpc() ' RPCクローズ
Catch exp As TP1ClientException
' Client .NETが検知したエラー
Catch exp As TP1Exception
' Client .NET(OpenTP1共通クラス)が検知したエラー
Catch exp As Exception
' 予期しない例外
End Try
End Sub
End Class
End Namespace
IDENTIFICATION DIVISION.
PROGRAM-ID. MYAPPLICATION1 AS "MYAPPLICATION1".
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
CLASS SYSTEMEXCEPTION AS 'System.Exception'.
CLASS TP1CLIENTEXCEPTION AS
'Hitachi.OpenTP1.Client.TP1ClientException'.
CLASS TP1EXCEPTION AS 'Hitachi.OpenTP1.TP1Exception'.
CLASS BYTE-ARRAY AS 'System.Byte' IS ARRAY.
CLASS TP1CLIENT AS 'Hitachi.OpenTP1.Client.TP1Client'.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CLT USAGE OBJECT REFERENCE TP1CLIENT.
*
01 MAX-IN-LEN USAGE BINARY-LONG VALUE 512.
01 MAX-OUT-LEN USAGE BINARY-LONG VALUE 512.
01 IN-LEN USAGE BINARY-LONG.
01 OUT-LEN USAGE BINARY-LONG.
01 IN-DATA USAGE OBJECT REFERENCE BYTE-ARRAY.
01 OUT-DATA USAGE OBJECT REFERENCE BYTE-ARRAY.
01 RPC-FLAGS USAGE BINARY-LONG VALUE 0.
*
01 IN-STR PIC X(512) VALUE 'Say Hello to OpenTP1!'.
01 OUT-STR PIC X(512).
*
01 PROFILE-ID PIC X(20) VALUE 'TP1Host1'.
01 PROFILE-ID-STR USAGE STRING.
01 SERVICE-GROUP PIC X(20) VALUE 'SVGRP1'.
01 SERVICE-GROUP-STR USAGE STRING.
01 SERVICE-NAME PIC X(20) VALUE 'SERV1'.
01 SERVICE-NAME-STR USAGE STRING.
*
01 TMP-X-LEN PIC S9(9) COMP-5.
*
PROCEDURE DIVISION.
DECLARATIVES.
TP1CLIENT-EXCEPTION SECTION.
* TP1/Client for .NET Frameworkが検知したエラー
USE AFTER EXCEPTION OBJECT TP1CLIENTEXCEPTION.
RESUME PROG-END.
TP1-EXCEPTION SECTION.
* TP1/Client for .NET Framework(OpenTP1共通クラス)が検知したエラー
USE AFTER EXCEPTION OBJECT TP1EXCEPTION.
RESUME PROG-END.
SYSTEM-EXCEPTION SECTION.
USE AFTER EXCEPTION OBJECT SYSTEMEXCEPTION.
* 予期しない例外
RESUME PROG-END.
END DECLARATIVES.
*
MAIN-PROC.
* TP1Clientの生成
INVOKE TP1CLIENT 'New' RETURNING CLT.
SET PROFILE-ID-STR TO
FUNCTION ALPHANUMERIC-TO-STRING(PROFILE-ID).
* RPCオープン
INVOKE CLT 'OpenRpc' USING BY VALUE PROFILE-ID-STR.
* 入力データ長
MOVE MAX-IN-LEN TO IN-LEN.
* 応答データ最大長
MOVE MAX-OUT-LEN TO OUT-LEN.
* 入力データ格納領域
INVOKE BYTE-ARRAY 'New' USING BY VALUE MAX-IN-LEN
RETURNING IN-DATA.
* 入力データの設定
MOVE MAX-IN-LEN TO TMP-X-LEN.
CALL 'CBLXTOBYTEARRAY' USING IN-STR IN-DATA
TMP-X-LEN.
* 応答データ格納領域
INVOKE BYTE-ARRAY 'New' USING BY VALUE MAX-OUT-LEN
RETURNING OUT-DATA.
*
SET SERVICE-GROUP-STR TO
FUNCTION ALPHANUMERIC-TO-STRING(SERVICE-GROUP).
SET SERVICE-NAME-STR TO
FUNCTION ALPHANUMERIC-TO-STRING(SERVICE-NAME).
MOVE 0 TO RPC-FLAGS.
* RPC実行
INVOKE CLT 'Call' USING BY VALUE SERVICE-GROUP-STR
BY VALUE SERVICE-NAME-STR
BY VALUE IN-DATA
BY VALUE IN-LEN
BY VALUE OUT-DATA
BY REFERENCE OUT-LEN
BY VALUE RPC-FLAGS.
*
MOVE OUT-LEN TO TMP-X-LEN.
CALL 'CBLBYTEARRAYTOX' USING OUT-DATA TMP-X-LEN
OUT-STR.
*
PROG-END.
* RPCクローズ
IF NOT CLT = NULL THEN
INVOKE CLT 'CloseRpc'
END-IF.
END PROGRAM MYAPPLICATION1.