4.4.2 バイナリデータを使用する場合のCallメソッドの使用例

バイナリデータを使用する場合のCallメソッドの使用例を次に示します。

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

<この項の構成>
(1) Callメソッドの使用例(CUP.NET,C#の場合(リモートAPI機能未使用時))
(2) Callメソッドの使用例(CUP.NET,J#の場合(リモートAPI機能未使用時))
(3) Callメソッドの使用例(CUP.NET,Visual Basicの場合(リモートAPI機能未使用時))
(4) Callメソッドの使用例(CUP.NET,COBOL言語の場合(リモートAPI機能未使用時))

(1) Callメソッドの使用例(CUP.NET,C#の場合(リモートAPI機能未使用時))

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) {
       // 予期しない例外
     }
   }
 }
}

(2) Callメソッドの使用例(CUP.NET,J#の場合(リモートAPI機能未使用時))

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) {
     // 予期しない例外
   }
 }
}

(3) Callメソッドの使用例(CUP.NET,Visual Basicの場合(リモートAPI機能未使用時))

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

(4) Callメソッドの使用例(CUP.NET,COBOL言語の場合(リモートAPI機能未使用時))

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.