分散トランザクション処理機能 TP1/Connector for .NET Framework 使用の手引
.NETインタフェース定義は,次のUAPからSPP.NETに対して.NETインタフェース定義を使用してRPCを実行する場合に定義します。
ここでは,.NETインタフェース定義の定義方法の詳細について説明します。.NETインタフェース定義を使用したRPCについては,マニュアル「TP1/Client for .NET Framework 使用の手引」を参照してください。
SPP.NETの.NETインタフェース定義は,SPP.NETを開発するプログラム言語で定義します。.NETインタフェース定義を定義する場合,次のプログラム言語が使用できます。COBOL言語は使用できません。
各プログラム言語でのインタフェースの定義文法は,Visual Studioや.NET Framework SDKのドキュメントを参照してください。
なお,.NETインタフェース定義は,Visual Studioや.NET Framework SDKが提供する各プログラム言語のコンパイラで,.NET FrameworkおよびOpenTP1 for .NET Frameworkが提供するクラスライブラリだけを参照してコンパイルできる必要があります。
SPP.NETのインタフェースを定義する場合,次の規則があります。これらの規則に従っていない場合,SPP.NETの.NETインタフェース定義として使用できません。
表3-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ユーザ構造体配列 | − | − | − |
表3-2 メソッドの引数に使用できるパラメタ属性
意味 | プログラム言語 | ||
---|---|---|---|
C# | J#※2 | Visual Basic | |
値渡し | var(省略可) | なし | ByVal(省略可) |
出力渡し | out | 指定不可※1 | 指定不可※1 |
参照渡し | ref | Holderクラス※2 | ByRef |
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[] |
TP1ユーザ構造体は,複数の値をまとめて保持できるクラスのことです。
TP1ユーザ構造体を定義する場合の規則を次に示します。
TP1ユーザ構造体のプロパティとして利用できるデータ型,およびメソッドの引数として使用できるパラメタ属性を次の表に示します。
表3-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ユーザ構造体配列 | − | − | − |
TP1ユーザ構造体の参照渡しをするには,パラメタ属性を使用します。ただし,J#の場合は参照渡しができないため,Hitachi.OpenTP1.ITP1UserStructHolderを実装する必要があります。実装上の規則を次に示します。
プロパティのデータ型 | 実装クラスの名称 |
---|---|
TP1ユーザ構造体 | TP1ユーザ構造体クラス名称+"Holder" |
TP1ユーザ構造体配列 | TP1ユーザ構造体クラス名称+"ArrayHolder" |
なお,プロパティ以外のすべてのメンバはRPCで送受信されるデータには含まれません。TP1ユーザ構造体の参照渡しの使用例については,「(3)(b) J#での定義例」を参照してください。
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; } } } }
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; } }
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
クライアントスタブ生成コマンド(if2cstub)で-Xオプションを指定して,.NETインタフェース定義からクライアントスタブを生成すると,引数および戻り値がXmlDocumentクラス(System.Xml.XmlDocument)となるサービスメソッドがクライアントスタブに追加されます。サービスメソッドの引数および戻り値のXmlDocumentクラスに指定できるXMLの形式は,クライアントスタブと一緒に生成される入力データ用XMLスキーマおよび出力データ用XMLスキーマで定義されます。
.NETインタフェース定義のサービスメソッドの引数および戻り値は,次の図のように入力データ用XMLスキーマおよび出力データ用XMLスキーマに定義されます。入力データ用XMLスキーマのファイル名は,「〈.NETインタフェース定義のインタフェース名称〉_〈.NETインタフェース定義のサービスメソッド名称〉_InData.xsd」となり,出力データ用XMLスキーマのファイル名は,「〈.NETインタフェース定義のインタフェース名称〉_〈.NETインタフェース定義のサービスメソッド名称〉_OutData.xsd」となります。
クライアントスタブ生成コマンド(if2cstub)によって出力されるXMLスキーマは,XMLスキーマ仕様「XML Schema Definition language(XSD)1.0」に従います。なお,名前空間URIとして「http://www.w3.org/2001/XMLSchema」が指定されます。
図3-1 .NETインタフェース定義とサービスメソッド用スキーマの関係
All Rights Reserved. Copyright (C) 2006, 2009, Hitachi, Ltd.