Hitachi

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


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

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

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

〈この項の構成〉

(1) Callメソッドの使用例(SUP.NET,C#の場合)

using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Server;
 
namespace MyCompany
{
  public class MyApplication1
  {
    …
    public static void Main(string[] args) 
    {
      try {
        Rpc.Open();                 // RPCオープン
        Adm.Complete();             // SUP.NET開始処理完了通知
 
        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実行
        Rpc.Call("SVGRP1", "SERV1", inData, inLen, 
            outData, ref outLen, TP1ServerFlags.DCNOFLAGS);
        outStr = enc.GetString(outData, 0, outLen);
 
        Rpc.Close();                 // RPCクローズ
      } catch (TP1ServerException exp) {
        // OpenTP1(クラスライブラリ)が検知したエラー
      } catch (TP1Exception exp) {
        // その他OpenTP1が検知したエラー
      } catch (Exception exp) {
        // 予期しない例外
      }
    }
  }
}

(2) Callメソッドの使用例(SUP.NET,J#の場合)

package MyCompany;
import System.*;
import Hitachi.OpenTP1.*;
import Hitachi.OpenTP1.Server.*;
 
public class MyApplication1
{
  …
  public static void main(String[] args) 
  {
    try {
      Rpc.Open();                   // RPCオープン
      Adm.Complete();               // SUP.NET開始処理完了通知
 
      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実行
      Rpc.Call("SVGRP1", "SERV1", inData, inLen,
          outData, outLen, TP1ServerFlags.DCNOFLAGS);
      outStr = enc.GetString(outData, 0, outLen);
 
      Rpc.Close();                  // RPCクローズ
    } catch (TP1ServerException exp) {
      // OpenTP1(クラスライブラリ)が検知したエラー
    } catch (TP1Exception exp) {
      // OpenTP1が検知したエラー
    } catch (System.Exception exp) {
      // 予期しない例外
    }
  }
}

(3) Callメソッドの使用例(SUP.NET,Visual Basicの場合)

Imports System
Imports Hitachi.OpenTP1
Imports Hitachi.OpenTP1.Server
 
Namespace MyCompany
  Public Class MyApplication1
    …
    Public Shared Sub Main(ByVal args() As String)
      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
        Rpc.Open()           ' RPCオープン
        Adm.Complete()       ' SUP.NET開始処理完了通知
 
        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実行
        Rpc.Call("SVGRP1", "SERV1", inData, inLen,  _
            outData, outLen, TP1ServerFlags.DCNOFLAGS)
        outStr = enc.GetString(outData, 0, outLen)
 
        Rpc.CloseRpc()       ' RPCクローズ
      Catch exp As TP1ServerException
      ' OpenTP1(クラスライブラリ)が検知したエラー
      Catch exp As TP1Exception
      ' その他OpenTP1が検知したエラー
      Catch exp As Exception
      ' 予期しない例外
      End Try
    End Sub
  End Class
End Namespace