分散トランザクション処理機能 TP1/Client for .NET Framework 使用の手引

[目次][用語][索引][前へ][次へ]

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.