Hitachi

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


4.1.1 .NETインタフェース定義

.NETインタフェース定義は,次のUAPからSPP.NETに対して.NETインタフェース定義を使用してRPCを実行する場合に定義します。

ここでは,.NETインタフェース定義の定義方法の詳細について説明します。.NETインタフェース定義を使用したRPCについては,「1.3.2(1)(a) .NETインタフェース定義を使用したRPC」を参照してください。

〈この項の構成〉

(1) .NETインタフェース定義の定義方法

(a) .NETインタフェース定義に使用する言語

SPP.NETの.NETインタフェース定義は,SPP.NETを開発するプログラム言語で定義します。.NETインタフェース定義を定義する場合,次のプログラム言語が使用できます。

  • C#

  • J#

  • Visual Basic

各プログラム言語でのインタフェースの定義文法は,Visual Studioや.NET Framework SDKのドキュメントを参照してください。

なお,.NETインタフェース定義は,Visual Studioや.NET Framework SDKが提供する各プログラム言語のコンパイラで,.NET FrameworkおよびOpenTP1 for .NET Frameworkが提供するクラスライブラリだけを参照してコンパイルできる必要があります。

(b) .NETインタフェース定義の定義規則

SPP.NETのインタフェースを定義する場合,次の規則があります。これらの規則に従っていない場合,SPP.NETの.NETインタフェース定義として使用できません。

  • 名前空間名,インタフェース名,メソッド名には,半角英数字および半角アンダスコア(_)が使用できます。なお,名前空間の区切り文字として半角ピリオド(.)が使用できます。

  • メソッドの引数および戻り値に使用できるデータ型を次の表に示します。

    表4‒1 メソッドの引数および戻り値で使用できるデータ型

    共通型システム

    プログラム言語

    C#

    J#

    Visual Basic

    System.Void

    void

    void

    System.Byte

    byte

    ubyte

    Byte

    System.Int16

    short

    short

    Short

    System.Int32

    int

    int

    Integer

    System.Int64

    long

    long

    Long

    System.String

    string

    String

    String

    System.Byte[]

    byte[]

    ubyte[]

    Byte()

    System.Int16[]

    short[]

    short[]

    Short()

    System.Int32[]

    int[]

    int[]

    Integer()

    System.Int64[]

    long[]

    long[]

    Long()

    System.String[]

    string[]

    String[]

    String()

    TP1ユーザ構造体

    TP1ユーザ構造体配列

    (凡例)

    −:プログラム言語による差異はありません。

    注※

    System.Voidはメソッドの戻り値にだけ指定できます。

  • メソッドの引数に使用できるパラメタ属性を次の表に示します。

    表4‒2 メソッドの引数に使用できるパラメタ属性

    意味

    プログラム言語

    C#

    J#※2

    Visual Basic

    値渡し

    var(省略可)

    なし

    ByVal(省略可)

    出力渡し

    out

    指定不可※1

    指定不可※1

    参照渡し

    ref

    Holderクラス※2

    ByRef

    注※1

    out属性はC#固有の属性です。C#以外では指定できません。C#以外のプログラム言語で使用する場合は,代わりに参照渡しを使用してください。

    注※2

    J#ではパラメタ属性の代わりにデータ型で表現します。J#では値型の参照渡しができないため,OpenTP1が提供するHolderクラスを使用してください。

    OpenTP1が提供するHolderクラスを次の表に示します。

    Holderクラス名

    保持する値の型

    J#

    共通型システム

    Hitachi.OpenTP1.UByteHolder

    ubyte

    System.Byte

    Hitachi.OpenTP1.ShortHolder

    short

    System.Int16

    Hitachi.OpenTP1.IntHolder

    int

    System.Int32

    Hitachi.OpenTP1.LongHolder

    long

    System.Int64

    Hitachi.OpenTP1.StringHolder

    String

    System.String

    Hitachi.OpenTP1.UByteArrayHolder

    ubyte[]

    System.Byte[]

    Hitachi.OpenTP1.ShortArrayHolder

    short[]

    System.Int16[]

    Hitachi.OpenTP1.IntArrayHolder

    int[]

    System.Int32[]

    Hitachi.OpenTP1.LongArrayHolder

    long[]

    System.Int64[]

    Hitachi.OpenTP1.StringArrayHolder

    String[]

    System.String[]

    注1

     これらのHolderクラスはJ#でだけ使用できます。C#およびVisual Basicではref,ByRefなどのパラメタ属性を使用してください。

    注2

     これらのHolderクラスは,メソッドの引数としてだけ使用できます。メソッドの戻り値には使用できません。

  • メソッド名の長さは31文字以内でなければなりません。なお,メソッド名はSPP.NETのサービス名になります。

  • メソッド名は英字で始まる必要があります。

  • メソッドのオーバロードはできません。

  • 大文字,小文字だけが異なる同じ名称のメソッドを定義することはできません。

  • J#で参照渡しをする場合,/** @ref */属性は使用できません。参照渡しをする場合は,必ずHolderクラスを使用してください。

(2) TP1ユーザ構造体

(a) TP1ユーザ構造体とは

TP1ユーザ構造体は,複数の値をまとめて保持できるクラスのことです。

(b) TP1ユーザ構造体の定義規則

TP1ユーザ構造体を定義する場合の規則を次に示します。

  • TP1ユーザ構造体として使用するクラスは,Hitachi.OpenTP1.TP1UserStructクラスを継承します。

  • デフォルトコンストラクタ(アクセス修飾子がpublicで,引数のないコンストラクタ)を持つ必要があります。

  • set,get両方のアクセサを持つpublicプロパティが一つ以上必要です。

  • 大文字,小文字だけが異なる同一名称のプロパティを定義することはできません。

注意事項

publicプロパティ以外のすべてのメンバはRPCで送受信されるデータには含まれません。

(c) TP1ユーザ構造体のプロパティとして利用できるデータ型

TP1ユーザ構造体のプロパティとして利用できるデータ型,およびメソッドの引数として使用できるパラメタ属性を次の表に示します。

表4‒3 TP1ユーザ構造体のプロパティとして利用できるデータ型

共通型システム

プログラム言語

C#

J#

Visual Basic

System.Byte

byte

ubyte

Byte

System.Int16

short

short

Short

System.Int32

int

int

Integer

System.Int64

long

long

Long

System.String

string

String

String

System.Byte[]

byte[]

ubyte[]

Byte()

System.Int16[]

short[]

short[]

Short()

System.Int32[]

int[]

int[]

Integer()

System.Int64[]

long[]

long[]

Long()

System.String[]

string[]

String[]

String()

TP1ユーザ構造体

TP1ユーザ構造体配列

(凡例)

−:プログラム言語による差異はありません。

(d) TP1ユーザ構造体の参照渡しの方法

TP1ユーザ構造体の参照渡しをするには,パラメタ属性を使用します。ただし,J#の場合は参照渡しができないため,Hitachi.OpenTP1.ITP1UserStructHolderを実装する必要があります。実装上の規則を次に示します。

  • プロパティとして利用できるデータ型はTP1ユーザ構造体,またはTP1ユーザ構造体の配列に限られます。

  • プロパティはset,get両方のアクセサを持ち,アクセス修飾子がpublicである必要があります。

  • プロパティは一つしか定義してはいけません。

  • 実装クラスの名称規則を,次の表に示します。

    プロパティのデータ型

    実装クラスの名称

    TP1ユーザ構造体

    TP1ユーザ構造体クラス名称+"Holder"

    TP1ユーザ構造体配列

    TP1ユーザ構造体クラス名称+"ArrayHolder"

  • 実装クラスの名前空間は,プロパティのデータ型と同じ名前空間である必要があります。

なお,プロパティ以外のすべてのメンバはRPCで送受信されるデータには含まれません。TP1ユーザ構造体の参照渡しの使用例については,「4.1.1(3)(b) J#での定義例」を参照してください。

(3) .NETインタフェース定義の定義例

(a) C#での定義例

using System;
using Hitachi.OpenTP1;
namespace MyCompany
{
 
  public interface IGyoumuA
  {
    void Service1(string dataId, byte[] data);
    string[] Service2(string key);
    int Service3(int inCount, ref string[] ids);
    short Service4(MyStruct inStruct);
  }
  public class MyStruct : TP1UserStruct
  {
      private int id;
      private string name;
 
      public MyStruct(){}
 
      public int Id
      {
        set{
           id = value;
        }
        get{
           return id;
        }
      }
 
      public string Name
      {
         set{
            name = value;
         }
         get{
            return name;
         }
      }
  }
}

(b) J#での定義例

package MyCompany;
import System.*;
import Hitachi.OpenTP1.*;
 
public interface IGyoumuA
{
    void Service1(String dataId, ubyte[] data);
    String[] Service2(String key);
    int Service3(int inCount, StringArrayHolder ids);
    short Service4(MyStruct inStruct, MyStructHolder outStruct);
}
 
//TP1ユーザ構造体の参照渡しをするためのクラス
public class MyStructHolder implements ITP1UserStructHolder
{
   private MyStruct val;
   /** @property */
   public void set_Value(MyStruct value)
   {
          val = value;
   }
   /** @property */
   public MyStruct get_Value()
   {
          return val;
   }
}
 
//TP1ユーザ構造体
public class MyStruct extends TP1UserStruct
{
   private int id;
   private String name;
 
   public MyStruct()
   {
   }
 
   /** @property */
   public void set_Id(int value)
   {
          id = value;
   }
   /** @property */
   public int get_Id()
   {
          return id;
   }
   /** @property */
   public void set_Name(String value)
   {
          name = value;
   }
   /** @property */
   public String get_Name()
   {
          return name;
   }
}

(c) Visual Basicでの定義例

Imports System
Imports Hitachi.OpenTP1
Namespace MyCompany
  Public Interface IGyoumuA
    Sub Service1(ByVal dataId As String, ByVal data() As Byte)
    Function Service2(ByVal key As String) As String()
    Function Service3(ByVal inCount As Integer, _
                      ByRef ids() As String) As Integer
    Function Service4(ByVal inStruct As MyStruct) As Short
  End Interface
 
  Public Class MyStruct
      Inherits TP1UserStruct
      Private idValue As Integer
      Private nameValue As String
 
      Public Sub New()
      End Sub
 
      Public Property Id() As Integer
          Set(ByVal value As Integer)
               idValue = value
          End Set
          Get
               Return idValue
          End Get
      End Property
 
      Public Property Name() As String
          Set(ByVal value As String)
               nameValue = value
          End Set
          Get
               Return nameValue
          End Get
      End Property
  End Class
End Namespace