OpenTP1 Version 7

分散トランザクション処理機能

TP1/Extension for .NET Framework　使用の手引

解説・手引・文法・操作書

3000-3-D67

目　　次

前書き

はじめに

1.　概要

1.1　OpenTP1 for .NET Frameworkとは

1.1.1　OpenTP1 for .NET Frameworkの構成

1.1.2　OpenTP1 for .NET Frameworkの利点

1.2　OpenTP1 for .NET Frameworkを利用したシステム構成

1.2.1　TP1/Extension for .NET Framework使用時の前提条件

1.2.2　クライアント/サーバシステムの形態

1.2.3　WWWサーバ経由での接続

1.2.4　ASP.NET XML Webサービスとの接続

1.2.5　OpenTP1システムとの接続

1.3　OpenTP1 for .NET Frameworkのアプリケーション

1.3.1　ユーザアプリケーションプログラム（UAP）

1.3.2　RPCインタフェース

1.3.3　アプリケーション開発の流れ

2.　機能

2.1　Extension .NETで使用できるUAP

2.1.1　SPP.NETの概要

2.1.2　SUP.NETの概要

2.1.3　COBOL2002 for .NET Frameworkを使用したUAPの開発および実行

2.2　アプリケーションプログラミングインタフェース（API）の種類

2.3　リモートプロシジャコール（RPC）

2.3.1　RPCの形態

2.3.2　RPCの連鎖（連鎖RPC）

2.3.3　RPCの形態によるRPCインタフェースの使用可否

2.3.4　RPCの種類

2.3.5　常設コネクション

2.3.6　RPC送受信メッセージの最大長拡張機能

2.4　トランザクション制御機能

2.4.1　トランザクション制御機能の概要

2.4.2　トランザクションの開始と同期点取得

2.4.3　同期点取得

2.4.4　DBMSとの連携

2.4.5　トランザクションシーケンス

2.4.6　DBMSとのトランザクション連携の仕組み

2.4.7　トランザクション連携の利用手順

2.5　メッセージ送受信機能

2.5.1　メッセージ送受信機能の使用方法

2.5.2　通信形態

2.5.3　注意事項

2.6　ノード間負荷バランス機能

2.7　リアルタイム統計情報の取得

2.8　資源の排他制御【TP1/Server Base】

2.9　ユーザジャーナルの取得【TP1/Server Base】

2.10　TAMファイルサービス（TP1/FS/Table Access）【TP1/Server Base】

2.11　環境設定

2.11.1　インストール後の環境設定

2.11.2　セキュリティポリシーの設定

2.11.3　マルチOpenTP1環境でのExtension .NETの環境設定

2.11.4　メッセージの出力先

3.　システム定義【TP1/Server Base】

システム共通定義

ユーザサービスデフォルト定義

ユーザサービス定義

4.　UAPの作成と実行

4.1　OpenTP1 for .NET Framework環境でのUAP開発時に必要な定義

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

4.1.2　サービス定義

4.2　UAPの作成手順の概要

4.2.1　SPP.NETの作成手順の概要

4.2.2　SPP.NETウィザードを利用したSPP.NETの作成

4.2.3　SUP.NETの作成手順の概要

4.2.4　SUP.NETウィザードを利用したSUP.NETの作成

4.2.5　SPP.NETおよびSUP.NET作成時の注意事項

4.3　SPP.NETの作成方法

4.3.1　.NETインタフェース定義を使用したSPP.NETの実装

4.3.2　.NETインタフェース定義を使用したSPP.NETのコーディング例

4.3.3　.NETインタフェース定義を使用しないSPP.NETの実装

4.3.4　.NETインタフェース定義を使用しないSPP.NETのコーディング例

4.4　.NETインタフェース定義を使用したSPP.NETの呼び出し方法

4.4.1　クライアントスタブの生成

4.4.2　クライアントスタブの使用方法

4.4.3　.NETインタフェース定義から生成したクライアントスタブの使用例

4.4.4　.NETインタフェース定義を使用する場合のデータ長の見積もり

4.4.5　.NETインタフェース定義を使用する場合の留意事項

4.5　サービス定義を使用したSPP.NETまたはSPPの呼び出し方法

4.5.1　クライアントスタブの生成

4.5.2　クライアントスタブの使用方法

4.5.3　サービス定義から生成したクライアントスタブの使用例

4.5.4　サービス定義から生成したクライアントスタブを使用する場合のデータ長の見積もり

4.6　バイナリデータを使用したSPP.NETまたはSPPの呼び出し方法

4.6.1　バイナリデータを使用する場合の留意事項

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

4.7　DABroker for .NET Frameworkを使用したUAPの作成方法

4.7.1　DABroker for .NET Frameworkを使用したUAP作成の概要

4.7.2　DABroker for .NET Frameworkを使用したSPP.NETおよびSUP.NETのコーディング例

4.7.3　DABroker for .NET Frameworkを使用したUAPを作成するときの注意事項

4.8　COBOL言語でのUAPの作成方法

4.8.1　COBOL言語でのSPP.NETの実装

4.8.2　COBOL言語でのSUP.NETの実装

4.8.3　TP1/ServerのCOBOL言語のサービスルーチンの利用

4.8.4　プログラム作成時の注意事項

4.9　アプリケーションの配置と運用

4.9.1　アプリケーションの配置

4.9.2　ユーザサーバの定義

4.9.3　ユーザサーバの運用

4.10　UAP作成上の注意事項

4.10.1　実行環境と留意点

4.10.2　例外の捕捉とエラーの判定

4.10.3　その他の注意事項

4.11　サンプルプログラムの使用方法

4.11.1　サンプルプログラムのディレクトリ構成

4.11.2　サンプルプログラムのビルド方法

4.11.3　サンプルプログラムの実行手順

4.12　Visual StudioでのSPP.NETのデバッグ方法

4.12.1　Visual StudioでのSPP.NETのデバッグ手順

4.12.2　デバッグ時の留意事項

5.　TP1/LiNKでのユーザサーバの実行環境設定【TP1/LiNK】

5.1　TP1/LiNKでの実行環境設定の概要

5.2　ユーザサーバの環境設定（SPP.NET）

5.2.1　SPP.NETの実行環境の設定

5.2.2　サーチパスの設定

5.2.3　自動起動の設定

5.2.4　XA接続の設定

5.2.5　SPP.NETの実行環境設定の指定例

5.3　ユーザサーバの環境設定（SUP.NET）

5.3.1　SUP.NETの実行環境の設定

5.4　リソースマネジャの接続

6.　運用コマンド

運用コマンドの種類

if2cstub（クライアントスタブ生成コマンド（.NETインタフェース定義用））

if2sstub（サーバスタブ生成コマンド（.NETインタフェース定義用））

if2tsdl（TP1 Service Description Language（TSDL）生成コマンド）

spp2cstub（クライアントスタブ生成コマンド（サービス定義用））

7.　クラスリファレンス

TP1/Extension for .NET Frameworkで利用できるクラス

Adm

IntArrayHolder

IntHolder

IRecordインタフェース

Jnl 【TP1/Server Base】

Lck 【TP1/Server Base】

Log

LongArrayHolder

LongHolder

Mcf

Prf

Rap

Rpc

RpcBindTable構造体

Rts

ShortArrayHolder

ShortHolder

SPPBase

StringArrayHolder

StringHolder

Tam 【TP1/Server Base】

TamKeyTable構造体 【TP1/Server Base】

TamStatusTable構造体 【TP1/Server Base】

TP1Error

TP1Exception

TP1MarshalException

TP1RemoteException

TP1RpcMethod

TP1ServerException

TP1ServerFlags

TP1ServerLimits

TP1ServerValues

TP1UserException

TP1UserStruct

Trn

UByteArrayHolder

UByteHolder

8.　障害運用

8.1　障害の種類と対処方法

8.2　障害時に取得する情報

8.3　.NETエラーログファイル

9.　開発支援機能

9.1　開発支援機能の概要

9.1.1　開発支援機能を利用した開発およびデバッグ手順

9.1.2　マルチOpenTP1環境での運用

9.2　SPP.NETウィザード

9.2.1　SPP.NETウィザードを利用したSPP.NETの作成手順

9.2.2　SPP.NETウィザード使用時に設定するダイアログボックス

9.3　SPP.NETデバッガ

9.3.1　SPP.NETデバッガを利用したデバッグ手順

9.3.2　SPP.NETデバッガ使用時に設定するダイアログボックス

9.3.3　SPP.NETデバッガの出力画面例

9.3.4　SPP.NETデバッガ使用時の注意事項

9.4　SUP.NETウィザード

9.4.1　SUP.NETウィザードを利用したSUP.NETの作成手順

9.4.2　SUP.NETウィザード使用時に設定するダイアログボックス

9.5　SUP.NETデバッガ

9.5.1　SUP.NETデバッガを利用したデバッグ手順

9.5.2　SUP.NETデバッガ使用時に設定するダイアログボックス

9.5.3　SUP.NETデバッガ使用時の注意事項

9.6　クライアントスタブの追加

9.6.1　クライアントスタブの追加の使用時に設定するダイアログボックス

9.6.2　クライアントスタブの追加の使用時の注意事項

9.7　TP1 Service Proxyの追加

9.7.1　TP1 Service Proxyの追加の使用時に設定するダイアログボックス

9.7.2　TP1 Service Proxyの追加の使用時の注意事項

付録

付録A　クラス名およびメソッド名とC言語の関数名の対応

付録B　DCCM3と接続する場合の注意事項

付録C　用語解説

索引

[他社商品名称に関する表示]

All Rights Reserved. Copyright (C) 2006, Hitachi, Ltd.

前書き

■ 対象製品

R-15452-21　 uCosminexus TP1/Extension for .NET Framework　 07-00（適用OS：Windows Server 2003，Windows XP）

このプログラムプロダクトのほかにもこのマニュアルをご利用になれる場合があります。詳細は「リリースノート」でご確認ください。
この製品は，ISO9001およびTickITの認証を受けた品質マネジメントシステムで開発されました。

■ 輸出時の注意

本製品を輸出される場合には，外国為替および外国貿易法ならびに米国の輸出管理関連法規などの規制をご確認の上，必要な手続きをお取りください。
なお，ご不明な場合は，弊社担当営業にお問い合わせください。

■ 商標類

ActiveXは，米国およびその他の国における米国Microsoft Corp.の商標です。
Microsoftは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
Microsoft SQL Serverは，米国Microsoft Corp.の商品名称です。
MSDNは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
ORACLEは，米国Oracle Corporation の登録商標です。
SOAP(Simple Object Access Protocol)は，分散ネットワーク環境においてXMLベースの情報を交換するための通信プロトコルの名称です。
Visual Basicは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
Visual Studioは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
Windowsは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
Windows Serverは，米国およびその他の国における米国Microsoft Corp.の商標です。
X/Openは，X/Open Company Limited の英国ならびに他の国における登録商標です。

本書には，X/Openの許諾に基づき X/Open CAE Specification System Interfaces and Headers，Issue4，（C202 ISBN 1-872630-47-2）Copyright（C）July 1992， X/Open Company Limited の内容が含まれています;
なお，その一部は IEEE Std 1003.1-1990，（C）1990 Institute of Electrical and Electronics Engineers，Inc.及び IEEE std 1003.2/D12，（C）1992 Institute of Electrical and Electronics Engineers，Inc.を基にしています。

事前に著作権所有者の許諾を得ずに，本書の該当部分を複製，複写及び転記することは禁じられています。

本書には，X/Openの許諾に基づき X/Open X/Open Preliminary Specification Distributed Transaction Processing：The TxRPC Specification（P305 ISBN 1-85912-000-8）Copyright（C）July 1993， X/Open Company Limited の内容が含まれています;

事前に著作権所有者の許諾を得ずに，本書の該当部分を複製，複写及び転記することは禁じられています。

本書には，Open Software Foundation，Inc. が著作権を有する内容が含まれています。
This document and the software described herein are furnished under a license，and may be used and copied only in accordance with the terms of such license and with the inclusion of the above copyright notice. Title to and ownership of the document and software remain with OSF or its licensors.

■ 発行

2006年10月 （第1版） 3000-3-D67

■ 著作権

All Rights Reserved. Copyright (C) 2006, Hitachi, Ltd.

はじめに

このマニュアルは，プログラムプロダクトR-15452-21 uCosminexus TP1/Extension for .NET Frameworkの機能と使い方について説明したものです。

本文中に記載されている製品のうち，このマニュアルの対象製品ではない製品については，OpenTP1 Version 7対応製品の発行時期をご確認ください。

対象読者

システム管理者，システム設計者，プログラマ，オペレータの方を対象としています。また，.NET Frameworkを利用したプログラミングの知識を持っていることを前提としています。

マニュアルの構成

このマニュアルは，次に示す章と付録から構成されています。

第1章　概要

OpenTP1 for .NET Frameworkの概要について説明しています。

第2章　機能

TP1/Extension for .NET Frameworkの機能について説明しています。

第3章　システム定義【TP1/Server Base】

TP1/Extension for .NET Frameworkで使用するシステム定義について説明しています。この定義は，TP1/Server Baseの場合だけ指定できます。

第4章　UAPの作成と実行

TP1/Extension for .NET Frameworkで使用するUAPの作成方法と実行手順について説明しています。

第5章　TP1/LiNKでのユーザサーバの実行環境設定【TP1/LiNK】

SPP.NETおよびSUP.NETをユーザサーバとして使用する場合にTP1/LiNKで設定する内容について説明しています。TP1/Server Baseの場合，この章で説明する設定は不要です。

第6章　運用コマンド

TP1/Extension for .NET Frameworkで使用する運用コマンドについて説明しています。

第7章　クラスリファレンス

TP1/Extension for .NET Frameworkで使用するクラスについて説明しています。

第8章　障害運用

TP1/Extension for .NET Frameworkで障害が発生した場合の対処方法について説明しています。

第9章　開発支援機能

UAP作成時の開発支援機能について説明しています。

付録A　クラス名およびメソッド名とC言語の関数名の対応

SPP.NETおよびSUP.NETで利用できるクラスおよびメソッドとC言語の関数名の対応について説明しています。

付録B　DCCM3と接続する場合の注意事項

RPCやメッセージ送受信機能を使用してDCCM3と接続する場合の注意事項について説明しています。

付録C　用語解説

TP1/Extension for .NET Frameworkに関する用語について説明しています。

関連マニュアル

読書手順

このマニュアルは，利用目的に合わせて，章を選択して読むことができます。次の案内に従ってお読みいただくことをお勧めします。

図中で使用する記号

このマニュアルの図中で使用する記号を，次のように定義します。

文法の記号

（1）文法記述記号

文法の記述形式について説明する記号です。

文法記述記号
意味

〔　　　〕
この記号で囲まれている項目は省略できることを示します。
（例）spp2tsp 〔-n 名前空間名称〕
これは，「spp2tsp」と指定するか，または「spp2tsp -n 名前空間名称」と指定することを示します。

…
この記号で示す直前の項目を繰り返し指定できることを示します。
（例）-R アセンブリ名称〔,アセンブリ名称〕…
これは，-Rオプションのアセンブリ名称を繰り返し指定できることを示します。

｜
この記号で区切られた項目は選択できることを示します。
（例）watchTimeNotification="true｜false"
これは，watchTimeNotification属性にtrueかfalseのどちらかを指定できることを示します。

｛　　　｝
この記号で囲まれている複数の項目のうちから一つを選択できることを示します。
（例）-l ｛cs｜vjs｜vb｝
これは，cs，vjs，vbの三つのオプションのうち，どれか一つを指定することを示します。

　　（下線）
この記号で示す項目は，該当オプション，要素，属性，またはコマンド引数を省略した場合の仮定値を示します。
（例）-E ｛big｜little｝
これは，オプションの指定を省略した場合，bigオプションを仮定することを示します。

（2）属性表示記号

ユーザ指定値の範囲などを説明する記号です。

属性表示記号 | 意味
～ | この記号のあとにユーザ指定値の属性を示します。
《　　》 | ユーザ指定値を省略した場合の仮定値を示します。
〈　　〉 | ユーザ指定値の構文要素記号を示します。
((　　)) | ユーザ指定値の指定範囲を示します。

（3）構文要素記号

ユーザ指定値の内容を説明する記号です。

構文要素記号
意味

〈英字記号〉
アルファベット（A～Z，a～z）と#，@，¥

〈符号なし整数〉
数字（0～9）

〈識別子〉
先頭がアルファベット（A～Z，a～z）で始まる英数字列

〈記号名称〉
先頭が英字記号で始まる英数字記号列

〈文字列〉
任意の文字の並び

〈パス名〉
記号名称，円記号（¥），およびピリオド（.）の並び
（ただし，パス名は使用しているOSに依存します）

〈ファイル名〉
任意の文字の並び
（ただし，ファイル名は使用しているOS，およびアプリケーションに依存します）

このマニュアルでの表記

このマニュアルでは，製品の名称を省略して表記しています。製品の名称と，このマニュアルでの表記を次に示します。

製品名称 | このマニュアルでの表記
Microsoft(R) .NET Framework Software Development Kit | .NET Framework SDK
Visual C# | C#
uCosminexus TP1/Client for .NET Framework | TP1/Client for .NET Framework | Client .NET
COBOL2002 for .NET Framework Developer | COBOL2002 for .NET Framework
COBOL2002 for .NET Framework Server Runtime
COBOL2002 for .NET Framework Server Suite
uCosminexus TP1/Connector for .NET Framework | TP1/Connector for .NET Framework | Connector .NET
VOS1 DCCM3 | DCCM3
VOS3 XDM/DCCM3
uCosminexus TP1/Extension for .NET Framework | TP1/Extension for .NET Framework | Extension .NET
Visual J# | J#
Microsoft(R) SQL Server | Microsoft SQL Server
MSDN(R) | MSDN
uCosminexus TP1/Client/J | TP1/Client/J
uCosminexus TP1/Client/P | TP1/Client/P
uCosminexus TP1/Client/W | TP1/Client/W
uCosminexus TP1/Messaging | TP1/Messaging
uCosminexus TP1/Multi | TP1/Multi
uCosminexus TP1/NET/TCP/IP | TP1/NET/TCP/IP
uCosminexus TP1/LiNK | TP1/LiNK | TP1/Server
uCosminexus TP1/Server Base | TP1/Server Base
Microsoft(R) Visual Studio(R) 2005 Academic Edition | Visual Studio
Microsoft(R) Visual Studio(R) 2005 Professional Edition
Microsoft(R) Visual Studio(R) 2005 Standard Edition
Microsoft(R) Visual Studio(R) 2005 Team Edition for Software Architects
Microsoft(R) Visual Studio(R) 2005 Team Edition for Software Developers
Microsoft(R) Visual Studio(R) 2005 Team Edition for Software Testers
Microsoft(R) Visual Studio(R) 2005 Team Suite
Microsoft(R) Windows Server(TM) 2003, Datacenter Edition | Windows Server 2003（32ビット用） | Windows Server 2003
Microsoft(R) Windows Server(TM) 2003, Enterprise Edition
Microsoft(R) Windows Server(TM) 2003, Standard Edition
Microsoft(R) Windows Server(TM) 2003 R2, Enterprise Edition
Microsoft(R) Windows Server(TM) 2003 R2, Standard Edition
Microsoft(R) Windows Server(TM) 2003, Datacenter x64 Edition | Windows Server 2003（64ビット用）
Microsoft(R) Windows Server(TM) 2003, Enterprise x64 Edition
Microsoft(R) Windows Server(TM) 2003, Standard x64 Edition
Microsoft(R) Windows Server(TM) 2003 R2, Enterprise x64 Edition
Microsoft(R) Windows Server(TM) 2003 R2, Standard x64 Edition
Microsoft(R) Windows(R) XP Professional Operating System | Windows XP

TP1/Extension for .NET Framework，TP1/Client for .NET Framework，およびTP1/Connector for .NET Frameworkを総称する場合は，OpenTP1 for .NET Frameworkと表記しています。

Windows Server 2003，およびWindows XPで機能差がない場合，Windowsと表記しています。

前提製品の違いによる機能相違点の表記

TP1/Extension for .NET Frameworkは，TP1/Server BaseまたはTP1/LiNKを前提としています。前提製品の違いによって記述を書き分ける場合，次に示す表記を使用しています。

表記 | 意味
【TP1/Server Base】 | TP1/Server Baseの場合
【TP1/LiNK】 | TP1/LiNKの場合

略語一覧

このマニュアルで使用する英略語の一覧を次に示します。

英略語 | 英字での表記
ACL | Access Control List
ADO | ActiveX Data Object
AP | Application Program
API | Application Programming Interface
ASP | Active Server Pages
CLR | Common Language Runtime
CLS | Common Language Specification
CTS | Common Type System
CUP | Client User Program
CUP.NET | Client User Program for .NET Framework
DB | Data Base
DBMS | Database Management System
DLL | Dynamic Linking Library
GAC | Global Assembly Cache
GUI | Graphical User Interface
HTTP | Hyper Text Transfer Protocol
IIS | Internet Information Services
MHP | Message Handling Program
OLTP | Online Transaction Processing
OS | Operating System
PC | Personal Computer
RPC | Remote Procedure Call
SOAP | Simple Object Access Protocol
SPP | Service Providing Program
SPP.NET | Service Providing Program for .NET Framework
SUP | Service Using Program
SUP.NET | Service Using Program for .NET Framework
TCP/IP | Transmission Control Protocol/Internet Protocol
TSDL | TP1 Service Description Language
TSP | TP1 Service Proxy
UAP | User Application Program
WS | Workstation
WWW | World Wide Web
XA | Extended Architecture
XML | eXtensible Markup Language

このマニュアルで使用している記号

注意

間違いやすい点や注意しなければならない点などについて説明しています。

ポイント

その説明の要点などについて説明しています。

参考

補足的な情報などについて説明しています。

常用漢字以外の漢字の使用について

このマニュアルでは，常用漢字を使用することを基本としていますが，次に示す用語については，常用漢字以外の漢字を使用しています。

個所（かしょ）　伝播（でんぱ）　輻輳（ふくそう）　閉塞（へいそく）　捕捉（ほそく）

KB（キロバイト）などの単位表記について

1KB（キロバイト），1MB（メガバイト），1GB（ギガバイト），1TB（テラバイト）はそれぞれ1,024バイト，1,024²バイト，1,024³バイト，1,024⁴バイトです。

1.　概要

TP1/Extension for .NET Framework（Extension .NET）は，OpenTP1 for .NET Frameworkを構成する三つの製品のうちの一つです。この章ではExtension .NETの前提知識として，OpenTP1 for .NET Frameworkの概要について説明します。

＜この章の構成＞

1.1　OpenTP1 for .NET Frameworkとは

1.2　OpenTP1 for .NET Frameworkを利用したシステム構成

1.3　OpenTP1 for .NET Frameworkのアプリケーション

1.1　OpenTP1 for .NET Frameworkとは

近年，クライアント/サーバシステムにWindowsプラットフォームを選択するオンラインシステムが増えています。小さな社内業務システムから社会インフラを担う基幹システムまで，あらゆるオンラインシステムがWindowsプラットフォーム上で構築されるようになりました。

OpenTP1 for .NET Frameworkは，OpenTP1をMicrosoftの.NET Frameworkに対応させることによって，.NET Frameworkの持つシステム開発の柔軟性，高生産性とOpenTP1の持つ分散トランザクションシステムとしての信頼性を融合し，Windowsプラットフォーム上で高いシステム生産性，運用性を持つ次世代基幹システムの基盤を提供します。

OpenTP1 for .NET Frameworkの概要を次の図に示します。

図1-1　OpenTP1 for .NET Frameworkの概要

＜この節の構成＞

1.1.1　OpenTP1 for .NET Frameworkの構成

1.1.2　OpenTP1 for .NET Frameworkの利点

1.1.1　OpenTP1 for .NET Frameworkの構成

OpenTP1 for .NET Frameworkは次の表に示す三つの製品から構成されます。

これらの製品は，それぞれCLS準拠のクラスライブラリを提供します。

表1-1　OpenTP1 for .NET Frameworkの構成

製品名称
機能概要

TP1/Extension for .NET Framework
.NET Framework環境でOpenTP1のサーバアプリケーションを開発し，動作させるための製品です。TP1/Extension for .NET Frameworkには，前提製品としてTP1/Server BaseまたはTP1/LiNKが必要です。

TP1/Client for .NET Framework
.NET Framework環境でOpenTP1のクライアントアプリケーションを開発するための機能を提供します。

TP1/Connector for .NET Framework
TP1/Client for .NET Frameworkと連携して，WWWサーバ（IISのASP.NET環境）などの.NET Framework環境から，OpenTP1のサーバに対してサービスを要求する場合に使用します。
マルチスレッド環境でコネクションプーリング，バッファプーリングなどの機能を提供します。
TP1/Connector for .NET Frameworkには，前提製品としてTP1/Client for .NET Frameworkが必要です。

なお，このマニュアルでは，これらの製品を次の表に示すように表記します。

表1-2　OpenTP1 for .NET Frameworkの製品名称とこのマニュアルでの表記

製品名称 | このマニュアルでの表記
TP1/Extension for .NET Framework | Extension .NET
TP1/Client for .NET Framework | Client .NET
TP1/Connector for .NET Framework | Connector .NET

1.1.2　OpenTP1 for .NET Frameworkの利点

.NET Frameworkに対応したOpenTP1 for .NET Frameworkを使用すると，次のような利点があります。

＜この項の構成＞

(1)　高信頼/高性能

(2)　アプリケーション開発環境の拡充

(3)　ASP.NET XML Webサービスの利用

(4)　OpenTP1システムとの親和性

(1)　高信頼/高性能

OpenTP1が持つトランザクション制御機能，スケジューリング制御機能，プロセス管理機能，障害回復機能などを.NET Framework環境で利用できます。

(2)　アプリケーション開発環境の拡充

.NET Frameworkの活用によって，OpenTP1のアプリケーションを開発する言語をC#，J#，Visual Basic，およびCOBOL言語から柔軟に選択できます。
また，サーバアプリケーションからクライアントアプリケーションまでを，一貫して同一のプログラム言語で開発することもできます。

.NET Frameworkが持つ優れた開発環境やライブラリなどを活用することによって，アプリケーション開発を迅速に行うことができます。これによって，システム構築に掛かる時間を短縮し，システム開発の生産性の向上が図れます。
また，Visual Studioと連携した，OpenTP1 for .NET Frameworkのアプリケーション作成ウィザードや，デバッグ支援機能が利用できます。

(3)　ASP.NET XML Webサービスの利用

ASP.NET XML WebサービスやASP.NETなどに代表されるMicrosoftのアプリケーション開発技術を，OpenTP1環境で利用できます。
これによって，OpenTP1のサービスを，ASP.NET XML Webサービスとして公開できます。

定義されたインタフェース情報からASP.NET XML Webサービスを自動生成する機能が利用できます。

(4)　OpenTP1システムとの親和性

サービス関数のインタフェースをサービス定義として定義することによって，C言語，C++言語，およびCOBOL言語で作成したOpenTP1の基幹業務アプリケーションを.NET Framework環境から呼び出すことができます。

1.2　OpenTP1 for .NET Frameworkを利用したシステム構成

OpenTP1 for .NET Frameworkを利用したシステム構成について説明します。

＜この節の構成＞

1.2.1　TP1/Extension for .NET Framework使用時の前提条件

1.2.2　クライアント/サーバシステムの形態

1.2.3　WWWサーバ経由での接続

1.2.4　ASP.NET XML Webサービスとの接続

1.2.5　OpenTP1システムとの接続

1.2.1　TP1/Extension for .NET Framework使用時の前提条件

TP1/Extension for .NET Frameworkをインストールする前に，次に示すソフトウェアがインストールされている必要があります。

uCosminexus TP1/Server Base 07-00以降またはuCosminexus TP1/LiNK 07-00以降

.NET Framework Version 2.0

.NET Framework SDK Version 2.0

Visual J# .NET Version 2.0 再頒布可能パッケージ

＜この項の構成＞

(1)　UAPを開発する場合

(2)　使用する機能と必要なソフトウェア

(1)　UAPを開発する場合

(a)　C#，J#，またはVisual Basicを使用するとき

次のどちらかのソフトウェアが必要になります。

Visual Studio

.NET Framework SDK Version 2.0

(b)　COBOL言語を使用するとき

次のどちらかのソフトウェアが必要になります。

COBOL2002 for .NET Framework Developer 02-00以降

COBOL2002 for .NET Framework Server Suite 02-00以降

また，COBOL言語で開発したUAP※を実行する場合，次のどちらかのソフトウェアが必要になります。

COBOL2002 for .NET Framework Server Runtime 02-00以降

COBOL2002 for .NET Framework Server Suite 02-00以降

注※

SPP.NETおよびSUP.NETが該当します。

(2)　使用する機能と必要なソフトウェア

使用する機能によって，次に示すソフトウェアがインストールされている必要があります。

表1-3　使用する機能と必要なソフトウェアの対応

使用する機能
必要なソフトウェア

OpenTP1 for .NET Frameworkが提供する開発支援機能
Visual Studio

性能検証用トレースのAPI
TP1/Extension 1 07-00以降

TAMファイルサービス

【TP1/Server Base】

TP1/FS/Table Access 07-00以降

メッセージ送受信機能

【TP1/Server Base】

TP1/Message Control 07-00以降

TP1/NET/Library 07-00以降

TP1/NET/TCP/IP 07-00以降

【TP1/LiNK】

TP1/Messaging 07-00以降

DBMSとのトランザクション連携

DABroker for .NET Framework 01-01以降

DABroker 03-11以降

1.2.2　クライアント/サーバシステムの形態

TP1/Client for .NET Frameworkを使用することで，.NET Framework環境で動作するOpenTP1のクライアントアプリケーション（GUI画面アプリケーションなど）を作成できます。

また，TP1/Extension for .NET Frameworkを使用することで，.NET Framework環境で動作するOpenTP1のサーバアプリケーション（基幹業務アプリケーションなど）を作成できます。

このように，クライアントアプリケーションからサーバアプリケーションまで，一貫して.NET Framework環境で開発できます。

OpenTP1 for .NET Frameworkを利用したクライアント/サーバシステムの形態のシステム構成例を次の図に示します。

図1-2　OpenTP1 for .NET Frameworkを利用したクライアント/サーバシステムのシステム構成例

.NET Framework環境では，リモートプロシジャコール（RPC）のインタフェース情報を.NETインタフェース定義に定義します。この.NETインタフェース定義から運用コマンドを使用して，クライアントスタブ，サーバスタブを生成します。

RPCメッセージのデータ変換（文字コード変換，エンディアン変換など）は，これらクライアントスタブ，サーバスタブが自動的に行います。

1.2.3　WWWサーバ経由での接続

クライアントとなるWebブラウザから，WWWサーバ（IIS）を経由してOpenTP1サーバ上の基幹業務アプリケーションにアクセスできます。

WWWサーバ上でTP1/Client for .NET FrameworkとTP1/Connector for .NET Frameworkを使用することによって，ASP.NET Webアプリケーションである画面制御アプリケーションから，OpenTP1を経由してバックエンドの基幹業務アプリケーションを呼び出すことができます。

TP1/Connector for .NET Frameworkは，マルチスレッド環境でコネクションプーリング機能やバッファプーリング機能などを提供します。

WWWサーバ経由でOpenTP1のサーバに接続する場合のシステム構成例を次の図に示します。

図1-3　WWWサーバ経由でOpenTP1サーバに接続する場合のシステム構成例

1.2.4　ASP.NET XML Webサービスとの接続

OpenTP1 for .NET Frameworkを使用することで，OpenTP1のサービスをASP.NET XML Webサービスとして公開できます。

WWWサーバ上でTP1/Client for .NET FrameworkとTP1/Connector for .NET Frameworkを使用することによって，ASP.NET環境で動作するXML Webサービスアプリケーションから，バックエンドの基幹業務アプリケーションを呼び出すことができます。

ASP.NET XML WebサービスからOpenTP1サーバに接続する場合のシステム構成例を次の図に示します。

図1-4　ASP.NET XML WebサービスからOpenTP1サーバに接続する場合のシステム構成例

WWWサーバ（IIS）上で動作するアプリケーションが，HTTPを受けて動作するか，SOAPを受けて動作するかという点が，WWWサーバ経由でOpenTP1サーバに接続する場合と異なります。

1.2.5　OpenTP1システムとの接続

OpenTP1 for .NET Frameworkは，OpenTP1システム（TP1/Server BaseおよびTP1/LiNK）と接続することによって，次のことができます。

OpenTP1システムのクライアントアプリケーション（CUP）からのOpenTP1 for .NET Framework環境の基幹業務アプリケーション（SPP.NET）の呼び出し

OpenTP1 for .NET Framework環境のクライアントアプリケーション（CUP.NET）からの基幹業務アプリケーション（SPP）の呼び出し

OpenTP1システムと接続する場合のシステム構成例を次に示します。

図1-5　OpenTP1システムと接続する場合のシステム構成例

注※1

TP1/Client/P，TP1/Client/W，またはTP1/Client/J

注※2

OpenTP1の形式のRPC

注※3

カスタムレコードを使用したRPC

注※4

バイナリデータを使用したRPC

基幹業務アプリケーション（SPP）のRPCインタフェースが固定の場合，サービス定義にインタフェース情報を定義します。このサービス定義から，クライアントスタブ，およびカスタムレコードクラスを生成します。

.NET Framework環境のクライアントアプリケーション（CUP.NET）は，生成されたクライアントスタブ，カスタムレコードクラスを使用して基幹業務アプリケーション（SPP）を呼び出すことができます。

なお，バイナリデータを使用するRPCインタフェースを利用して，基幹業務アプリケーション（SPP）を呼び出すこともできます。

1.3　OpenTP1 for .NET Frameworkのアプリケーション

＜この節の構成＞

1.3.1　ユーザアプリケーションプログラム（UAP）

1.3.2　RPCインタフェース

1.3.3　アプリケーション開発の流れ

1.3.1　ユーザアプリケーションプログラム（UAP）

OpenTP1 for .NET Frameworkでは，次のUAPを利用できます。

また，OpenTP1 for .NET FrameworkのUAPとOpenTP1のSPP，SUP，CUPの間でRPCを実行できます。

＜この項の構成＞

(1)　SPP.NET

(2)　SUP.NET

(3)　CUP.NET

(1)　SPP.NET

SPP.NETは，TP1/Extension for .NET Framework上で動作する，マネージコードで記述されたサーバUAPです。SPP.NETは，クライアントUAPから要求されたサービスを実行します。

SPP.NETは，TP1/Extension for .NET Frameworkが提供するランタイムホストで実行されます。

SPP.NETの詳細については，「2.1.1　SPP.NETの概要」を参照してください。

(2)　SUP.NET

SUP.NETは，TP1/Extension for .NET Framework上で動作する，マネージコードで記述されたクライアントUAPです。SUP.NETは，SPP.NETまたはSPPに対してサービスを要求します。

SUP.NETは，.NET Frameworkが提供するランタイムホストで実行されます。

SUP.NETの詳細については，「2.1.2　SUP.NETの概要」を参照してください。

(3)　CUP.NET

CUP.NETは，TP1/Client for .NET FrameworkまたはTP1/Connector for .NET Frameworkを利用する，マネージコードで記述されたクライアントUAPです。CUP.NETは，SPP.NETまたはSPPに対してサービスを要求します。

CUP.NETは，Windowsフォームアプリケーション，ASP.NET Webアプリケーション，ASP.NET XML Webサービスなど，さまざまなアプリケーション形態が可能であり，形態に応じたランタイムホストで実行されます。

1.3.2　RPCインタフェース

OpenTP1 for .NET FrameworkのUAPから，サービス要求をする場合のRPCインタフェースには次の3種類があります。

.NETインタフェース定義を使用したRPC

サービス定義（カスタムレコード）を使用したRPC

バイナリデータ（インデクスドレコード）を使用したRPC

＜この項の構成＞

(1)　RPCインタフェースの種類

(1)　RPCインタフェースの種類

RPCインタフェースの種類を次に示します。

(a)　.NETインタフェース定義を使用したRPC

.NETインタフェース定義から運用コマンドでサーバスタブ，およびクライアントスタブを生成して使用します。これによって，.NET Frameworkのクラスのメソッド呼び出しと同様の形式でRPCが行えます。また，.NET Frameworkのデータ型をパラメタや戻り値として送受信できます。

OpenTP1 for .NET Frameworkを使用したクライアント/サーバシステムの場合に適しています。

.NETインタフェース定義を使用したRPCの概要を次の図に示します。

図1-6　.NETインタフェース定義を使用したRPCの概要

注※1

クライアントUAPには次のUAPが該当します。

SPP.NET

SUP.NET

CUP.NET（TP1/Connector for .NET Frameworkを使用するアプリケーションを含みます）

注※2

サービス定義から生成されるクライアントスタブとは異なるものです。

注※3

スタブがRPCデータの文字コードの自動変換，およびエンディアンの自動識別をします。

(b)　サービス定義（カスタムレコード）を使用したRPC

SPP.NETまたはSPPの入出力データ形式とサービス名をサービス定義として定義します。

このサービス定義から運用コマンドでカスタムレコードとクライアントスタブを生成して使用します。

クライアント側では.NET Frameworkのデータ型で入出力データの設定や参照ができます。また，サーバとのプラットフォームやプログラム言語，文字コードなどの違いをユーザが意識することなくアプリケーションを作成できます（運用コマンドでスタブを生成する際に，文字コードやエンディアンなどを指定します）。

OpenTP1 for .NET Framework環境のクライアントから，SPPにアクセスする場合などに適しています。

サービス定義（カスタムレコード）を使用したRPCの概要を次の図に示します。

図1-7　サービス定義（カスタムレコード）を使用したRPCの概要

注※1

クライアントUAPには次のUAPが該当します。

SPP.NET

SUP.NET

CUP.NET（TP1/Connector for .NET Frameworkを使用するアプリケーションを含みます）

注※2

.NETインタフェース定義から生成されるクライアントスタブとは異なるものです。

注※3

スタブがRPCデータの文字コードの自動変換，およびエンディアンの自動識別をします。

(c)　バイナリデータ（インデクスドレコード）を使用したRPC　

バイナリデータ（バイト配列型）の集合を入力用レコード，および出力用レコードに設定して使用します。

TP1/Connector for .NET Frameworkで，バイナリデータを使用したRPCを実行する場合は，インデクスドレコードを使用します。

バイナリデータ（インデクスドレコード）を使用したRPCの場合，クライアントとサーバのプラットフォームやプログラム言語，文字コードなどの違いをユーザが意識する必要があります。

OpenTP1 for .NET Framework環境以外のクライアントからSPP.NETにアクセスする場合などに適しています。

バイナリデータ（インデクスドレコード）を使用したRPCの概要を次の図に示します。

図1-8　バイナリデータ（インデクスドレコード）を使用したRPCの概要

注※

クライアントUAPには次のUAPが該当します。

SPP.NET

SPP

SUP.NET

SUP

CUP.NET（TP1/Connector for .NET Frameworkを使用するアプリケーションを含みます）

CUP

1.3.3　アプリケーション開発の流れ

新規にクライアント/サーバシステムを開発する場合，およびクライアントだけを開発して既存のサービスを利用する場合のアプリケーション開発の流れを，RPCインタフェースごとに図1-9，および図1-10に示します。

図1-9　アプリケーション開発の流れ（RPCインタフェースに.NETインタフェース定義，またはサービス定義を使用する場合）

図1-10　アプリケーション開発の流れ（RPCインタフェースにバイナリデータを使用する場合）

2.　機能

この章では，TP1/Extension for .NET Framework（Extension .NET）の機能について説明します。なお，必要に応じて次のマニュアルも参照してください。

・「OpenTP1　解説」

・「TP1/LiNK　使用の手引」

＜この章の構成＞

2.1　Extension .NETで使用できるUAP

2.2　アプリケーションプログラミングインタフェース（API）の種類

2.3　リモートプロシジャコール（RPC）

2.4　トランザクション制御機能

2.5　メッセージ送受信機能

2.6　ノード間負荷バランス機能

2.7　リアルタイム統計情報の取得

2.8　資源の排他制御【TP1/Server Base】

2.9　ユーザジャーナルの取得【TP1/Server Base】

2.10　TAMファイルサービス（TP1/FS/Table Access）【TP1/Server Base】

2.11　環境設定

2.1　Extension .NETで使用できるUAP

Extension .NETを利用すると，TP1/Server上で.NET Frameworkを使用したUAPの開発，および運用ができます。

Extension .NETで使用できるUAPは，SPP.NET，およびSUP.NETです。これらのUAPは，次に示すプログラム言語で記述できます。

C#

J#

Visual Basic

COBOL言語※

注※

使用できる機能には制限があります。詳細については，「2.1.3　COBOL2002 for .NET Frameworkを使用したUAPの開発および実行」を参照してください。

＜この節の構成＞

2.1.1　SPP.NETの概要

2.1.2　SUP.NETの概要

2.1.3　COBOL2002 for .NET Frameworkを使用したUAPの開発および実行

2.1.1　SPP.NETの概要

SPP.NETは，DLL形式のアセンブリとして実装します。SPP.NETは，Extension .NETが提供するSPP.NET実行コンテナによって実行されます。このコンテナはSPPと同様にユーザサーバとして実行できます。また，SPPなどのユーザサーバと同様にシングルスレッドで動作します。SPP.NETの実装クラスはこのユーザサーバのプロセス起動時にインスタンス化されます。一つのユーザサーバでは一つのインスタンスが生成されます。SPP.NETでは，Mainメソッドの実装や，RpcクラスのOpenメソッドのなどの手続きは不要です。

図2-1　SPP.NETの実行

注※

ユーザサーバとして実行されます。

SPP.NETの実装方法の詳細については，「4.　UAPの作成と実行」を参照してください。

2.1.2　SUP.NETの概要

SUP.NETはEXE形式のアセンブリとして実装し，SUPと同様にユーザサーバとして直接実行できます。SUP.NETではMainメソッドを実行し，RpcクラスのOpenメソッド，AdmクラスのCompleteメソッド，RpcクラスのCloseメソッドなどを呼び出す必要があります。

図2-2　SUP.NETの実行

注※

ユーザサーバとして実行されます。

SUP.NETの実装方法の詳細については，「4.　UAPの作成と実行」を参照してください。

2.1.3　COBOL2002 for .NET Frameworkを使用したUAPの開発および実行

COBOL2002 for .NET Frameworkを使用することで，COBOL言語でSPP.NETおよびSUP.NETの開発・実行ができます。COBOL2002 for .NET Frameworkを使用すると，次のような利点があります。

COBOL言語で開発された既存のSPPおよびSUPと連携できる

COBOL言語で開発された既存のSPPおよびSUPを容易にSPP.NETおよびSUP.NETに移行できる

COBOL言語で開発された既存のCOBOLプログラム資産を部品として再利用できる

UAPの開発手順の詳細については，「4.8　COBOL言語でのUAPの作成方法」を参照してください。COBOL言語の仕様については，マニュアル「COBOL2002 for .NET Framework　ユーザーズガイド」を参照してください。また，COBOL言語でSPP.NETおよびSUP.NETを開発する場合のOpenTP1のAPIについては，マニュアル「OpenTP1　プログラム作成リファレンス　COBOL言語編」を参照してください。

なお，COBOL言語で開発したSPP.NETおよびSUP.NETの実行手順は，ほかの言語で開発した場合と同じです。

＜この項の構成＞

(1)　Extension .NETが提供するP/Invoke指示ファイルのサンプル

(2)　注意事項

(1)　Extension .NETが提供するP/Invoke指示ファイルのサンプル

Extension .NETは，COBOL2002 for .NET FrameworkでUAP開発時に必要となる，P/Invoke指示ファイル（.piv）のサンプルを提供しています。TP1/Server BaseまたはTP1/LiNKと併用する場合のサンプルは，それぞれ次のディレクトリに格納されています。

【TP1/Server Base】

〈インストールディレクトリ〉¥examples¥ExtNET¥COBOL.NET¥PIV¥TP1Base.piv

【TP1/LiNK】

〈インストールディレクトリ〉¥sample¥ExtNET¥COBOL.NET¥PIV¥TP1LiNK.piv

P/Invoke指示ファイルの使用方法については，「4.8.3　TP1/ServerのCOBOL言語のサービスルーチンの利用」を参照してください。

(2)　注意事項

(a)　UAPの開発時の注意事項

COBOL2002 for .NET Frameworkを使用する場合，次の機能は利用できません。

.NETインタフェース定義を使用したSPP.NETの開発

.NETインタフェース定義を使用したRPC

サービス定義（カスタムレコード）を使用したRPC

DBMSとのトランザクション連携

Extension .NETが提供するクラスライブラリ※

開発支援機能

注※

Extension .NETが提供するクラスライブラリを使用できない代わりに，TP1/Serverが提供するCOBOL言語のサービスルーチンを使用できます。COBOL言語のサービスルーチンについては，マニュアル「OpenTP1　プログラム作成リファレンス　COBOL言語編」を参照してください。

(b)　UAPの実行時の注意事項

COBOL2002 for .NET Frameworkのランタイムが必要とする環境変数を設定する必要があります。設定方法を次に示します。

【TP1/Server Base】

ユーザサービス定義などのシステム定義で環境変数を設定します。

詳細については，「3.　システム定義【TP1/Server Base】」を参照してください。

【TP1/LiNK】

TP1/LiNKのダイアログボックスで環境変数を設定します。

詳細については，「5.2　ユーザサーバの環境設定（SPP.NET）」を参照してください。

PROPAGATE翻訳指令にOFFを指定したSPP.NETで，CobolException.CobolRuntimeError（実行時エラー）が発生した場合，ユーザサーバが異常終了します。
CobolException.CobolRuntimeErrorについては，マニュアル「COBOL2002 for .NET Framework　ユーザーズガイド」を参照してください。

環境変数NETCBL_SYSOUTおよびNETCBL_SYSERRを設定して，COBOL2002 for .NET Frameworkのランタイムが出力する標準出力および標準エラー出力を任意のファイルにリダイレクトさせてください。この設定を省略すると，標準出力および標準エラー出力がファイルにリダイレクトされないため，実行時エラーの内容がわかりません。
TP1/Server Baseを使用する場合は，TP1/Server Baseの標準出力リダイレクト機能を利用して，標準出力および標準エラー出力をファイルにリダイレクトできます。標準出力リダイレクト機能については，TP1/Server Baseの「Windows版ご使用上の注意事項」を参照してください。TP1/LiNKには，標準出力および標準エラー出力をリダイレクトするための機能がありません。

2.2　アプリケーションプログラミングインタフェース（API）の種類

SPP.NETおよびSUP.NET上で利用できるアプリケーションプログラミングインタフェース（API）を次に示します。

システム運用の管理

資源の排他制御※1

ユーザジャーナルの取得※1

メッセージログの出力

メッセージ送受信※2

性能検証用トレース※3

リモートAPI機能

リモートプロシジャコール

リアルタイム統計情報の取得

TAMファイルサービス※1，※4

トランザクション制御※5

注※1

TP1/Server Baseの場合だけ使用できます。TP1/LiNKの場合は使用できません。

注※2

SUP.NETからは使用できません。

TP1/Server Baseの場合はTP1/Message Control，TP1/NET/Library，およびTP1/NET/TCP/IPが必要です。TP1/LiNKの場合はTP1/Messagingが必要です。

注※3

TP1/Extension 1が必要です。

注※4

TP1/FS/Table Accessが必要です。

注※5

OpenTP1独自のインタフェースの関数だけ使用できます。

各APIの機能については，マニュアル「OpenTP1　プログラム作成の手引」を参照してください。

2.3　リモートプロシジャコール（RPC）

SPP.NETまたはSUP.NETは，ほかのUAPとリモートプロシジャコール（RPC）を使用して通信できます。

RPCとは，UAPプロセスからほかのUAPプロセスにサービスを要求し，サービスを要求されたUAPプロセスが要求元のUAPに処理結果を返す通信です。

サービスを要求するUAPとサービスを提供するUAPは，クライアントとサーバの関係になります。サービスを要求する側のUAPをクライアントUAP，サービスを提供する側のUAPをサーバUAPといいます。

＜この節の構成＞

2.3.1　RPCの形態

2.3.2　RPCの連鎖（連鎖RPC）

2.3.3　RPCの形態によるRPCインタフェースの使用可否

2.3.4　RPCの種類

2.3.5　常設コネクション

2.3.6　RPC送受信メッセージの最大長拡張機能

2.3.1　RPCの形態

Extension .NETのRPCには，次に示す3種類の形態があります。

同期応答型RPC

非同期応答型RPC

非応答型RPC

RPCの形態別の処理概要を次の図に示します。

図2-3　RPCの形態別の処理概要

＜この項の構成＞

(1)　同期応答型RPC

(2)　非同期応答型RPC

(3)　非応答型RPC

(1)　同期応答型RPC

クライアントUAPからサーバUAPに問い合わせメッセージを送信し，問い合わせた応答メッセージを受け取る形態です。クライアント側ではサーバからの応答を受け取るまでメソッドがリターンしません。同一のサービスを複数回呼び出した場合，サーバプロセスはそのつどスケジュールされます。

(2)　非同期応答型RPC

クライアントUAPからサーバUAPに問い合わせメッセージを送信し，問い合わせた応答メッセージを待たないで処理を続ける形態です。

(3)　非応答型RPC

クライアントUAPからサーバUAPにメッセージを送信し，応答は受け取らない形態です。クライアント側ではサーバへのメッセージの送信が完了するとメソッドがリターンします。ただし，何らかの通信障害や呼び出したサービスが誤っていてもエラーを受け取ることができないため，注意が必要です。

2.3.2　RPCの連鎖（連鎖RPC）

サーバUAPの実行プロセスは，マルチサーバ（同じサーバUAPを複数のプロセスで同時に起動する機能）の場合，サービスが要求されるたびに起動されます。一つのクライアントUAPから同じサービスグループを2回以上呼び出したとき，そのサービスグループのサーバUAPが以前と同じプロセスで実行されるとは限りません。

ただし，同期応答型RPCで，かつ同じサービスグループに属するサービスを2回以上要求する場合に限り，そのサービスを以前と同じプロセスで実行させることができます。これを連鎖RPCといいます。

連鎖RPCでサービスを要求すると，マルチサーバのサーバUAPでも前回のRPCと同じプロセスで実行されるため，トランザクション処理に必要なプロセスを最小限にできます。UAPのプロセスはサービスグループごとに確保されるため，同じサービスグループに属していれば，異なるサービスに対しても一つのプロセスでサービスを実行できます。

なお，トランザクションとして連鎖RPCを使用する場合は，一つのグローバルトランザクションで動作します。

2.3.3　RPCの形態によるRPCインタフェースの使用可否

SPP.NETまたはSUP.NETからサービス要求をする場合の，RPCの形態によるRPCインタフェースの使用可否を次の表に示します。

なお，RPCの形態については「2.3.1　RPCの形態」および「2.3.2　RPCの連鎖（連鎖RPC）」を参照してください。RPCインタフェースの詳細については「1.3.2　RPCインタフェース」を参照してください。

表2-1　RPCの形態によるRPCインタフェースの使用可否

RPCの形態 | RPCインタフェース
.NETインタフェース定義を使用したRPC | サービス定義（カスタムレコード）を使用したRPC | バイナリデータを使用したRPC
同期応答型RPC | ○ | ○ | ○
非同期応答型RPC | × | × | ○
非応答型RPC | ○※ | ○ | ○
連鎖RPC | ○ | ○ | ○

（凡例）

○：使用できます。　×：使用できません。

注※

呼び出すメソッドの戻り値のデータ型がSystem.Voidで，かつ引数が値渡しだけの場合に使用できます。それ以外の場合はRPC要求時に例外が発生します。

2.3.4　RPCの種類

Extension .NETでは，次のRPCを使用できます。

リモートAPI機能を使用したRPC

ネームサービスを使用したRPC

スケジューラダイレクト機能を使用したRPC

通信先を指定したRPC

＜この項の構成＞

(1)　リモートAPI機能を使用したRPC

(2)　ネームサービスを使用したRPC

(3)　スケジューラダイレクト機能を使用したRPC

(4)　通信先を指定したRPC

(1)　リモートAPI機能を使用したRPC

リモートAPI機能とは，クライアント側のノードにあるUAPが発行したAPIを，OpenTP1がサーバ側に転送してサーバ側のプロセスで代理実行する機能です。

リモートAPI機能を要求するクライアント側のノードにあるUAPをrapクライアントといいます。rapクライアントが発行したAPIを，OpenTP1のrapリスナーが受け付け，rapサーバがサーバ側のノードで実行します。rapリスナー，rapサーバはOpenTP1のユーザサービスとして動作します。

Extension .NETでは，リモートAPI機能を使用したRPCを使用できます。

なお，リモートAPI機能を使用する場合は，rapリスナー，rapサーバと常設コネクションを確立する必要があります。常設コネクションについては，「2.3.5　常設コネクション」を参照してください。

(2)　ネームサービスを使用したRPC

OpenTP1のネームサービスを使用したRPCを使用できます。

(3)　スケジューラダイレクト機能を使用したRPC

スケジューラダイレクト機能とは，RPCの実行時にOpenTP1のネームサービスを使用しないで，直接スケジューラサービスに問い合わせる機能です。

Extension .NETでは，スケジューラダイレクト機能を使用したRPCを使用できます。

(4)　通信先を指定したRPC

サービス要求を実行するサーバ（通信先のOpenTP1ノード）を明示的に指定してRPCを使用できます。

2.3.5　常設コネクション

OpenTP1は，リモートAPIを要求したUAP（rapクライアント）とrapサーバとの間に，論理的な通信路を設定します。このような論理的な通信路を常設コネクションといいます。

これによって，rapクライアントとTP1/Serverのrapサーバの間のコネクションを確立したままでメッセージを送受信できます。

2.3.6　RPC送受信メッセージの最大長拡張機能

RPC送受信メッセージの最大長拡張機能を使用すると，送受信できるメッセージの最大長を1～8メガバイトで指定できます。ただし，RPC送受信メッセージの最大長拡張機能を使用しない場合または1メガバイトを指定した場合，RPC送受信メッセージの最大長は，TP1ServerLimitsクラスのDCRPC_MAX_MESSAGE_SIZEで定義した値になります。

＜この項の構成＞

(1)　RPC送受信メッセージの最大長拡張機能の使用方法

(2)　注意事項

(1)　RPC送受信メッセージの最大長拡張機能の使用方法

RPC送受信メッセージの最大長拡張機能を使用する場合，次の指定をしてください。

(a)　TP1/Server Baseの場合

SPP.NETがサーバとして動作するとき，SPP.NETがクライアントとして動作するとき，またはSUP.NETのときで指定方法が異なります。

SPP.NETがサーバとして動作するとき

次の二つの指定をします。

指定1

TP1/Server Baseのシステム共通定義のrpc_max_message_sizeオペランドで，送受信できるメッセージの最大長を指定します。

rpc_max_message_sizeオペランドについては，マニュアル「OpenTP1　システム定義」を参照してください。

指定2

ユーザサービスデフォルト定義の次のオペランドで，送受信できるメッセージの最大長を指定します。
・ njs_input_max_message_sizeオペランド
・ njs_output_max_message_sizeオペランド
ユーザサービスデフォルト定義については，3章の「ユーザサービスデフォルト定義」を参照してください。

ユーザサービス定義の次のオペランドで，送受信できるメッセージの最大長を指定します。
・ njs_input_max_message_sizeオペランド
・ njs_output_max_message_sizeオペランド
ユーザサービス定義については，3章の「ユーザサービス定義」を参照してください。

SPP.NETがクライアントとして動作するとき，またはSUP.NETのとき

.NETインタフェース定義を使用するときは指定1および指定2を，.NETインタフェース定義を使用しないときは指定1だけを実施します。

指定1

TP1/Server Baseのシステム共通定義のrpc_max_message_sizeオペランドで，送受信できるメッセージの最大長を指定します。

rpc_max_message_sizeオペランドについては，マニュアル「OpenTP1　システム定義」を参照してください。

指定2

if2cstubコマンドの-mオプションで，送受信できるメッセージの最大長を指定します。

if2cstubコマンドについては，6章の「if2cstub（クライアントスタブ生成コマンド（.NETインタフェース定義用））」を参照してください。

(b)　TP1/LiNKの場合

SPP.NETがサーバとして動作するとき，SPP.NETがクライアントとして動作するとき，またはSUP.NETのときで指定方法が異なります。

SPP.NETがサーバとして動作するとき

次の二つの指定をします。

指定1

［システム環境設定］ウィンドウの［詳細設定(Q)...］ボタンをクリックします。
［RPC詳細設定］ダイアログが表示されます。
［システム環境設定］ウィンドウの表示方法については，マニュアル「TP1/LiNK　使用の手引」を参照してください。

［その他］タブを選択します。

［RPC送受信電文の最大長(M)］で，送受信できるメッセージの最大長を指定します。

指定2

［SPP.NET環境設定］ダイアログの［詳細設定(T)...］ボタンをクリックします。
［SPP.NET詳細設定］ダイアログが表示されます。
［SPP.NET環境設定］ダイアログの表示方法については，「5.2　ユーザサーバの環境設定（SPP.NET）」を参照してください。

［RPC］タブを選択します

［RPC要求電文の最大長(R)］および「RPC応答電文の最大長(P)」で，送受信できるメッセージの最大長を指定します。

SPP.NETがクライアントとして動作するとき，またはSUP.NETのとき

.NETインタフェース定義を使用するときは指定1および指定2を，.NETインタフェース定義を使用しないときは指定1だけを実施します。

指定1

［システム環境設定］ウィンドウの［詳細設定(Q)...］ボタンをクリックします。
［RPC詳細設定］ダイアログが表示されます。
［システム環境設定］ウィンドウの表示方法については，マニュアル「TP1/LiNK　使用の手引」を参照してください。

［その他］タブを選択します。

［RPC送受信電文の最大長(M)］で，送受信できるメッセージの最大長を指定します。

指定2

if2cstubコマンドの-mオプションで，送受信できるメッセージの最大長を指定します。

if2cstubコマンドについては，6章の「if2cstub（クライアントスタブ生成コマンド（.NETインタフェース定義用））」を参照してください。

(2)　注意事項

RPC送受信メッセージの最大長拡張機能を使用する場合の注意事項を次に示します。

RPCを使用したサービス要求時にRPC送受信メッセージが最大長を超えた場合，例外（エラーコードTP1Error.DCRPCER_MESSAGE_TOO_BIGまたはTP1Error.DCRPCER_REPLY_TOO_BIG）が返ります。

次の場合，動作は保証できません。

通信先を指定した遠隔サービス（RpcクラスのCallToメソッド）のスケジューラポート指定機能を使用した場合

ネームサービスを使わない通信（ユーザサービスネットワーク定義のdcsvdefコマンド）の場合
dcsvdefコマンドについては，マニュアル「OpenTP1　システム定義」を参照してください。

TP1/Server Baseのシステム共通定義のrpc_max_message_sizeオペランドを指定する場合の前提条件および注意事項については，マニュアル「OpenTP1　システム定義」を参照してください。

2.4　トランザクション制御機能

Extension .NETからOpenTP1のトランザクションを制御することができます。

＜この節の構成＞

2.4.1　トランザクション制御機能の概要

2.4.2　トランザクションの開始と同期点取得

2.4.3　同期点取得

2.4.4　DBMSとの連携

2.4.5　トランザクションシーケンス

2.4.6　DBMSとのトランザクション連携の仕組み

2.4.7　トランザクション連携の利用手順

2.4.1　トランザクション制御機能の概要

トランザクション制御機能を使用すると，アプリケーションでトランザクションを管理できます。そのため，処理が失敗した場合でも，データが失われたり，不整合が発生したりすることを避けられます。

＜この項の構成＞

(1)　トランザクションのコミットとロールバック

(2)　グローバルトランザクション

(3)　連鎖モードと非連鎖モード

(4)　RPCの形態と同期点の関係

(1)　トランザクションのコミットとロールバック

トランザクションとは，関連する複数の処理を一つのまとまった処理として扱うための論理的な単位です。一つのトランザクション内で実行した処理は，すべてが有効になるか，すべてが無効になるかのどちらかです。

トランザクションを有効にすることを，トランザクションのコミットといいます。トランザクションがコミットして初めてトランザクション処理の結果が有効になります。

トランザクションをコミットするかどうか最終的に決定するトランザクション処理の区切りを，同期点といいます。

トランザクションを無効にして，処理対象としていた資源をトランザクション開始直前の状態に戻すことを，トランザクションのロールバックといいます。トランザクションをコミットできなかった場合や，処理の不整合を検出した場合などは，これまでの処理をロールバックで取り消して，データの整合性を保ちます。

(2)　グローバルトランザクション

UAPでRPCを実行すると，トランザクションは複数のUAPプロセスにわたります。

複数のプロセスで構成されるトランザクションを，グローバルトランザクションといいます。グローバルトランザクションを構成する各プロセスを，トランザクションブランチといいます。特に，トランザクションの開始を宣言したプロセスをルートトランザクションブランチといいます。

(3)　連鎖モードと非連鎖モード

トランザクション処理の同期点取得には，一つのトランザクションの終了後，同期点を取得して次のトランザクションを続けて起動する連鎖モードのコミットと，トランザクションの終了で同期点を取得したあと，新たなトランザクションを起動しない非連鎖モードのコミットがあります。

また同様に，連鎖モードのロールバックと，非連鎖モードのロールバックがあります。連鎖モードのロールバックでは，ロールバック処理後もUAPプロセスはグローバルトランザクションの範囲内にありますが，非連鎖モードのロールバックでは，UAPプロセスはグローバルトランザクションの範囲外となります。

(4)　RPCの形態と同期点の関係

RPCの形態と同期点の関係を次に示します。

(a)　同期応答型RPCと同期点の関係

同期応答型RPCで要求を行うトランザクション処理の場合，クライアントUAPに処理結果が戻って，同期点処理を終えた時点で，トランザクションの終了となります。

(b)　非応答型RPCと同期点の関係

非応答型RPCで要求を行うトランザクション処理の場合，クライアントUAPと，サーバUAPの処理終了で同期を取ります。

2.4.2　トランザクションの開始と同期点取得

SPP.NETまたはSUP.NETからTrnクラスのBeginメソッドを呼び出して，トランザクションを開始します。

Beginメソッドを呼び出してから，同期点取得（コミット）までが，グローバルトランザクションの範囲となります。Beginメソッドを呼び出したあと，そのグローバルトランザクションの中で新たなBeginメソッドは呼び出せません。

なお，グローバルトランザクション中にRpcクラスのCallメソッドで呼び出したSPP.NETおよびSPPのサービスは，ユーザサービス定義の設定によって，自動的にグローバルトランザクションの範囲にできます。

2.4.3　同期点取得

＜この項の構成＞

(1)　コミット

(2)　ロールバック

(1)　コミット

トランザクションが正常終了したときの同期点取得（コミット）は，SPP.NETまたはSUP.NETからTrnクラスのCommitメソッドを呼び出して行います。

グローバルトランザクションは，すべてのトランザクションブランチが正常に終了したことで正常終了となります。

(a)　連鎖，非連鎖モードでのコミット

トランザクション処理の同期点取得には，次の2種類があります。

連鎖モードのコミット
連鎖モードのコミットは，TrnクラスのCommitChainedメソッドを呼び出して要求します。

非連鎖モードのコミット
非連鎖モードのコミットは，TrnクラスのCommitメソッドを呼び出して要求します。

(b)　コミット要求メソッドを呼び出さない場合の処理

次の場合，トランザクションはロールバックされます。

TrnクラスのCommitメソッドを呼び出さないでSPP.NETまたはSUP.NETが終了したとき

TrnクラスのCommitメソッドを呼び出す前にSPP.NETまたはSUP.NETが異常終了したとき

(2)　ロールバック

(a)　TP1/Serverの処理でのエラーの場合

トランザクションでエラーが発生すると，TrnクラスのCommitメソッドで例外が発生します。そのトランザクションは部分回復対象としてロールバックされます。グローバルトランザクション内のどれか一つのトランザクションブランチでエラーが発生した場合でも，グローバルトランザクション全体がロールバックの対象となります。

このときTP1/Serverは，トランザクションブランチをロールバック対象とみなして，部分回復処理をします。

(b)　ロールバック要求メソッドを呼び出す場合

トランザクションをSPP.NETまたはSUP.NETの判断でロールバックしたいときは，SPP.NETまたはSUP.NETからロールバック要求のメソッドを呼び出します。

トランザクション処理のロールバックには，次の2種類があります。

連鎖モードのロールバック
連鎖モードのロールバックは，TrnクラスのRollbackChainedメソッドを呼び出して要求します。RollbackChainedメソッドを呼び出してロールバックすると，このメソッドを呼び出したSPP.NETおよびSUP.NETのプロセスは，ロールバック処理後も，グローバルトランザクションの範囲内にあります。

非連鎖モードのロールバック
非連鎖モードのロールバックは，TrnクラスのRollbackメソッドを呼び出して要求します。Rollbackメソッドを呼び出してロールバックすると，このメソッドを呼び出したSPP.NETおよびSUP.NETのプロセスは，ロールバック処理後，グローバルトランザクションの範囲外となります。

2.4.4　DBMSとの連携

DABroker for .NET Frameworkは，.NET Frameworkのデータベースアクセス技術であるADO.NETに準拠した.NET Frameworkデータプロバイダです。DABroker for .NET Frameworkを使用することで，X/Openに準拠したXAインタフェースによって，DBMSとのトランザクション連携ができます。

ADO.NETの.NET Frameworkデータプロバイダ，またはDBMSが提供する.NET Framework用のデータプロバイダを使用する場合は，OpenTP1のグローバルトランザクションに参加できません。この場合，DBMSとのローカルトランザクションだけが使用できます。そのため，グローバルトランザクションの開始および終了（コミット，ロールバック）はできますが，ローカルトランザクションとは別のトランザクションとして動作します。なお，OpenTP1 for .NET FrameworkのUAP以外のサーバアプリケーション（SPPなど）を呼び出す場合は，グローバルトランザクションと連携してリソースマネジャの更新処理を実行できます。

DBMSとの連携を次の図に示します。

図2-4　DBMSとの連携

連携できるDBMSとそのバージョンについては，「Readmeファイル」，およびマニュアル「DABroker for .NET Framework」を参照してください。

2.4.5　トランザクションシーケンス

OpenTP1 for .NET FrameworkとDBMSとの連携で使用するメソッドは，次に示す順番で発行します。

DBMSとのコネクションの生成，オープン

データベースアクセス処理

コネクションの解放

XAインタフェースによるトランザクション連携は，Extension .NETが提供するRpcクラスおよびTrnクラスと，DABroker for .NET Frameworkデータプロバイダのクラスを組み合わせることで実現します。このときのメソッドの正しい発行順序を，トランザクションシーケンスと呼びます。UAPを作成するユーザは，トランザクションシーケンスを意識する必要があります。トランザクションシーケンスが不正な場合は，次のような障害が発生する可能性があるため，注意してください。

DABroker for .NET Frameworkが提供するクラスの呼び出しに失敗する

データベースが正しく更新できない

＜この項の構成＞

(1)　SPP.NETのトランザクションシーケンス

(2)　SUP.NETのトランザクションシーケンス

(1)　SPP.NETのトランザクションシーケンス

SPP.NETには，次の3種類のメソッドが実装されています。

InitializeSPPメソッド

FinalizeSPPメソッド

サービスメソッド

これらのメソッドの中で，OpenTP1のグローバルトランザクションに参加できるメソッドはサービスメソッドだけです。そのため，XAインタフェースによるトランザクション連携をするDBMSに対してのデータベースアクセス処理は，サービスメソッド内で実行してください。InitializeSPPメソッドおよびFinalizeSPPメソッド内では，XAインタフェースによるトランザクション連携をするDBMSに対してのデータベースアクセス処理はできません。また，コネクションの生成およびオープンは，グローバルトランザクションの状態に関係なく実行できます。

なお，XAインタフェースによるトランザクション連携をしないDBMSに対するデータベースアクセス処理は，3種類のメソッド中のどのメソッドでも実行できます。

SPP.NETのトランザクション連携種別を次の図に示します。

図2-5　SPP.NETのトランザクション連携種別

(a)　InitializeSPPメソッド内でDBMSと接続する場合

InitializeSPPメソッド内でDBMSと接続する場合のメソッドの発行位置を，次の図に示します。

図2-6　InitializeSPPメソッド内でDBMSと接続する場合のメソッドの発行位置

InitializeSPPメソッド内でコネクションを生成，オープンします。

サービスメソッド内でデータベースアクセス処理をします。

FinalizeSPPメソッド内でコネクションを解放します。

InitializeSPPメソッド内で作成したコネクションは，FinalizeSPPメソッドまで使用できます。

DABroker for .NET Frameworkを使用してDBMSとトランザクション連携をする場合は，この方式での接続を推奨します。

(b)　サービスメソッド内でDBMSと接続する場合

サービスメソッド内でDBMSと接続する場合は，次の図に示すとおり，コネクションの生成およびオープンだけでなく，データベースアクセス処理，およびコネクションの解放もサービスメソッド内で実行します。

図2-7　サービスメソッド内でDBMSと接続する場合のメソッドの発行位置

この場合，サービスメソッドを実行する場合にだけDBMSと接続するので，リソースの消費を最小限に抑えられます。ただし，コネクションの生成，オープン，および解放をサービスメソッドの呼び出しごとに実行するため，処理に伴うオーバヘッドを考慮する必要があります。

(2)　SUP.NETのトランザクションシーケンス

SUP.NETは，次に示す流れに沿って処理をします。

RPCのオープン

SUP.NETの開始処理の完了報告

トランザクションの開始

サービスの実行

トランザクションの終了

RPCのクローズ

XAインタフェースによるトランザクション連携をするDBMSに対してのデータベースアクセス処理は，4.の部分でだけ実行できます。この場合，コネクションの生成およびオープンも，4.の部分で実行します。

XAインタフェースによるトランザクション連携をしないDBMSに対してのデータベースアクセス処理は，SUP.NETのメイン関数内であればどこでも実行できます。コネクションの生成およびオープンも同様です。

SUP.NETのトランザクション連携種別を次の図に示します。

図2-8　SUP.NETのトランザクション連携種別

RPCのオープン

SUP.NETの開始処理の完了報告

トランザクションの開始

サービスの実行

トランザクションの終了

RPCのクローズ

DBMSとXAインタフェースによるトランザクション連携をする場合，SUP.NETのトランザクションシーケンスは，次の図のとおりになります。

図2-9　SUP.NETのトランザクションシーケンス

2.4.6　DBMSとのトランザクション連携の仕組み

DABroker for .NET Frameworkを使用してDBMSとトランザクション連携をする場合，OpenTP1はDBMSに対するトランザクションの開始，終了などの通知に，XAインタフェースを使用します。

＜この項の構成＞

(1)　SPP.NETとのトランザクション連携

(2)　SUP.NETとのトランザクション連携

(1)　SPP.NETとのトランザクション連携

SPP.NETとトランザクション連携をするときに通知されるXAインタフェースの発行例を次の図に示します。

図2-10　SPP.NETとトランザクション連携をするときに通知されるXAインタフェースの発行例

SPP.NET実行コンテナから発行されたdc_rpc_open関数の延長で，トランザクション制御用のライブラリに指定したDBMSにxa_open関数を発行します。

Trn.Beginメソッドを発行すると，DBMSにxa_start関数を発行します。

Trn.Commitメソッドを発行すると，DBMSにxa_end関数，xa_prepare関数，xa_commit関数の順で関数を発行します。なお，この例ではトランザクションの最適化は考慮しません。

SPP.NET実行コンテナから発行されたdc_rpc_close関数の延長で，トランザクション制御用のライブラリに指定したDBMSにxa_close関数を発行します。

(2)　SUP.NETとのトランザクション連携

SUP.NETとトランザクション連携をするときに通知されるXAインタフェースの発行例を次の図に示します。

図2-11　SUP.NETとトランザクション連携をするときに通知されるXAインタフェースの発行例

Rpc.Openメソッドを発行すると，トランザクション制御用のライブラリに指定したDBMSにxa_open関数を発行します。

Trn.Beginメソッドを発行すると，DBMSにxa_start関数を発行します。

Trn.Commitメソッドを発行すると，DBMSにxa_end関数，xa_prepare関数，xa_commit関数の順で関数を発行します。なお，この例ではトランザクションの最適化は考慮しません。

Rpc.Closeメソッドを発行すると，トランザクション制御用のライブラリに指定したDBMSにxa_close関数を発行します。

2.4.7　トランザクション連携の利用手順

OpenTP1のアプリケーションでトランザクション連携をするときの手順を次に示します。利用するリソースマネジャがOpenTP1のリソースマネジャだけの場合と，DBMSを利用する場合とで手順が異なります。なお，DBMSを利用する場合は，DABrokerおよびDABroker for .NET Frameworkが必要です。

＜この項の構成＞

(1)　OpenTP1のリソースマネジャだけを利用する場合

(2)　DBMSを利用する場合

(1)　OpenTP1のリソースマネジャだけを利用する場合

(a)　TP1/Server Baseのとき

TP1/Server Baseにリソースマネジャを登録します。
詳細については，マニュアル「OpenTP1　プログラム作成の手引」を参照してください。

njsmkdllコマンドを実行して，トランザクション制御用ライブラリを作成します。
njsmkdllコマンドについては，TP1/Server Baseの「Windows版ご使用上の注意事項」を参照してください。

トランザクション連携をするSPP.NETまたはSUP.NETの環境設定をします。
ユーザサービス定義でnjs_xa_connectオペランドおよびnjs_xa_dllnameオペランドを指定します。ユーザサービス定義の定義内容については，3章の「ユーザサービス定義」を参照してください。

TP1/Server Baseを起動します。

ユーザサーバを起動します。

(b)　TP1/LiNKのとき

TP1/LiNKにリソースマネジャを登録します。
TP1/LiNKが提供する［リソースマネジャ］ダイアログボックスを使用して登録します。［リソースマネジャ］ダイアログボックスについては，「5.4　リソースマネジャの接続」を参照してください。

トランザクション連携をするSPP.NETまたはSUP.NETの環境設定をします。
［SPP.NET環境設定］ダイアログボックスまたは［SUP環境設定］ダイアログボックスからXA接続の設定をします。XA接続の設定については，「5.2.4　XA接続の設定」を参照してください。

TP1/LiNKを起動します。

ユーザサーバを起動します。

(2)　DBMSを利用する場合

(a)　TP1/Server Baseのとき

TP1/Server BaseにDBMSを登録します。
詳細については，マニュアル「OpenTP1　プログラム作成の手引」を参照してください。

njsmkdllコマンドを実行して，トランザクション制御用ライブラリを作成します。
njsmkdllコマンドについては，TP1/Server Baseの「Windows版ご使用上の注意事項」を参照してください。

DABrokerの環境設定，および接続先データベースの定義を設定します。
設定方法については，マニュアル「DABroker」を参照してください。

トランザクション連携をするSPP.NETまたはSUP.NETの環境設定をします。
ユーザサービス定義でnjs_xa_connectオペランドおよびnjs_xa_dllnameオペランドを指定します。ユーザサービス定義の定義内容については，3章の「ユーザサービス定義」を参照してください。

TP1/Server Baseを起動します。

ユーザサーバを起動します。

(b)　TP1/LiNKのとき

TP1/LiNKにDBMSを登録します。
TP1/LiNKが提供する［リソースマネジャ］ダイアログボックスを使用して登録します。［リソースマネジャ］ダイアログボックスについては，「5.4　リソースマネジャの接続」を参照してください。

DABrokerの環境設定，および接続先データベースの定義を設定します。
設定方法については，マニュアル「DABroker」を参照してください。

トランザクション連携をするSPP.NETまたはSUP.NETの環境設定をします。
［SPP.NET環境設定］ダイアログボックスまたは［SUP環境設定］ダイアログボックスからXA接続の設定をします。XA接続の設定については，「5.2.4　XA接続の設定」を参照してください。

TP1/LiNKを起動します。

ユーザサーバを起動します。

2.5　メッセージ送受信機能

Extension .NETでは，メッセージ送受信機能を使用することで，TCP/IPプロトコルによってOpenTP1のMHPやOpenTP1以外のシステムと通信できます。

メッセージ送受信機能による通信の例を次に示します。

図2-12　メッセージ送受信機能による通信の例

注※

TP1/NET/TCP/IP，TP1/Messagingなど，メッセージ制御機能を提供するOpenTP1システムのプログラムを組み込む必要があります。

Extension .NETでメッセージ送受信機能を使用すると，SPP.NETは次のサーバおよびクライアントと通信できます。

OpenTP1のメッセージ制御機能（MCF）を使用した，PCおよびUNIXのサーバ

TP1/Clientを使用した，PCおよびUNIXのクライアント

メッセージ送受信機能を使用するためには，Extension .NETのほかに，メッセージ制御機能を提供するOpenTP1システムのプログラム（TP1/NET/TCP/IP，TP1/Messagingなど）を組み込む必要があります。

メッセージ送受信機能を使用する場合のシステム構成例を次に示します。

図2-13　メッセージ送受信機能を使用する場合のシステム構成例

注※1

TP1/Server BaseまたはTP1/LiNKが使用できます。

注※2

【TP1/Server Base】

TP1/NET/TCP/IPが使用できます。

【TP1/LiNK】

TP1/Messagingが使用できます。

メッセージ送受信機能の通信プロトコルにはTCP/IPが使用されます。SPP.NETの通信相手には，MHPまたは任意のソケットアプリケーションが使用できます。

なお，Extension .NETを使用したメッセージ送受信機能は，SPP.NETからだけ使用できます。SUP.NETからこの機能を使用することはできません。

＜この節の構成＞

2.5.1　メッセージ送受信機能の使用方法

2.5.2　通信形態

2.5.3　注意事項

2.5.1　メッセージ送受信機能の使用方法

メッセージ送受信機能を使用する場合の手順を次に示します。

あらかじめ，メッセージ制御機能を提供するOpenTP1システムのプログラム（TP1/NET/TCP/IP，TP1/Messagingなど）をシステムに組み込んでおきます。また，必要に応じて，リソースマネジャを登録しておいてください。

サービスメソッドに，Mcfクラスが提供するメッセージ送受信の処理を記述します。

TP1/Server BaseまたはTP1/LiNKを起動します。

【TP1/Server Base】

SPP.NETのユーザサービス定義のnjs_use_mcfオペランドにYを指定した状態で起動します。

【TP1/LiNK】

［SPP.NET詳細設定］ダイアログボックスの［その他］タブにある，［メッセージ送受信機能を使用する(M)］のチェックボックスをオンにした状態で起動します。［SPP.NET詳細設定］ダイアログボックスの［その他］タブの詳細については，「5.2.1(5)　［SPP.NET詳細設定］ダイアログボックス（［その他］タブ）」を参照してください。

サービス要求によってSPP.NETのサービスメソッドを呼び出します。

2.5.2　通信形態

メッセージ送受信機能を使用すると，SPP.NETとMHPなどの相手システムとの間で，次の形態によるメッセージの送受信ができます。

SPP.NETから相手システムへのメッセージの一方送信

SPP.NETと相手システムとのメッセージの送受信

＜この項の構成＞

(1)　メッセージの一方送信

(2)　メッセージの送受信

(1)　メッセージの一方送信

SPP.NETから相手システムに対して一方的にメッセージを送信できます。これをメッセージの一方送信といいます。

SPP.NETでMcfクラスのSendメソッドを呼び出して，相手システムへメッセージを送信します。なお，メッセージの一方送信はトランザクション内で使用できます。

通信プロトコルにTCP/IPを使用して，MHPにメッセージを一方送信する形態の例を次の図に示します。

図2-14　メッセージの一方送信（SPP.NET）

(2)　メッセージの送受信

SPP.NETと相手システムとの間で，メッセージを送受信できます。

SPP.NETでMcfクラスのSendReceiveメソッドを呼び出して相手システムへメッセージを送信し，相手システムからのメッセージを受信します。メッセージの一方送信時は，それぞれ別のコネクションを使用してメッセージを送信しますが，メッセージ送受信時は，同じコネクションを使用してメッセージを送受信します。なお，メッセージの送受信は，トランザクション内でもトランザクション外でも使用できます。

通信プロトコルにTCP/IPを使用して，MHPとメッセージを送受信する形態の例を次の図に示します。

図2-15　メッセージの送受信（SPP.NET）

2.5.3　注意事項

＜この項の構成＞

(1)　メッセージ受信時の注意事項

(2)　メッセージ送信時の注意事項

(3)　その他の注意事項

(1)　メッセージ受信時の注意事項

(a)　メッセージ長

通信プロトコルにTCP/IPを使用する場合，一つのメッセージを複数のパケットに分割したり，複数のメッセージを一つのパケットに詰め込んだりします。そのため，ユーザが指定するメッセージ長以外に，受信したメッセージの切れ目を判断できません。ユーザはメッセージ長を含めた固定長のヘッダを最初に受信し，ヘッダに含まれているメッセージ長を指定して，実際のメッセージを受信してください。

指定したメッセージ長より短いメッセージを受信した場合，SPP.NETは，メッセージが分割されているものとみなします。そのため，指定した長さ分のメッセージを受信するまで，SPP.NETに制御を戻しません。

タイムアウトやエラーの発生によって，指定した長さ分のメッセージを受信していない場合でも，その時点までのメッセージを受信できます。

(2)　メッセージ送信時の注意事項

(a)　障害発生時のメッセージの消失

OSが管理するTCP/IPの送信バッファへのメッセージ書き込みが正常終了したあとで，OS内部で実際の送信が完了するまでの間に通信障害が発生した場合，SPP.NETおよび相手システムではメッセージ送信の障害を検出できません。メッセージ送受信の場合は受信時に障害検知やタイムアウトによって検知できますが，一方送信の場合は正常終了します。したがって，ユーザはあらかじめメッセージ中に通番を付けるなどして，障害に備えてください。

(3)　その他の注意事項

通信プロトコルにTCP/IPを使用する場合，TP1/NET/TCP/IPまたはTP1/Messagingの受信メッセージの組み立て機能を使用すると，相手システムが送信したデータの先頭に4バイトのメッセージ長が付与されます。また，相手システムにデータを送信する場合は，先頭4バイトにメッセージ長を設定する必要があります。メッセージ長は，ネットワークバイトオーダーにしてください。なお，このメッセージ長は，相手システムが受信するときには削除されます。SPP.NETでは，送信時および受信時に，メッセージ長を意識する必要があるので注意してください。TP1/NET/TCP/IPまたはTP1/Messagingの受信メッセージの組み立て機能を使用する場合は，TP1/NET/TCP/IPまたはTP1/Messagingのプロトコル固有定義で次のように指定します。

mcftalccn -u masm=yes

TP1/NET/TCP/IPまたはTP1/Messagingのプロトコル固有定義の詳細については，マニュアル「OpenTP1　プロトコル　TP1/NET/TCP/IP編」を参照してください。

2.6　ノード間負荷バランス機能

ノード間負荷バランス機能は，RPCによる要求が特定のノードに集中しないようにノード間で負荷を分散する機能です。ノード間負荷バランス機能を使用するためには，負荷分散の前提として次の条件を満たしている必要があります。

複数のノードに同一のサービスを提供するユーザサーバが起動されていること。

各OpenTP1ノードはシステム共通定義のall_nodeオペランドに自分以外のノードを定義して，お互いのOpenTP1ノードで起動されているユーザサーバの情報（ネーム情報）をやり取りしていること。

2.7　リアルタイム統計情報の取得

UAP内の任意区間での処理の実行時間および実行回数を，リアルタイム統計情報として取得できます。オフラインの業務をするUAPでは，任意区間でのリアルタイム統計情報は取得できません。リアルタイム統計情報の取得方法については，マニュアル「OpenTP1　プログラム作成の手引」を参照してください。

Extension .NETでは，この機能を使用するためにRtsクラスを提供しています。

2.8　資源の排他制御【TP1/Server Base】

OpenTP1では，複数のユーザが資源を共用できるようにしています。資源を管理して整合性を保つことができる機能を排他制御といいます。資源の排他制御については，マニュアル「OpenTP1　解説」を参照してください。

Extension .NETでは，この機能を使用するためにLckクラスを提供しています。このクラスは，TP1/Server BaseのUAPでだけ使用できます。TP1/LiNKのUAPでは使用できません。

2.9　ユーザジャーナルの取得【TP1/Server Base】

UAPの中でUAP履歴情報取得機能を使用し，任意の情報をユーザジャーナル（UJ）としてシステムジャーナルファイルに取得できます。ユーザジャーナルの取得方法を次の図に示します。ユーザジャーナルの取得方法については，マニュアル「OpenTP1 プログラム作成の手引」を参照してください。

Extension .NETでは，この機能を使用するためにJnlクラスを提供しています。このクラスは，TP1/Server BaseのUAPでだけ使用できます。TP1/LiNKのUAPでは使用できません。

図2-16　ユーザジャーナルの取得方法

2.10　TAMファイルサービス（TP1/FS/Table Access）【TP1/Server Base】

TAMファイルとは，OpenTP1専用のユーザファイルのことです。TAMファイルを使うと，メモリ上のテーブルからOpenTP1ファイル（直接編成ファイル）へ高速にアクセスできます。TAMファイルを使う場合は，あらかじめ，システムにTP1/FS/Table Accessを組み込んでおきます。TAMファイルサービスについては，マニュアル「OpenTP1 プログラム作成の手引」を参照してください。

Extension .NETでは，この機能を使用するためにTamクラス，TamKeyTable構造体，およびTamStatusTable構造体を提供しています。このクラスは，TP1/Server BaseのUAPでだけ使用できます。TP1/LiNKのUAPでは使用できません。

2.11　環境設定

Extension .NETのインストール後に必要な，環境設定やセキュリティポリシーの設定などについて説明します。

＜この節の構成＞

2.11.1　インストール後の環境設定

2.11.2　セキュリティポリシーの設定

2.11.3　マルチOpenTP1環境でのExtension .NETの環境設定

2.11.4　メッセージの出力先

2.11.1　インストール後の環境設定

Visual StudioでUAPを開発する場合は，必要に応じて次に示すアセンブリをUAPのプロジェクトの参照設定に追加してください。

%DCDIR%¥bin¥Hitachi.OpenTP1.Server.dll

「%DCDIR%」はOpenTP1インストールディレクトリを表しています。

なお，このアセンブリはインストール時にグローバルアセンブリキャッシュ（GAC）に登録されます。

2.11.2　セキュリティポリシーの設定

Extension .NETをインストールおよび実行することで，インストールおよび実行したOS上の.NET Frameworkのコードアクセスセキュリティポリシーを変更してしまうことはありません。

Extension .NETの機能を使用するためには，次に示すファイルに必要なアクセス許可が与えられていなければなりません。必要なアクセス許可が与えられていない場合は，コマンドやアプリケーションを実行できません。

＜この項の構成＞

(1)　.NET Frameworkのコードアクセスセキュリティポリシーの影響を受けるファイル（アセンブリ）

(2)　必要なアクセス許可

(3)　注意事項

(1)　.NET Frameworkのコードアクセスセキュリティポリシーの影響を受けるファイル（アセンブリ）

%DCDIR%¥bin¥if2sstub.exe

%DCDIR%¥bin¥if2cstub.exe

%DCDIR%¥bin¥if2tsdl.exe

%DCDIR%¥bin¥spp2cstub.exe

%DCDIR%¥bin¥njstlsup.exe

%DCDIR%¥bin¥Hitachi.OpenTP1.Server.dll

%DCDIR%¥tools¥ExtNET¥DeveloperAssist¥Hitachi.OpenTP1.DevAssist4VSNet.dll

%DCDIR%¥tools¥ExtNET¥DeveloperAssist¥Hitachi.OpenTP1.DevTools.dll

各SPP.NETのアプリケーションベースディレクトリ，SUP.NETの配置ディレクトリ下のSPP.NET，SUP.NET実装アセンブリ，およびそれらが参照するすべてのアセンブリ

「%DCDIR%」はOpenTP1インストールディレクトリを表しています。

(2)　必要なアクセス許可

Extension .NETが提供するすべてのアセンブリに，完全信頼を指定する必要があります。

(3)　注意事項

.NET Frameworkが提供する各アセンブリに対してはアクセス許可の制限をしないでください。制限をした場合，インストールやアンインストールが失敗したり，運用コマンドやユーザサーバの実行ができなかったりすることがあります。

2.11.3　マルチOpenTP1環境でのExtension .NETの環境設定

Extension .NETは，同一マシン上で複数のOpenTP1を運用するマルチOpenTP1機能に対応しています。マルチOpenTP1の詳細については，マニュアル「OpenTP1　解説」を参照してください。

マルチOpenTP1環境でExtension .NETを利用する場合，Extension .NETはすべて同一のバージョンにしてください。なお，マルチOpenTP1環境でExtension .NETを利用する場合，TP1/Serverが提供するdcsetupml.exeを使用してセットアップします。dcsetupml.exeの詳細については，TP1/Server Baseの場合は「Windows版ご使用上の注意事項」を，TP1/LiNKの場合はマニュアル「TP1/LiNK　使用の手引」を参照してください。

マルチOpenTP1環境の構築方法については，TP1/Server Baseの場合は「Windows版ご使用上の注意事項」を，TP1/LiNKの場合はマニュアル「TP1/LiNK　使用の手引」を参照してください。また，マルチOpenTP1環境での開発支援機能の利用方法については，「9.1.2　マルチOpenTP1環境での運用」を参照してください。

2.11.4　メッセージの出力先

Extension .NETが提供する運用コマンドが出力するメッセージは，標準出力または標準エラー出力に出力されます。それ以外（クラスライブラリ，SPP.NET実行コンテナなど）が出力するメッセージは，メッセージログファイルまたは.NETエラーログファイルに出力されます。

メッセージログファイルについては，マニュアル「TP1/LiNK　使用の手引」またはマニュアル「OpenTP1　運用と操作」を，.NETエラーログファイルについては「8.3　.NETエラーログファイル」を参照してください。

3.　システム定義【TP1/Server Base】

この章では，TP1/Extension for .NET Framework（Extension .NET）で使用するシステム定義について説明します。この定義は，TP1/Server Baseの場合だけ指定できます。TP1/LiNKで指定した場合，動作の保証はしません。

＜この章の構成＞

システム共通定義

ユーザサービスデフォルト定義

ユーザサービス定義

システム共通定義

形式

set形式

set njs_appbase_directory="%DCDIR%¥aplibディレクトリ"

機能

OpenTP1システム共通の実行環境を定義します。

説明

set形式のオペランド

●njs_appbase_directory="%DCDIR%¥aplibディレクトリ"　　～〈1～128文字のパス名〉

「%DCDIR%」はOpenTP1インストールディレクトリを表しています。

OpenTP1インストールディレクトリ下のaplibディレクトリを完全パスで指定します。Extension .NETを使用する場合，必ずこのオペランドを指定してください。

このオペランドは，ユーザサービス定義およびユーザサービスデフォルト定義でも指定できます。

指定値の優先順位は次のとおりです（1.＞2.＞3.）。

ユーザサービス定義

ユーザサービスデフォルト定義

システム共通定義

ユーザサービスデフォルト定義

形式

set形式

〔set njs_appbase_directory=
 "デフォルトアプリケーションベースディレクトリ"〕
〔set njs_input_max_message_size="RPC要求メッセージの最大長"〕
〔set njs_output_max_message_size="RPC応答メッセージの最大長"〕

機能

ユーザサービス定義の省略時解釈値を定義します。

説明

set形式のオペランド

●njs_appbase_directory="デフォルトアプリケーションベースディレクトリ"　　～〈1～128文字のパス名〉

実装アセンブリを参照するデフォルトアプリケーションベースディレクトリを完全パスで指定します。

このオペランドは，ユーザサービス定義およびシステム共通定義でも指定できます。

指定値の優先順位は次のとおりです（1.＞2.＞3.）。

ユーザサービス定義

ユーザサービスデフォルト定義

システム共通定義

●njs_input_max_message_size="RPC要求メッセージの最大長"　　～〈符号なし整数〉((1～8))《1》（単位：メガバイト）

SPP.NETがクライアントUAPから受け付けるRPC要求メッセージの最大長を指定します。

ここで指定する値は，TP1/Server Baseのシステム共通定義のrpc_max_message_sizeオペランドで指定した値以下にしてください。rpc_max_message_sizeオペランドについては，マニュアル「OpenTP1　システム定義」を参照してください。

このオペランドは，ユーザサービス定義でも指定できます。ユーザサービス定義で指定した場合，ユーザサービス定義の値が優先されます。

●njs_output_max_message_size="RPC応答メッセージの最大長"　　～〈符号なし整数〉((1～8))《1》（単位：メガバイト）

SPP.NETがクライアントUAPにサービスの応答をする場合，SPP.NETがクライアントUAPに返すRPC応答メッセージの最大長を指定します。

ここで指定する値は，TP1/Server Baseのシステム共通定義のrpc_max_message_sizeオペランドで指定した値以下にしてください。rpc_max_message_sizeオペランドについては，マニュアル「OpenTP1　システム定義」を参照してください。

このオペランドは，ユーザサービス定義でも指定できます。ユーザサービス定義で指定した場合，ユーザサービス定義の値が優先されます。

ユーザサービス定義

形式

set形式

 set module="実行形式プログラム名"
〔set service="サービス名=エントリポイント名"
          〔,"サービス名=エントリポイント名"〕…〕
〔set njs_server_assembly="実装アセンブリ名称"〕
〔set njs_server_implement_class="実装クラス名称"〕
〔set njs_server_stub_class="サーバスタブクラス名称"〕
〔set njs_use_interface=Y|N〕
〔set njs_appbase_directory="アプリケーションベースディレクトリ"〕
〔set njs_xa_connect=Y|N〕
〔set njs_xa_dllname="トランザクション制御用ライブラリ"〕
〔set njs_use_mcf=Y|N〕
〔set njs_input_max_message_size="RPC要求メッセージの最大長"〕
〔set njs_output_max_message_size="RPC応答メッセージの最大長"〕

機能

ユーザサーバの実行環境をユーザサーバごとに定義します。

説明

set形式のオペランド

●module="実行形式プログラム名"　　～〈1～14文字の識別子〉

SPP.NETの場合は，njsnetsvを指定します。SUP.NETの場合は，このサービスグループを実行する実行形式プログラム名を指定します。

●service="サービス名=エントリポイント名"〔,"サービス名=エントリポイント名"〕…　　～〈1～31文字の識別子〉

SPP.NETの場合は，サービス名とエントリポイント名にサービスメソッド名を指定します。SUP.NETの場合は，指定する必要はありません。

●njs_server_assembly="実装アセンブリ名称"　　～〈1～128文字の識別子とピリオド〉

SPP.NETの実装クラス，サーバスタブなどが含まれるアセンブリの名称を指定します。ファイルの拡張子（dll）は不要です。SPP.NETの場合，必ずこのオペランドを指定してください。

●njs_server_implement_class="実装クラス名称"　　～〈1～128文字の識別子とピリオド〉

SPP.NETの実装クラス名称を指定します。名前空間を含む完全限定名で指定してください。SPP.NETの場合，必ずこのオペランドを指定してください。

●njs_server_stub_class="サーバスタブクラス名称"　　～〈1～128文字の識別子とピリオド〉

サーバスタブのクラス名称を指定します。名前空間を含む完全限定名で指定してください。.NETインタフェース定義を使用したSPP.NETの場合，必ずこのオペランドを指定してください。

●njs_use_interface=Y|N　　～《Y》

SPP.NETが.NETインタフェース定義を使用するかどうかを指定します。

Y：.NETインタフェース定義を使用します。

N：.NETインタフェース定義を使用しません。

●njs_appbase_directory="アプリケーションベースディレクトリ"　　～〈1～128文字のパス名〉

実装アセンブリを配置したアプリケーションベースディレクトリを完全パスで指定します。

ここで指定を省略した場合，ユーザサービスデフォルト定義の値を仮定します。ユーザサービスデフォルト定義でも指定を省略した場合，システム共通定義の値を仮定します。

●njs_xa_connect=Y|N　　～《N》

XA接続をするかどうかを指定します。

Y：XA接続をします。

N：XA接続をしません。

●njs_xa_dllname="トランザクション制御用ライブラリ"　　～〈1～128文字のパス名〉

ユーザサーバで参照するトランザクション制御用ライブラリを完全パスで指定します。

●njs_use_mcf=Y|N　　～《N》

メッセージ送受信機能を使用するかどうかを指定します。このオペランドは，SPP.NETの場合にユーザサービス定義でだけ指定できます。

Y：メッセージ送受信機能を使用します。

N：メッセージ送受信機能を使用しません。

●njs_input_max_message_size="RPC要求メッセージの最大長"　　～〈符号なし整数〉((1～8))《1》（単位：メガバイト）

SPP.NETがクライアントUAPから受け付けるRPC要求メッセージの最大長を指定します。

ここで指定する値は，TP1/Server Baseのシステム共通定義のrpc_max_message_sizeオペランドで指定した値以下にしてください。rpc_max_message_sizeオペランドについては，マニュアル「OpenTP1　システム定義」を参照してください。

なお，このオペランドはSPP.NETのユーザサービス定義の場合だけ指定できます。

ここで指定を省略した場合，ユーザサービスデフォルト定義の値を仮定します。

●njs_output_max_message_size="RPC応答メッセージの最大長"　　～〈符号なし整数〉((1～8))《1》（単位：メガバイト）

SPP.NETがクライアントUAPにサービスの応答をする場合，SPP.NETがクライアントUAPに返すRPC応答メッセージの最大長を指定します。

ここで指定する値は，TP1/Server Baseのシステム共通定義のrpc_max_message_sizeオペランドで指定した値以下にしてください。rpc_max_message_sizeオペランドについては，マニュアル「OpenTP1　システム定義」を参照してください。

なお，このオペランドはSPP.NETのユーザサービス定義の場合だけ指定できます。

ここで指定を省略した場合，ユーザサービスデフォルト定義の値を仮定します。

4.　UAPの作成と実行

この章では，TP1/Extension for .NET Framework（Extension .NET）で使用するUAPの作成方法と実行手順について説明します。

＜この章の構成＞

4.1　OpenTP1 for .NET Framework環境でのUAP開発時に必要な定義

4.2　UAPの作成手順の概要

4.3　SPP.NETの作成方法

4.4　.NETインタフェース定義を使用したSPP.NETの呼び出し方法

4.5　サービス定義を使用したSPP.NETまたはSPPの呼び出し方法

4.6　バイナリデータを使用したSPP.NETまたはSPPの呼び出し方法

4.7　DABroker for .NET Frameworkを使用したUAPの作成方法

4.8　COBOL言語でのUAPの作成方法

4.9　アプリケーションの配置と運用

4.10　UAP作成上の注意事項

4.11　サンプルプログラムの使用方法

4.12　Visual StudioでのSPP.NETのデバッグ方法

4.1　OpenTP1 for .NET Framework環境でのUAP開発時に必要な定義

OpenTP1 for .NET Framework環境でのUAP開発時に必要な定義について説明します。

＜この節の構成＞

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

4.1.2　サービス定義

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

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

SPP.NET

SUP.NET

CUP.NET（TP1/Connector for .NET Frameworkを利用してSPP.NETにサービスを要求するアプリケーションを含みます）

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

＜この項の構成＞

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

(2)　TP1ユーザ構造体

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

(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

4.1.2　サービス定義

サービス定義は，次のUAPからSPP.NET，またはSPPに対してサービス定義を使用してRPCを実行する場合に定義します。

SPP.NET

SUP.NET

CUP.NET（TP1/Connector for .NET Frameworkを利用してSPP.NET，またはSPPにサービスを要求するアプリケーションを含みます）

サービス定義は，サービス定義のファイルとサービス定義が参照するデータ型定義のファイルから構成されます。この節では，サービス定義の定義方法の詳細について説明します。サービス定義を使用したRPCについては，「1.3.2(1)(b)　サービス定義（カスタムレコード）を使用したRPC」を参照してください。

＜この項の構成＞

(1)　データ型定義ファイル

(2)　サービス定義ファイル

(1)　データ型定義ファイル

データ型定義とは，RPCでやり取りされる入力データや出力データの形式をメッセージ単位で定義するものです。

サービス定義から参照するデータ型定義ファイルは，次に示す形式で独立したファイルとして定義します。

(a)　形式

struct データ型定義名称 {
       データ型 メンバ名称[配列指定];
   〔〔データ型 メンバ名称[配列指定];〕…〕
};
〔〔struct データ型定義名称 {
       データ型 メンバ名称[配列指定];
   〔〔データ型 メンバ名称[配列指定];〕…〕
};〕…〕

(b)　説明

●データ型定義名称　　～〈31文字以内の識別子〉

データ型定義に付ける名称を指定します。

指定された名称がカスタムレコードクラスのクラス名となります。

●データ型

メンバ名称で示される変数に対するデータ型を指定します。

クライアントスタブ生成コマンド（spp2cstub）は，定義された各メンバのデータ型を次の表に示すように，.NET Frameworkのデータ型に対応づけてカスタムレコードクラスを生成します。

また，データの内容を次の表に示すように変換します。

表4-4　データ型の変換規則と変換内容

データ型定義ファイルで定義されたデータ型
データ型の説明
カスタムレコードクラスで定義される.NET Frameworkのデータ型
データ変換の内容

char
文字列
System.String
charは.NET FrameworkのSystem.Stringに対応づけられます。カスタムレコードを入力データとして使用する場合，スタブ生成コマンドに指定したエンコード方式に従ってバイト配列に変換しデータを扱います。
バイト配列に変換した結果が32バイトで，データ型定義がchar a[30]の場合，2バイトは破棄されます。

int
32ビット符号付き整数
System.Int32
intは.NET FrameworkのSystem.Int32に対応づけられます。
カスタムレコードを入力データとして使用する場合，スタブ生成コマンドに指定されたエンディアンでバイト配列に変換して，RPCの要求メッセージに設定します。
カスタムレコードを出力データとして使用する場合，応答メッセージから4バイトをスタブ生成コマンドに指定されたエンディアンで読み込み，データにセットします。

short
16ビット符号付き整数
System.Int16
shortは.NET FrameworkのSystem.Int16に対応づけられます。カスタムレコードを入力データとして使用する場合，指定されたエンディアンでバイト配列に変換して，RPCの要求メッセージに設定します。
カスタムレコードを出力データとして使用する場合，RPCの応答メッセージから2バイトをスタブ生成コマンドに指定されたエンディアンで読み込み，データにセットします。

long
32ビット符号付き整数
System.Int32
longは.NET FrameworkのSystem.Int32に対応づけられます。
カスタムレコードを入力データとして使用する場合，スタブ生成コマンドに指定されたエンディアンでバイト配列に変換して，RPCの要求メッセージに設定します。
カスタムレコードを出力データとして使用する場合，応答メッセージから4バイトをスタブ生成コマンドに指定されたエンディアンで読み込み，データにセットします。

byte
バイナリデータ
System.Byte
byteは.NET FrameworkのSystem.Byteに対応づけられます。
一次元配列指定にだけ使用できます。

struct
構造体
class（インナークラス）
データ型定義でstructとして定義されるデータ型のことを構造体と呼びます。
structはインナークラスに対応づけられます。

データ型がint，long，またはstructの場合は，先頭からのオフセットが4の整数倍でなければなりません。また，shortの場合は，先頭からのオフセットが2の整数倍でなければなりません。

なお，スタブ生成コマンドでは，自動的にバウンダリ調整をしないため，先頭からのオフセットが正しい整数倍でない場合，エラーとなるので注意が必要です。

バウンダリ調整については，「(d)　バウンダリ調整」を参照してください。

データ型がstructの場合は，次に示すように定義します。

struct 構造体名称 {
       データ型 メンバ名称[配列指定];
   〔〔データ型 メンバ名称[配列指定];〕…〕
} メンバ名称[配列指定];

データ型定義でstructとして定義されるメンバは，その構造体名称がそのままインナークラスのクラス名称になり，メンバ名称がインナークラスの型を持つプロパティ名称になります。

ここで指定するデータ型，メンバ名称，配列要素数はデータ型定義に従います。また，この構造体のデータ型定義先頭からのオフセットは，4の整数倍でなければなりません。また，構造体自身のサイズも4の整数倍でなければなりません。

ただし，構造体を構成するメンバ（構造体の中に構造体がある場合は，そのメンバも含む）がすべてcharまたはbyteの場合は，任意のオフセットおよび任意のサイズを定義できます。

データ型定義でstructとして定義される配列型は，可変長構造体配列として扱えます。可変長構造体配列については，「(e)　可変長構造体配列」を参照してください。

●構造体名称　　～〈31文字以内の識別子〉

構造体に付ける名称を指定します。

構造体名称の先頭文字は半角英字とします。2文字目以降は半角英数字および半角アンダスコア（_）が使用できます。

●メンバ名称　　～〈31文字以内の識別子〉

メンバ名称を指定します。

メンバ名称の先頭文字は半角英字で指定してください。

●配列指定

配列要素数　　～〈符号なし整数〉((1～8388608))

メンバがデータ型の配列の場合，配列要素数を指定します。

データ型がint，short，long，またはstructのときは，一次元配列が指定できます（配列指定なしも指定できます）。

データ型がbyteのときは，一次元配列だけ指定できます。

データ型がcharのときは，二次元配列まで指定できます。

一次元配列

[配列要素数]

二次元配列

[配列要素数][配列要素数]

(c)　データ型定義の定義例

struct in_data {
long I_basho[3];
long I_kakaku;
long I_tokuchou;
};

struct out_data {
char o_name[20];
char o_basho[16];
char o_tokuchou[20];
long o_kakaku;
char o_inf[80];
};

struct out_data2 {
char o_name[20];
char o_basho[16];
char o_tokuchou[20];
long o_kakaku;
char o_inf[80][20];
};

struct put_data {
int  o_num;
struct data {
 char o_name[20];
 char o_basho[16];
 char o_tokuchou[20];
 long o_kakaku;
 char o_inf[80];
} data_t[100];
};

(d)　バウンダリ調整

バウンダリ調整とは，データ型定義の各変数を決められたバイト境界に配置することをいいます。バウンダリ調整は，コンパイラが自動的に行います。

例えば，次に示すような構造体を使用している場合，先頭からのオフセットを正しくするため，実際はOS，およびコンパイラによって，dataとnumの間に1バイトの補正が入ります。

構造体の定義例

struct s_data {
   char data[3];
   long num;
} s_data_t

バウンダリ調整後の定義例

struct s_data {
 char data[3];
   <1バイト>
   long num;
} s_data_t

この例の場合には，次のように修正して使用してください。

修正前

struct s_data {
   char data[3];
   long num;
} s_data_t;

修正後

struct s_data {
   char data[3];
   char wk;
   long num;
} s_data_t;

ポイント

OpenTP1 for .NET Framework以外のOpenTP1システムで使用していた構造体をデータ型定義として使用する場合などは，バウンダリ調整に注意してください。

(e)　可変長構造体配列

データ型がstructで，配列型の場合は，可変長構造体配列として扱えます。可変長構造体配列は次に示す形式で定義します。

可変長構造体配列の形式

int 配列要素数を示すメンバ名称
struct 構造体名称 {
                  データ型 メンバ名称[配列指定];
                 〔〔データ型 メンバ名称[配列指定];〕…〕
} メンバ名称[配列要素数を示すメンバ名称:配列の最大要素数];

可変長構造体配列を指定する場合は，可変長構造体配列の配列要素数を「データ型がint型の配列要素数を示すメンバ名称:配列の最大要素数」という形式で記述します。構造体名称，データ型，メンバ名称および配列指定については，「(b)　説明」を参照してください。

可変長構造体配列の定義例

struct put_data {
                int o_num;
                struct data{
                            char o_name[20];
                            char o_basho[16];
                            char o_tokuchou[20];
                            long o_kakaku;
                            char o_inf[80];
                            } data_t[o_num:100];
                };

可変長構造体配列を使用する場合は，次の点に注意してください。

配列要素数を示すメンバ名称は可変長構造体配列より前に定義してください。

配列要素数を示すメンバ名称の値は配列の最大要素数に指定した値以下にしてください。配列要素数を示すメンバ名称の値が配列の最大要素数に指定した値を超える場合はエラーが発生します。

可変長構造体配列を使用する場合は，構造体の長さは配列の最大要素数に指定した値で計算されるので，配列の最大要素数を指定するときはデータ型定義の長さが1から8388608バイトの範囲になるように指定してください。ただし，RPC送受信メッセージの最大長拡張機能を使用しない場合は，データ型定義の長さは1から1048576バイトの範囲になるように指定してください。

生成されたカスタムレコードを使用する場合，可変長構造体配列に対応するプロパティには，配列の最大要素数以内の構造体配列を指定してください。nullまたは配列の最大要素数を超える構造体配列を指定した場合は，TP1MarshalException例外が発生します。

(f)　注意事項

データ型定義では任意の位置にコメントを記述できます。コメントは「/*」で始め，「*/」で終了します。なお，コメントのネストはできません。

データ型定義全体の長さは1から8388608バイトの範囲になるように記述してください。ただし，RPC送受信メッセージの最大長拡張機能を使用しない場合は，1から1048576バイトの範囲になるように記述してください。

データ型定義ファイルでは，1文を複数行にわたって指定しないでください。

データ型定義名称としてdcおよびDCで始まる名称は使用しないでください。

データ型定義名称，メンバ名称としてクライアントスタブおよびカスタムレコードクラスを生成するプログラム言語のキーワードは使用できません。

生成されたカスタムレコードを使用する場合，配列および固定長構造体配列に対応するプロパティには要素数分の配列数を指定してください。nullまたは要素数分以外の配列数を指定した場合は，TP1MarshalException例外が発生します。

一つのデータ型定義に同じ名前のメンバ名称を指定しないでください。

(2)　サービス定義ファイル

サービス定義とは，サービスの入出力データに対応するデータ型定義を定義するものです。

サービス定義ファイルは，次に示す形式で独立したファイルとして定義します。

(a)　形式

#include "データ型定義ファイル名"
〔〔#include "データ型定義ファイル名"〕
…〕

interface サービス定義名称 {
     サービス名称(入力データ型定義名, 出力データ型定義名);
 〔〔サービス名称(入力データ型定義名, 出力データ型定義名);〕…〕
}

(b)　説明

●データ型定義ファイル名　　～〈ファイル名〉

このサービス定義で参照するデータ型定義が定義されているファイル名を指定します。ファイル名は次のどちらかの形式で指定します。

拡張子を含んだファイル名だけを指定する。

相対パスまたは絶対パスを含んだファイル名で指定する。

なお，パス指定時の区切り文字には「/」または「¥」が使用できます。

●サービス定義名称　　～〈31文字以内の識別子〉

このサービス定義に付けるサービス定義名称を指定します。

任意に名称を付けることができます。デフォルトではこの名称からクライアントスタブなどのクラス名が生成されます。

●サービス名称　　～〈31文字以内の識別子〉

このサービス定義に含めるサービス名称を指定します。

対象となるユーザサーバが持つサービス名称を指定してください。

●入力データ型定義名　　～〈31文字以内の識別子〉

各サービスの入力データに対応するデータ型定義名称を指定します。

入力データ型定義名は，このサービス定義ファイルの#includeディレクティブで指定したデータ型定義ファイルで定義されたデータ型定義名称でなければなりません。

●出力データ型定義名　　～〈31文字以内の識別子〉

各サービスの出力データに対応するデータ型定義名称を指定します。

出力データ型定義名は，このサービス定義ファイルの#includeディレクティブで指定したデータ型定義ファイルで定義されたデータ型定義名称でなければなりません。

ただし，出力データがない場合は，出力データ型定義名にはDC_NODATAを指定してください（非応答型RPCの場合だけ使用できます）。

(c)　サービス定義の定義例

サービス定義の定義例1（業務1のサービス定義）

#include "mydata.h"
/* 業務1のサービス定義 */
interface GYOUMU1 {
   GETDATA1(in_data, out_data);
   GETDATA2(in_data, out_data2);
}

サービス定義の定義例2（業務2のサービス定義）

#include "datas/mydata.h"
/* 業務2のサービス定義 */
interface GYOUMU2 {
   GET_DATA1(in_data, out_data);
   PUT_DATA1(put_data, DC_NODATA);  /* 非応答型 */
}

データ型定義の定義例（mydata.h）

struct in_data {
long I_basho[3];
long I_kakaku;
};

struct out_data {
char o_name[20];
char o_basho[16];
long o_kakaku;
char o_inf[80];
};

struct out_data2 {
char o_name[20];
char o_basho[16];
long o_kakaku;
char o_inf[80][20];
};

struct put_data {
int  o_num;
struct data {
 char o_name[20];
 char o_basho[16];
 long o_kakaku;
 char o_inf[80];
} data_t[100];
};

(d)　注意事項

サービス定義では任意の位置にコメントを記述できます。コメントは「/*」で始め，「*/」で終了します。なお，コメントのネストはできません。

コメント文中に「//」は使用できません。

4.2　UAPの作成手順の概要

Extension .NETで使用する次のUAPの作成手順の概要について説明します。

SPP.NET

SUP.NET

＜この節の構成＞

4.2.1　SPP.NETの作成手順の概要

4.2.2　SPP.NETウィザードを利用したSPP.NETの作成

4.2.3　SUP.NETの作成手順の概要

4.2.4　SUP.NETウィザードを利用したSUP.NETの作成

4.2.5　SPP.NETおよびSUP.NET作成時の注意事項

4.2.1　SPP.NETの作成手順の概要

SPP.NETの作成手順の概要を次に示します。

＜この項の構成＞

(1)　.NETインタフェース定義を使用する場合

(2)　.NETインタフェース定義を使用しない場合

(1)　.NETインタフェース定義を使用する場合

.NETインタフェース定義を定義します。

サーバスタブを生成します。

SPP.NETの実装クラスをコーディングします。

.NETインタフェース定義，サーバスタブ，SPP.NET実装クラスを一つのアセンブリにまとめてSPP.NETをビルドします。
OpenTP1が提供するアセンブリ（DLL）への参照設定が必要です。また，必要に応じてSPP.NETが利用するアセンブリ（DLL）への参照設定も必要です。

(2)　.NETインタフェース定義を使用しない場合

SPP.NETの実装クラスをコーディングします。

SPP.NET実装クラスをビルドしてアセンブリを生成します。
OpenTP1が提供するアセンブリ（DLL）への参照設定が必要です。また，必要に応じてSPP.NETが利用するアセンブリ（DLL）への参照設定も必要です。

4.2.2　SPP.NETウィザードを利用したSPP.NETの作成

SPP.NETはSPP.NETウィザードを利用して作成することもできます。SPP.NETウィザードについては，「9.2　SPP.NETウィザード」を参照してください。

4.2.3　SUP.NETの作成手順の概要

SUP.NETの作成手順の概要を次に示します。

SUP.NETの実装クラスをコーディングします。

クライアントスタブ，SUP.NET実装クラスを一つのアセンブリ（EXE）にまとめてSUP.NETをビルドします。
OpenTP1が提供するアセンブリ（DLL）への参照設定が必要です。また，必要に応じてSUP.NETが利用するアセンブリ（DLL）への参照設定も必要です。

4.2.4　SUP.NETウィザードを利用したSUP.NETの作成

SUP.NETはSUP.NETウィザードを利用して作成することもできます。SUP.NETウィザードについては，「9.4　SUP.NETウィザード」を参照してください。

4.2.5　SPP.NETおよびSUP.NET作成時の注意事項

SPP.NETおよびSUP.NETの実装クラスをコーディングする場合，SUP.NETがクライアントスタブを使用してほかのSPP.NETを呼び出すときは，あらかじめそのクライアントスタブを生成しておく必要があります。

そのため，利用するサーバの.NETインタフェース定義を事前に入手するか，または必要に応じてサービス定義を作成しておく必要があります。

また，SPP.NETおよびSUP.NETの実装クラスでクライアントスタブを利用する場合，開発支援機能のクライアントスタブの追加を利用して，クライアントスタブをSPP.NETおよびSUP.NETのプロジェクトに追加することもできます。クライアントスタブの追加については，「9.6　クライアントスタブの追加」を参照してください。

4.3　SPP.NETの作成方法

.NETインタフェース定義を使用する場合，および.NETインタフェース定義を使用しない場合のSPP.NETの作成方法について説明します。

＜この節の構成＞

4.3.1　.NETインタフェース定義を使用したSPP.NETの実装

4.3.2　.NETインタフェース定義を使用したSPP.NETのコーディング例

4.3.3　.NETインタフェース定義を使用しないSPP.NETの実装

4.3.4　.NETインタフェース定義を使用しないSPP.NETのコーディング例

4.3.1　.NETインタフェース定義を使用したSPP.NETの実装

SPP.NETがOpenTP1 for .NET FrameworkのUAPからだけ利用されることが明らかな場合，.NETインタフェース定義を使用したSPP.NETを実装しておくと便利です。

.NETインタフェース定義を使用してSPP.NETを実装する場合，.NETインタフェース定義およびSPP.NETの実装には次のプログラム言語が使用できます。

C#

J#

Visual Basic

注意

.NETインタフェース定義を使用したSPP.NETは，C言語およびCOBOL言語で作成されたアプリケーションから呼び出すことはできません。

＜この項の構成＞

(1)　SPP.NETを実装する場合の規則

(2)　.NETインタフェース定義を使用してSPP.NETを実装する場合の注意事項

(1)　SPP.NETを実装する場合の規則

SPP.NETを実装する場合は，次の規則に従って各プログラム言語でクラスを実装します。

インタフェースを定義したプログラム言語と同じ言語で実装します。

Hitachi.OpenTP1.Server.SPPBaseクラスを継承します。

publicクラス（Publicクラス）として宣言します。

SPP.NETの.NETインタフェース定義で宣言したインタフェースを一つだけ実装します。

SPP.NETの.NETインタフェース定義で宣言した各メソッドをpublicメソッドとして実装します。各メソッドには必ずTP1RpcMethod属性を宣言します。なお，メソッド名はSPP.NETのサービス名になります。

SPP.NETの初期化処理はInitializeSPPメソッド，終了時処理はFinalizeSPPメソッドで実装します。それぞれの処理が不要な場合はInitializeSPPメソッド，またはFinalizeSPPメソッドを実装する必要はありません。

(2)　.NETインタフェース定義を使用してSPP.NETを実装する場合の注意事項

.NETインタフェース定義を変更した場合，SPP.NETの実装側ではサーバスタブ，利用側ではクライアントスタブを必ず再生成する必要があります。.NETインタフェース定義と，サーバスタブおよびクライアントスタブが一致していない場合，RPCが正しく実行されません。

4.3.2　.NETインタフェース定義を使用したSPP.NETのコーディング例

＜この項の構成＞

(1)　C#の場合のコーディング例

(2)　J#の場合のコーディング例

(3)　Visual Basicの場合のコーディング例

(1)　C#の場合のコーディング例

using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Server;

namespace MyCompany
{
 public class GyoumuAImpl : SPPBase, IGyoumuA
 {
   public GyoumuAImpl()
   {
     // コンストラクタの処理
     // ** コンストラクタでOpenTP1のクラスは使用できません **
     // ** 必要な初期化処理はInitializeSPPで行ってください **
   }
   ~GyoumuAImpl()
   {
     // デストラクタの処理
     // ** デストラクタでOpenTP1のクラスは使用できません **
     // ** 必要な終了処理はFinalizeSPPで行ってください **
   }

   // SPP初期化および終了処理メソッドの実装
   public override void InitializeSPP() {
     // SPPの初期化処理
   }
   public override void FinalizeSPP() {
     // SPPの終了処理
   }

   // サービスメソッドの実装
   [TP1RpcMethod]
   public void Service1(string dataId, byte[] data)
   {
     // Service1()の処理
   }

   [TP1RpcMethod]
   public string[] Service2(string key)
   {
     // Service2()の処理
   }

   [TP1RpcMethod]
   public int Service3(int inCount, ref string[] ids)
   {
     // Service3()の処理
   }

   [TP1RpcMethod]
   public short Service4(MyStruct inStruct)
   {
     // Service4()の処理
   }

   // SPP内部メソッドの実装（自由に実装できます）
   // RPCで呼び出すことはできません
   public string GetUserInfo()
   {
     // 処理
   }
   private void PutErrorLog(string errorInfo, int errorCode)
   {
     // 処理
   }
 }
}

(2)　J#の場合のコーディング例

package MyCompany;
import System.*;
import Hitachi.OpenTP1.*;
import Hitachi.OpenTP1.Server.*;

public class GyoumuAImpl extends SPPBase implements IGyoumuA
{
 public GyoumuAImpl()
 {
   // コンストラクタの処理
   // ** コンストラクタでOpenTP1のクラスは使用できません **
   // ** 必要な初期化処理はInitializeSPPで行ってください **
 }

 protected void Finalize()
 {
   // Finalizeメソッドの処理
   // ** FinalizeメソッドでOpenTP1のクラスは使用できません **
   // ** 必要な終了処理はFinalizeSPPで行ってください **
 }
 // SPP初期化および終了処理メソッドの実装
 public void InitializeSPP() {
   // SPPの初期化処理
 }
 public void FinalizeSPP() {
   // SPPの終了処理
 }

 // サービスメソッドの実装
 /** @attribute TP1RpcMethod() */
 public void Service1(String dataId, ubyte[] data)
 {
   // Service1()の処理
 }

 /** @attribute TP1RpcMethod() */
 public String[] Service2(String key)
 {
   // Service2()の処理
 }

 /** @attribute TP1RpcMethod() */
 public int Service3(int inCount,
                     StringArrayHolder ids)
 {
   // Service3()の処理
 }

 /** @attribute TP1RpcMethod() */
 public short Service4(MyStruct inStruct,
                       MyStructHolder outStruct)
 {
   // Service4()の処理
 }

 // SPP内部メソッドの実装（自由に実装できます）
 // RPCで呼び出すことはできません
 public String GetUserInfo()
 {
   // 処理
 }
 private void PutErrorLog(String errorInfo, int errorCode)
 {
   // 処理
 }
}

(3)　Visual Basicの場合のコーディング例

Imports System
Imports Hitachi.OpenTP1
Imports Hitachi.OpenTP1.Server

Namespace MyCompany
Public Class GyoumuAImpl
   Inherits SPPBase
   Implements IGyoumuA
   Sub GyoumuAImpl()
     ' コンストラクタの処理
     ' ** コンストラクタでOpenTP1のクラスは使用できません **
     ' ** 必要な初期化処理はInitializeSPPで行ってください **
   End Sub

   Sub Finalize()
     ' Finalizeメソッドの処理
     ' ** FinalizeメソッドでOpenTP1のクラスは使用できません **
     ' ** 必要な終了処理はFinalizeSPPで行ってください **
   End Sub
   ' SPP初期化および終了処理メソッドの実装
   Public Overrides Sub InitializeSPP()
     ' SPPの初期化処理
   End Sub
   Public Overrides Sub FinalizeSPP()
     ' SPPの終了処理
   End Sub

   ' サービスメソッドの実装
   <TP1RpcMethod()> _
   Public Sub Service1(ByVal dataId As String, _
                       ByVal data() As Byte) _
   Implements IGyoumuA.Service1
     ' Service1()の処理
   End Sub

   <TP1RpcMethod()> _
   Public Function Service2(ByVal key As String) As String() _
   Implements IGyoumuA.Service2
     ' Service2()の処理
   End Function

   <TP1RpcMethod()> _
   Public Function Service3(ByVal inCount As Integer, _
                            ByRef ids() As String) _
   As Integer Implements IGyoumuA.Service3
     ' Service3()の処理
   End Function

   <TP1RpcMethod()> _
   Public Function Service4(ByVal inStruct As MyStruct) _
                            As Short _
   Implements IGyoumuA.Service4
     ' Service4()の処理
   End Function

   ' SPP内部メソッドの実装（自由に実装できます）
   ' RPCで呼び出すことはできません
   Public Function GetUserInfo() As String
     ' 処理
   End Function
   Private Sub PutErrorLog(errorInfo As String, _
                           errorCode As Integer)
     ' 処理
   End Sub
 End Class
End Namespace

4.3.3　.NETインタフェース定義を使用しないSPP.NETの実装

.NETインタフェース定義を使用しないSPP.NETは，SUP.NETやCUP.NETなどのOpenTP1 for .NET FrameworkのUAP以外にも，C言語およびCOBOL言語で作成したアプリケーション（SUP，CUPなど）から呼び出すことができます。

SPP.NETをOpenTP1 for .NET FrameworkのUAP以外のクライアントアプリケーションから利用する可能性がある場合は，必ず.NETインタフェース定義を使用しないSPP.NETを実装しておきます。

.NETインタフェース定義を使用しないSPP.NETを実装する場合，次のプログラム言語が使用できます。

C#

J#

Visual Basic

COBOL言語

COBOL言語で実装する方法については，「4.8　COBOL言語でのUAPの作成方法」を参照してください。

＜この項の構成＞

(1)　SPP.NETを実装する場合の規則

(1)　SPP.NETを実装する場合の規則

SPP.NETを実装する場合は，次の規則に従って各プログラム言語でクラスを実装します。

Hitachi.OpenTP1.Server.SPPBaseクラスを継承します。

publicクラス（Publicクラス）として宣言します。

SPP.NETのサービスメソッドをpublicメソッドとして実装します。各メソッドには必ずTP1RpcMethod属性を宣言します（COBOL言語の場合はTP1RPCMETHOD翻訳指令を追加します）。なお，メソッド名はSPP.NETのサービス名になります。

SPP.NETの初期化処理はInitializeSPPメソッド，終了時処理はFinalizeSPPメソッドで実装します。それぞれの処理が不要な場合はInitializeSPPメソッド，またはFinalizeSPPメソッドを実装する必要はありません。

4.3.4　.NETインタフェース定義を使用しないSPP.NETのコーディング例

＜この項の構成＞

(1)　C#の場合のコーディング例

(2)　J#の場合のコーディング例

(3)　Visual Basicの場合のコーディング例

(1)　C#の場合のコーディング例

using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Server;

namespace MyApplication
{
 public class MySPP : SPPBase
 {
   public MySPP()
   {
     // コンストラクタの処理
     // ** コンストラクタでOpenTP1のクラスは使用できません **
     // ** 必要な初期化処理はInitializeSPPで行ってください **
   }
   ~MySPP()
   {
     // デストラクタの処理
     // ** デストラクタでOpenTP1のクラスは使用できません **
     // ** 必要な終了処理はFinalizeSPPで行ってください **
   }
   // SPP初期化および終了処理メソッドの実装
   public override void InitializeSPP() {
     // SPPの初期化処理
   }
   public override void FinalizeSPP() {
     // SPPの終了処理
   }
   // サービスメソッドの実装（引数の並びは固定です）
   // クライアントからRPCで呼び出されます
   [TP1RpcMethod]
   public void Service1(byte[] inData, int inLen,
                        byte[] outData, ref int outLen)
   {
     // Service1()の処理
   }
   [TP1RpcMethod]
   public void Service2(byte[] inData, int inLen,
                        byte[] outData, ref int outLen)
   {
     // Service2()の処理
   }
   // SPP内部メソッドの実装（自由に実装できます）
   // RPCで呼び出すことはできません
   public string GetUserInfo()
   {
     // 処理
   }
   private void PutErrorLog(string errorInfo, int errorCode)
   {
     // 処理
   }
 }
}

(2)　J#の場合のコーディング例

package MyApplication;
import System.*;
import Hitachi.OpenTP1.*;
import Hitachi.OpenTP1.Server.*;

public class MySPP extends SPPBase
{
 public MySPP()
 {
   // コンストラクタの処理
   // ** コンストラクタでOpenTP1のクラスは使用できません **
   // ** 必要な初期化処理はInitializeSPPで行ってください **
 }
 protected void Finalize()
 {
   // Finalizeメソッドの処理
   // ** FinalizeメソッドでOpenTP1のクラスは使用できません **
   // ** 必要な終了処理はFinalizeSPPで行ってください **
 }
 // SPP初期化および終了処理メソッドの実装
 public void InitializeSPP() {
   // SPPの初期化処理
 }
 public void FinalizeSPP() {
   // SPPの終了処理
 }

 // サービスメソッドの実装 (引数の並びは固定です)
 // クライアントからRPCで呼び出されます
 /** @attribute TP1RpcMethod() */
 void Service1(ubyte[] inData, int inLen,
               ubyte[] outData, IntHolder outLen)
 {
   // Service1()の処理
 }

 /** @attribute TP1RpcMethod () */
 void Service2(ubyte[] inData, int inLen,
               ubyte[] outData, IntHolder outLen)
 {
   // Service2()の処理
 }

 // SPP内部メソッドの実装（自由に実装できます）
 // RPCで呼び出すことはできません
 public String GetUserInfo()
 {
   // 処理
 }
 private void PutErrorLog(String errorInfo, int errorCode)
 {
   // 処理
 }
}

(3)　Visual Basicの場合のコーディング例

Imports System
Imports Hitachi.OpenTP1
Imports Hitachi.OpenTP1.Server

Namespace MyApplication
 Public Class MySPP
   Inherits SPPBase
   Sub MySPP()
     ' コンストラクタの処理
     ' ** コンストラクタでOpenTP1のクラスは使用できません **
     ' ** 必要な初期化処理はInitializeSPPで行ってください **
   End Sub
   Sub Finalize()
     'Finalizeメソッドの処理
     ' ** FinalizeメソッドでOpenTP1のクラスは使用できません **
     ' ** 必要な終了処理はFinalizeSPPで行ってください **
   End Sub
   ' SPP初期化および終了処理メソッドの実装
   Public Overrides Sub InitializeSPP()
     ' SPPの初期化処理
   End Sub
   Public Overrides Sub FinalizeSPP()
     ' SPPの終了処理
   End Sub

   ' サービスメソッドの実装 (引数の並びは固定です)
   ' クライアントからRPCで呼び出されます
   <TP1RpcMethod()> _
   Public Sub Service1(ByVal inData() As Byte, _
                       ByVal inLen As Integer, _
                       ByVal outData() As Byte, _
                       ByRef outLen As Integer)
     ' Service1()の処理
   End Sub

   <TP1RpcMethod()> _
   Public Sub Service2(ByVal inData() As Byte, _
    ByVal inLen As Integer, _
    ByVal outData() As Byte, ByRef outLen As Integer)
     ' Service2()の処理
   End Sub

   ' SPP内部メソッドの実装（自由に実装できます）
   ' RPCで呼び出すことはできません
   Public Function GetUserInfo() As String
     ' 処理
   End Function
   Private Sub PutErrorLog(errorInfo As String, _
                           errorCode As Integer)
     ' 処理
   End Sub
 End Class
End Namespace

4.4　.NETインタフェース定義を使用したSPP.NETの呼び出し方法

SPP.NETまたはSUP.NETから.NETインタフェース定義を使用してSPP.NETを呼び出す方法について説明します。

Client .NET，Connector .NETの各UAPからの呼び出し方法については，それぞれマニュアル「TP1/Client for .NET Framework　使用の手引」，マニュアル「TP1/Connector for .NET Framework　使用の手引」の.NETインタフェース定義を使用したSPP.NETの呼び出し方法を参照してください。

＜この節の構成＞

4.4.1　クライアントスタブの生成

4.4.2　クライアントスタブの使用方法

4.4.3　.NETインタフェース定義から生成したクライアントスタブの使用例

4.4.4　.NETインタフェース定義を使用する場合のデータ長の見積もり

4.4.5　.NETインタフェース定義を使用する場合の留意事項

4.4.1　クライアントスタブの生成

クライアントスタブ生成コマンド（if2cstub）を使用して，.NETインタフェース定義からクライアントスタブを生成します。

クライアントスタブは，クライアントスタブを利用するクライアントアプリケーション（SPP.NETまたはSUP.NET）を記述するプログラム言語で生成してください。

.NETインタフェース定義を記述したプログラム言語と生成するクライアントスタブのプログラム言語が異なる場合，クライアントスタブのメソッドの引数のパラメタ属性は次のように対応づけられます。

表4-5　クライアントスタブでのパラメタ属性の対応づけ

プログラム言語とメソッドの引数のパラメタ属性（.NETインタフェース定義） | メソッドの引数のパラメタ属性（クライアントスタブ）
C# | J# | Visual Basic
C# | なし | なし | なし | ByVal
out | out | Holderクラス※1 | ByRef※1
ref | ref | Holderクラス | ByRef
J# | なし | なし | なし | ByVal
Holderクラス | ref※2 | Holderクラス | ByRef※2
Visual Basic | なし | なし | なし | ByVal
ByVal | なし | なし | ByVal
ByRef | ref | Holderクラス | ByRef

注※1

呼び出し元で値を設定しても，値はサーバに渡されません。

注※2

Holderクラスは，各Holderクラスが保持する型の参照渡しに対応づけられます。

4.4.2　クライアントスタブの使用方法

クライアントスタブを使用してサービス要求をする手順を次に示します。

クライアントスタブをサービスグループごとにインスタンス化します。
SPP.NETで使用する場合は，InitializeSPPメソッドでインスタンス化するか，または生成したインスタンスをstaticフィールドなどに保持するようにしてください。

入力パラメタにデータを設定します。

必要に応じてプロパティ（Flagsなど）を設定します。

サービスメソッドを呼び出します。

以降，必要に応じて2.～4.を繰り返し実行できます。

4.4.3　.NETインタフェース定義から生成したクライアントスタブの使用例

クライアントスタブの使用例を次に示します。

この例で呼び出すSPP.NETのサービスメソッドの情報は次のとおりです。

サービスグループ名：GRP1

インタフェース名：MyCompany.IGyoumuA

呼び出すサービスメソッド名（サービス名）：Service3

なお，コメント中の(1)，(2)などは「4.4.2　クライアントスタブの使用方法」の説明の番号に対応しています。

＜この項の構成＞

(1)　.NETインタフェース定義の定義例（C#の場合）

(2)　クライアントスタブの使用例（SPP.NET，C#の場合）

(3)　クライアントスタブの使用例（SPP.NET，J#の場合）

(4)　クライアントスタブの使用例（SPP.NET，Visual Basicの場合）

(5)　クライアントスタブの使用例（SUP.NET，C#の場合）

(6)　クライアントスタブの使用例（SUP.NET，J#の場合）

(7)　クライアントスタブの使用例（SUP.NET，Visual Basicの場合）

(1)　.NETインタフェース定義の定義例（C#の場合）

namespace MyCompany
{
 using System;

 public interface IGyoumuA
 {
   void Service1(string dataId, byte[] data);
   string[] Service2(string key);
   int Service3(int inCount, ref string[] ids);
 }
}

(2)　クライアントスタブの使用例（SPP.NET，C#の場合）

using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Server;

namespace MyCompany
{
 public class CallerSampleImpl : SPPBase, ICallerSample
 {
   private IGyoumuAStub server = null;
   …
   public override void InitializeSPP()
   {
     // (1) クライアントスタブの生成
     server = new IGyoumuAStub("GRP1");
   }

   public override void FinalizeSPP()
   {
     server = null;
   }

   [TP1RpcMethod]
   public int CallService3()
   {
     try {
       string[] ids =
         // (2) 入力データの設定
         new string[3]{"data1", "data2", "data3"};
       // (3) 同期応答型RPCに設定
       server.Flags = TP1ServerFlags.DCNOFLAGS;
       // (4) service3を呼び出す
       int ret = server.Service3(3, ref ids);
       return ret;
     } catch (TP1UserException exp) {
       // Service3()からユーザ例外がスローされた
     } catch (TP1RemoteException exp) {
       // Service3()で予期しない例外発生
     } catch (TP1ServerException exp) {
       // OpenTP1(クラスライブラリ)が検知したエラー
     } catch (TP1Exception exp) {
       // その他OpenTP1が検知したエラー
     } catch (Exception exp) {
       // 予期しない例外
   }
 }
}

(3)　クライアントスタブの使用例（SPP.NET，J#の場合）

package MyCompany;
import System.*;
import Hitachi.OpenTP1.*;
import Hitachi.OpenTP1.Server.*;

public class CallerSampleImpl
      extends SPPBase implements ICallerSample
{
   private IGyoumuAStub server = null;
   …
   public void InitializeSPP() throws TP1ServerException
   {
     // (1) クライアントスタブの生成
     server = new IGyoumuAStub("GRP1");
   }
   public void FinalizeSPP()
   {
     server = null;
   }
   /** @attribute TP1RpcMethod() */
   public int CallService3()
   {
     try {
       String[] ids =
         // (2) 入力データの設定
         new String[]{"data1", "data2", "data3"};
       // (2) 入力データの設定
       StringArrayHolder idsHolder = new StringArrayHolder();
       // (2) 入力データの設定
       idsHolder.set_Value(ids);
       // (3) 同期応答型RPCに設定
       server.set_Flags(TP1ServerFlags.DCNOFLAGS);
       // (4) service3を呼び出す
       int ret = server.Service3(3, idsHolder);
       return ret;
     } catch (TP1UserException exp) {
       // Service3()からユーザ例外がスローされた
     } catch (TP1RemoteException exp) {
       // Service3()で予期しない例外発生
     } catch (TP1ServerException exp) {
       // OpenTP1(クラスライブラリ)が検知したエラー
     } catch (TP1Exception exp) {
       // その他OpenTP1が検知したエラー
     } catch (System.Exception exp) {
       // 予期しない例外
     }
   }
}

(4)　クライアントスタブの使用例（SPP.NET，Visual Basicの場合）

Imports System
Imports Hitachi.OpenTP1
Imports Hitachi.OpenTP1.Server

Namespace MyCompany
 Public Class CallerSampleImpl
   Inherits SPPBase
   Implements ICallerSample
   Private server As IGyoumuAStub
   …
   Public Overrides Sub InitializeSPP()
     ' (1) クライアントスタブの生成
     server = New IGyoumuStub("GRP1")
   End Sub

   Public Overrides Sub FinalizeSPP()
     server = Nothing
   End Sub

   <TP1RpcMethod()> _
   Public Function CallService3() As Integer _
        Implements ICallerSample.CallerService3
     Try
       Dim ret As Integer
       Dim ids() As String = _
         ' (2) 入力データの設定
         New String(){"data1","data2","data3"}
       ' (3) 同期応答型RPCに設定
       server.Flags = TP1ServerFlags.DCNOFLAGS
       ' (4) service3を呼び出す
       ret = server.Service3(3, ids)
     Catch exp As TP1UserException
     ' Service3()からユーザ例外がスローされた
     Catch exp As TP1RemoteException
     ' Service3()で予期しない例外発生
     Catch exp As TP1ServerException
     ' OpenTP1(クラスライブラリ)が検知したエラー
     Catch exp As TP1Exception
     ' その他OpenTP1が検知したエラー
     Catch exp As Exception
     ' 予期しない例外
     End Try
   End Function
 End Class
End Namespace

(5)　クライアントスタブの使用例（SUP.NET，C#の場合）

using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Server;

namespace MyCompany
{
 public class CallerSample
 {
 public static void Main(string[] args)
   {
     try {
       IGyoumuAStub server =
         // (1) クライアントスタブの生成
         new IGyoumuAStub("GRP1");
       Rpc.Open();         // RPCオープン
       Adm.Complete();     // SUP.NET開始処理完了通知

       // (2) 入力データの設定
       string[] ids = new string[]{"data1","data2","data3"};
       // (3) 同期応答型RPCに設定
       server.Flags = TP1ServerFlags.DCNOFLAGS;
       // (4) service3を呼び出す
       int ret = server.Service3(3, ref ids);

       Rpc.Close();        // RPCクローズ
     } catch (TP1UserException exp) {
       // Service3()からユーザ例外がスローされた
     } catch (TP1RemoteException e) {
       // Service3()で予期しない例外発生
     } catch (TP1ServerException exp) {
       // OpenTP1(クラスライブラリ)が検知したエラー
     } catch (TP1Exception exp) {
       // その他OpenTP1が検知したエラー
     } catch (Exception exp) {
       // 予期しない例外
     }
   }
 }
}

(6)　クライアントスタブの使用例（SUP.NET，J#の場合）

package MyCompany;
import System.*;
import Hitachi.OpenTP1.*;
import Hitachi.OpenTP1.Server.*;

public class CallerSample
{
 public void main(String args[])
   {
    try {
     int ret;
       // (1) クライアントスタブの生成
       IGyoumuAStub server = new IGyoumuAStub("GRP1");
       Rpc.Open();                // RPCオープン
       Adm.Complete();            // SUP.NET開始処理完了通知

       // (2) 入力データの設定
       StringArrayHolder idsHolder = new StringArrayHolder();
       // (2) 入力データの設定
       String[] ids = new String[]{"data1","data2","data3"};
       // (2) 入力データの設定
       idsHolder.set_Value(ids);
       // (3) 同期応答型RPCに設定
       server.set_Flags(TP1ServerFlags.DCNOFLAGS);
       // (4) service3を呼び出す
       ret = server.Service3(3, idsHolder);

       Rpc.Close();               // RPCクローズ
     } catch (TP1UserException exp) {
       // Service3()からユーザ例外がスローされた
     } catch (TP1RemoteException exp) {
       // Service3()で予期しない例外発生
     } catch (TP1ServerException exp) {
       // OpenTP1(クラスライブラリ)が検知したエラー
     } catch (TP1Exception exp) {
       // その他OpenTP1が検知したエラー
     } catch (System.Exception exp) {
       // 予期しない例外
     }
   }
}

(7)　クライアントスタブの使用例（SUP.NET，Visual Basicの場合）

Imports System
Imports Hitachi.OpenTP1
Imports Hitachi.OpenTP1.Server

Namespace MyCompany
Public Class CallerSample

   Public Shared Sub Main(ByVal args() As String)
     Dim ret As Integer
     Try
       ' (1) クライアントスタブの生成
       Dim server As IGyoumuAStub = New IGyoumuAStub("GRP1")
       Rpc.Open()                  ' RPCオープン
       Adm.Complete()              ' SUP.NET開始処理完了通知

       Dim ids() As String = _
         ' (2) 入力データの設定
         New String(){"data1","data2","data3"}
       ' (3) 同期応答型RPCに設定
       server.Flags = TP1ServerFlags.DCNOFLAGS
       ' (4) service3を呼び出す
       ret = server.Service3(3, ids)

       Rpc.Close()                 ' RPCクローズ
     Catch exp As TP1UserException
     ' Service3()からユーザ例外がスローされた
     Catch exp As TP1RemoteException
     ' Service3()で予期しない例外発生
     Catch exp As TP1ServerException
     ' OpenTP1(クラスライブラリ)が検知したエラー
     Catch exp As TP1Exception
     ' その他OpenTP1が検知したエラー
     Catch exp As Exception
     ' 予期しない例外
     End Try
   End Sub
 End Class
End Namespace

4.4.4　.NETインタフェース定義を使用する場合のデータ長の見積もり

RPC要求インタフェースに.NETインタフェース定義を使用する場合，Extension .NETが入出力パラメタや戻り値と，送受信メッセージの間の変換をします。ただし，送受信メッセージがRPCメッセージの最大長を超えないように，要求メッセージ長および応答メッセージ長の値を見積もっておく必要があります。

要求メッセージ長および応答メッセージ長の見積もり式を次に示します

要求メッセージ長=（メソッドの入力パラメタおよび参照パラメタの最大データ長の合計値）+512

応答メッセージ長=（メソッドの出力パラメタ，参照パラメタ，および戻り値の最大データ長の合計値）+512

最大データ長の合計値には，データ型ごとの最大データ長を合計した値を代入してください。各データ型の最大データ長を次の表に示します。

表4-6　各データ型の最大データ長

データ型 | 最大データ長（バイト）※
System.Byte | 1
System.Int16 | 3
System.Int32 | 7
System.Int64 | 15
System.String | 格納された文字数×2+13
System.Byte[] | a+11
System.Int16[] | 2×a+11
System.Int32[] | 4×a+11
System.Int64[] | 8×a+11
System.String[] | [図データ]　
TP1ユーザ構造体 | 各メンバの最大長の合計+4
TP1ユーザ構造体配列 | [図データ]　

（凡例）

a：配列の要素数

注※

スタブによって自動的にアライメント調整されるサイズを含んでいます。

4.4.5　.NETインタフェース定義を使用する場合の留意事項

.NETインタフェース定義を使用する場合の留意事項を次に示します。

.NETインタフェース定義を使用してクライアントスタブを生成する場合，クライアントスタブの各インスタンスは，要求メッセージのうち最大の要求メッセージ長分のメモリを使用します。このメモリはクライアントスタブの解放時に解放されます。したがって，大きな要求メッセージを使用した場合で，そのクライアントスタブを頻繁に使用しないときまたはそれ以上大きな要求メッセージを使用しないときは，使用するたびにクライアントスタブを解放することでメモリ使用量を軽減できます。
逆に，同じクライアントスタブを頻繁に使用する場合は，クライアントスタブを毎回生成しないで，同じクライアントスタブを使い続けると性能が向上します。

クライアントスタブを使用するプロセスでは，応答メッセージ用として，1メガバイトのメモリを使用します。ただし，if2cstubコマンドの-mオプションを指定した場合は，「指定値×1メガバイト」のメモリを使用します。したがって，必要以上に大きな値を設定しないようにしてください。

複数のクライアントスタブを使用するプロセスでは，複数あるクライアントスタブの中で最もメモリを使用する値を応答メッセージ用としてプロセスで使用します。

4.5　サービス定義を使用したSPP.NETまたはSPPの呼び出し方法

SPP.NETまたはSUP.NETからサービス定義を使用してSPP.NETを呼び出す方法について説明します。

Client .NET，Connector .NETの各UAPからの呼び出し方法については，それぞれマニュアル「TP1/Client for .NET Framework　使用の手引」，マニュアル「TP1/Connector for .NET Framework　使用の手引」のサービス定義を使用したSPP.NETまたはSPPの呼び出し方法を参照してください。

＜この節の構成＞

4.5.1　クライアントスタブの生成

4.5.2　クライアントスタブの使用方法

4.5.3　サービス定義から生成したクライアントスタブの使用例

4.5.4　サービス定義から生成したクライアントスタブを使用する場合のデータ長の見積もり

4.5.1　クライアントスタブの生成

クライアントスタブ生成コマンド（spp2cstub）を使用して，サービス定義からクライアントスタブおよびカスタムレコードクラスを生成します。

クライアントスタブおよびカスタムレコードクラスは，クライアントスタブを利用するクライアントアプリケーション（SPP.NETまたはSUP.NET）を記述するプログラム言語で生成してください。

データ型定義で指定された各メンバは，カスタムレコードクラスのpublicプロパティとなります。

4.5.2　クライアントスタブの使用方法

クライアントスタブを使用してサービス要求をする手順を次に示します。

クライアントスタブをサービスグループごとにインスタンス化します。
SPP.NETで使用する場合は，InitializeSPPメソッドでインスタンス化するか，または生成したインスタンスをstaticフィールドなどに保持するようにしてください。

入力用，および出力用カスタムレコードクラスをインスタンス化します。

入力用カスタムレコードのプロパティに入力データを設定します。

必要に応じてプロパティ（Flagsなど）を設定します。

サービスメソッドを呼び出します。

出力用カスタムレコードのプロパティから応答データを参照します。

以降，必要に応じて2.～6.，または3.～6.を繰り返し実行できます。

4.5.3　サービス定義から生成したクライアントスタブの使用例

クライアントスタブの使用例を次に示します。

この例で呼び出すSPP.NETのサービスメソッドの情報は次のとおりです。

サービスグループ名：SVGRP1

サービス定義名称：GYOUMU1

呼び出すサービスメソッド名（サービス名）：GETDATA1

入力用カスタムレコードクラス名：in_data

出力用カスタムレコードクラス名：out_data

なお，コメント中の(1)，(2)などは「4.5.2　クライアントスタブの使用方法」の説明の番号に対応しています。

＜この項の構成＞

(1)　サービス定義の定義例（C＃の場合）

(2)　カスタムレコードクラスの出力例（C#の場合，in_data.cs）

(3)　クライアントスタブの使用例（SPP.NET，C#の場合）

(4)　クライアントスタブの使用例（SPP.NET，J#の場合）

(5)　クライアントスタブの使用例（SPP.NET，Visual Basicの場合）

(6)　クライアントスタブの使用例（SUP.NET，C#の場合）

(7)　クライアントスタブの使用例（SUP.NET，J#の場合）

(8)　クライアントスタブの使用例（SUP.NET，Visual Basicの場合）

(1)　サービス定義の定義例（C＃の場合）

(a)　サービス定義の定義例（業務1のサービス定義）

#include "mydata.h"
/* 業務1のサービス定義 */
interface GYOUMU1 {
   GETDATA1(in_data, out_data);
   GETDATA2(in_data, out_data2);
}

(b)　データ型定義の定義例（mydata.h）

struct in_data {
      long i_basho[3];
      long i_kakaku;
};
struct out_data {
      char o_name[20];
      char o_basho[16];
      long o_kakaku;
      char o_inf[80];
};
struct out_data2 {
      int o_count;
      struct data {
             char o_name[20];
             char o_basho[16];
             long o_kakaku;
             char o_inf[80];
      } data_t[100];
};

(2)　カスタムレコードクラスの出力例（C#の場合，in_data.cs）

using Hitachi.OpenTP1.Common;

namespace MyCompany
{
   public class in_data : RecordImpl
   {
       public in_data() : base("default")
       {
           …
       }
       public in_data(string recordName) : base(recordName)
       {
           …
       }
       …
       private int[] _i_basho;
       public int[] i_basho
       {
           get
           {
               return _i_basho;
           }
           set
           {
               _i_basho = value;
           }
       }

       private int _i_kakaku = 0;
       public int i_kakaku
       {
           get
           {
               return _i_kakaku;
           }
           set
           {
               _i_kakaku = value;
           }
       }
       …
   }
}

(3)　クライアントスタブの使用例（SPP.NET，C#の場合）

using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Server;

namespace MyCompany
{
public class CallerSample2Impl : SPPBase, ICallerSample2
 {
   private GYOUMU1Stub server = null;
   …
   public override void InitializeSPP()
   {
     // (1) クライアントスタブの生成
     server = new GYOUMU1Stub("SVGRP1");
   }
   public override void FinalizeSPP()
   {
     server = null;
   }
   [TP1RpcMethod]
   public string CallGETDATA1()
   {
     string ret;
     try {
       // (2) 入力用カスタムレコードの生成
       in_data inRecord = new in_data();
       // (2) 出力用カスタムレコードの生成
       out_data outRecord = new out_data();
       inRecord.i_basho[0] = 56;  // (3) 入力データの設定
       inRecord.i_basho[1] = 43;  // (3) 入力データの設定
       inRecord.i_basho[2] = 18;  // (3) 入力データの設定
       // (4) 同期応答型RPCに設定
       server.Flags = TP1ServerFlags.DCNOFLAGS;
       // (5) GETDATA1を呼び出す
       server.GETDATA1(inRecord, outRecord);
       // (6) 応答データの取り出し
       ret = outRecord.o_name.Trim();
       return ret;
     } catch (TP1UserException exp) {
       // GETDATA1()からユーザ例外がスローされた
     } catch (TP1RemoteException exp) {
       // GETDATA1()で予期しない例外発生
     } catch (TP1ServerException exp) {
       // OpenTP1(クラスライブラリ)が検知したエラー
     } catch (TP1Exception exp) {
       // その他OpenTP1が検知したエラー
     } catch (Exception exp) {
       // 予期しない例外
     }
   }
 }
}

(4)　クライアントスタブの使用例（SPP.NET，J#の場合）

package MyCompany;
import System.*;
import Hitachi.OpenTP1.*;
import Hitachi.OpenTP1.Server.*;

public class CallerSample2Impl
      extends SPPBase implements ICallerSample2
{
   private GYOUMU1Stub server = null;
   …
   public void InitializeSPP() throws TP1ServerException
   {
     // (1) クライアントスタブの生成
     server = new GYOUMU1Stub("SVGRP1");
   }
   public void FinalizeSPP()
   {
     server = null;
   }

   /** @attribute TP1RpcMethod() */
   public String CallGETDATA1()
   {
     String ret;
     try {
       // (2) 入力用カスタムレコードの生成
       in_data inRecord = new in_data();
       // (2) 出力用カスタムレコードの生成
       out_data outRecord = new out_data();
       inRecord.get_i_basho()[0] = 56;  // (3) 入力データの設定
       inRecord.get_i_basho()[1] = 43;  // (3) 入力データの設定
       inRecord.get_i_basho()[2] = 18;  // (3) 入力データの設定
       // (4) 同期応答型RPCに設定
       server.set_Flags(TP1ServerFlags.DCNOFLAGS);
       // (5) GETDATA1を呼び出す
       server.GETDATA1(inRecord, outRecord);
       // (6) 応答データの取り出し
       ret = outRecord.get_o_name().trim();
       return ret;
     } catch (TP1UserException exp) {
       // GETDATA1()からユーザ例外がスローされた
     } catch (TP1RemoteException exp) {
       // GETDATA1()で予期しない例外発生
     } catch (TP1ServerException exp) {
       // OpenTP1(クラスライブラリ)が検知したエラー
     } catch (TP1Exception exp) {
       // その他OpenTP1が検知したエラー
     } catch (System.Exception exp) {
       // 予期しない例外
     }
   }
}

(5)　クライアントスタブの使用例（SPP.NET，Visual Basicの場合）

Imports System
Imports Hitachi.OpenTP1
Imports Hitachi.OpenTP1.Server

Namespace MyCompany
 Public Class CallerSample2Impl
   Inherits SPPBase
   Implements ICallerSample2
   Private server As GYOUMU1Stub
   …
   Public Overrides Sub InitializeSPP()
     ' (1) クライアントスタブの生成
     server = New GYOUMU1Stub("SVGRP1")
   End Sub
   Public Overrides Sub FinalizeSPP()
     server = Nothing
   End Sub
   <TP1RpcMethod()> _
   Public Function CallGETDATA1 () As String _
     Implements ICallerSample2.CallGETDATA1
     Try
       Dim ret As String
       ' (2) 入力用カスタムレコードの生成
       Dim inRecord As in_data = New in_data()
       ' (2) 出力用カスタムレコードの生成
       Dim outRecord As out_data = New out_data()
       inRecord.i_basho(0) = 56  ' (3) 入力データの設定
       inRecord.i_basho(1) = 43  ' (3) 入力データの設定
       inRecord.i_basho(2) = 18  ' (3) 入力データの設定
       ' (4) 同期応答型RPCに設定
       server.Flags = TP1ServerFlags.DCNOFLAGS
       ' (5) GETDATA1を呼び出す
       server.GETDATA1(inRecord, outRecord)
       ' (6) 応答データの取り出し
       ret = outRecord.o_name.Trim()
     Catch exp As TP1UserException
       ' GETDATA1()からユーザ例外がスローされた
     Catch exp As TP1RemoteException
       ' GETDATA1()で予期しない例外発生
     Catch exp As TP1ServerException
       ' OpenTP1(クラスライブラリ)が検知したエラー
     Catch exp As TP1Exception
       ' その他OpenTP1が検知したエラー
     Catch exp As Exception
       ' 予期しない例外
     End Try
   End Function
 End Class
End Namespace

(6)　クライアントスタブの使用例（SUP.NET，C#の場合）

using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Server;

namespace MyCompany
{
 public class Caller2Sample
 {
   …
   public static void Main(string[] args)
   {
     try {
       // (1) クライアントスタブの生成
       GYOUMU1Stub server = new GYOUMU1Stub("SVGRP1");
       Rpc.Open();          // RPCオープン
       Adm.Complete();      // SUP.NET開始処理完了通知

       // (2) 入力用カスタムレコードの生成
       in_data inRecord = new in_data();
       // (2) 出力用カスタムレコードの生成
       out_data outRecord = new out_data();
       inRecord.i_basho[0] = 56;  // (3) 入力データの設定
       inRecord.i_basho[1] = 43;  // (3) 入力データの設定
       inRecord.i_basho[2] = 18;  // (3) 入力データの設定
       // (4) 同期応答型RPCに設定
       server.Flags = TP1ServerFlags.DCNOFLAGS;
       // (5)GETDATA1を呼び出す
       server.GETDATA1(inRecord, outRecord);
       // (6) 応答データの取り出し
       string name = outRecord.o_name.Trim();

       Rpc.Close();               // RPCクローズ
     } catch (TP1UserException exp) {
       // GETDATA1()からユーザ例外がスローされた
     } catch (TP1RemoteException exp) {
       // GETDATA1()で予期しない例外発生
     } catch (TP1ServerException exp) {
       // OpenTP1(クラスライブラリ)が検知したエラー
     } catch (TP1Exception exp) {
       // その他OpenTP1が検知したエラー
     } catch (Exception exp) {
       // 予期しない例外
     }
   }
 }
}

(7)　クライアントスタブの使用例（SUP.NET，J#の場合）

package MyCompany;
import System.*;
import Hitachi.OpenTP1.*;
import Hitachi.OpenTP1.Server.*;

public class Caller2Sample
{
 …
   public static void main(String[] args)
   {
     try {
       String name;
       // (1) クライアントスタブの生成
       GYOUMU1Stub server = new GYOUMU1Stub("SVGRP1");
       Rpc.Open();          // RPCオープン
       Adm.Complete();      // SUP.NET開始処理完了通知

       // (2) 入力用カスタムレコードの生成
       in_data inRecord = new in_data();
       // (2) 出力用カスタムレコードの生成
       out_data outRecord = new out_data();
       inRecord.get_i_basho()[0] = 56;  // (3) 入力データの設定
       inRecord.get_i_basho()[1] = 43;  // (3) 入力データの設定
       inRecord.get_i_basho()[2] = 18;  // (3) 入力データの設定
       // (4) 同期応答型RPCに設定
       server.set_Flags(TP1ServerFlags.DCNOFLAGS);
       // (5) GETDATA1を呼び出す
       server.GETDATA1(inRecord, outRecord);
       // (6) 応答データの取り出し
       name = outRecord.get_o_name().trim();

       Rpc.Close();                     // RPCクローズ
     } catch (TP1UserException exp) {
       // GETDATA1()からユーザ例外がスローされた
     } catch (TP1RemoteException exp) {
       // GETDATA1()で予期しない例外発生
     } catch (TP1ServerException exp) {
       // OpenTP1(クラスライブラリ)が検知したエラー
     } catch (TP1Exception exp) {
       // その他OpenTP1が検知したエラー
     } catch (Exception exp) {
       // 予期しない例外
     }
   }
}

(8)　クライアントスタブの使用例（SUP.NET，Visual Basicの場合）

Imports System
Imports Hitachi.OpenTP1
Imports Hitachi.OpenTP1.Server

Namespace MyCompany
 Public Class Caller2Sample
 …
   Public Shared Sub Main(ByVal args() As String)
     Dim name As String
     Dim inRecord As in_data
     Dim outRecord As out_data
     Try
       ' (1) クライアントスタブの生成
       Dim server As GYOUMU1Stub = _
                     New GYOUMU1Stub("SVGRP1")
       Rpc.Open()         ' RPCオープン
       Adm.Complete()     ' SUP.NET開始処理完了通知

       ' (2) 入力用カスタムレコードの生成
       inRecord = New in_data()
       ' (2) 出力用カスタムレコードの生成
       outRecord = New out_data()
       inRecord.i_basho(0) = 56  ' (3) 入力データの設定
       inRecord.i_basho(1) = 43  ' (3) 入力データの設定
       inRecord.i_basho(2) = 18  ' (3) 入力データの設定
       ' (4) 同期応答型RPCに設定
       server.Flags = TP1ServerFlags.DCNOFLAGS
       ' (5) GETDATA1を呼び出す
       server.GETDATA1(inRecord, outRecord)
       ' (6) 応答データの取り出し
       name = outRecord.o_name.Trim()

       Rpc.Close()               ' RPCクローズ
     Catch exp As TP1UserException
     ' GETDATA1()からユーザ例外がスローされた
     Catch exp As TP1RemoteException
     ' GETDATA1()で予期しない例外発生
     Catch exp As TP1ServerException
     ' OpenTP1(クラスライブラリ)が検知したエラー
     Catch exp As TP1Exception
     ' その他OpenTP1が検知したエラー
     Catch exp As Exception
     ' 予期しない例外
     End Try
   End Sub
 End Class
End Namespace

4.5.4　サービス定義から生成したクライアントスタブを使用する場合のデータ長の見積もり

サービス定義から生成したクライアントスタブを使用する場合，Extension .NETがカスタムレコードと，送受信メッセージの間の変換をします。ただし，送受信メッセージがRPCメッセージの最大長を超えないように，要求メッセージ長および応答メッセージ長の値を見積もっておく必要があります。

要求メッセージ長および応答メッセージ長の見積もり式を次に示します

要求メッセージ長=データ型定義の各メンバのデータ長の合計値

応答メッセージ長=データ型定義の各メンバのデータ長の合計値

データ長の合計値には，データ型ごとのデータ長を合計した値を代入してください。各データ型のデータ長を次の表に示します。

表4-7　各データ型のデータ長

データ型 | データ長（バイト）
char | 1
short | 2
int | 4
long | 4
char[a] | 1×a
byte[a] | 1×a
short[a] | 2×a
int[a] | 4×a
long[a] | 4×a
char[a][b | a×b
struct | 構造体の各メンバのサイズの合計
struct[a] | 構造体の各メンバのサイズの合計×a

（凡例）

a，b：配列の要素数

なお，可変長構造体配列の場合，配列の最大要素数で見積もるようにしてください。

要求メッセージ長および応答メッセージ長の見積もりが完了したら，カスタムレコードクラスのprivate constフィールドの_lengthを参照して，見積もり後のメッセージ長を確認します。ただし，可変長構造体配列を使用している場合，この方法では確認できません。可変長構造体配列を使用している場合は，spp2cstubコマンドに-bオプションを指定してコマンドを実行し，標準出力に出力されたバッファサイズを参照して，メッセージ長を確認してください。

4.6　バイナリデータを使用したSPP.NETまたはSPPの呼び出し方法

SPP.NETまたはSUP.NETからバイナリデータを使用してSPP.NETまたはSPPを呼び出す方法について説明します。

Client .NET，Connector .NETの各UAPからの呼び出し方法については，それぞれマニュアル「TP1/Client for .NET Framework　使用の手引」のバイナリデータを使用したSPP.NETまたはSPPの呼び出し方法，マニュアル「TP1/Connector for .NET Framework　使用の手引」のインデクスドレコードを使用したSPP.NETまたはSPPの呼び出し方法を参照してください。

＜この節の構成＞

4.6.1　バイナリデータを使用する場合の留意事項

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

4.6.1　バイナリデータを使用する場合の留意事項

バイナリデータを使用してRPC要求をする場合は，.NETインタフェース定義，サービス定義，およびクライアントスタブは使用しません。

.NETインタフェース定義を使用していないSPP.NETを呼び出すことができます。.NETインタフェース定義を使用したSPP.NETに対してはこの方法でのRPC要求はできません。

参考

バイナリデータを使用したRPC要求は，通常，C言語やCOBOL言語で記述されたSPPの呼び出しに使用します。

バイナリデータを使用してRPC要求をする場合は，RpcクラスのCallメソッドを使用します。Callメソッドの引数には入力データ用のバイト配列と出力データ用のバイト配列があり，これらの領域をSPP.NET，またはSUP.NETで用意しておく必要があります。

RPCのメッセージの形式は呼び出し元のSPP.NETまたはSUP.NETと呼び出し先のSPP.NETまたはSPPとの間であらかじめ決めておきます。この形式に従って，SPP.NETまたはSUP.NETでバイナリデータとしての編集処理をする必要があります。

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

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

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

サービスグループ名：SVGRP1

呼び出すサービス名：SERV1

＜この項の構成＞

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

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

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

(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

4.7　DABroker for .NET Frameworkを使用したUAPの作成方法

DABroker for .NET Frameworkのデータプロバイダを使用して，XAインタフェースによるDBMSとのトランザクション連携をするSPP.NET，およびSUP.NETを作成する方法について説明します。

なお，.NETインタフェース定義およびサービス定義の使用有無に関係なく，すべてのSPP.NETおよびSUP.NETはDABroker for .NET Frameworkと連携できます。

＜この節の構成＞

4.7.1　DABroker for .NET Frameworkを使用したUAP作成の概要

4.7.2　DABroker for .NET Frameworkを使用したSPP.NETおよびSUP.NETのコーディング例

4.7.3　DABroker for .NET Frameworkを使用したUAPを作成するときの注意事項

4.7.1　DABroker for .NET Frameworkを使用したUAP作成の概要

XAインタフェースによるDBMSとのトランザクション連携をするSPP.NETおよびSUP.NETでは，次の操作でDABroker for .NET Frameworkのクラスを使用します。

DBMSとのコネクションの作成，オープン，および解放

データベースアクセス処理

DABroker for .NET Frameworkのクラス，接続文字列などの詳細については，マニュアル「DABroker for .NET Framework」を参照してください。

また，UAPを作成する際は，トランザクションシーケンスを意識する必要があります。詳細については，「2.4.5　トランザクションシーケンス」を参照してください。

4.7.2　DABroker for .NET Frameworkを使用したSPP.NETおよびSUP.NETのコーディング例

DABroker for .NET Frameworkと連携したSPP.NETおよびSUP.NETのコーディング例を示します。

＜この項の構成＞

(1)　SPP.NET，C#の場合のコーディング例（InitializeSPPメソッドでDBMSとのコネクションを生成する）

(2)　SPP.NET，C#の場合のコーディング例（InitializeSPPメソッドでDBMSとのコネクションを生成しない）

(3)　SUP.NET，C#の場合のコーディング例

(1)　SPP.NET，C#の場合のコーディング例（InitializeSPPメソッドでDBMSとのコネクションを生成する）

using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Server;
using Hitachi.DABroker;   // DABroker for .NET Frameworkのクラス

namespace MyCompany
{
 public class CallerSampleImpl : SPPBaseICallerSample
 {
   private IGyoumuAStub server = null;
   private DABConnection dabCon = null;         // DBMSとの接続
   …
   public override void InitializeSPP()
   {
     server = new IGyoumuAStub("GRP1");
     // クライアントスタブの生成
     dabCon = new DABConnection("接続文字列");
     // コネクションの生成
     try {
       dabCon.Open();                // コネクションのオープン
     } catch (DABException exp) {
       // DABrokerから例外がスローされた
     } catch (Exception exp) {
       // 予期しない例外
     }
   }

   public override void FinalizeSPP()
   {
     server = null;
     if (dabCon != null) {           // コネクションの解放
       dabCon.Close();
       dabCon = null;
     }
   }

   [TP1RpcMethod]
   public void DBService()
   {
     try {
       Trn.Begin();
       …                            // データベースアクセス処理
       Trn.Commit();
     } catch (DABException exp) {
       // DABrokerから例外がスローされた
       Trn.Rollback();               // ロールバック
     } catch (Exception exp) {
       // 予期しない例外
     }
   }
 }
}

(2)　SPP.NET，C#の場合のコーディング例（InitializeSPPメソッドでDBMSとのコネクションを生成しない）

using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Server;
using Hitachi.DABroker;   // DABroker for .NET Frameworkのクラス

namespace MyCompany
{
 public class CallerSampleImpl : SPPBaseICallerSample
 {
   private IGyoumuAStub server = null;
   …
   public override void InitializeSPP()
   {
     server = new IGyoumuAStub("GRP1");
     // クライアントスタブの生成
   }

   public override void FinalizeSPP()
   {
     server = null;
   }

   [TP1RpcMethod]
   public void DBService()
   {
     private DABConnection dabCon = null;
     // DBMSとの接続
     try {
       Trn.Begin();
       dabCon = new DABConnection("接続文字列");
       // コネクションの生成
       dabCon.Open();              // コネクションのオープン
       …                          // データベースアクセス処理
       Trn.Commit();
     } catch (DABException exp) {
       // DABrokerから例外がスローされた
       Trn.Rollback();             // ロールバック
     } catch (Exception exp) {
       // 予期しない例外
     } finally {
       if (dabCon != null) {       // コネクションの解放
         dabCon.Close();
         dabCon = null;
       }
     }
   }
 }
}

(3)　SUP.NET，C#の場合のコーディング例

using System;
using Hitachi.OpenTP1;
using Hitachi.OpenTP1.Server;
using Hitachi.DABroker;   // DABroker for .NET Frameworkのクラス

namespace MyCompany
{
 public class CallerSample
 {
   …
   public static void Main(string[] args)
   {
     private DABConnection dabCon = null;
     // DBMSとの接続
     try {
       …
       Rpc.Open();                    // RPCオープン
       Adm.Complete();                // SUP.NET開始処理完了通知
       …
       Trn.Begin();
       dabCon = new DABConnection("接続文字列");
       // コネクションの生成
       dabCon.Open();                 // コネクションのオープン
       // データベースアクセス処理
       Trn.Commit();
       …
     Rpc.Close();                     // RPCクローズ
   } catch (DABException exp) {
     // DABrokerから例外がスローされた
     Trn.Rollback();                  // ロールバック
   } catch (TP1UserException exp) {
     // サービスを要求したメソッドからユーザ例外がスローされた
   } catch (TP1RemoteException exp) {
     // サービスを要求したメソッドで予期しない例外が発生
   } catch (TP1ServerException exp) {
     // OpenTP1（クラスライブラリ）が検知したエラー
   } catch (TP1Exception exp) {
     // OpenTP1（クラスライブラリ以外）が検知したエラー
   } catch (Exception exp) {
     // 予期しない例外
   } finally {
     if (dabCon != null) {            // コネクションの解放
       dabCon.Close();
       dabCon = null;
     }
   }
 }
}

4.7.3　DABroker for .NET Frameworkを使用したUAPを作成するときの注意事項

DABroker for .NET Frameworkを使用したUAPを作成するときの注意事項を示します。

DABroker for .NET Frameworkがサポートするプログラム言語については，マニュアル「DABroker for .NET Framework」を参照してください。

連携できるDBMSとそのバージョンについては，TP1/Serverの「Readmeファイル」，およびマニュアル「DABroker for .NET Framework」を参照してください。また，XAインタフェースによってグローバルトランザクションと連携できるDBMSとそのバージョンについては，TP1/Serverの「Readmeファイル」を参照してください。

接続文字列に「XA="false"」を指定したコネクションは，グローバルトランザクションと連携できません。

連携するDBMSにHiRDBを使用する場合は，接続文字列のDataSource属性に指定する環境変数グループ名は指定しないでください。

連携するDBMSにHiRDBを使用する場合で，接続文字列のXA属性にtrueを指定したときは，DataSource属性にHiRDB環境変数グループ名を指定しないでください。XA属性にfalseを指定したときは，DataSource属性にHiRDB環境変数グループ名を指定してください。

連携するDBMSにORACLEを使用する場合は，TP1/Serverのユーザサーバ用xa_open関数用文字列にはデータベースフィールドを指定してください。このデータベースフィールドで指定したデータベース名称と，接続文字列のDataSource属性に指定するデータベース名称を一致させる必要があります。

4.8　COBOL言語でのUAPの作成方法

COBOL言語でUAPを作成する方法について説明します。なお，必要に応じて次のマニュアルも参照してください。

「COBOL2002 for .NET Framework　ユーザーズガイド」

「COBOL2002 for .NET Framework　言語」

＜この節の構成＞

4.8.1　COBOL言語でのSPP.NETの実装

4.8.2　COBOL言語でのSUP.NETの実装

4.8.3　TP1/ServerのCOBOL言語のサービスルーチンの利用

4.8.4　プログラム作成時の注意事項

4.8.1　COBOL言語でのSPP.NETの実装

COBOL言語でSPP.NETを実装する方法として次の二つの方法があります。

オブジェクト指向でSPP.NETを作成する（オブジェクト指向型SPP.NET）

手続き型のプログラム定義でSPP.NETを作成する（手続き型SPP.NET）

ここでは，オブジェクト指向型SPP.NETおよび手続き型SPP.NETを作成する方法について説明します。

＜この項の構成＞

(1)　オブジェクト指向型SPP.NET

(2)　手続き型SPP.NET

(3)　SPP.NETのコンパイル

(1)　オブジェクト指向型SPP.NET

オブジェクト指向型SPP.NETは，SPP.NETの標準のアプリケーション開発形態である「オブジェクト指向」で作成します。サービスをクラスのメソッドとして記述し，複数のサービスを統括するクラス定義を記述します。

図4-1　オブジェクト指向型SPP.NETのクラス定義

オブジェクト指向でSPP.NETを作成する場合，サービスをクラスのメソッドとして記述します。メソッド名はサービス名と同じにします。

(a)　オブジェクト指向型SPP.NETを実装する場合の規則

オブジェクト指向型SPP.NETを実装する場合は，次の規則に従ってクラスを実装します。

PROPAGATE翻訳指令を使って例外自動伝播（propagate）をOFFにしてください。PROPAGATE翻訳指令の詳細については，マニュアル「COBOL2002 for .NET Framework　言語」を参照してください。

Hitachi.OpenTP1.Server.SPPBaseクラスを継承します。

リポジトリ段落で，継承するHitachi.OpenTP1.Server.SPPBaseクラスとサービスメソッドの仮引数で使用するSystem.Byte配列を参照するように指定します。

PUBLICクラスとして宣言します。

SPP.NETのサービスメソッドをPUBLICメソッドとして実装します。なお，メソッド名はSPP.NETのサービス名になります。

SPP.NETの初期化処理はInitializeSPPメソッド，終了時処理はFinalizeSPPメソッドで実装します。それぞれの処理が不要な場合はInitializeSPPメソッド，またはFinalizeSPPメソッドを実装する必要はありません。

SPP.NETのサービスメソッドとするために，TP1RPCMETHOD指令を付加する必要があります。TP1RPCMETHOD指令については，マニュアル「COBOL2002 for .NET Framework　言語」を参照してください。

サービスメソッドの仮引数は，常に次の四つの引数を指定します。

仮引数 | 渡し方 | 型 | 説明
第1引数 | 値渡し | バイト配列オブジェクト | 入力パラメタのバイト配列
第2引数 | 値渡し | PIC S9(9) COMP-5 | 入力パラメタ長
第3引数 | 値渡し | バイト配列オブジェクト | 出力パラメタのバイト配列
第4引数 | 参照渡し | PIC S9(9) COMP-5 | 出力パラメタ長

引数の定義例を次に示します。

REPOSITORY.
CLASS BYTE-ARRAY AS 'System.Byte' IS ARRAY.
…
LINKAGE SECTION.
01 INDATA              USAGE OBJECT REFERENCE BYTE-ARRAY.
01 INDATA-LEN          PIC S9(9) COMP-5.
01 OUTDATA             USAGE OBJECT REFERENCE BYTE-ARRAY.
01 OUTDATA-LEN         PIC S9(9) COMP-5.
PROCEDURE DIVISION USING BY VALUE      INDATA INDATA-LEN OUTDATA
                        BY REFERENCE  OUTDATA-LEN.

(b)　オブジェクト指向型SPP.NETのコーディング例

オブジェクト指向型SPP.NETのコーディング例を次に示します。

>> PROPAGATE OFF
IDENTIFICATION DIVISION.
CLASS-ID. MYSPP AS "MYAPPLICATION.MYSPP" IS PUBLIC
          INHERITS SPPBASE.

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
  CLASS SPPBASE    AS 'Hitachi.OpenTP1.Server.SPPBase'.
  CLASS BYTE-ARRAY AS 'System.Byte' IS ARRAY.

IDENTIFICATION DIVISION.
OBJECT.
DATA DIVISION.
WORKING-STORAGE SECTION.
PROCEDURE DIVISION.

* SPP初期化および終了処理メソッドの実装
IDENTIFICATION DIVISION.
METHOD-ID. InitializeSPP IS PUBLIC OVERRIDE.
PROCEDURE DIVISION.
* SPPの初期化処理
END METHOD InitializeSPP.

IDENTIFICATION DIVISION.
METHOD-ID. FinalizeSPP IS PUBLIC OVERRIDE.
PROCEDURE DIVISION.
* SPPの終了処理
END METHOD FinalizeSPP.

* サービスメソッド定義 (引数の並びは固定です)
* クライアントからRPCで呼び出されます
>> TP1RPCMETHOD
IDENTIFICATION DIVISION.
METHOD-ID. SERVICE1 IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 INDATA       USAGE OBJECT REFERENCE BYTE-ARRAY.
01 INDATA-LEN   PIC S9(9) COMP-5.
01 OUTDATA      USAGE OBJECT REFERENCE BYTE-ARRAY.
01 OUTDATA-LEN  PIC S9(9) COMP-5.
PROCEDURE DIVISION USING BY VALUE     INDATA INDATA-LEN OUTDATA
                         BY REFERENCE OUTDATA-LEN.
* SERVICE1の処理
END METHOD SERVICE1.
>> TP1RPCMETHOD
IDENTIFICATION DIVISION.
METHOD-ID. SERVICE2 IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
01 INDATA       USAGE OBJECT REFERENCE BYTE-ARRAY.
01 INDATA-LEN   PIC S9(9) COMP-5.
01 OUTDATA      USAGE OBJECT REFERENCE BYTE-ARRAY.
01 OUTDATA-LEN  PIC S9(9) COMP-5.
PROCEDURE DIVISION USING BY VALUE     INDATA INDATA-LEN OUTDATA
                         BY REFERENCE OUTDATA-LEN.
* SERVICE2の処理
END METHOD SERVICE2.

* SPP内部メソッドの実装（自由に実装できます）
* RPCで呼び出すことはできません
IDENTIFICATION DIVISION.
METHOD-ID. GETUSERINFO IS PUBLIC.
DATA DIVISION.
LINKAGE SECTION.
PROCEDURE DIVISION.
* 処理
END METHOD GETUSERINFO.

IDENTIFICATION DIVISION.
METHOD-ID. PUTERRORLOG IS PRIVATE.
DATA DIVISION.
LINKAGE SECTION.
PROCEDURE DIVISION.
* 処理
END METHOD PUTERRORLOG.

END OBJECT.
END CLASS MYSPP.

(2)　手続き型SPP.NET

手続き型SPP.NETは，サービスプログラムを手続き型のプログラム定義を使って記述します。サーバプログラムは，オブジェクトサーバの形態を取る必要があるため，COBOL言語の手続き型プログラムであるサービスプログラムを呼び出すための，COBOL言語のクラス定義が必要になります。このクラス定義で構成されるCOBOL言語のプログラムを，手続き型用ラッパプログラムと呼びます。この手続き型用ラッパプログラムのクラス定義では，サービスプログラムと同じ名前のメソッドを定義します。そして，そのメソッドの中身は，メソッドの仮引数のバイト配列を英数字項目に変換する処理と，サービスプログラムをCALL文で呼び出すだけにします。既存のSPPをSPP.NETにする場合は，この方法が適しています。

図4-2　手続き型SPP.NETの定義と制御

(a)　手続き型SPP.NETを実装する場合の規則

手続き型SPP.NETを実装する場合は，次の規則に従ってクラスを実装します。

Hitachi.OpenTP1.Server.SPPBaseクラスを継承します。

リポジトリ段落で，継承するHitachi.OpenTP1.Server.SPPBaseクラスとサービスメソッドの仮引数で使用するSystem.Byte配列を参照するように指定します。

PUBLICクラスとして宣言します。

SPP.NETのサービスメソッドをPUBLICメソッドとして実装します。なお，メソッド名はSPP.NETのサービス名になります。

SPP.NETの初期化処理はInitializeSPPメソッド，終了時処理はFinalizeSPPメソッドで実装します。それぞれの処理が不要な場合はInitializeSPPメソッド，またはFinalizeSPPメソッドを実装する必要はありません。

SPP.NETのサービスメソッドとするために，TP1RPCMETHOD指令を付加する必要があります。TP1RPCMETHOD指令については，マニュアル「COBOL2002 for .NET Framework　言語」を参照してください。

サービスメソッドの仮引数は，常に次の四つの引数を指定します。

仮引数 | 渡し方 | 型 | 説明
第1引数 | 値渡し | バイト配列オブジェクト | 入力パラメタのバイト配列
第2引数 | 値渡し | PIC S9(9) COMP-5 | 入力パラメタ長
第3引数 | 値渡し | バイト配列オブジェクト | 出力パラメタのバイト配列
第4引数 | 参照渡し | PIC S9(9) COMP-5 | 出力パラメタ長

引数の定義例を次に示します。

REPOSITORY.
CLASS BYTE-ARRAY AS 'System.Byte' IS ARRAY.
…
LINKAGE SECTION.
01 INDATA              USAGE OBJECT REFERENCE BYTE-ARRAY.
01 INDATA-LEN          PIC S9(9) COMP-5.
01 OUTDATA             USAGE OBJECT REFERENCE BYTE-ARRAY.
01 OUTDATA-LEN         PIC S9(9) COMP-5.
PROCEDURE DIVISION USING BY VALUE      INDATA INDATA-LEN OUTDATA
                        BY REFERENCE  OUTDATA-LEN.

サービスをプログラム定義で記述します。プログラム名はサービス名と同じにします。また，引数は次のようにします。

仮引数 | 渡し方 | 型 | 説明
第1引数 | 参照渡し | PIC X(n)または集団項目 | 入力パラメタのバイト列
第2引数 | 参照渡し | PIC S9(9) COMP-5 | 入力パラメタ長
第3引数 | 参照渡し | PIC X(m)または集団項目 | 出力パラメタのバイト列
第4引数 | 参照渡し | PIC S9(9) COMP-5 | 出力パラメタ長

引数の定義例を次に示します。

LINKAGE SECTION.
01 INDATA              PIC X(n).
01 INDATA-LEN          PIC S9(9) COMP-5.
01 OUTDATA             PIC X(m).
01 OUTDATA-LEN         PIC S9(9) COMP-5.
PROCEDURE DIVISION USING INDATA INDATA-LEN OUTDATA OUTDATA-LEN.

(b)　手続き型SPP.NETのコーディング例

●手続き型用ラッパプログラム

手続き型用ラッパプログラムは，SPP.NETの実装クラスを定義し，各サービスプログラムを呼び出すためのプログラムです。手続き型用ラッパプログラムのコーディング例を次に示します。

IDENTIFICATION DIVISION.
CLASS-ID. MYSPP AS "MYAPPLICATION.MYSPP" IS PUBLIC
          INHERITS SPPBASE.

ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
REPOSITORY.
  CLASS SPPBASE    AS 'Hitachi.OpenTP1.Server.SPPBase'.
  CLASS BYTE-ARRAY AS 'System.Byte' IS ARRAY.

IDENTIFICATION DIVISION.
OBJECT.
DATA DIVISION.
WORKING-STORAGE SECTION.
PROCEDURE DIVISION.

* SPP初期化および終了処理メソッドの実装
IDENTIFICATION DIVISION.
METHOD-ID. InitializeSPP IS PUBLIC OVERRIDE.
PROCEDURE DIVISION.
* SPPの初期化処理
END METHOD InitializeSPP.

IDENTIFICATION DIVISION.
METHOD-ID. FinalizeSPP IS PUBLIC OVERRIDE.
PROCEDURE DIVISION.
* SPPの終了処理
END METHOD FinalizeSPP.

* サービスメソッド定義 (引数の並びは固定です)
* クライアントからRPCで呼び出されます
>> TP1RPCMETHOD
IDENTIFICATION DIVISION.
METHOD-ID. SERVICE1 IS PUBLIC.
DATA DIVISION.
LOCAL-STORAGE SECTION.
01 INDATA-X     PIC X(n).
01 OUTDATA-X    PIC X(m).
LINKAGE SECTION.
01 INDATA       USAGE OBJECT REFERENCE BYTE-ARRAY.
01 INDATA-LEN   PIC S9(9) COMP-5.
01 OUTDATA      USAGE OBJECT REFERENCE BYTE-ARRAY.
01 OUTDATA-LEN  PIC S9(9) COMP-5.
PROCEDURE DIVISION USING BY VALUE     INDATA INDATA-LEN OUTDATA
                         BY REFERENCE OUTDATA-LEN.
* バイト配列から英数字項目への変換
    CALL 'CBLBYTEARRAYTOX'  USING INDATA INDATA-LEN INDATA-X.
* サービスプログラムの呼び出し
    CALL 'SERVICE1' USING  INDATA-X INDATA-LEN
                             OUTDATA-X OUTDATA-LEN.
* 英数字項目からバイト配列への変換
    CALL 'CBLXTOBYTEARRAY'  USING OUTDATA-X OUTDATA OUTDATA-LEN.
END METHOD SERVICE1.

>> TP1RPCMETHOD
IDENTIFICATION DIVISION.
METHOD-ID. SERVICE2 IS PUBLIC.
DATA DIVISION.
LOCAL-STORAGE SECTION.
01 INDATA-X     PIC X(n).
01 OUTDATA-X    PIC X(m).
LINKAGE SECTION.
01 INDATA       USAGE OBJECT REFERENCE BYTE-ARRAY.
01 INDATA-LEN   PIC S9(9) COMP-5.
01 OUTDATA      USAGE OBJECT REFERENCE BYTE-ARRAY.
01 OUTDATA-LEN  PIC S9(9) COMP-5.
PROCEDURE DIVISION USING BY VALUE     INDATA INDATA-LEN OUTDATA
                         BY REFERENCE OUTDATA-LEN.
* バイト配列から英数字項目への変換
    CALL 'CBLBYTEARRAYTOX'  USING INDATA INDATA-LEN INDATA-X.
* サービスプログラムの呼び出し
    CALL 'SERVICE2' USING  INDATA-X INDATA-LEN
                             OUTDATA-X OUTDATA-LEN.
* 英数字項目からバイト配列への変換
    CALL 'CBLXTOBYTEARRAY'  USING OUTDATA-X OUTDATA OUTDATA-LEN.
END METHOD SERVICE2.

END OBJECT.
END CLASS MYSPP.

●サービスプログラム

サービスプログラムは手続き型のプログラムとして作成します。既存のSPPからSPP.NETに移行する場合，SPPのサービスプログラムはそのままSPP.NETのサービスプログラムとして使用できます。サービスプログラムの詳細については，マニュアル「OpenTP1　プログラム作成リファレンス　COBOL言語編」を参照してください。

引数の定義例を次に示します。

IDENTIFICATION DIVISION.
PROGRAM-ID. SERVICE1.
DATA DIVISION.
WORKING-STORAGE SECTION.

LINKAGE SECTION.
77  INDATA       PIC X(n).
77  INDATA-LEN   PIC S9(9) COMP-5.
77  OUTDATA      PIC X(m).
77  OUTDATA-LEN  PIC S9(9) COMP-5.
PROCEDURE DIVISION USING INDATA INDATA-LEN OUTDATA OUTDATA-LEN.
* SERVICE1の処理
END PROGRAM SERVICE1.

(3)　SPP.NETのコンパイル

SPP.NETのコンパイルには，コマンドライン上でコンパイルする方法とVisual Studio上でコンパイルする方法があります。

(a)　コマンドラインでのコンパイル方法

次のようにコンパイルします。

注※1

手続き型SPP.NETプログラムで作成する場合に指定します。

注※2

COBOL言語のプログラムの中で従来のSPPで使用していたTP1/ServerのCOBOL言語のサービスルーチンを利用する場合に指示ファイルを指定します。詳細については，「4.8.3　TP1/ServerのCOBOL言語のサービスルーチンの利用」を参照してください。

(b)　Visual Studio上でコンパイルする場合

Visual Studio上でコンパイルする場合は，通常のCOBOL2002 for .NET Frameworkのアプリケーションの作成と同様の方法でコンパイルしてください。

なお，次の点に注意してください。

必ず［プロジェクト］－［参照の追加］で，コンポーネント名「TP1/Extension for .NET Framework Class Library」を選択してください。

TP1/ServerのCOBOL言語のサービスルーチンを利用する場合には，コンパイラオプションの設定で，P/Invoke指示ファイルを引数とした-PInvokeオプションを設定してください。

4.8.2　COBOL言語でのSUP.NETの実装

COBOL言語でSUP.NETを作成する方法について説明します。

＜この項の構成＞

(1)　SUP.NET

(2)　SUP.NETのコンパイル

(1)　SUP.NET

SUP.NETは，TP1/ServerのCOBOL言語のサービスルーチンをプラットフォーム呼び出し（P/Invoke）する方法を使って作成します。従来のSUPを作成する方法と同じです。作成方法やサービスルーチンの詳細については，次のマニュアルを参照してください。

「OpenTP1　プログラム作成の手引」

「OpenTP1　プログラム作成リファレンス　COBOL言語編」

注意

従来のSUPでは，同じサービスルーチンに対する複数の呼び出しで，引数の数が異なるものがあっても問題ありませんでした。しかし，SPP.NETでは同じサービスルーチンに対する複数の呼び出しで引数の数が異なるものがあるとSystem.InvalidProgramException例外が発生します。System.InvalidProgramException例外については，マニュアル「COBOL2002 for .NET Framework　ユーザーズガイド」を参照してください。

(2)　SUP.NETのコンパイル

SUP.NETのコンパイルには，コマンドライン上でコンパイルする方法とVisual Studio上でコンパイルする方法があります。

(a)　コマンドラインでのコンパイル方法

次のようにコンパイルします。

(b)　Visual Studioでのコンパイル方法

Visual Studio上でコンパイルする場合は，通常のCOBOL2002 for .NET Frameworkのアプリケーションの作成と同様の方法でコンパイルしてください。

TP1/ServerのCOBOL言語のサービスルーチンを利用する場合には，コンパイラオプションの設定で，P/Invoke指示ファイルを引数とした-PInvokeオプションを設定してください。

4.8.3　TP1/ServerのCOBOL言語のサービスルーチンの利用

従来のSPPで使用していたTP1/ServerのCOBOL言語のサービスルーチンを利用する場合は，プラットフォーム呼び出し（P/Invoke）を使います。ソースプログラム上の記述は，通常の呼び出しもプラットフォーム呼び出しも同じです。しかし，プラットフォーム呼び出しの場合は，P/Invoke指示ファイルを-PInvokeオプションに指定して，呼び出すプログラムがアンマネージプログラムであることをコンパイラに指示する必要があります。

P/Invoke指示ファイルのサンプルの格納場所については，「2.1.3(1)　Extension .NETが提供するP/Invoke指示ファイルのサンプル」を参照してください。

＜この項の構成＞

(1)　P/Invoke指示ファイルの作成例

(2)　P/Invoke指示ファイル作成時の注意事項

(1)　P/Invoke指示ファイルの作成例

TP1/Server BaseおよびTP1/LiNKの場合のP/Invoke指示ファイルの作成例を次に示します。

TP1/Server Baseの場合

CBLDCADM(DLL="LIBBETRAN.DLL",CallConv=Cdecl)
CBLDCLOG(DLL="LIBBETRAN.DLL",CallConv=Cdecl)
CBLDCPRF(DLL="LIBBETRAN.DLL",CallConv=Cdecl)
CBLDCRAP(DLL="LIBBETRAN.DLL",CallConv=Cdecl)
CBLDCRPC(DLL="NJSCMLIB.DLL",CallConv=Cdecl)
CBLDCTRN(DLL="LIBBETRAN.DLL",CallConv=Cdecl)
CBLDCMCF(DLL="LIBMCF.DLL",CallConv=Cdecl)
CBLDCTAM(DLL="LIBTAM.DLL",CallConv=Cdecl)

TP1/LiNKの場合

CBLDCADM(DLL="BETRAN.DLL",CallConv=Cdecl)
CBLDCLOG(DLL="BETRAN.DLL",CallConv=Cdecl)
CBLDCPRF(DLL="BETRAN.DLL",CallConv=Cdecl)
CBLDCRAP(DLL="BETRAN.DLL",CallConv=Cdecl)
CBLDCRPC(DLL="NJSCMLIB.DLL",CallConv=Cdecl)
CBLDCTRN(DLL="BETRAN.DLL",CallConv=Cdecl)
CBLDCMCF(DLL="LIBMCF.DLL",CallConv=Cdecl)

(2)　P/Invoke指示ファイル作成時の注意事項

P/Invoke指示ファイルの拡張子はpivにしてください。

CBLDCRPCサービスルーチンの場合は，NJSCMLIB.DLLを必ず指定してください。その他のTP1/ServerのCOBOL言語のサービスルーチンについては，適切なライブラリファイル名を指定してください。

従来のWindows版のSPPでは，同じサービスルーチンに対する複数の呼び出しで，引数が異なるものがあっても問題ありませんでした。しかし，SPP.NETでは同じサービスルーチンに対する複数の呼び出しで引数の数が異なるものがあるとSystem.InvalidProgramException例外が発生します。System.InvalidProgramException例外については，マニュアル「COBOL2002 for .NET Framework　ユーザーズガイド」を参照してください。

4.8.4　プログラム作成時の注意事項

オブジェクト指向型SPP.NETの場合，サービスとして使用するメソッドは，PROPAGATE翻訳指令を使って例外自動伝播（propagate）をOFFにしてください。手続き型SPP.NETの場合は，手続き型用ラッパプログラムの方でPROPAGATE翻訳指令を使って例外自動伝播（propagate）をOFFにします。

ThreadAbortException例外が発生した場合，KFCA00105-Eメッセージとともに，アボートコードE00002が出力されます。終了コードは6でプロセスを終了します。ThreadAbortException例外の発生を伴う次の機能使用時も，終了コード6でプロセスが終了するので，できるだけ使用しないでください。

CBLABNサービスルーチン

STOP RUN文

SPP.NETのプログラム構成では，従来のSPPと異なり，メインプログラムを記述しないため，STOP RUNを指定する必要はありません。RETURN-CODE特殊レジスタの値や，CBLABNサービスルーチンの引数値は終了コードにはなりません。

FILE STATUS句や例外処理を使って，できるだけCOBOL実行時エラーとならないようにコーディングしてください。COBOL実行時エラーが発生すると例外ThreadAbortExceptionを引き起こすので，プロセス終了となります。

SPP.NETまたはSUP.NETでデータベース操作機能を使用する場合，「COBOL2002 for .NET Frameworkのインストールディレクトリ¥Bin」のパスをTP1/Serverのサーチパスに指定する必要があります。

AS指定のないクラス名の場合，名前空間は「COBOL2002.DefaultNamespace」が仮定されます。AS指定があるクラス名の場合，名前空間は付加されません。

その他，COBOL言語の注意事項については，マニュアル「COBOL2002 for .NET Framework　ユーザーズガイド」を参照してください。

4.9　アプリケーションの配置と運用

SPP.NETおよびSUP.NETの配置と運用について説明します。

＜この節の構成＞

4.9.1　アプリケーションの配置

4.9.2　ユーザサーバの定義

4.9.3　ユーザサーバの運用

4.9.1　アプリケーションの配置

アプリケーションの配置ディレクトリと，アプリケーション構成ファイルについて説明します。

なお，以降の説明の「%DCDIR%」はOpenTP1インストールディレクトリを表しています。

＜この項の構成＞

(1)　配置ディレクトリ

(2)　アプリケーションが参照するアプリケーション構成ファイル

(1)　配置ディレクトリ

SPP.NETのアセンブリ（DLL形式），SUP.NETのアセンブリ（EXE形式）は，「%DCDIR%¥aplibディレクトリ」または任意のディレクトリに配置します。

これらのアセンブリが参照しているアセンブリ（グローバルアセンブリキャッシュに登録されているものを除く）も必ずSPP.NET，およびSUP.NETのアセンブリと同じディレクトリに配置してください。

また，SPP.NET，およびSUP.NETのアセンブリはグローバルアセンブリキャッシュに登録しないでください。

(a)　SPP.NETを任意のディレクトリに配置した場合

【TP1/Server Base】

njs_appbase_directoryオペランドでアプリケーションベースディレクトリの設定が必要です。ユーザサービスデフォルト定義，およびユーザサービス定義のnjs_appbase_directoryオペランドでアプリケーションベースディレクトリの設定をしない場合は，「%DCDIR%¥aplib」がアプリケーションベースディレクトリとなります。ユーザサービスデフォルト定義，およびユーザサービス定義については，「3.　システム定義【TP1/Server Base】」を参照してください。

【TP1/LiNK】

TP1/LiNKの実行環境設定のGUIでアプリケーションベースディレクトリの設定が必要です。アプリケーションベースディレクトリの設定をしない場合は「%DCDIR%¥aplib」がアプリケーションベースディレクトリとなります。TP1/LiNKの実行環境設定のGUIについては，「5.　TP1/LiNKでのユーザサーバの実行環境設定【TP1/LiNK】」を参照してください。

(b)　SUP.NETを任意のディレクトリに配置した場合

【TP1/Server Base】

プロセスサービス定義のprcsvpathコマンドの設定が必要です。プロセスサービス定義については，マニュアル「OpenTP1　システム定義」を参照してください。

【TP1/LiNK】

TP1/LiNKの実行環境設定のGUIでプログラムのサーチパスの設定が必要です。TP1/LiNKの実行環境設定のGUIについては，「5.　TP1/LiNKでのユーザサーバの実行環境設定【TP1/LiNK】」およびマニュアル「TP1/LiNK　使用の手引」を参照してください。

(2)　アプリケーションが参照するアプリケーション構成ファイル

SPP.NET，SUP.NETの各アプリケーションからアプリケーション構成ファイルにアクセスする場合は，次のディレクトリに次に示す名称でアプリケーション構成ファイルを作成します。

(a)　SPP.NETの場合

SPP.NETの場合，ディレクトリ名，ファイル名は次の表に従って指定します。

項目
指定値

ディレクトリ
アプリケーションベースディレクトリ
（%DCDIR%¥aplib，または任意のディレクトリ）

ファイル名
〈ユーザサーバ名〉.config

【指定例】

ユーザサーバ名がSERVER1，アプリケーションベースディレクトリが「%DCDIR%¥aplib」の場合，次のように指定します。

%DCDIR%¥aplib¥SERVER1.config

(b)　SUP.NETの場合

SUP.NETの場合，ディレクトリ名，ファイル名を次の表に従って指定します。

項目
指定値

ディレクトリ
SUP.NET配置ディレクトリ
（%DCDIR%¥aplib，または任意のディレクトリ）

ファイル名
〈SUP.NETアセンブリファイル名〉.config

【指定例】

SUP.NETアセンブリファイル名が「mysup2.exe」，SUP.NET配置ディレクトリが「D:¥TP1app」の場合，次のように指定します。

D:¥TP1app¥mysup2.exe.config

参考

アプリケーション構成ファイルについては，.NET Frameworkのドキュメントを参照してください。

4.9.2　ユーザサーバの定義

SPP.NET，SUP.NETはSPP，SUPと同様にユーザサーバとして定義します。定義方法の詳細については，次の項目およびマニュアルを参照してください。

【TP1/Server Base】

「3.　システム定義【TP1/Server Base】」

「OpenTP1　システム定義」

【TP1/LiNK】

「5.　TP1/LiNKでのユーザサーバの実行環境設定【TP1/LiNK】」

「TP1/LiNK　使用の手引」

4.9.3　ユーザサーバの運用

SPP.NET，SUP.NETはSPP，SUPと同様にユーザサーバとして運用します。起動／停止，閉塞／閉塞解除，実行状態の確認などができます。

運用方法の詳細については，次のマニュアルを参照してください。

【TP1/Server Base】

「OpenTP1　運用と操作」

【TP1/LiNK】

「TP1/LiNK　使用の手引」

4.10　UAP作成上の注意事項

＜この節の構成＞

4.10.1　実行環境と留意点

4.10.2　例外の捕捉とエラーの判定

4.10.3　その他の注意事項

4.10.1　実行環境と留意点

＜この項の構成＞

(1)　SPP.NETの実行環境と留意点

(2)　SUP.NETの実行環境と留意点

(1)　SPP.NETの実行環境と留意点

SPP.NETはDLL形式のアセンブリとして実装し，Extension .NETが提供するSPP.NET実行コンテナによって実行されます。

このコンテナはSPPと同様にシングルスレッドで動作するので，複数のサービス要求によって，一つのプロセス上でSPP.NETのサービスメソッドが同時に実行されることはありません。そのため，マルチスレッドを意識したプログラミングをする必要はありません。

(2)　SUP.NETの実行環境と留意点

SUP.NETはEXE形式のアセンブリとして実装し，そのまま独立したプロセスとして実行されます。この場合，SUP.NETで実装されたMainメソッドが起動されます。

4.10.2　例外の捕捉とエラーの判定

OpenTP1 for .NET FrameworkのUAPでは，Extension .NETが提供するクラスライブラリやスタブ，.NET Frameworkなどから例外が発生する場合があります。これらの例外は適切に捕捉してください。

Extension .NETからは，次に示す例外が発生する可能性があります。

表4-8　発生する可能性がある例外

名前空間 | 例外名 | 意味
Hitachi.OpenTP1 | TP1Exception | 共通の例外基底クラス
TP1RemoteException | サーバで発生した例外の受信
TP1UserException | ユーザが任意に使用
Hitachi.OpenTP1.Server | TP1ServerException | クラスライブラリでのエラー検知

＜この項の構成＞

(1)　TP1Exception

(2)　TP1RemoteException

(3)　TP1UserException

(4)　TP1ServerException

(1)　TP1Exception

OpenTP1のすべての例外の基底クラスです。個別の例外を捕捉しないで，まとめて捕捉したい場合などに，このTP1ExceptionクラスですべてのOpenTP1の例外を捕捉できます。

(2)　TP1RemoteException

クライアントスタブを使用してサービス要求をした場合に，サーバ側で例外が発生したことを示す例外です。呼び出し元のクライアント側で発生した例外とサーバ側で発生した例外を区別できます。

.NETインタフェース定義を使用しないサービスメソッドでユーザ例外が発生した場合，クライアントにはDCRPCER_SYSERR_AT_SERVERが返されます。エラーの詳細は.NETエラーログファイルを参照してください。

(3)　TP1UserException

クライアント，およびサーバを.NETインタフェース定義を使用したOpenTP1 for .NET FrameworkのUAPで作成した場合に，サービス要求されたサービスメソッドからクライアントにこの例外を返すことができます。

この例外はUAPで任意に使用できます。また，クライアント側でもTP1RemoteExceptionには変換されません。

なお，.NETインタフェース定義を使用しない場合は，この例外を使用しないでください。使用した場合は，クライアント側にサービス要求のエラーが通知されます。

(4)　TP1ServerException

クラスライブラリの各メソッドでエラーを検知した場合に発生します。各メソッドでの発生条件や内容については「7.　クラスリファレンス」を参照してください。

.NETインタフェース定義を使用しないSPP.NETでは，各サービスメソッドですべての例外を確実に捕捉してください。

サービスメソッドが例外をSPP.NET実行コンテナに返した場合，クライアント側にサービス要求のエラーが通知されます。

4.10.3　その他の注意事項

＜この項の構成＞

(1)　クラスライブラリ使用上の注意事項

(2)　SPP.NETに関する注意事項

(3)　SUP.NETに関する注意事項

(4)　Visual Studio上でコンパイルする場合の注意事項

(1)　クラスライブラリ使用上の注意事項

Hitachi.OpenTP1で始まる名前空間はOpenTP1が使用するため，OpenTP1以外のアプリケーションでは使用できません。

Extension .NETが提供するクラスライブラリはスレッドセーフではありません。マルチスレッドで使用した場合の動作は保証できません。

(2)　SPP.NETに関する注意事項

SPP.NETでは，サービスメソッドやInitializeSPPメソッド，FinalizeSPPメソッドが呼び出されたスレッドでだけOpenTP1が提供するクラスを使用できます。
それ以外のスレッド（SPP.NET上で任意に生成したスレッドや.NET Frameworkが提供するクラスによって生成されたスレッドなど）でOpenTP1の提供するクラスを使用しないでください。使用した場合の動作は保証できません。
また，SPP.NET上で使用するオブジェクトのデストラクタやFinalizeメソッドでも，OpenTP1が提供するクラスを使用しないでください。

OpenTP1が提供する各クラスは，SPP.NET実行コンテナによってSPP.NET実装クラスが呼び出されたアプリケーションドメインからだけ使用できます。SPP.NET内で独自に生成したアプリケーションドメインからOpenTP1のクラスを使用しないでください。使用した場合の動作は保証できません。

.NETインタフェース定義とSPP.NET実装クラスは同じプログラム言語で記述してください。サーバスタブは.NETインタフェース定義と同じプログラム言語を使用して生成されます。

.NETインタフェース定義，SPP.NET実装クラス，サーバスタブは一つのアセンブリに入れてください。これらが一つのアセンブリに入っていない場合，SPP.NETの起動ができません。SPP.NET実装クラスが使用するクラス，または参照するクラス（ほかのSPP.NETを利用する場合は，そのクライアントスタブも含む）については別のアセンブリになっていてもかまいません。

SPP.NET実装クラスではMainメソッドを実装する必要はありません。実装しても実行されません。

SPP.NET実装クラスを含むアセンブリはDLL形式にしてください。

SPP.NET内で例外ThreadAbortExceptionが発生した場合，KFCA00105-Eメッセージとともに，アボートコードE00001が出力され，SPP.NETのプロセスは異常終了します。

.NETインタフェース定義を使用しないサービスメソッドでユーザ例外が発生した場合，クライアントにはDCRPCER_SYSERR_AT_SERVERが返されます。エラーの詳細は.NETエラーログファイルを参照してください。

SPP.NETデバッガを使用する場合，［テスト実行情報設定］ダイアログボックスのユーザサーバ名称に%DCDIR%¥conf内にあるファイルと同じ名称を指定すると，%DCDIR%¥conf内にあるファイルが上書きされます。
なお，「%DCDIR%」はOpenTP1インストールディレクトリを表しています。

(3)　SUP.NETに関する注意事項

SUP.NETでは，Mainメソッドが呼び出されたスレッドでだけOpenTP1が提供するクラスを使用することができます。それ以外のスレッド（SUP.NET上で任意に生成したスレッドや.NET Frameworkが提供するクラスによって生成されたスレッドなど）でOpenTP1が提供するクラスを使用しないでください。使用した場合の動作は保証できません。
また，SUP.NET上で使用するオブジェクトのデストラクタやFinalizeメソッドでも，OpenTP1が提供するクラスを使用しないでください。

SUP.NETの実装クラスではMainメソッドを実装してください。

SUP.NETの実装を含むアセンブリはEXE形式にしてください。

(4)　Visual Studio上でコンパイルする場合の注意事項

SPP.NETウィザードおよびSUP.NETウィザードを使用しないで，Visual Studio上でSPP.NETおよびSUP.NETをコンパイルする場合，必ずVisual Studioのメニューから［プロジェクト］－［参照の追加］で，コンポーネント名「TP1/Extension for .NET Framework Class Library」を選択してください。

4.11　サンプルプログラムの使用方法

Extension .NETのサンプルプログラムのディレクトリ構成，ビルド方法および実行手順を説明します。なお，以降の説明で，環境変数にDCSMPDIRを設定しない場合は，DCSMPDIRを次のように読み換えてください。

【TP1/Server Base】

%DCDIR%¥examples

【TP1/LiNK】

%DCDIR%¥sample

「%DCDIR%」はOpenTP1インストールディレクトリを表しています。

環境変数にDCSMPDIRを設定する方法については，「4.11.2(1) サンプルプログラムをビルドするための準備」の手順3を参照してください。

＜この節の構成＞

4.11.1　サンプルプログラムのディレクトリ構成

4.11.2　サンプルプログラムのビルド方法

4.11.3　サンプルプログラムの実行手順

4.11.1　サンプルプログラムのディレクトリ構成

Extension .NETのサンプルプログラムは，次の表に示すディレクトリに格納されています。

表4-9　サンプルプログラムのディレクトリ構成

ディレクトリ | 説明
%DCSMPDIR%¥ExtNET | Extension .NETのサンプルプログラム格納ディレクトリ
%DCSMPDIR%¥ExtNET¥C# | C#のサンプルプログラム格納ディレクトリ
%DCSMPDIR%¥ExtNET¥J# | J#のサンプルプログラム格納ディレクトリ
%DCSMPDIR%¥ExtNET¥VB.NET | Visual Basicのサンプルプログラム格納ディレクトリ
%DCSMPDIR%¥ExtNET¥COBOL.NET | COBOL言語のサンプルプログラム格納ディレクトリ，およびCOBOL言語のサービスルーチン利用のためのP/Invoke指示ファイル
%DCSMPDIR%¥ExtNET¥CONF | サンプルプログラム実行用ユーザサービス定義格納ディレクトリ

各言語のサンプルプログラム格納ディレクトリ下は，次の表に示す名称のディレクトリで構成されます。それぞれのディレクトリには，次の表に示す種類のサンプルプログラムが格納されています。

表4-10　サンプルプログラムの種類（C#，J#，およびVisual Basicの場合）

名称
説明

SPPBIN
RPCの入出力にバイナリデータを使用したSPP.NETです。
このサンプルプログラムでは，.NETインタフェース定義を使用しません。

SPPIF
.NETインタフェース定義を使用したSPP.NETです。

SUPBIN
RPC要求インタフェースとしてバイナリデータを使用したSUP.NETです。
このサンプルプログラムでは，クライアントスタブを使用しません。

SUPCR
RPC要求インタフェースとしてサービス定義から生成されたクライアントスタブとカスタムレコードを使用したSUP.NETです。

SUPIF
RPC要求インタフェースとして.NETインタフェース定義から生成されたクライアントスタブを使用したSUP.NETです。

表4-11　サンプルプログラムの種類（COBOL言語の場合）

名称 | 説明
SPPOBJ | オブジェクト指向型SPP.NETです。
SPPPRO | 手続き型SPP.NETです。
SUPOBJ | オブジェクト指向型SPP.NETを呼び出すSUP.NETです。
SUPPRO | 手続き型SPP.NETを呼び出すSUP.NETです。

4.11.2　サンプルプログラムのビルド方法

Extension .NETのサンプルプログラムをビルドする手順を説明します。

＜この項の構成＞

(1)　サンプルプログラムをビルドするための準備

(2)　サンプルプログラムをまとめてビルドする方法

(3)　言語別のサンプルプログラムをまとめてビルドする方法

(4)　サンプルプログラムを個別にビルドする方法

(1)　サンプルプログラムをビルドするための準備

次のコマンドプロンプトを起動します。

C#，J#，およびVisual Basicの場合
Visual Studioが提供するコマンドプロンプト，または.NET Framework SDKが提供するコマンドプロンプトを起動します。

COBOL言語の場合
COBOL2002 for .NET Frameworkの提供するコマンドプロンプトを起動します。

Windows Server 2003（64ビット用）の環境でJ#のサンプルプログラムをビルドする場合は，Microsoft .NET Framework v2.0の32ビット版のインストールディレクトリを環境変数PATHに設定します。

環境変数にDCSMPDIRを設定する場合は，コマンドプロンプトからコマンドを実行します。

【例】TP1/Server Baseの場合

set DCSMPDIR=%DCDIR%¥examples

【例】TP1/LiNKの場合

set DCSMPDIR=%DCDIR%¥sample

(2)　サンプルプログラムをまとめてビルドする方法

COBOL言語以外のサンプルプログラムをまとめてビルドする場合
%DCSMPDIR%¥ExtNET¥build_all.batを実行します。

COBOL言語の場合を含むすべてのサンプルプログラムをまとめてビルドする場合
%DCSMPDIR%¥ExtNET¥build_all2.batを実行します。

(3)　言語別のサンプルプログラムをまとめてビルドする方法

C#の場合
%DCSMPDIR%¥ExtNET¥C#¥build_cs.batを実行します。

J#の場合
%DCSMPDIR%¥ExtNET¥J#¥build_vjs.batを実行します。

Visual Basicの場合
%DCSMPDIR%¥ExtNET¥VB.NET¥build_vb.batを実行します。

COBOL言語の場合
%DCSMPDIR%¥ExtNET¥COBOL.NET¥build_cbl.batを実行します。

(4)　サンプルプログラムを個別にビルドする方法

各サンプルプログラム格納ディレクトリ下のbuild.batを実行します。

【例】%DCSMPDIR%¥ExtNET¥VB.NET¥SPPIF¥build.bat

4.11.3　サンプルプログラムの実行手順

Extension .NETのサンプルプログラムの実行手順を説明します。

＜この項の構成＞

(1)　ビルドしたアセンブリをOpenTP1環境にコピー

(2)　ユーザサービス定義ファイルをOpenTP1環境にコピー

(3)　OpenTP1の起動

(4)　SPP.NET環境定義の設定

(5)　SPP.NETまたはSUP.NETの実行

(1)　ビルドしたアセンブリをOpenTP1環境にコピー

ビルドによって生成されたアセンブリを，%DCDIR%¥aplibディレクトリにコピーします。

【例】Visual BasicのSPPIFサンプルの場合

copy %DCSMPDIR%¥ExtNET¥VB.NET¥SPPIF¥VBSample.SPPIF.dll %DCDIR%¥aplib

【例】Visual BasicのSUPIFサンプルの場合

copy %DCSMPDIR%¥ExtNET¥VB.NET¥SUPIF¥VBSample.SUPIF.exe %DCDIR%¥aplib

(2)　ユーザサービス定義ファイルをOpenTP1環境にコピー

実行したいサンプルプログラムのユーザサービス定義ファイルを，%DCCONFPATH%にコピーします。

【例】Visual BasicのSPPIFサンプルの場合

copy %DCSMPDIR%¥ExtNET¥CONF¥VBSPPIF %DCCONFPATH%

(3)　OpenTP1の起動

次の手順でOpenTP1を起動します。

【TP1/Server Base】

コマンドライン上で，「net start OpenTP1」を実行します。

【TP1/LiNK】

［スタート］－［プログラム］－［TP1_LiNK］－［TP1_LiNKコントロール］メニューを選択します。
［TP1_LiNKコントロール］ウィンドウが表示されます。

OpenTP1の状態がオンラインでない場合は，［起動(S)］ボタンをクリックします。

(4)　SPP.NET環境定義の設定

SPP.NETの場合，次の手順でSPP.NET環境定義を設定します。

【TP1/Server Base】

%DCCONFPATH%にコピーしたユーザサービス定義ファイルをnotepad.exeから開きます。
【例】Visual BasicのSPPIFサンプルの場合
　　notepad.exe %DCCONFPATH%¥VBSPPIF

set njs_appbase_directoryの値の「%DCDIR%」の部分をOpenTP1インストールディレクトリの絶対パスに変更します。
【例】OpenTP1インストールディレクトリがC:¥OpenTP1の場合
　　C:¥OpenTP1¥aplib

【TP1/LiNK】

［スタート］－［プログラム］－［TP1_LiNK］－［アプリケーション管理SPP］メニューを選択します。
［TP1/LiNKアプリケーション管理SPP］ウィンドウが表示されます。

ユーザサービス定義ファイルと同じ名前のユーザサーバを選択し，［サーバ定義(E)...］ボタンをクリックします。
［SPP.NET環境定義］ダイアログボックスが表示されます。

［アプリケーションベースディレクトリ(1)］の「%DCDIR%」の部分をOpenTP1インストールディレクトリの絶対パスに変更します。
【例】OpenTP1インストールディレクトリがC:¥OpenTP1の場合
　　C:¥OpenTP1¥aplib

(5)　SPP.NETまたはSUP.NETの実行

次の手順でSPP.NETまたはSUP.NETを実行します。

【TP1/Server Base】

コマンドライン上で，次のコマンドを実行します。

【例】Visual BasicのSPPIFサンプルの場合

dcsvstart -u VBSPPIF

【TP1/LiNK】

SPP.NETの場合

［スタート］－［プログラム］－［TP1_LiNK］－［アプリケーション管理SPP］メニューを選択します。
［TP1/LiNKアプリケーション管理SPP］ウィンドウが表示されます。

ユーザサービス定義ファイルと同じ名前のユーザサーバを選択し，［起動(S)］ボタンをクリックします。

SUP.NETの場合

［スタート］－［プログラム］－［TP1_LiNK］－［アプリケーション管理SUP］メニューを選択します。
［TP1/LiNKアプリケーション管理SUP］ウィンドウが表示されます。

ユーザサービス定義ファイルと同じ名前のユーザサーバを選択し，［起動(S)］ボタンをクリックします。

4.12　Visual StudioでのSPP.NETのデバッグ方法

SPP.NETをVisual Studioのデバッガでデバッグする場合の方法と留意事項について説明します。

＜この節の構成＞

4.12.1　Visual StudioでのSPP.NETのデバッグ手順

4.12.2　デバッグ時の留意事項

4.12.1　Visual StudioでのSPP.NETのデバッグ手順

SPP.NETをVisual Studioのデバッガでデバッグする場合の方法を次に示します。

Visual Studioのメニューから［デバッグ］－［プロセスにアタッチ］を選択します。
［プロセスにアタッチ］画面が表示されます。

SPP.NET（DLL）の共通実行可能ファイル（EXE）であるnjsnetsv.exeのプロセスにアタッチします。

SPP.NETのプログラム内の適切な場所にブレイクポイントを設定します。

リクエストを発生させてデバッグします。

4.12.2　デバッグ時の留意事項

SPP.NETをVisual Studioのデバッガでデバッグする場合の留意事項を次に示します。

njsnetsv.exeのプロセスはSPP.NETを起動することで生成されます。

複数のSPP.NETを起動するとnjsnetsv.exeのプロセスが複数起動します。この場合は，プロセスIDなどで，どのSPP.NETに対するnjsnetsv.exeのプロセスかを判断してください。

［プロセスにアタッチ］画面で［すべてのユーザーからのプロセスを表示する］にチェックが付いていない場合，選択できるプロセスにnjsnetsv.exeが表示されません。

5.　TP1/LiNKでのユーザサーバの実行環境設定【TP1/LiNK】

この章では，SPP.NETおよびSUP.NETをユーザサーバとして使用する場合にTP1/LiNKで設定する内容について説明します。TP1/Server Baseの場合，この章で説明する設定は不要です。

＜この章の構成＞

5.1　TP1/LiNKでの実行環境設定の概要

5.2　ユーザサーバの環境設定（SPP.NET）

5.3　ユーザサーバの環境設定（SUP.NET）

5.4　リソースマネジャの接続

5.1　TP1/LiNKでの実行環境設定の概要

Extension .NETをTP1/LiNKにインストールすると，SPPおよびSUPの環境を設定するTP1/LiNKのウィンドウやダイアログボックスから，SPP.NETおよびSUP.NETの環境設定ができるようになります。

SPP.NETの環境設定については，SPPの環境設定のGUIで設定できますが，GUIや設定項目などの一部が異なります。

この章では，SPP.NETの環境設定方法のうち，SPPの環境設定方法と異なる点について説明します。また，Extension .NETのインストール後に変更になる点について説明します。

この章で説明していない設定項目については，マニュアル「TP1/LiNK　使用の手引」のSPPの環境設定方法を参照してください。

SUP.NETの環境設定については，SUPの環境設定のGUIで設定できますので，SUPの環境設定手順に従って設定してください。詳細については，「5.3　ユーザサーバの環境設定（SUP.NET）」，およびマニュアル「TP1/LiNK　使用の手引」のSUPの環境設定方法を参照してください。

5.2　ユーザサーバの環境設定（SPP.NET）

［TP1/LiNKアプリケーション管理SPP］ウィンドウで，SPP.NETの実行環境を設定します。

［スタート］－［プログラム］－［TP1_LiNK］－［アプリケーション管理SPP］メニューを選択すると，［TP1/LiNKアプリケーション管理SPP］ウィンドウが表示されます。

図5-1　［TP1/LiNKアプリケーション管理SPP］ウィンドウ

［TP1/LiNKアプリケーション管理SPP］ウィンドウのリストボックスには，SPPおよびSPP.NETの両方の情報が表示されます。

この節では，このウィンドウから設定する内容のうち，SPP.NETとSPPで設定内容が異なる次の項目について説明します。

SPP（SPP.NET）の実行環境の設定

サーチパスの設定

自動起動の設定

XA接続の設定

その他の設定については，マニュアル「TP1/LiNK　使用の手引」を参照してください。

＜この節の構成＞

5.2.1　SPP.NETの実行環境の設定

5.2.2　サーチパスの設定

5.2.3　自動起動の設定

5.2.4　XA接続の設定

5.2.5　SPP.NETの実行環境設定の指定例

5.2.1　SPP.NETの実行環境の設定

SPP.NETの実行環境を設定するときは，［TP1/LiNKアプリケーション管理SPP］ウィンドウの［サーバ定義(E)...］ボタンをクリックします。

リストボックスからユーザサーバ名を選択しないでボタンをクリックすると，［アプリケーション環境SPP］ダイアログボックスが表示されます。

リストボックスからユーザサーバ名を選択してからボタンをクリックすると，選んだユーザサーバがSPP.NETかSPPかによって，［SPP.NET環境設定］ダイアログボックスか，または［SPP環境設定］ダイアログボックスが表示されます。［SPP環境設定］ダイアログボックスについては，マニュアル「TP1/LiNK　使用の手引」を参照してください。

＜この項の構成＞

(1)　［アプリケーション環境SPP］ダイアログボックス

(2)　［SPP環境設定選択］ダイアログボックス

(3)　［SPP.NET環境設定］ダイアログボックス

(4)　［SPP.NET詳細設定］ダイアログボックス（［RPC］タブ）

(5)　［SPP.NET詳細設定］ダイアログボックス（［その他］タブ）

(1)　［アプリケーション環境SPP］ダイアログボックス

(a)　ダイアログボックスの説明

リストボックスには，SPPおよびSPP.NETの両方の情報が表示されます。

ここで説明しない項目については，マニュアル「TP1/LiNK　使用の手引」の［アプリケーション環境SPP］ダイアログボックスの説明を参照してください。

図5-2　［アプリケーション環境SPP］ダイアログボックス

(b)　ボタンの使い方

［新規作成(N)...］ボタン

ユーザサーバの実行環境を新たに設定する場合にクリックします。SPP.NET，SPPのうち，どちらの実行環境を新たに設定するかを選択する［SPP環境設定選択］ダイアログボックスが表示されます。

［開く(O)...］ボタン

すでに設定されているユーザサーバの実行環境を変更したい場合に，リストボックスのユーザサーバを指定してからクリックします。指定されたユーザサーバがSPPかSPP.NETかによって，［SPP環境設定］ダイアログボックスか，または［SPP.NET環境設定］ダイアログボックスが表示されます。

［SPP環境設定］ダイアログボックスついては，マニュアル「TP1/LiNK　使用の手引」を参照してください。

(2)　［SPP環境設定選択］ダイアログボックス

(a)　ダイアログボックスの説明

SPPまたはSPP.NETの，どちらの実行環境を新たに設定するかを選択します。

図5-3　［SPP環境設定選択］ダイアログボックス

(b)　ボタンの使い方

［SPP環境設定(S)...］ボタン

SPPの実行環境を設定します。［SPP環境設定(S)...］ボタンをクリックすると，［SPP環境設定］ダイアログボックスが表示されます。

［SPP環境設定］ダイアログボックスについては，マニュアル「TP1/LiNK　使用の手引」を参照してください。

［SPP.NET環境設定(N)...］ボタン

SPP.NETの環境設定をします。［SPP.NET環境設定(N)...］ボタンをクリックすると，［SPP.NET環境設定］ダイアログボックスが表示されます。

［SPP.NET環境設定］ダイアログボックスについては，「5.2.1(3)　［SPP.NET環境設定］ダイアログボックス」を参照してください。

［キャンセル(C)］ボタン

［アプリケーション環境SPP］ダイアログボックスに戻ります。

(3)　［SPP.NET環境設定］ダイアログボックス

(a)　ダイアログボックスの説明

SPP.NETの環境を設定します。

ここでは，［SPP環境設定］ダイアログボックスと設定内容が異なる項目，および［SPP.NET環境設定］ダイアログボックスだけにある項目について説明します。ここで説明しない項目については，マニュアル「TP1/LiNK　使用の手引」の［SPP環境設定］ダイアログボックスの説明を参照してください。

図5-4　［SPP.NET環境設定］ダイアログボックス

(b)　ダイアログボックスに設定する項目

［ユーザサーバ名(U)］　　～＜1～8文字の識別子＞

SPP.NETの実行環境を新しく設定する場合は，実行環境を設定するSPP.NETのユーザサーバ名を入力します。すでに設定されているSPP.NETの実行環境を変更する場合は，ドロップダウンリストからユーザサーバ名を選びます。なお，ドロップダウンリストには，SPP.NETだけが表示されます。

ユーザサーバ名には，英字の大文字と小文字の区別はありません。小文字で指定しても，すべて大文字で管理されます。

［アプリケーションベースディレクトリ(1)］　　～＜1～128文字のパス名＞

SPP.NET実行時のアプリケーションベースディレクトリを指定します。

実装アセンブリを任意のディレクトリに配置した場合は，このテキストボックスか，または［アプリケーションベースディレクトリ設定］ダイアログボックスにディレクトリが指定されている必要があります。

［アプリケーションベースディレクトリ設定］ダイアログボックスについては，「5.2.2(2)　［アプリケーションベースディレクトリ設定］ダイアログボックス」を参照してください。

このテキストボックス，および［アプリケーションベースディレクトリ設定］ダイアログボックスの両方とも指定しない場合は，%DCDIR%¥aplibがアプリケーションベースディレクトリとして設定されるので，実装アセンブリは%DCDIR%¥aplibに格納されている必要があります。

なお，「%DCDIR%」はOpenTP1インストールディレクトリを表しています。

［実装アセンブリ名称(2)］　　～＜1～128文字の識別子とピリオド＞

SPP.NET実装クラス，サーバスタブなどが含まれるアセンブリの名称を指定します。なお，ファイルの拡張子（dll）は不要です。

［実装クラス名称(3)］　　～＜1～128文字の識別子とピリオド＞

SPP.NETの実装クラス名称を指定します。名前空間を含む完全限定名で指定してください。

［.NETインタフェース定義］欄　　～＜［使用する(4)］|［使用しない(5)］＞《［使用する(4)］》

SPP.NETが.NETインタフェース定義を使用するかどうかを，オプションボタンで指定します。

［サーバスタブクラス名称(6)］　　～＜1～128文字の識別子とピリオド＞
［.NETインタフェース定義］欄で［使用する(4)］をオンにしたときは，［サーバスタブクラス名称(6)］テキストボックスにサーバスタブのクラス名称を指定します。このとき，名前空間を含む完全限定名で指定します。.NETインタフェース定義を使用したSPP.NETの場合は，必ず入力してください。
［.NETインタフェース定義］欄で［使用しない(5)］をオンにしたときは，［サーバスタブクラス名称(6)］テキストボックスには入力できません。

［登録するサービス］欄　　～＜1～31文字の識別子＞

このSPP.NETにあるサービス名を入力します。

リストボックスにサービス名を追加する場合は，次に示すどちらかの方法で実行します。

欄内下の［サービス名(S)］テキストボックスにサービス名を入力して，［設定(J)］ボタンをクリックします。

［実装アセンブリからの読込み(M)］ボタンをクリックして，実装アセンブリからサービス名を自動的に読み込みます。

リストボックスからサービス名を削除する場合は，削除するサービス名をリストボックスから選択し，［削除(K)］ボタンをクリックします。

(c)　ボタンの使い方

［実装アセンブリからの読込み(M)］ボタン

実装アセンブリからサービス名を自動的に読み込みます。このボタンは，次に示すすべての項目が指定されている場合にだけクリックできます。

［アプリケーションベースディレクトリ(1)］テキストボックス（省略した場合は［アプリケーションベースディレクトリ設定］ダイアログボックスのテキストボックス）

［実装アセンブリ名称(2)］テキストボックス

［実装クラス名称(3)］テキストボックス

［詳細設定(T)...］ボタン

［SPP.NET詳細設定］ダイアログボックスが表示されます。［SPP.NET詳細設定］ダイアログボックスについては，「5.2.1(4)　［SPP.NET詳細設定］ダイアログボックス（［RPC］タブ）」および「5.2.1(5)　［SPP.NET詳細設定］ダイアログボックス（［その他］タブ）」を参照してください。

［XA接続(7)...］ボタン

［XA接続］ダイアログボックスが表示されます。［XA接続］ダイアログボックスについては，「5.2.4(1)　［XA接続］ダイアログボックス」を参照してください。

(4)　［SPP.NET詳細設定］ダイアログボックス（［RPC］タブ）

(a)　ダイアログボックスの説明

SPP.NETの環境の詳細を設定します。

ここでは，［SPP詳細設定］ダイアログボックスと異なる［RPC］タブの設定項目について説明します。ここで説明しない項目については，マニュアル「TP1/LiNK　使用の手引」の［SPP詳細設定］ダイアログボックスの説明を参照してください。

図5-5　［SPP.NET詳細設定］ダイアログボックス（［RPC］タブ）

(b)　ダイアログボックスに設定する項目

［RPC要求電文の最大長(R)］　　～＜符号なし整数＞((1～8))《1》（単位：メガバイト）

SPP.NETがクライアントUAPから受け付けるRPC要求メッセージの最大長を指定します。ここで指定する値は，［RPC詳細設定］ダイアログ（［その他］タブ）で指定する［RPC送受信電文の最大長(M)］の値以下にしてください。［RPC詳細設定］ダイアログについては，マニュアル「TP1/LiNK　使用の手引」を参照してください。

［RPC応答電文の最大長(P)］　　～＜符号なし整数＞((1～8))《1》（単位：メガバイト）

SPP.NETがクライアントUAPにサービスの応答をする場合，SPP.NETがクライアントUAPに返すRPC応答メッセージの最大長を指定します。ここで指定する値は，［RPC詳細設定］ダイアログ（［その他］タブ）で指定する［RPC送受信電文の最大長(M)］の値以下にしてください。［RPC詳細設定］ダイアログについては，マニュアル「TP1/LiNK　使用の手引」を参照してください。

(5)　［SPP.NET詳細設定］ダイアログボックス（［その他］タブ）

(a)　ダイアログボックスの説明

SPP.NETの環境の詳細を設定します。

ここでは，［SPP詳細設定］ダイアログボックスと異なる［その他］タブの設定項目について説明します。ここで説明しない項目については，マニュアル「TP1/LiNK　使用の手引」の［SPP詳細設定］ダイアログボックスの説明を参照してください。

図5-6　［SPP.NET詳細設定］ダイアログボックス（［その他］タブ）

(b)　ダイアログボックスに設定する項目

［メッセージ送受信機能を使用する(M)］

メッセージ送受信機能を使用するかどうかを指定します。チェックボックスをオンにすると，メッセージ送受信機能が使用できます。チェックボックスがオフの場合，メッセージ送受信機能は使用できません。

5.2.2　サーチパスの設定

ユーザサーバ固有で有効になるサーチパスを設定するときは，［TP1/LiNKアプリケーション管理SPP］ウィンドウの［プログラムのサーチパス(P)...］ボタンをクリックします。ボタンをクリックすると，SPP用のサーチパスか，SPP.NET用のアプリケーションベースディレクトリのどちらかを設定する，［プログラムのサーチパス選択］ダイアログボックスが表示されます。

＜この項の構成＞

(1)　［プログラムのサーチパス選択］ダイアログボックス

(2)　［アプリケーションベースディレクトリ設定］ダイアログボックス

(1)　［プログラムのサーチパス選択］ダイアログボックス

(a)　ダイアログボックスの説明

SPP用のサーチパス，またはSPP.NET用のアプリケーションベースディレクトリ（SPP.NET用のパス）のどちらを設定するかを選択します。

図5-7　［プログラムのサーチパス選択］ダイアログボックス

(b)　ボタンの使い方

［サーチパス(SPP用)(S)...］ボタン

SPP用のサーチパスを設定する場合は，［サーチパス(SPP用)(S)...］ボタンをクリックします。ボタンをクリックすると，［TP1/LiNKサーチパス］ダイアログボックスが表示されます。

［TP1/LiNKサーチパス］ダイアログボックスについては，マニュアル「TP1/LiNK　使用の手引」を参照してください。

［アプリケーションベースディレクトリ(SPP.NET用)(A)...］ボタン

SPP.NET用のアプリケーションベースディレクトリを設定する場合は，［アプリケーションベースディレクトリ(SPP.NET用)(A)...］ボタンをクリックします。ボタンをクリックすると，［アプリケーションベースディレクトリ設定］ダイアログボックスが表示されます。

［キャンセル(C)］ボタン

［TP1/LiNKアプリケーション管理SPP］ウィンドウに戻ります。

(2)　［アプリケーションベースディレクトリ設定］ダイアログボックス

(a)　ダイアログボックスの説明

SPP.NETのアプリケーションベースディレクトリのデフォルト値を指定します。

ここで設定するアプリケーションベースディレクトリは，［SPP.NET環境設定］ダイアログボックスの［アプリケーションベースディレクトリ(1)］テキストボックスに何も設定されていない場合に使用されます。

図5-8　［アプリケーションベースディレクトリ設定］ダイアログボックス

(b)　ダイアログボックスに設定する項目

［アプリケーションベースディレクトリ(A)］

アプリケーションベースディレクトリを設定する場合は，［アプリケーションベースディレクトリ(A)］テキストボックスにパスを指定します。

(c)　ボタンの使い方

［上書き保存(V)］ボタン

アプリケーションベースディレクトリを設定します。［アプリケーションベースディレクトリ(A)］テキストボックスに何も指定されていない状態で［上書き保存(V)］ボタンをクリックすると，設定が削除されます。

［終了(C)］ボタン

［プログラムのサーチパス選択］ダイアログボックスに戻ります。

5.2.3　自動起動の設定

ユーザサーバを自動起動するかどうかを設定するときは，次のどれかの操作をします。

［アプリケーション環境SPP］ダイアログボックスの［自動起動設定(A)...］ボタンをクリックする。

［SPP環境設定］ダイアログボックスの［自動起動設定(A)...］ボタンをクリックする。

［SPP.NET環境設定］ダイアログボックスの［自動起動設定(A)...］ボタンをクリックする。

ボタンをクリックすると，［自動起動設定］ダイアログボックスが表示されます。このダイアログボックスで，ユーザサーバを自動起動するかどうか，および自動起動の順番を設定します。

図5-9　［自動起動設定］ダイアログボックス

ウィンドウ上のリストボックスには，SPPおよびSPP.NETの両方の情報が表示されます。

ボタンの使い方，およびダイアログボックスに設定する項目については，マニュアル「TP1/LiNK　使用の手引」を参照してください。

参考

次のウィンドウ，およびダイアログボックスから表示される［自動起動設定］ダイアログボックスにも，SPPおよびSPP .NETの両方の情報が表示されます。

［アプリケーション環境SUP］ダイアログボックス

［SUP環境設定］ダイアログボックス

［RAPサービス環境］ウィンドウ

［RAPサービス環境設定］ダイアログボックス

5.2.4　XA接続の設定

ユーザサーバごとにXA接続するリソースマネジャを設定するときは，次のどれかの操作をします。

［SPP.NET環境設定］ダイアログボックスの［XA接続(7)...］ボタンをクリックする。

［SUP環境設定］ダイアログボックスの［XA接続(X)...］ボタンをクリックする。

SPP.NETデバッガ使用時に設定する［テスト実行情報設定］ダイアログボックスの［XA接続(X)...］ボタンをクリックする。

SUP.NETデバッガ使用時に設定する［SUP.NETテスト実行情報設定］ダイアログボックスの［XA接続(X)...］ボタンをクリックする。

ボタンをクリックすると，［XA接続］ダイアログボックスが表示されます。

＜この項の構成＞

(1)　［XA接続］ダイアログボックス

(1)　［XA接続］ダイアログボックス

(a)　ダイアログボックスの説明

ユーザサーバごとにXA接続するリソースマネジャを設定します。

図5-10　［XA接続］ダイアログボックス

(b)　ダイアログボックスに設定する項目

［XA接続するリソースマネジャ(R)］

ユーザサーバに登録するリソースマネジャの一覧が表示されます。

［TP1/LiNKに登録されているリソースマネジャ(M)］

TP1/LiNKに登録されているリソースマネジャの一覧が表示されます。リソースマネジャをTP1/LiNKに登録する方法については，「5.4　リソースマネジャの接続」を参照してください。

(c)　ボタンの使い方

［追加(A)］ボタン

［TP1/LiNKに登録されているリソースマネジャ(M)］リストボックスに表示されているリソースマネジャを［XA接続するリソースマネジャ(R)］リストボックスに追加します。［XA接続するリソースマネジャ(R)］リストボックスに追加したリソースマネジャ名は，［TP1/LiNKに登録されているリソースマネジャ(M)］リストボックスから削除されます。

［削除(D)］ボタン

［XA接続するリソースマネジャ(R)］リストボックスに表示されているリソースマネジャを，［XA接続するリソースマネジャ(R)］リストボックスから削除します。削除したリソースマネジャ名は，［TP1/LiNKに登録されているリソースマネジャ(M)］リストボックスに表示されます。

［OK(O)］ボタン

設定した情報に変更して，［XA接続］ダイアログボックスを終了します。

［キャンセル(C)］ボタン

設定した情報を変更しないで，［XA接続］ダイアログボックスを終了します。

注意

［XA接続するリソースマネジャ(R)］リストボックスに設定したリソースマネジャをTP1/LiNKから削除した場合は，再度［XA接続］ダイアログボックスを表示させ，［XA接続するリソースマネジャ(R)］リストボックスの設定をし直してください。

5.2.5　SPP.NETの実行環境設定の指定例

SPP.NETの実行環境設定の指定例を示します。

＜この項の構成＞

(1)　.NETインタフェース定義を使用する場合

(2)　.NETインタフェース定義を使用しない場合

(3)　.NETインタフェース定義を使用し，かつアプリケーションベースディレクトリを指定しない場合

(1)　.NETインタフェース定義を使用する場合

(2)　.NETインタフェース定義を使用しない場合

(3)　.NETインタフェース定義を使用し，かつアプリケーションベースディレクトリを指定しない場合

5.3　ユーザサーバの環境設定（SUP.NET）

［TP1/LiNKアプリケーション管理SUP］ウィンドウで，SUP.NETの実行環境を設定します。

［スタート］－［プログラム］－［TP1_LiNK］－［アプリケーション管理SUP］メニューを選択すると，［TP1/LiNKアプリケーション管理SUP］ウィンドウが表示されます。

図5-11　［TP1/LiNKアプリケーション管理SUP］ウィンドウ

［TP1/LiNKアプリケーション管理SUP］ウィンドウのリストボックスには，SUPおよびのSUP.NETの両方の情報が表示されます。

この節では，このウィンドウから設定する内容のうち，SUP.NET（SUP）の実行環境の設定について説明します。

SUP.NET（SUP）の詳細設定については，SUPの詳細設定のGUIで設定できます。SUP.NET（SUP）の詳細設定については，マニュアル「TP1/LiNK　使用の手引」を参照してください。

＜この節の構成＞

5.3.1　SUP.NETの実行環境の設定

5.3.1　SUP.NETの実行環境の設定

SUP.NETの実行環境を設定するときは，［TP1/LiNKアプリケーション管理SUP］ウィンドウの［サーバ定義(E)...］ボタンをクリックします。

リストボックスからユーザサーバ名を選択しないでボタンをクリックすると，［アプリケーション環境SUP］ダイアログボックスが表示されます。

リストボックスからユーザサーバ名を選択してからボタンをクリックすると，選んだユーザサーバを設定する［SUP環境設定］ダイアログボックスが表示されます。

なお，ユーザサーバがSUP.NET，SUPのどちらの場合でも，［SUP環境設定］ダイアログボックスで設定できます。

＜この項の構成＞

(1)　［アプリケーション環境SUP］ダイアログボックス

(2)　［SUP環境設定］ダイアログボックス

(1)　［アプリケーション環境SUP］ダイアログボックス

図5-12　［アプリケーション環境SUP］ダイアログボックス

リストボックスには，SUPおよびSUP.NETの両方の情報が表示されます。

ボタンの使い方，およびダイアログボックスに設定する項目については，マニュアル「TP1/LiNK　使用の手引」を参照してください。

(2)　［SUP環境設定］ダイアログボックス

(a)　ダイアログボックスの説明

SUP.NETおよびSUPの環境を設定します。

ここで説明しない項目については，マニュアル「TP1/LiNK　使用の手引」の［SUP環境設定］ダイアログボックスの説明を参照してください。

図5-13　［SUP環境設定］ダイアログボックス

(b)　ボタンの使い方

［XA接続(X)...］ボタン

［XA接続］ダイアログボックスが表示されます。SUP.NETの場合だけ使用します。SUPの場合も，このボタンをクリックすると［XA接続］ダイアログボックスが表示されますが，表示された［XA接続］ダイアログボックスで設定した内容は無効となります。［XA接続］ダイアログボックスについては，「5.2.4(1)　［XA接続］ダイアログボックス」を参照してください。

5.4　リソースマネジャの接続

トランザクション連携をしてリソースマネジャにアクセスする場合，SPPおよびSUPと，SPP.NETおよびSUP.NETとでは，次のような違いがあります。

SPPおよびSUPでトランザクション連携を行う場合
トランザクション制御用オブジェクトファイルを作成し，ユーザサーバとリンケージする必要があります。

SPP.NETおよびSUP.NETでDBMSとのトランザクション連携を行う場合
トランザクション制御用オブジェクトを作成する必要はありません。代わりにXA接続の設定が必要になります。XA接続の設定については，「5.2.4　XA接続の設定」を参照してください。

6.　運用コマンド

この章では，TP1/Extension for .NET Framework（Extension .NET）で使用する運用コマンドについて説明します。

＜この章の構成＞

運用コマンドの種類

if2cstub（クライアントスタブ生成コマンド（.NETインタフェース定義用））

if2sstub（サーバスタブ生成コマンド（.NETインタフェース定義用））

if2tsdl（TP1 Service Description Language（TSDL）生成コマンド）

spp2cstub（クライアントスタブ生成コマンド（サービス定義用））

運用コマンドの種類

Extension .NETで使用できる運用コマンドを，次の表に示します。

表6-1　運用コマンドの種類（Extension .NET）

運用コマンド | 機能
if2cstub | C#，J#，またはVisual Basicで定義されたSPP.NET用インタフェース（.NETインタフェース定義）を基に，クライアントスタブクラスのソースファイルを生成します。
if2sstub | C#，J#，またはVisual Basicで定義されたSPP.NET用インタフェース（.NETインタフェース定義）を基に，サーバスタブクラスのソースファイルを生成します。
if2tsdl | C#，J#，またはVisual Basicで定義された.NETインタフェース定義を基に，TP1 Service Description Language（TSDL）を生成します。
spp2cstub | 指定されたサービス定義ファイル，およびそのサービス定義ファイルが参照するデータ型定義ファイルを基に，クライアントスタブクラスおよびカスタムレコードクラスのソースファイルを生成します。

if2cstub（クライアントスタブ生成コマンド（.NETインタフェース定義用））

形式

if2cstub {-t {svr|clt|con}
       〔-l {cs|vjs|vb}〕
       〔-s 生成ファイル拡張子〕
       〔-n 名前空間名称〕
       〔-o 出力先ディレクトリ〕
       〔-r スタブクラス名称〕
       〔-c {struct|nostruct}〕
       〔-X {normal|dataset}〕
       〔-m RPCメッセージの最大長〕
         -i .NETインタフェース定義ファイル名称
         インタフェース名称
        |-h}

機能

C#，J#，またはVisual Basicで定義されたSPP.NET用インタフェース（.NETインタフェース定義）を基に，クライアントスタブクラスのソースファイル（以降，クライアントスタブソースファイルと呼びます）を生成します。

オプション

●-t　{svr｜clt｜con}

生成するクライアントスタブの種類を指定します。

オプションの指定と生成されるクライアントスタブを次に示します。

オプションの指定 | 生成されるクライアントスタブ
svr | SPP.NETまたはSUP.NET（Extension .NET）用
clt | CUP.NET（Client .NET）用
con | CUP.NET（Connector .NET）用

●-l　{cs｜vjs｜vb}

生成するクライアントスタブソースファイルのプログラム言語を指定します。

このオプションを省略した場合，入力元のソースファイルと同じプログラム言語で生成します。入力元のソースファイルのプログラム言語はファイルの拡張子を基に判断されます。

オプションの指定と生成されるクライアントスタブソースファイルのプログラム言語の関係を次に示します。

オプションの指定 | 生成されるクライアントスタブソースファイルのプログラム言語
cs | C#
vjs | J#
vb | Visual Basic

このオプションを省略した場合に，生成されるクライアントスタブソースファイルのプログラム言語を次に示します。

入力元のソースファイルの拡張子 | 生成されるクライアントスタブソースファイルのプログラム言語
cs | C#
javaまたはjsl | J#
vb | Visual Basic

●-s　生成ファイル拡張子　　～〈文字列〉

生成するクライアントスタブソースファイルの拡張子を指定します。

このオプションを省略した場合，生成されるクライアントスタブソースファイルのプログラム言語によって，拡張子は次のようになります。

生成されるクライアントスタブソースファイルのプログラム言語 | クライアントスタブソースファイルの拡張子
C# | cs
J# | jsl
Visual Basic | vb

●-n　名前空間名称　　～〈文字列〉

生成するクライアントスタブクラスの名前空間名称を指定します。

このオプションを省略した場合，入力元のインタフェースが属する名前空間と同じ名前空間でクライアントスタブクラスが生成されます。入力元のインタフェースが名前空間なしの場合，名前空間なしのクライアントスタブクラスが生成されます。

●-o　出力先ディレクトリ　　～〈パス名〉

生成するクライアントスタブソースファイルを出力するディレクトリを指定します。絶対パスまたは相対パスで指定してください。

このオプションを省略した場合，コマンド実行時のディレクトリに出力されます。なお，ファイル名はクライアントスタブごとに「〈名前空間を含まないスタブクラス名称〉.〈拡張子〉」で生成されます。

●-r　スタブクラス名称　　～〈文字列〉

生成するクライアントスタブのクラス名称を指定します。

このオプションを省略した場合，クラス名称は「〈インタフェース名称〉Stub」になります。

●-c　{struct｜nostruct}　　～《struct》

.NETインタフェース定義のメソッドのパラメタまたは戻り値にTP1ユーザ構造体を使用した場合に，クライアントスタブが利用するためのTP1ユーザ構造体クラスを出力するかどうかを指定します。

このオプションを省略した場合，TP1ユーザ構造体クラスを出力します。.NETインタフェース定義にTP1ユーザ構造体を指定していなかった場合，このオプションの指定は無視されます。

struct：TP1ユーザ構造体クラスを出力します。

nostruct：TP1ユーザ構造体クラスを出力しません。

●-X 　{normal｜dataset}

生成されるクライアントスタブに，引数および戻り値がXmlDocumentクラス（System.Xml.XmlDocument）となるサービスメソッドが追加されます。

サービスメソッドに入力パラメタがある場合，入力データ用XMLスキーマファイルがサービスメソッドごとに出力されます。出力パラメタまたは戻り値がある場合，出力データ用XMLスキーマファイルがサービスメソッドごとに出力されます。

-tオプションにconを指定した場合だけ，このオプションの指定が有効になります。-tオプションにcon以外を指定した場合，このオプションの指定は無視されます。

このオプションを省略した場合，生成されるクライアントスタブに，引数および戻り値がXmlDocumentクラスとなるサービスメソッドは追加されません。また，入力データ用XMLスキーマファイルおよび出力データ用XMLスキーマファイルは出力されません。

normal：引数および戻り値のXmlDocumentオブジェクト（System.Xml.XmlDocument）を，.NET FrameworkのDataSetオブジェクト（System.Data.DataSet）と連携させない場合に指定します。normalを指定した場合，出力される入力データ用XMLスキーマファイルおよび出力データ用XMLスキーマファイルは，DataSetオブジェクトで利用できない場合があります。

dataset：引数および戻り値のXmlDocumentオブジェクト（System.Xml.XmlDocument）を，.NET FrameworkのDataSetオブジェクト（System.Data.DataSet）と連携させて利用する場合に指定します。datasetを指定した場合，DataSetオブジェクトで利用できる入力データ用XMLスキーマファイルおよび出力データ用XMLスキーマファイルを出力します。また，その入力データ用XMLスキーマおよび出力データ用XMLスキーマに対応したクライアントスタブを出力します。

●-m　RPCメッセージの最大長　　～〈符号なし整数〉((1～8))《1》（単位：メガバイト）

サービスメソッドが指定するRPC応答メッセージの最大長を指定します。

このオプションに1～8以外を指定した場合は，エラーが発生します。なお，このオプションは，-tオプションにsvrを指定したときだけ有効です。-tオプションの指定がsvr以外の場合は，-mオプションの指定は無視されます。

このオプションには，必ず次の値以下の値を指定してください。

【TP1/Server Base】

TP1/Server Baseのシステム共通定義のrpc_max_message_sizeオペランドの値
rpc_max_message_sizeオペランドについては，マニュアル「OpenTP1　システム定義」を参照してください。

ユーザサービスデフォルト定義およびユーザサービス定義のnjs_output_max_message_sizeオペランドの値
njs_output_max_message_sizeオペランドについては，3章の「ユーザサービスデフォルト定義」および「ユーザサービス定義」を参照してください。

【TP1/LiNK】

［RPC詳細設定］ダイアログ（［その他］タブ）で指定する［RPC送受信電文の最大長(M)］の値
［RPC詳細設定］ダイアログ（［その他］タブ）については，マニュアル「TP1/LiNK　使用の手引」を参照してください。

［SPP.NET詳細設定］ダイアログ（［RPC］タブ）で指定する［RPC応答電文の最大長(P)］の値
［SPP.NET詳細設定］ダイアログ（［RPC］タブ）については，「5.2.1(4)　［SPP.NET詳細設定］ダイアログボックス（［RPC］タブ）」を参照してください。

なお，このオプションを指定して生成したクライアントスタブを使用するプロセスでは，応答メッセージ用として，「指定値×1メガバイト」のメモリを使用します。また，複数のクライアントスタブを使用するプロセスでは，複数あるクライアントスタブの中で最もメモリを使用する値を応答メッセージ用としてプロセスで使用します。したがって，必要以上に大きな値を設定しないようにしてください。

●-i　.NETインタフェース定義ファイル名称　　～〈ファイル名〉

入力元のインタフェースが定義されている.NETインタフェース定義ファイル名称を指定します。絶対パスまたは相対パスで指定してください。

.NETインタフェース定義を作成したプログラム言語は，このオプションで指定したファイルの拡張子によって次のように判断されます。

このオプションで指定した.NETインタフェース定義ファイルの拡張子 | .NETインタフェース定義を作成したプログラム言語の判断結果
cs | C#
javaまたはjsl | J#
vb | Visual Basic

●-h

このコマンドの使用方法を標準出力に表示します。

このオプションを指定した場合，ほかのオプションおよびコマンド引数は指定できません。

コマンド引数

●インタフェース名称

生成したいクライアントスタブに対応するSPP.NETのインタフェース名称を完全限定名で指定します。インタフェース名称は一つだけ指定できます。

注意事項

このコマンドの実行時にエラーが発生した場合は，対応するエラーメッセージが標準エラー出力に出力されます。

このコマンドで生成したクライアントスタブソースファイルの内容は変更しないでください。

入力元となる.NETインタフェース定義ファイルは，使用するWindowsのデフォルトコードページ（日本語版Windowsの場合は932）で保存してください。Unicodeなど，ほかのコードページで保存したファイルは，このコマンドの入力元として使用できません。

if2sstub（サーバスタブ生成コマンド（.NETインタフェース定義用））

形式

if2sstub {〔-s 生成ファイル拡張子〕
         〔-n 名前空間名称〕
         〔-o 出力先ディレクトリ〕
         〔-r スタブクラス名称〕
           -i .NETインタフェース定義ファイル名称
           インタフェース名称
          |-h}

機能

C#，J#，またはVisual Basicで定義されたSPP.NET用インタフェース（.NETインタフェース定義）を基に，サーバスタブクラスのソースファイル（以降，サーバスタブソースファイルと呼びます）を生成します。サーバスタブは，入力元のソースファイルと同じプログラム言語で生成します。入力元ソースファイルのプログラム言語はファイルの拡張子を基に判断されます。

入力元ソースファイルの拡張子と生成されるサーバスタブソースファイルのプログラム言語の関係を次に示します。

入力元ソースファイルの拡張子 | 生成されるサーバスタブソースファイルのプログラム言語
cs | C#
javaまたはjsl | J#
vb | Visual Basic

オプション

●-s　生成ファイル拡張子　　～〈文字列〉

生成するサーバスタブソースファイルの拡張子を指定します。

このオプションを省略した場合，生成されるサーバスタブソースファイルのプログラム言語によって，拡張子は次のようになります。

生成されるサーバスタブソースファイルのプログラム言語 | サーバスタブソースファイルの拡張子
C# | cs
J# | jsl
Visual Basic | vb

●-n　名前空間名称　　～〈文字列〉

生成するサーバスタブクラスの名前空間名称を指定します。

このオプションを省略した場合，入力元のインタフェースが属する名前空間と同じ名前空間でサーバスタブクラスが生成されます。入力元のインタフェースが名前空間なしの場合，名前空間なしのサーバスタブクラスが生成されます。

●-o　出力先ディレクトリ　　～〈パス名〉

生成するサーバスタブソースファイルを出力するディレクトリを指定します。絶対パスまたは相対パスで指定してください。

このオプションを省略した場合，コマンド実行時のディレクトリに出力されます。なお，ファイル名はサーバスタブごとに「〈名前空間を含まないスタブクラス名称〉.〈拡張子〉」で生成されます。

●-r　スタブクラス名称　　～〈文字列〉

生成するサーバスタブのクラス名称を指定します。

このオプションを省略した場合，クラス名称は「〈インタフェース名称〉Tie」になります。

●-i　.NETインタフェース定義ファイル名称　　～〈ファイル名〉

入力元のインタフェースが定義されている.NETインタフェース定義ファイルを指定します。絶対パスまたは相対パスで指定してください。

.NETインタフェース定義を作成したプログラム言語は，このオプションで指定したファイルの拡張子によって次のように判断されます。

このオプションで指定した.NETインタフェース定義ファイルの拡張子 | .NETインタフェース定義を作成したプログラム言語の判断結果
cs | C#
javaまたはjsl | J#
vb | Visual Basic

●-h

このコマンドの使用方法を標準出力に表示します。

このオプションを指定した場合，ほかのオプションおよびコマンド引数は指定できません。

コマンド引数

●インタフェース名称

生成したいサーバスタブに対応するSPP.NETのインタフェース名称を完全限定名で指定します。インタフェース名称は一つだけ指定できます。

注意事項

このコマンドの実行時にエラーが発生した場合は，対応するエラーメッセージが標準エラー出力に出力されます。

このコマンドで生成したサーバスタブソースファイルの内容は変更しないでください。

生成されるサーバスタブクラスの名前空間を含む完全限定名が128文字以内になるよう，名前空間を含むインタフェース名称，名前空間名称，およびサーバスタブクラス名称を指定してください。

入力元となる.NETインタフェース定義ファイルは，使用するWindowsのデフォルトコードページ（日本語版Windowsの場合は932）で保存してください。Unicodeなど，ほかのコードページで保存したファイルは，このコマンドの入力元として使用できません。

if2tsdl（TP1 Service Description Language（TSDL）生成コマンド）

形式

if2tsdl {〔-s 生成ファイル拡張子〕
        〔-o 出力先ディレクトリ〕
          -i .NETインタフェース定義ファイル名称
          インタフェース名称
         |-h}

機能

C#，J#，またはVisual Basicで定義された.NETインタフェース定義を基に，TP1 Service Description Language（TSDL）を生成します。

TSDLは，OpenTP1 for .NET Framework環境以外から，TSDLを使用してSPP.NETにサービス要求する場合に使用します。

オプション

●-s　生成ファイル拡張子　　～〈文字列〉

生成するTSDLの拡張子を指定します。

このオプションを省略した場合，拡張子は「tsdl」となります。

●-o　出力先ディレクトリ　　～〈パス名〉

生成するTSDLを出力するディレクトリを指定します。絶対パスまたは相対パスで指定してください。

このオプションを省略した場合，コマンド実行時のディレクトリに出力されます。

●-i　.NETインタフェース定義ファイル名称　　～〈ファイル名〉

入力元のインタフェースが定義されているソースファイルを指定します。絶対パスまたは相対パスで指定してください。

●-h

このコマンドの使用方法を標準出力に表示します。

このオプションを指定した場合，ほかのオプションおよびコマンド引数は指定できません。

コマンド引数

●インタフェース名称

生成したいTSDLに対応するSPP.NETのインタフェース名称を完全限定名で指定します。インタフェース名称は一つだけ指定できます。

注意事項

このコマンドの実行時にエラーが発生した場合は，対応するエラーメッセージが標準エラー出力に出力されます。

このコマンドで生成したソースファイルの内容を変更しないでください。

入力元となる.NETインタフェース定義ファイルは，使用するWindowsのデフォルトコードページ（日本語版Windowsの場合は932）で保存してください。Unicodeなど，ほかのコードページで保存したファイルは，このコマンドの入力元として使用できません。

spp2cstub（クライアントスタブ生成コマンド（サービス定義用））

形式

spp2cstub {-t {svr|clt|con}
        〔-l {cs|vjs|vb}〕
        〔-s 生成ファイル拡張子〕
        〔-n 名前空間名称〕
        〔-o 出力先ディレクトリ〕
        〔-r スタブクラス名称〕
        〔-R データ型定義名称:カスタムレコードクラス名称
             〔,データ型定義名称:カスタムレコードクラス名称〕…〕
        〔-F {space|null}〕
        〔-I エンコーディング名〕
        〔-O エンコーディング名〕
        〔-e {big|little}〕
        〔-E {big|little}〕
        〔-b〕
        〔-X {normal|dataset}〕
          -i サービス定義ファイル名称
         |-h}

機能

指定されたサービス定義ファイル，およびそのサービス定義ファイルが参照するデータ型定義ファイルを基に，クライアントスタブクラスおよびカスタムレコードクラスのソースファイルを生成します。

オプション

●-t　{svr｜clt｜con}

生成するクライアントスタブの種類を指定します。

オプションの指定と生成されるクライアントスタブを次に示します。

オプションの指定 | 生成されるクライアントスタブ
svr | SPP.NETまたはSUP.NET（Extension .NET）用
clt | CUP.NET（Client .NET）用
con | CUP.NET（Connector .NET）用

●-l　{cs｜vjs｜vb}　　～《cs》

生成するクライアントスタブクラスおよびカスタムレコードクラスのソースファイルのプログラム言語を指定します。クライアントスタブクラスとカスタムレコードクラスは同じプログラム言語で生成されます。

このオプションを省略した場合，csが仮定されます。

オプションの指定と生成されるソースファイルのプログラム言語を次に示します。

オプションの指定 | 生成されるソースファイルのプログラム言語
cs | C#
vjs | J#
vb | Visual Basic

●-s　生成ファイル拡張子　　～〈文字列〉

生成するクライアントスタブクラスおよびカスタムレコードクラスのソースファイルの拡張子を指定します。

このオプションを省略した場合，生成されるソースファイルのプログラム言語によって，拡張子は次のようになります。

生成されるソースファイルのプログラム言語 | 生成されるソースファイルの拡張子
C# | cs
J# | jsl
Visual Basic | vb

●-n　名前空間名称　　～〈文字列〉

生成するクライアントスタブクラスおよびカスタムレコードクラスの名前空間名称を指定します。

このオプションを省略した場合，名前空間なしのクライアントスタブクラスおよびカスタムレコードクラスが生成されます。

●-o　出力先ディレクトリ　　～〈パス名〉

生成するクライアントスタブクラスおよびカスタムレコードクラスのソースファイルを出力するディレクトリを指定します。絶対パスまたは相対パスで指定してください。

このオプションを省略した場合，コマンド実行時のディレクトリに出力されます。なお，ファイル名はクライアントスタブクラスごとに「〈名前空間を含まないスタブクラス名称〉.〈拡張子〉」，カスタムレコードクラスごとに「〈名前空間を含まないカスタムレコードクラス名称〉.〈拡張子〉」で生成されます。

●-r　スタブクラス名称　　～〈文字列〉

生成するクライアントスタブのクラス名称を指定します。

このオプションを省略した場合，クラス名称は「〈サービス定義名称〉Stub」になります。なお，一つのサービス定義ファイルには，一つのサービス定義しか指定できません。

●-R　データ型定義名称:カスタムレコードクラス名称　　～〈文字列〉:〈31文字以内の識別子〉

データ型定義ファイルで定義しているデータ型定義名称と，それを基にして生成するカスタムレコードのクラス名称を指定します。

このオプションを省略した場合，データ型定義名称がカスタムレコードのクラス名称に使用されます。

複数のデータ型定義からカスタムレコードを生成する場合は，データ型定義名称と生成されるカスタムレコードのクラス名称をコロン（:）で区切って指定します。ただし，データ型定義に存在しないデータ型定義名称を指定した場合，存在しないデータ型定義名称は無視されます。存在するデータ型定義名称に対してだけカスタムレコードクラス名称の指定が有効になります。

●-F　{space｜null}　　～《space》

入力レコードとなるカスタムレコードを引数として渡す場合，データ型定義で指定した文字列領域の余った領域に埋める文字を指定します。

このオプションを省略した場合，余った領域を半角スペースで埋めます。

space：半角スペースで埋めます。

null：ヌル文字で埋めます。

●-I　エンコーディング名　　～〈文字列〉

RPCで送信する要求データを，エンコードするときに従うエンコード方式のエンコーディング名を指定します。指定できるエンコーディング名については，.NET Frameworkのドキュメントを参照してください。

このオプションを省略した場合，プラットフォームのデフォルトエンコーディング名になります。

プラットフォームによってサポートされているエンコード方式は異なります。代表的なエンコーディング名は次のとおりです。

エンコーディング名 | エンコード（Windows上の表示名） | 備考
euc-jp | 日本語（EUC） | －
iso-8859-1 | 西ヨーロッパ言語（ISO） | －
shift_jis | 日本語（シフト JIS） | MS932
unicodeFFFE | Unicode（Big-Endian） | －
us-ascii | US-ASCII | ISO646
utf-8 | Unicode（UTF-8） | －
utf-16 | Unicode | Little Endian

（凡例）

－：該当しません。

●-O　エンコーディング名　　～〈文字列〉

RPCで受信した応答データを，デコードするときに従うエンコード方式のエンコーディング名を指定します。指定できるエンコーディング名については，.NET Frameworkのドキュメントを参照してください。

このオプションを省略した場合，プラットフォームのデフォルトエンコーディング名になります。

プラットフォームによってサポートされているエンコード方式は異なります。代表的なエンコーディング名については，-Iオプションの表を参照してください。

●-e　{big｜little}　　～《big》

RPCで送信する要求データを，指定されたエンディアンに変換します。

このオプションを省略した場合，ビッグエンディアンに変換します。

big：ビッグエンディアンに変換します。

little：リトルエンディアンに変換します。

●-E　{big｜little}　　～《big》

RPCで受信した応答データを，指定されたエンディアンであると仮定して変換します。

このオプションを省略した場合，ビッグエンディアンであると仮定して変換します。

big：ビッグエンディアンであると仮定して変換します。

little：リトルエンディアンであると仮定して変換します。

●-b

生成されたカスタムレコードクラスごとに必要なバッファサイズを標準出力に表示します。

【表示例】

CustomRecordClassName : BufferSize[Bytes]
MyAppNS.Record1 : 448
MyAppNS.Record2 : 32

●-X 　{normal｜dataset}

生成されるクライアントスタブに，引数および戻り値がXmlDocumentクラス（System.Xml.XmlDocument）となるサービスメソッドが追加されます。

また，入力データ用XMLスキーマファイルがサービスごとに出力されます。出力データ型定義名称がDC_NODATA以外の場合，出力データ用XMLスキーマファイルがサービスごとに出力されます。複数のサービスで同じデータ型定義名称を指定した場合，そのデータ型定義に対応する入力データ用XMLスキーマおよび出力データ用XMLスキーマは，一つだけ出力されます。

-tオプションにconを指定した場合だけ，このオプションの指定が有効になります。-tオプションにcon以外を指定した場合，このオプションの指定は無視されます。

このオプションを省略した場合，生成されるクライアントスタブに，引数および戻り値がXmlDocumentクラスとなるサービスメソッドは追加されません。また，入力データ用XMLスキーマファイルおよび出力データ用XMLスキーマファイルは出力されません。

normal：引数および戻り値のXmlDocumentオブジェクト（System.Xml.XmlDocument）を，.NET FrameworkのDataSetオブジェクト（System.Data.DataSet）と連携させない場合に指定します。normalを指定した場合，出力される入力データ用XMLスキーマファイルおよび出力データ用XMLスキーマファイルは，DataSetオブジェクトで利用できない場合があります。

dataset：引数および戻り値のXmlDocumentオブジェクト（System.Xml.XmlDocument）を，.NET FrameworkのDataSetオブジェクト（System.Data.DataSet）と連携させて利用する場合に指定します。datasetを指定した場合，DataSetオブジェクトで利用できる入力データ用XMLスキーマファイルおよび出力データ用XMLスキーマファイルを出力します。また，その入力データ用XMLスキーマおよび出力データ用XMLスキーマに対応したクライアントスタブを出力します。

●-i　サービス定義ファイル名称　　～〈ファイル名〉

サービス定義が指定されているファイル名称を指定します。絶対パスまたは相対パスで指定してください。

●-h

このコマンドの使用方法を標準出力に表示します。

このオプションを指定した場合，ほかのオプションおよびコマンド引数は指定できません。

注意事項

このコマンドの実行時にエラーが発生した場合は，対応するエラーメッセージが標準エラー出力に出力されます。

このコマンドで生成したソースファイルの内容を変更しないでください。

サービス定義ファイルの#includeディレクティブには，サービス定義ファイルの存在するディレクトリからの相対パスを指定します。#includeディレクティブに相対パスを指定していない場合は，データ型定義ファイルはサービス定義ファイルと同じディレクトリになければなりません。

入力元となるサービス定義ファイルおよびデータ型定義ファイルは，使用するWindowsのデフォルトコードページ（日本語版Windowsの場合は932）で保存してください。Unicodeなど，ほかのコードページで保存したファイルは，このコマンドの入力元として使用できません。

7.　クラスリファレンス

この章では，TP1/Extension for .NET Framework（Extension .NET）で利用できるクラスについて説明します。

＜この章の構成＞

TP1/Extension for .NET Frameworkで利用できるクラス

Adm

IntArrayHolder

IntHolder

IRecordインタフェース

Jnl 【TP1/Server Base】

Lck 【TP1/Server Base】

Log

LongArrayHolder

LongHolder

Mcf

Prf

Rap

Rpc

RpcBindTable構造体

Rts

ShortArrayHolder

ShortHolder

SPPBase

StringArrayHolder

StringHolder

Tam 【TP1/Server Base】

TamKeyTable構造体 【TP1/Server Base】

TamStatusTable構造体 【TP1/Server Base】

TP1Error

TP1Exception

TP1MarshalException

TP1RemoteException

TP1RpcMethod

TP1ServerException

TP1ServerFlags

TP1ServerLimits

TP1ServerValues

TP1UserException

TP1UserStruct

Trn

UByteArrayHolder

UByteHolder

TP1/Extension for .NET Frameworkで利用できるクラス

TP1/Extension for .NET Frameworkで利用できるクラスの一覧を次に示します。

表7-1　TP1/Extension for .NET Frameworkで利用できるクラスの一覧

名前空間 | クラス名 | 説明
Hitachi.OpenTP1.Server | Adm | システム運用の管理のメソッドを提供します。
Jnl | ユーザジャーナルを取得するメソッドを提供します。TP1/Server BaseのUAPでだけ使えます。TP1/LiNKのUAPでは使えません。
Lck | 任意のユーザファイルを排他制御するメソッドを提供します。TP1/Server BaseのUAPでだけ使えます。TP1/LiNKのUAPでは使えません。
Log | UAPからメッセージログを出力するメソッドを提供します。
Mcf | アプリケーション間でメッセージの送受信をするときに使う，メッセージ送受信機能を使用するためのメソッドを提供します。
Prf | 性能検証用トレース機能を提供するメソッドを提供します。
Rap | リモートAPI機能で，コネクションの確立および解放をユーザが管理する場合に使用するメソッドを提供します。
RpcBindTable構造体 | サービス要求先を特定する検索キーを格納します。
Rpc | クライアント/サーバ形態の通信をするときに使う，OpenTP1のRPCのメソッドを提供します。
Rts | リアルタイム統計情報を取得する場合に使用するメソッドを提供します。
SPPBase | SPP.NET実装の抽象クラスです。
Tam | TAMファイルサービス機能を使用するメソッドを提供します。TP1/Server BaseのUAPでだけ使えます。TP1/LiNKのUAPでは使えません。
TamKeyTable構造体 | レコードのキー値を格納します。TP1/Server BaseのUAPでだけ使えます。TP1/LiNKのUAPでは使えません。
TamStatusTable構造体 | TAMテーブルの情報を格納します。TP1/Server BaseのUAPでだけ使えます。TP1/LiNKのUAPでは使えません。
TP1ServerException | クラスライブラリの各メソッドでエラーを検知した場合に発生する例外です。
TP1ServerFlags | OpenTP1の各種フラグを提供します。
TP1ServerLimits | OpenTP1で使用する長さの制限などを定義します。
TP1ServerValues | OpenTP1の各種値を提供します。
Trn | OpenTP1独自のトランザクション制御をするメソッドを提供します。
Hitachi.OpenTP1 | IRecordインタフェース | カスタムレコードが実装しなければならないレコード名，およびレコードの簡易説明のプロパティを規定します。
IntArrayHolder | System.Int32配列を保持するホルダークラスです。
IntHolder | System.Int32値を保持するホルダークラスです。
LongArrayHolder | System.Int64配列を保持するホルダークラスです。
LongHolder | System.Int64値を保持するホルダークラスです。
ShortArrayHolder | System.Int16配列を保持するホルダークラスです。
ShortHolder | System.Int16値を保持するホルダークラスです。
StringArrayHolder | System.String配列を保持するホルダークラスです。
StringHolder | System.Stringを保持するホルダークラスです。
TP1Error | クラスライブラリの各メソッドで返されるエラーや例外に設定されるエラーの値を定義したクラスです。
TP1Exception | OpenTP1のすべての例外の基底クラスです。
TP1MarshalException | 読み込みおよび書き込みできないバイト配列のインデクスが参照された場合，またはデータの内容が不正な場合に出力される例外です。
TP1RemoteException | SPP.NETで例外が発生したことをSPP.NET，SUP.NET，またはCUP.NETに知らせる例外です。
TP1RpcMethod | サービスメソッドカスタム属性です。
TP1UserException | SPP.NETのサービスメソッド内でユーザがスローする例外です。
TP1UserStruct | TP1ユーザ構造体を利用するには，このクラスを継承する必要があります。
UByteArrayHolder | System.Byte配列を保持するホルダークラスです。
UByteHolder | System.Byte値を保持するホルダークラスです。

Adm

Admの概要

名前空間

Hitachi.OpenTP1.Server

継承関係

System.Object
 +- Hitachi.OpenTP1.Server.Adm

説明

Admクラスは，システム運用の管理のメソッドを提供します。

メソッドの一覧

名称 | 説明
CallCommand(System.String, System.Int32&, System.String&, System.String&, System.Int32) | オンライン中にコマンドを入力したときと同様に，UAPからコマンドを渡します。
CallCommand(System.String, System.Int32&, System.String&, System.Int32, System.String&, System.Int32, System.Int32) | オンライン中にコマンドを入力したときと同様に，UAPからコマンドを渡します。
Complete() | SUP.NETの開始処理が終了したことを，OpenTP1に報告します。
GetStatus() | このメソッドを呼び出したユーザサーバの状態を報告します。

メソッドの詳細

●CallCommand

説明

オンライン中にコマンドを入力したときと同様に，UAPからコマンドを渡します。

このときのプロセスは，コマンドが処理を完了するまで待ち，コマンドの終了ステータスを戻します。コマンドの処理が終了すると，標準出力情報と標準エラー出力情報が返ります。

コマンドを実行するUAPを使うOpenTP1には，コマンドを格納しているディレクトリをサーチパスに追加してください。

サーチパスを追加する方法を次に示します。どれかの方法を用いてください。

プロセスサービス定義のprcsvpathオペランドにコマンドのパス名を指定

prcpathコマンドでサーチパスを追加

ユーザサービス定義に環境変数を"putenv PATH"と指定

宣言

【C#の場合】

public static int CallCommand(
 string command,
 ref int statusCode,
 ref string stdoutMessage,
 ref string stderrMessage,
 int flags
);

【Visual Basicの場合】

Public Shared Function CallCommand( _
 ByVal command As String, _
 ByRef statusCode As Integer, _
 ByRef stdoutMessage As String, _
 ByRef stderrMessage As String, _
 ByVal flags As Integer _
) As Integer

【J#の場合】

public static int CallCommand(
 System.String command,
 int statusCode,
 System.String stdoutMessage,
 System.String stderrMessage,
 int flags
);

パラメタ

command

実行するコマンドの文字列を設定します。

statusCode

指定したコマンドのリターン値を格納します。

stdoutMessage

指定したコマンドの標準出力に出力された文字列を格納します。

デフォルト取得サイズ（4096）を超えた分は，切り捨てられます。

stderrMessage

指定したコマンドの標準エラー出力に出力された文字列を格納します。

デフォルト取得サイズ（4096）を超えた分は，切り捨てられます。

flags

標準出力または標準エラー出力メッセージのデータを完全には取得できなかった場合の，CallCommandメソッドの動作を設定します。

TP1ServerFlags.DCADM_DELAY
実行したコマンドの処理を中断して，例外を発行します。

TP1ServerFlags.DCNOFLAGS
取得できた分のデータを格納して，エラーリターンします。

戻り値

メソッドのリターンコードを返します。

リターンコード
説明

0 (DC_OK)
正常終了しました。

-1855(DCADMER_STATNOTZERO)
コマンドの終了コードは0以外（コマンドの実行が異常終了）です。
標準出力および標準エラー出力のデータを格納しました。

-1856(DCADMER_MEMORY_OUT)
標準出力のデータが，デフォルト取得サイズを超えました。
デフォルトサイズ分の標準出力のデータを格納しました。

-1857(DCADMER_MEMORY_ERR)
標準エラー出力のデータが，デフォルト取得サイズを超えました。
デフォルトサイズ分の標準エラー出力のデータを格納しました。

-1858(DCADMER_MEMORY_OUTERR)
標準出力のデータと標準エラー出力のデータの両方が，デフォルト取得サイズを超えました。
デフォルトサイズ分の標準出力および標準エラー出力のデータを格納しました。

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード | 説明
DCADMER_MEMORY_ERR | 標準エラー出力のデータが，デフォルトの取得サイズを超えました。
DCADMER_MEMORY_OUT | 標準出力のデータが，デフォルトの取得サイズを超えました。
DCADMER_MEMORY_OUTERR | 標準出力のデータと標準エラー出力のデータの両方が，デフォルトの取得サイズを超えました。
DCADMER_PARAM | 引数に設定した値が間違っています。
DCADMER_PROTO | RpcクラスのOpenメソッドを呼び出していません。
DCADMER_STATNOTZERO | コマンドの終了コードは0以外（コマンドの実行が異常終了）です。
DCADMER_SYSTEMCALL | システムコール（close，pipe，dup，またはread）の呼び出しに失敗しました。

注意事項

サーチパスに指定したディレクトリ間で，コマンド名が重複しないように注意してください。コマンド名が重複している場合，正しいコマンドが起動されないで別のコマンドが起動されます。

また，コマンド名は，OpenTP1が提供するコマンド群（%DCDIR%¥binの下）のコマンド名とも重複しないようにしてください。

なお，「%DCDIR%」はOpenTP1インストールディレクトリを表しています。

●CallCommand

説明

オンライン中にコマンドを入力したときと同様に，UAPからコマンドを渡します。

このときのプロセスは，コマンドが処理を完了するまで待ち，コマンドの終了ステータスを戻します。コマンドの処理が終了すると，標準出力情報と標準エラー出力情報が返ります。

コマンドを実行するUAPを使うOpenTP1には，コマンドを格納しているディレクトリをサーチパスに追加してください。

サーチパスを追加する方法を次に示します。どれかの方法を用いてください。

プロセスサービス定義のprcsvpathオペランドにコマンドのパス名を指定

prcpathコマンドでサーチパスを追加

ユーザサービス定義に環境変数を"putenv PATH"と指定

宣言

【C#の場合】

public static int CallCommand(
 string command,
 ref int statusCode,
 ref string stdoutMessage,
 int stdoutMessage_len,
 ref string stderrMessage,
 int stderrMessage_len,
 int flags
);

【Visual Basicの場合】

Public Shared Function CallCommand( _
 ByVal command As String, _
 ByRef statusCode As Integer, _
 ByRef stdoutMessage As String, _
 ByVal stdoutMessage_len As Integer, _
 ByRef stderrMessage As String, _
 ByVal stderrMessage_len As Integer, _
 ByVal flags As Integer _
) As Integer

【J#の場合】

public static int CallCommand(
 System.String command,
 int statusCode,
 System.String stdoutMessage,
 int stdoutMessage_len,
 System.String stderrMessage,
 int stderrMessage_len,
 int flags
);

パラメタ

command

実行するコマンドの文字列を設定します。

statusCode

指定したコマンドのリターン値を格納します。

stdoutMessage

指定したコマンドの標準出力に出力された文字列を格納します。

stdoutMessage_lenパラメタで指定したサイズを超えた分は，切り捨てられます。

stdoutMessage_len

取得する標準出力のサイズを設定します。

stderrMessage

指定したコマンドの標準エラー出力に出力された文字列を格納します。

stderrMessage_lenパラメタで指定したサイズを超えた分は，切り捨てられます。

stderrMessage_len

取得する標準エラー出力のサイズを指定します。

flags

標準出力または標準エラー出力メッセージのデータを完全に取得できなかった場合の，CallCommandメソッドの動作を設定します。

TP1ServerFlags.DCADM_DELAY
実行したコマンドの処理を中断して，例外を発行します。

TP1ServerFlags.DCNOFLAGS
取得できた分のデータを格納して，エラーリターンします。

戻り値

メソッドのリターンコードを返します。

リターンコード
説明

0 (DC_OK)
正常終了しました。

-1855(DCADMER_STATNOTZERO)
コマンドの終了コードは0以外（コマンドの実行が異常終了）です。
標準出力および標準エラー出力のデータを格納しました。

-1856(DCADMER_MEMORY_OUT)
標準出力のデータが，指定取得サイズを超えました。
指定されたサイズ分の標準出力のデータを格納しました。

-1857(DCADMER_MEMORY_ERR)
標準エラー出力のデータが，指定取得サイズを超えました。
指定されたサイズ分の標準エラー出力のデータを格納しました。

-1858(DCADMER_MEMORY_OUTERR)
標準出力のデータと標準エラー出力のデータの両方が，指定取得サイズを超えました。
指定されたサイズ分の標準出力のデータおよび標準エラー出力のデータを格納しました。

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード | 説明
DCADMER_MEMORY_ERR | 標準エラー出力のデータが，デフォルトの取得サイズを超えました。
DCADMER_MEMORY_OUT | 標準出力のデータが，デフォルトの取得サイズを超えました。
DCADMER_MEMORY_OUTERR | 標準出力のデータと標準エラー出力のデータの両方が，デフォルトの取得サイズを超えました。
DCADMER_PARAM | 引数に設定した値が間違っています。
DCADMER_PROTO | RpcクラスのOpenメソッドを呼び出していません。
DCADMER_STATNOTZERO | コマンドの終了コードは0以外（コマンドの実行が異常終了）です。
DCADMER_SYSTEMCALL | システムコール（close，pipe，dup，またはread）の呼び出しに失敗しました。

注意事項

サーチパスに指定したディレクトリ間で，コマンド名が重複しないように注意してください。コマンド名が重複している場合，正しいコマンドが起動されないで別のコマンドが起動されます。

また，コマンド名は，OpenTP1が提供するコマンド群（$DCDIR/binの下）のコマンド名とも重複しないようにしてください。

なお，「%DCDIR%」はOpenTP1インストールディレクトリを表しています。

●Complete

説明

SUP.NETの開始処理が終了したことを，OpenTP1に報告します。

Completeメソッドが正常に終了したことで，SUP.NETの起動は完了します。

SPP.NETでは，Completeメソッドを呼び出す必要はありません。

オフラインの業務をするSUP.NETからはCompleteメソッドは呼び出せません。

宣言

【C#の場合】

public static void Complete(
);

【Visual Basicの場合】

Public Shared Sub Complete( _
)

【J#の場合】

public static void Complete(
);

パラメタ

なし

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCADMER_COMM
プロセス間通信でエラーが発生しました。

DCADMER_PARAM
引数に設定した値が間違っています。

DCADMER_PROTO
ユーザサーバが正常開始中，または再開始中ではありません。
RpcクラスのOpenメソッドを呼び出していません。

DCADMER_STS_IO
ステータス情報の入出力エラーが発生しました。

●GetStatus

説明

このメソッドを呼び出したユーザサーバの状態を報告します。

ユーザサーバの状態はリターン値で報告されます。

宣言

【C#の場合】

public static int GetStatus(
);

【Visual Basicの場合】

Public Shared Function GetStatus( _
) As Integer

【J#の場合】

public static int GetStatus(
);

パラメタ

なし

戻り値

ユーザサーバの状態を返します。

TP1ServerValues.DCADM_STAT_START_NORMAL
ユーザサーバは正常開始中です。

TP1ServerValues.DCADM_STAT_START_RECOVER
ユーザサーバは再開始中です。

TP1ServerValues.DCADM_STAT_ONLINE
ユーザサーバはオンライン中です。

TP1ServerValues.DCADM_STAT_STOP
ユーザサーバは終了中です。

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCADMER_COMM
プロセス間通信でエラーが発生しました。

DCADMER_PARAM
引数に設定した値が間違っています。

DCADMER_PROTO
ユーザサーバが正常開始中，または再開始中ではありません。
RpcクラスのOpenメソッドを呼び出していません。

DCADMER_STS_IO
ステータス情報の入出力エラーが発生しました。

IntArrayHolder

IntArrayHolderの概要

名前空間

Hitachi.OpenTP1

継承関係

System.Object
 +- Hitachi.OpenTP1.IntArrayHolder

実装インタフェース

Hitachi.OpenTP1.Common.IHolder

説明

IntArrayHolderクラスは，System.Int32配列を保持するホルダークラスです。

プロパティの一覧

名称 | 説明
Value | 保持している変数に対して値の設定および参照を行います。

プロパティの詳細

●Value

説明

保持している変数に対して値の設定および参照を行います。

宣言

【C#の場合】

public int[] Value {get; set;}

【Visual Basicの場合】

Public Property Value As Integer()

【J#の場合】

public int[] get_Value();
public void set_Value(int[]);

例外

なし

IntHolder

IntHolderの概要

名前空間

Hitachi.OpenTP1

継承関係

System.Object
 +- Hitachi.OpenTP1.IntHolder

実装インタフェース

Hitachi.OpenTP1.Common.IHolder

説明

IntHolderクラスは，System.Int32値を保持するホルダークラスです。

プロパティの一覧

名称 | 説明
Value | 保持している変数に対して値の設定および参照を行います。

プロパティの詳細

●Value

説明

保持している変数に対して値の設定および参照を行います。

宣言

【C#の場合】

public int Value {get; set;}

【Visual Basicの場合】

Public Property Value As Integer

【J#の場合】

public int get_Value();
public void set_Value(int);

例外

なし

IRecordインタフェース

IRecordインタフェースの概要

名前空間

Hitachi.OpenTP1

継承関係

Hitachi.OpenTP1.IRecord

説明

IRecordインタフェースは，カスタムレコードが実装しなければならないレコード名，およびレコードの簡易説明のプロパティを規定します。

メソッドの一覧

名称 | 説明
GetRecordName() | レコード名の取得を行います。
GetRecordShortDescription() | レコードの簡易説明の取得を行います。
SetRecordName(System.String) | レコード名を設定します。
SetRecordShortDescription(System.String) | レコードの簡易説明を設定します。

メソッドの詳細

●GetRecordName

説明

レコード名の取得を行います。

宣言

【C#の場合】

public abstract string GetRecordName(
);

【Visual Basicの場合】

Public MustOverride Function GetRecordName( _
) As String

【J#の場合】

public abstract System.String GetRecordName(
);

パラメタ

なし

戻り値

なし

例外

なし

注意事項

設定しているレコード名を返します。

●GetRecordShortDescription

説明

レコードの簡易説明の取得を行います。

宣言

【C#の場合】

public abstract string GetRecordShortDescription(
);

【Visual Basicの場合】

Public MustOverride Function GetRecordShortDescription( _
) As String

【J#の場合】

public abstract System.String GetRecordShortDescription(
);

パラメタ

なし

戻り値

なし

例外

なし

注意事項

レコードに設定されている簡易説明を返します。

●SetRecordName

説明

レコード名を設定します。

宣言

【C#の場合】

public abstract void SetRecordName(
 string recordName
);

【Visual Basicの場合】

Public MustOverride Sub SetRecordName( _
 ByVal recordName As String _
)

【J#の場合】

public abstract void SetRecordName(
 System.String recordName
);

パラメタ

recordName

新たに設定するレコード名称。

戻り値

なし

例外

なし

●SetRecordShortDescription

説明

レコードの簡易説明を設定します。

宣言

【C#の場合】

public abstract void SetRecordShortDescription(
 string recordShortDescription
);

【Visual Basicの場合】

Public MustOverride Sub SetRecordShortDescription( _
 ByVal recordShortDescription As String _
)

【J#の場合】

public abstract void SetRecordShortDescription(
 System.String recordShortDescription
);

パラメタ

recordShortDescription

新たに設定するレコードの簡易説明。

戻り値

なし

例外

なし

Jnl 【TP1/Server Base】

Jnlの概要

名前空間

Hitachi.OpenTP1.Server

継承関係

System.Object
 +- Hitachi.OpenTP1.Server.Jnl

説明

Jnlクラスは，ユーザジャーナルを取得するメソッドを提供します。

Jnlクラスのメソッドは，TP1/Server BaseのUAPでだけ使用できます。TP1/LiNKのUAPでは，Jnlクラスのメソッドは使用できません。

メソッドの一覧

名称 | 説明
PutUJ(System.Byte[], System.Int32, System.Int32) | ユーザジャーナルを取得します。
PutUJ(System.Byte[], System.Int32, System.Int32, System.Int32) | ユーザジャーナルを取得します。UAPの履歴情報であるユーザジャーナル（UJ）をシステムジャーナルファイル（System_jnl_file）に取得します。

メソッドの詳細

●PutUJ

説明

ユーザジャーナルを取得します。

宣言

【C#の場合】

public static void PutUJ(
 byte[] data,
 int dataSize,
 int ujCode
);

【Visual Basicの場合】

Public Shared Sub PutUJ( _
 ByVal data() As Byte, _
 ByVal dataSize As Integer, _
 ByVal ujCode As Integer _
)

【J#の場合】

public static void PutUJ(
 System.Byte[] data,
 int dataSize,
 int ujCode
);

注意事項

このPutUJメソッドは，PutUJ（byte[] data，int dataSize，int ujCode，int flags）メソッドのflagsにTP1ServerFlags.DCNOFLAGSを指定した場合と同じ動作をします。

●PutUJ

説明

ユーザジャーナルを取得します。UAPの履歴情報であるユーザジャーナル（UJ）をシステムジャーナルファイル（system_jnl_file）に取得します。PutUJメソッド1回の呼び出しで取得するUJの単位をUJレコードといいます。

PutUJメソッドを呼び出しても，すぐにはシステムジャーナルファイルに出力されません。ジャーナルバッファに空きがなくなったとき，またはトランザクション処理が正常終了した同期点で，システムジャーナルファイルにUJレコードが出力されます。

PutUJメソッドは，SUP.NETの場合，RpcクラスのOpenメソッドの呼び出し後からRpcクラスのCloseメソッドの呼び出しまでの間で呼び出せます。SPP.NETの場合，どこからでも呼び出せます。出力済みのUJレコードは，PutUJメソッドを呼び出したトランザクションで障害が発生しても，ロールバック（部分回復）で無効にできません。PutUJメソッドを呼び出したトランザクションをロールバックしても，UJレコードはシステムジャーナルファイルに出力されます。

宣言

【C#の場合】

public static void PutUJ(
 byte[] data,
 int dataSize,
 int ujCode
 int flags
);

【Visual Basicの場合】

Public Shared Sub PutUJ( _
 ByVal data() As Byte, _
 ByVal dataSize As Integer, _
 ByVal ujCode As Integer _
 ByVal flagsb As Integer _
)

【J#の場合】

public static void PutUJ(
 System.Byte[] data,
 int dataSize,
 int ujCode
 int flags
);

パラメタ

data

取得するUAPの履歴情報を設定します。UAPの履歴情報として有効になるデータは，dataSizeに設定した長さです。

dateSize

取得するUAPの履歴情報の長さを設定します。設定できる長さは，1から（取得先のシステムジャーナルファイルサービス定義のjnl_max_datasizeオペランドの値-8）までです。

ujCode

0～255の値で設定します。

flags

UJコードを取得する時点で，システムジャーナルファイルにUJレコードを出力するかどうかを，次に示す形式で設定します。

TP1ServerFlags.DCJNL_FLUSH
UJレコードを取得する時点で，システムジャーナルファイルにUJレコードを出力します。トランザクション内でUJレコードが取得されている場合は，この設定は無視されます。

TP1ServerFlags.DCNOFLAGS
UJレコードを取得する時点では，システムジャーナルファイルにUJレコードを出力しません。

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合だけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード | 説明
DCJNLER_PARAM | パラメタの形式が間違っています。
DCJNLER_SHORT | ユーザジャーナルの長さ（dataSizeの値）に，0以下のデータ長を設定しています。
DCJNLER_LONG | ユーザジャーナルの長さ（dataSizeの値）に，設定できる範囲以上の値を設定しています。
DCJNLER_PROTO | UAPを開始する準備ができていません。

注意事項

トランザクション外のUJレコードは，ジャーナルバッファに空きがなくなったとき，またはほかのアプリケーションのトランザクションが正常終了した同期点（コミットした時点）で，システムジャーナルファイルに出力されます。トランザクションが発生しないアプリケーションでUJレコードを取得する場合は，flagsにTP1ServerFlags.DCJNL_FLUSHを設定したPutUJメソッドを適切なタイミングで呼び出してください。

Lck 【TP1/Server Base】

Lckの概要

名前空間

Hitachi.OpenTP1.Server

継承関係

System.Object
 +- Hitachi.OpenTP1.Server.Lck

説明

Lckクラスは，任意のユーザファイルを排他制御するメソッドを提供します。

Lckクラスのメソッドは，TP1/Server BaseのUAPでだけ使えます。TP1/LiNKのUAPでは，Lckクラスのメソッドは使えません。

メソッドの一覧

名称 | 説明
Get(System.String, System.Int32, System.Int32) | UAPで使う資源の排他を指定します。
ReleaseAll() | Getメソッドで指定した資源の排他をすべて解除します。
ReleaseByName(System.String) | Getメソッドで指定した資源の排他を，資源名称を指定して解除します。

メソッドの詳細

●Get

説明

UAPで使う資源の排他を指定します。排他の管理は，OpenTP1のトランザクションマネジャで管理するグローバルトランザクション単位で処理されます。

ここで指定した排他は，排他を解除するメソッド（Lck.ReleaseAllメソッド，Lck.ReleaseByNameメソッド）を呼び出すか，Getメソッドを呼び出したグローバルトランザクションの同期点取得後に解除されます。

宣言

【C#の場合】

public static void Get(
   string name,
   int lockMode,
   int flags
);

【Visual Basicの場合】

Public Shared Sub Get( _
   ByVal name As String, _
   ByVal lockMode As Integer, _
   ByVal flags As Integer _
)

【J#の場合】

public static void Get(
   System.String name,
   int lockMode,
   int flags
);

パラメタ

name

排他する資源の名称を，16文字の半角英数字文字列で設定します。ここで設定した資源名称を基に，ロックサービスで排他を管理します。16文字未満の場合は，設定した値がそのまま資源名称とみなされます。16文字を超えた値を設定した場合は，16文字までが資源名称とみなされ，超えた部分は切り捨てられます。

ロックサービスでは，文字列の内容についてはチェックしません。論理的に正しい名称を設定してください。資源名称に半角英数字以外の値を使った場合は，デッドロック情報，タイムアウト情報，およびlcklsコマンドの表示が乱れたり，資源名称が途中で切り捨てられる場合があります。

lockMode

排他制御モードを設定します。排他制御モードは次のどちらか一方を設定してください。重複して設定できません。

TP1ServerFlags.DCLCK_PR
資源を参照します。ほかのUAPには参照だけを許可します。

TP1ServerFlags.DCLCK_EX
資源を更新します。ほかのUAPには参照も更新も禁止します。

flags

資源の排他に関するフラグを設定します。設定できる値を次に示します。

TP1ServerFlags.DCLCK_WAIT
ほかのUAPと資源を競合した場合に，資源の解放待ちにします。このフラグが設定されてない場合に競合したときは，例外応答します。

TP1ServerFlags.DCLCK_TEST
資源が使えるかどうかをテストするときに設定します。このフラグを設定したときは，Getメソッドが正常終了しても，nameに設定した資源は確保されていないので注意してください。

TP1ServerFlags.DCNOFLAGS
フラグを設定しません。

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード | 説明
DCLCKER_PARAM | 引数に設定した値が間違っています。
DCLCKER_WAIT | ほかのUAPが，nameに名称を設定した資源を使っています。
DCLCKER_DLOCK | デッドロックが起こりました。
DCLCKER_TIMOUT | OpenTP1のロックサービス定義で指定した待ち時間でタイムアウトが発生したため，資源を確保できませんでした。
DCLCKER_MEMORY | 排他制御用のテーブルが不足しています。
DCLCKER_OUTOFTRN | トランザクション処理でないUAPから指定しています。
DCLCKER_VERSION | OpenTP1のライブラリとロックサービスのバージョンが一致していません。

●ReleaseAll

説明

Getメソッドで指定した資源の排他をすべて解除します。同期点取得前に排他を解除するときに，ReleaseAllメソッドを呼び出します。

排他をしたグローバルトランザクションが終了したときに，OpenTP1のロックサービスによって自動的に排他は解除されます。このときは，UAPで排他を解除する必要はありません。

宣言

【C#の場合】

public static void ReleaseAll(
);

【Visual Basicの場合】

Public Shared Sub ReleaseAll( _
)

【J#の場合】

public static void ReleaseAll(
);

パラメタ

なし

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード | 説明
DCLCKER_OUTOFTRN | トランザクション処理でないUAPからReleaseAllメソッドを呼び出しています。
DCLCKER_NOTHING | このメソッドを呼び出したトランザクションでは，資源を確保していません。
DCLCKER_VERSION | OpenTP1のライブラリとロックサービスのバージョンが一致していません。

●ReleaseByName

説明

Getメソッドで指定した資源の排他を，資源名称を指定して解除します。同期点取得前に排他を解除するときに，ReleaseByNameメソッドを呼び出します。

排他をしたグローバルトランザクションが終了したときに，ロックサービスによって自動的に排他は解除されます。このときは，UAPで排他を解除する必要はありません。

宣言

【C#の場合】

public static void ReleaseByName(
   string name
);

【Visual Basicの場合】

Public Shared Sub ReleaseByName( _
   ByVal name As String _
)

【J#の場合】

public static void ReleaseByName(
   System.String name
);

パラメタ

name

排他の指定を解除する資源名称を設定します。資源名称はGetメソッドで設定した名称と同じ値を設定してください。

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード | 説明
DCLCKER_PARAM | 引数に設定した値が間違っています。
DCLCKER_OUTOFTRN | トランザクション処理でないUAPからReleaseByNameメソッドを呼び出しています。
DCLCKER_NOTHING | 解除を指定した資源名称に該当する資源がありません。
DCLCKER_VERSION | OpenTP1のライブラリとロックサービスのバージョンが一致していません。

Log

Logの概要

名前空間

Hitachi.OpenTP1.Server

継承関係

System.Object
 +- Hitachi.OpenTP1.Server.Log

説明

Logクラスは，UAPからメッセージログを出力するメソッドを提供します。

メソッドの一覧

名称 | 説明
Print(System.String, System.String, System.String, System.Int32) | 指定した文字列に，OpenTP1で行ヘッダ，OpenTP1識別子，日時，要求元ノード名，要求元プログラムID，およびメッセージIDを付けて，メッセージログファイルに出力します。

メソッドの詳細

●Print

説明

指定した文字列に，OpenTP1で行ヘッダ，OpenTP1識別子，日時，要求元ノード名，要求元プログラムID，およびメッセージIDを付けて，メッセージログファイルに出力します。

OpenTP1では，Printメソッドで使うメッセージID用に，05000から06999までの範囲の番号を割り当てています。UAPから出力するメッセージIDの番号には，05000から06999までの範囲の値を付けてください。

障害が起こってUAPからメッセージログが出力できない場合でも，Printメソッドが正常終了することがあります。そのため，メッセージログが抜ける場合がありますが，メッセージログの抜けはメッセージログに付けるメッセージログ通番で確認できます。

ひとつのプロセスから複数回Printメソッドを呼び出した場合は，メッセージログファイルへの出力順序は保証されます。しかし，複数のプロセスから別々にPrintメソッドを呼び出した場合は，呼び出した順にメッセージログファイルに出力されない場合があります。

通信障害，およびログサービス未起動のエラーが起こった場合は，UAPから出力したメッセージを，そのUAPプロセス上で編集して，標準エラー出力に出力します。このとき，メッセージの終わりには，次に示すエラー要因を示すコードを付けます。

E1
ログサービスが起動していないため，メッセージログに出力ができなかったメッセージを示します。

E2
通信障害のため，メッセージログファイルに出力できなかったメッセージを示します。

E1，E2以外のエラーを検出した場合，OpenTP1はエラーの原因を示すメッセージログにPrintメソッドに指定したメッセージIDの番号を付けて，標準エラー出力に出力します。

宣言

【C#の場合】

public static void Print(
 string messageID,
 string programID,
 string outputMessage,
 int displayColor
);

【Visual Basicの場合】

Public Shared Sub Print( _
 ByVal messageID As String, _
 ByVal programID As String, _
 ByVal outputMessage As String, _
 ByVal displayColor As Integer _
)

【J#の場合】

public static void Print(
 System.String messageID,
 System.String programID,
 System.String outputMessage,
 int displayColor
);

パラメタ

messageID

メッセージログごとに付けられる識別子（メッセージID）を設定します。

「KFCAn1n2n3n4n5-x」の形式（11文字）で設定します。UAPから出力する通番（n1n2n3n4n5の部分）には，05000から06999までの数値を設定します。

programID

Printメソッドを呼び出したUAPを識別する値（要求元プログラムID）を，ユーザが任意で設定します。英数字2文字で設定します。

outputMessage

メッセージログファイルにメッセージログとして出力したい任意の文字列を設定します。最大222文字で設定します。

displayColor

Printメソッドで設定したメッセージログをNETMの操作支援端末に出力する場合の，表示色に対応した数値を設定します。次のどれかを設定します。

1：緑

2：赤

3：白

4：青

5：紫

6：水色

7：黄色

上記以外の数値を設定した場合は，緑が仮定されます。

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコード名称が出力されます。

エラーコード | 説明
DCLOGER_COMM | プロセス間通信でエラーが発生しました。
DCLOGER_DEFFILE | システムの環境設定に誤りがあります。
DCLOGER_HEADER | ログサービスがメッセージログに付ける情報を取得したときに，障害が起こりました。
DCLOGER_MEMORY | メモリが不足しました。
DCLOGER_NOT_UP | ログサービスが起動していません。
DCLOGER_PARAM_ARGS | 引数に設定した値が間違っています。
DCLOGER_PROTO | RpcクラスのOpenメソッドを呼び出していません。

注意事項

ログ出力量が多い場合は，Printメソッドのリターンが遅くなります。

例えば，障害発生時にメッセージ出力量が著しく多くなると，トランザクション処理時間が延びます。スローダウンの要因になりますので，注意してください。

LongArrayHolder

LongArrayHolderの概要

名前空間

Hitachi.OpenTP1

継承関係

System.Object
 +- Hitachi.OpenTP1.LongArrayHolder

実装インタフェース

Hitachi.OpenTP1.Common.IHolder

説明

LongArrayHolderクラスは，System.Int64配列を保持するホルダークラスです。

プロパティの一覧

名称 | 説明
Value | 保持している変数に対して値の設定および参照を行います。

プロパティの詳細

●Value

説明

保持している変数に対して値の設定および参照を行います。

宣言

【C#の場合】

public long[] Value {get; set;}

【Visual Basicの場合】

Public Property Value As Long()

【J#の場合】

public long[] get_Value();
public void set_Value(long[]);

例外

なし

LongHolder

LongHolderの概要

名前空間

Hitachi.OpenTP1

継承関係

System.Object
 +- Hitachi.OpenTP1.LongHolder

実装インタフェース

Hitachi.OpenTP1.Common.IHolder

説明

LongHolderクラスは，System.Int64値を保持するホルダークラスです。

プロパティの一覧

名称 | 説明
Value | 保持している変数に対して値の設定および参照を行います。

プロパティの詳細

●Value

説明

保持している変数に対して値の設定および参照を行います。

宣言

【C#の場合】

public long Value {get; set;}

【Visual Basicの場合】

Public Property Value As Long

【J#の場合】

public long get_Value();
public void set_Value(long);

例外

なし

Mcf

Mcfの概要

名前空間

Hitachi.OpenTP1.Server

継承関係

System.Object
 +- Hitachi.OpenTP1.Server.Mcf

説明

Mcfクラスは，アプリケーション間でメッセージの送受信をするときに使う，メッセージ送受信機能を使用するためのメソッドを提供します。

メソッドの一覧

名称 | 説明
Send(System.Int32, System.String, System.Byte[], System.Int32) | 相手システムへ一方送信メッセージを送信します。
SendReceive(System.Int32, System.String, System.Byte[], System.Int32, System.Byte[], System.Int32，System.Int32，System.Int32，System.Int32) | 同期型でメッセージを送信したあと，同期型でメッセージを受信します。

メソッドの詳細

●Send

説明

相手システムへ一方送信メッセージを送信します。一方送信メッセージは，一つのセグメントで構成されます。

セグメントを送信する領域の形式を次に示します。Lはヘッダ領域の長さです。バッファ形式1の場合は8バイト，バッファ形式2の場合は4バイトになります。

宣言

【C#の場合】

public static void Send(
 int action,
 string terminalName,
 byte[] sendData,
 int sendDataLength
);

【Visual Basicの場合】

Public Shared Function Send( _
 ByVal action As Integer, _
 ByVal terminalName As String, _
 ByVal sendData() As Byte, _
 ByVal sendDataLength As Integer _
)

【J#の場合】

public static void Send(
 int action,
 System.String terminalName,
 ubyte[] sendData,
 int sendDataLength
);

パラメタ

action

単一セグメントを送信すること，優先か一般か，出力通番を付けるかどうか，および使用するバッファ形式を，次の形式で設定します。

DCMCFEMI〔|｛DCMCFNORM|DCMCFPRIO｝〕
〔|｛DCMCFSEQ|DCMCFNSEQ｝〕〔|｛DCMCFBUF1|DCMCFBUF2｝〕

TP1ServerFlags.DCMCFEMI
メッセージが単一セグメントであることを設定します。

TP1ServerFlags.DCMCFNORM
一般の一方送信メッセージとして送信する場合に設定します。

TP1ServerFlags.DCMCFPRIO
優先の一方送信メッセージとして送信する場合に設定します。

TP1ServerFlags.DCMCFSEQ
出力通番が必要な場合に設定します。

TP1ServerFlags.DCMCFNSEQ
出力通番が必要ない場合に設定します。

TP1ServerFlags.DCMCFBUF1
バッファ形式1を使用する場合に設定します。

TP1ServerFlags.DCMCFBUF2
バッファ形式2を使用する場合に設定します。

terminalName

出力先の論理端末名称を設定します。論理端末名称の長さは最大8バイトです。論理端末名称の後ろにはヌル文字を付けてください。

sendData

送信するセグメントの内容を設定した領域を設定します。一つのセグメントで32000バイトまで送信できます。

sendDataLength

送信するセグメントの長さを設定します。

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCMCFER_INVALID_ARGS
引数に設定した値が間違っています。

DCMCFER_PROTO
プロトコル不正です。
メッセージ送受信機能の使用が有効になっていません。

DCMCFRTN_71002
メッセージキューへの出力処理中に障害が発生しました。
メッセージキューが閉塞されています。
メッセージキューが割り当てられていません。
セグメント長に32000バイトを超える値を設定しています。
MCFが終了処理中のため，メッセージの送信を受け付けられません。

DCMCFRTN_71003
メッセージキューが満杯です。

DCMCFRTN_71004
メッセージを格納するバッファをメモリ上に確保できませんでした。

DCMCFRTN_71108
メッセージを送信しようとしましたが，送信先の管理テーブルが確保できませんでした。
プロセスのローカルメモリが不足しています。

DCMCFRTN_72000
トランザクションでないSPP.NETの処理から，Sendメソッドを呼び出しています。

DCMCFRTN_72001
Sendメソッドを呼び出せない論理端末を設定しています。
terminalNameに設定した論理端末名称が間違っています。

DCMCFRTN_72016
actionに設定したメッセージ種別（DCMCFNORMまたはDCMCFPRIO）の値が間違っています。
actionに設定した値が間違っています。
引数に設定した値が間違っています。

DCMCFRTN_72017
actionに設定した出力通番の要否（DCMCFSEQまたはDCMCFNSEQ）の値が間違っています。

DCMCFRTN_72026
actionに設定したセグメント種別（DCMCFEMI）の値が間違っています。

DCMCFRTN_72041
送信するメッセージの内容がありません。
長さが0バイトのセグメントを送信しています。

●SendReceive

説明

同期型でメッセージを送信したあと，同期型でメッセージを受信します。

SendReceiveメソッドでは，相手システムへ送るメッセージのセグメントを送信できます。

メッセージのセグメントを送信すると，SendReceiveメソッドは相手システムからの応答を待ちます。応答が届くと，そのメッセージのセグメントを受信します。

セグメントを送信する領域と受信する領域の形式をそれぞれ示します。Lはヘッダ領域の長さです。バッファ形式1の場合は8バイト，バッファ形式2の場合は4バイトになります。

宣言

【C#の場合】

public static void SendReceive(
 int action,
 string terminalName,
 byte[] sendData,
 int sendDataLength,
 byte[] receiveData,
 ref int receiveDataLength,
 int receiveBufferLength,
 ref int time,
 int watchTime
);

【Visual Basicの場合】

Public Shared Function SendReceive( _
 ByVal action As Integer, _
 ByVal terminalName As String, _
 ByVal sendData() As Byte, _
 ByVal sendDataLength As Integer, _
 ByVal receiveData() As Byte, _
 ByRef receiveDataLength As Integer, _
 ByVal receiveBufferLength As Integer, _
 ByRef time As Integer, _
 ByVal watchTime As Integer _
)

【J#の場合】

public static void SendReceive(
 int action,
 System.String terminalName,
 ubyte[] sendData,
 int sendDataLength,
 ubyte[] receiveData,
 int receiveDataLength,
 int receiveBufferLength,
 int time,
 int watchTime
);

パラメタ

action

メッセージの最終セグメントを送信するかどうか，および使用するバッファ形式を，次の形式で設定します。

DCMCFEMI〔|｛DCMCFBUF1|DCMCFBUF2｝〕

TP1ServerFlags.DCMCFEMI
最終セグメントを送信する場合に設定します。
メッセージが単一セグメントの場合も，DCMCFEMIを設定します。メッセージの送信の終了を連絡するために，最後は必ずこの値を設定してください。この値を設定してSendReceiveメソッドを呼び出すと，論理端末からの応答を待ちます。

TP1ServerFlags.DCMCFBUF1
バッファ形式1を使用する場合に設定します。

TP1ServerFlags.DCMCFBUF2
バッファ形式2を使用する場合に設定します。

terminalName

メッセージを出力して応答を入力する論理端末名称を設定します。論理端末名称の長さは最大8バイトです。論理端末名称の後ろにはヌル文字を付けてください。

sendData

送信するセグメントの内容を設定した領域を設定します。一つのセグメントで32000バイトまで送信できます。

メッセージの送信の終了を連絡する場合で，セグメントの内容がないときも，必ず設定してください。

sendDataLength

メッセージの送信の終了を連絡する場合で，セグメントの内容がないときは，0を設定してください。

receiveData

セグメントを受信する領域を設定します。

単一セグメントまたは最終セグメントを送信するSendReceiveメソッドが終了すると，受信したメッセージの先頭セグメントが返されます。

処理終了後，receiveDataにはOpenTP1から値が返されます。

receiveDataLength

受信したメッセージの先頭セグメントの長さが返されます。

receiveBufferLength

セグメントを受信する領域の長さを設定します。

time

メッセージを受信した時刻が，1970年1月1日0時0分0秒からの通算の秒数で返されます。

watchTime

SendReceiveメソッドを呼び出してから終了するまでの最大時間を設定します。

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCMCFER_INVALID_ARGS
引数に設定した値が間違っています。

DCMCFER_PROTO
プロトコル不正です。
メッセージ送受信機能の使用が有効になっていません。

DCMCFRTN_71002
メッセージキューへの出力処理中に障害が発生しました。
メッセージキューが閉塞されています。
メッセージキューが割り当てられていません。
セグメント長に32000バイトを超える値を設定しています。
MCFが終了処理中のため，メッセージの送信を受け付けられません。

DCMCFRTN_71003
メッセージキューが満杯です。

DCMCFRTN_71004
メッセージを格納するバッファをメモリ上に確保できませんでした。

DCMCFRTN_71108
メッセージを送信しようとしましたが，送信先の管理テーブルが確保できませんでした。
プロセスのローカルメモリが不足しています。

DCMCFRTN_72001
SendReceiveメソッドを呼び出せない論理端末を設定しています。
terminalNameに設定した論理端末名称が間違っています。

DCMCFRTN_72012
MCFバッファグループ定義のバッファ長が不足しました。

DCMCFRTN_72013
受信領域の長さを超えるセグメントを受信しました。受信領域の長さを超えた部分は切り捨てられました。

DCMCFRTN_72016
actionに設定したメッセージ種別（DCMCFNORMまたはDCMCFPRIO）の値が間違っています。
actionに設定した値が間違っています。
引数に設定した値が間違っています。

DCMCFRTN_72026
actionに設定したセグメント種別（DCMCFEMI）の値が間違っています。

DCMCFRTN_72036
セグメントを受信する領域の長さが不足しています。バッファ形式1の場合は9バイト以上，バッファ形式2の場合は5バイト以上の領域を確保してください。

DCMCFRTN_72041
送信するメッセージの内容がありません。
長さが0バイトのセグメントを送信しています。

DCMCFRTN_72073
非同期メッセージを送信処理中です。

DCMCFRTN_73001
出力先の論理端末で障害が発生しました。

DCMCFRTN_73002
MCF通信サービスで障害が発生しました。

DCMCFRTN_73003
メッセージ受信が仕掛り中です。

DCMCFRTN_73005
watchTimeに設定した時間が経過しましたが，論理端末からの応答がありません。

DCMCFRTN_73010
メッセージの読み込み時に障害が発生しました。
メッセージの編集エラーが発生しました。

DCMCFRTN_73015
出力先の論理端末は，ほかのUAPで仕掛り中です。

DCMCFRTN_73018
watchTimeに設定した値が間違っています。

DCMCFRTN_73019
メッセージ送信完了監視タイマのタイムアウトが発生しました。

DCMCFRTN_73020
出力先の論理端末は停止しています。

Prf

Prfの概要

名前空間

Hitachi.OpenTP1.Server

継承関係

System.Object
 +- Hitachi.OpenTP1.Server.Prf

説明

Prfクラスは，性能検証用トレース機能を提供するメソッドを提供します。

メソッドの一覧

名称 | 説明
GetTraceNum() | GetTraceNumメソッドを呼び出す前に取得した，最新の性能検証用トレース（prfトレース）のプロセス内取得通番を，メソッドの呼び出し元に通知します。
PutUTrace(System.Int32, System.Int32, System.Byte[]) | ユーザ固有の性能検証用トレース（prfトレース）を取得します。

メソッドの詳細

●GetTraceNum

説明

GetTraceNumメソッドを呼び出す前に取得した，最新の性能検証用トレース（prfトレース）のプロセス内取得通番を，メソッドの呼び出し元に通知します。

GetTraceNumメソッドを呼び出したプロセスで一度も性能検証用トレースを取得していない場合，プロセス内取得番号は0となります。

宣言

【C#の場合】

public static int GetTraceNum(
);

【Visual Basicの場合】

Public Shared Function GetTraceNum( _
) As Integer

【J#の場合】

public static int GetTraceNum(
);

パラメタ

なし

戻り値

0
一度も性能検証用トレースを取得していません。

正の整数
最新の性能検証用トレースのプロセス内取得通番。

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード | 説明
DCPRFER_PARAM | 引数に指定した値が間違っています。

●PutUTrace

説明

ユーザ固有の性能検証用トレース（prfトレース）を取得します。

宣言

【C#の場合】

public static void PutUTrace(
 int eventId,
 int dataLength,
 byte[] traceBuffer
);

【Visual Basicの場合】

Public Shared Sub PutUTrace( _
 ByVal eventId As Integer, _
 ByVal dataLength As Integer, _
 ByVal traceBuffer() As Byte _
)

【J#の場合】

public static void PutUTrace(
 int eventId,
 int dataLength,
 ubyte[] traceBuffer
);

パラメタ

eventId

取得するイベントのイベントIDを設定します。

使用できるイベントIDの範囲は0x0001～0x0040です。

dataLength

取得するトレースデータのデータ長を設定します。

設定できるデータ長は4バイト以上256バイト以下です。また，このデータ長は4バイトの倍数でなければなりません。

traceBuffer

取得するトレースデータの設定されているバイト配列を設定します。

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード | 説明
DCPRFER_PARAM | 引数に指定した値に誤りがあります。

注意事項

PutUTraceメソッドが正常終了してもトレースが正しく取得されているとは限りません。これは，トレースの取得処理で，排他を使用しないため複数のプロセスから同時に取得要求が出された場合，データを紛失してしまうことがあるためです。

Rap

Rapの概要

名前空間

Hitachi.OpenTP1.Server

継承関係

System.Object
 +- Hitachi.OpenTP1.Server.Rap

説明

Rapクラスは，リモートAPI機能で，コネクションの確立および解放をユーザが管理する場合に使用するメソッドを提供します。

メソッドの一覧

名称 | 説明
Connect(System.String, System.Int32) | rapリスナーとrapクライアントとの間にコネクションを確立します。
Disconnect(System.Int32) | rapリスナーとrapクライアントとの間に確立されているコネクションを解放します。

メソッドの詳細

●Connect

説明

rapリスナーとrapクライアントとの間にコネクションを確立します。

コネクションを確立するrapリスナーはtargetHostNameパラメタに指定したホスト上にtargetPortNoパラメタに指定したポート番号で起動されているrapリスナーです。

宣言

【C#の場合】

public static int Connect(
 string targetHostName,
 int targetPortNo
);

【Visual Basicの場合】

Public Shared Function Connect( _
 ByVal targetHostName As String, _
 ByVal targetPortNo As Integer _
) As Integer

【J#の場合】

public static int Connect(
 System.String targetHostName,
 int targetPortNo
);

パラメタ

targetHostName

rapリスナーが起動されているOpenTP1ノードのホスト名を設定します。

targetPortNo

rapリスナーの使用しているポート番号を設定します。

戻り値

メソッドが正常終了した場合に，サービスIDを返却します。

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCRAPER_ALREADY_CONNECT
すでにrapリスナーとのコネクションは確立しています。

DCRAPER_MAX_CONNECTION
一つのプロセスからRapクラスのConnectメソッドを呼び出せる上限値を超えました。

DCRAPER_MAX_CONNECTION_SV
rapリスナーの管理するrapクライアントとのコネクション要求受け付け可能最大数を超えました。

DCRAPER_NETDOWN
rapリスナーとの通信でネットワーク障害が発生しました。

DCRAPER_NOCONTINUE
続行できない障害が発生しました。障害の要因として次のことが考えられます。

予期しないメッセージを受信しました。

予期しない相手からのメッセージを受信しました。

DCRAPER_NOHOSTNAME
ホスト名称が解決できません。

DCRAPER_NOMEMORY
メモリが不足しました。

DCRAPER_NOMEMORY_SV
rapリスナーまたはrapサーバでメモリ不足が発生しました。

DCRAPER_NOSERVICE
rapリスナーは開始処理中，または停止処理中です。

DCRAPER_NOSOCKET
ソケット不足が発生しました。

DCRAPER_PANIC_SV
rapリスナーでシステム障害が発生しました。

DCRAPER_PARAM
引数が間違っています。

DCRAPER_PROTO
プロトコル不正です。次の要因が考えられます。

RpcクラスのOpenメソッドが呼び出されていません。

DCRAPER_SHUTDOWN
rapリスナーは停止中です。

DCRAPER_SYSCALL
システムコールで予期しないエラーが発生しました。

DCRAPER_TIMEDOUT
rapリスナーとの通信でタイムアウトが発生しました。

DCRAPER_TIMEOUT_SV
rapリスナーサービス定義のrap_watch_timeオペランドに指定したメッセージ送受信最大監視時間内にコネクションが確立できませんでした。

DCRAPER_UNKNOWN_NODE
接続されていないネットワーク上のrapリスナーに対してコネクションを確立しようとしています。

●Disconnect

説明

rapリスナーとrapクライアントとの間に確立されているコネクションを解放します。

宣言

【C#の場合】

public static void Disconnect(
 int serviceID
);

【Visual Basicの場合】

Public Shared Sub Disconnect( _
 ByVal serviceID As Integer _
)

【J#の場合】

public static void Disconnect(
 int serviceID
);

パラメタ

serviceID

Connectメソッドで受け取ったサービスIDを設定します。

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCRAPER_NETDOWN
rapリスナーとの通信でネットワーク障害が発生しました。

DCRAPER_NOCONTINUE
続行できない障害が発生しました。障害の要因として次のことが考えられます。

予期しないメッセージを受信しました。

予期しない相手からのメッセージを受信しました。

DCRAPER_NOMEMORY
メモリが不足しました。

DCRAPER_PARAM
引数が間違っています。

DCRAPER_PROTO
プロトコル不正です。次の要因が考えられます。

RpcクラスのOpenメソッドが呼び出されていません。

DCRAPER_SHUTDOWN
rapリスナーは停止中です。

DCRAPER_SYSCALL
システムコールで予期しないエラーが発生しました。

DCRAPER_TIMEDOUT
rapリスナーとの通信でタイムアウトが発生しました。

注意事項

例外発生時のエラーコードがHitachi.OpenTP1.TP1Error.DCRAPER_PARAM/Hitachi.OpenTP1.TP1Error.DCRAPER_PROTO以外の値で，Disconnectメソッドが異常終了した場合，rapリスナーとのコネクションは解放されています。

UAPトレースに取得されるエラー要因コードは次のとおりです。

0：エラー無し

1：RPC.Openメソッドが呼び出されていません。

3：ユーザサービス定義のrpc_rap_auto_connectオペランドにYを指定している環境でDisconnectメソッドが呼び出されました。

Rpc

Rpcの概要

名前空間

Hitachi.OpenTP1.Server

継承関係

System.Object
 +- Hitachi.OpenTP1.Server.Rpc

説明

Rpcクラスは，クライアント／サーバ形態の通信をするときに使う，OpenTP1のリモートプロシジャコールのメソッドを提供します。

メソッドの一覧

名称 | 説明
Call(System.String, System.String, System.Byte[], System.Int32, System.Byte[], System.Int32&, System.Int32) | SPP.NETまたはSPPにサービスを要求します。
CallTo(Hitachi.OpenTP1.Server.RpcBindTable, System.String, System.String, System.Byte[], System.Int32, System.Byte[], System.Int32&, System.Int32) | 特定のSPP.NETまたはSPPにサービスを要求します。
Close() | OpenTP1の各種メソッドを使うための環境をクローズします。
DiscardFurtherReplies() | 非同期応答型RPC（CallメソッドのflagsパラメタにTP1ServerFlags.DCRPC_DOMAINを設定）で，まだ返ってきていない応答を，これ以上受信しないことを示すメソッドです。
DiscardSpecificReply(System.Int32) | 非同期応答型RPC（CallメソッドのflagsパラメタにTP1ServerFlags.DCRPC_NOWAITを設定）で，まだ返ってきていない応答を，これ以上受信しないことを示すメソッドです。
GetCallersAddress() | クライアントUAPのプロセスが稼働するノードアドレスを，サーバUAPで取得します。
GetErrorDescriptor() | 非同期応答を特定しないPollAnyRepliesメソッドで例外が発生した直後に呼び出すことで，エラーが発生した非同期応答型RPC要求に対応する記述子を取得します。
GetGatewayAddress() | アプリケーションゲートウェイ型ファイアウォールなどの，ゲートウェイを介してクライアントUAPからのサービス要求を受信したとき，サーバUAPでゲートウェイのノードアドレスを取得します。
GetServicePriolity() | SetServicePriolityメソッドで設定した，サービス要求のスケジュールプライオリティを参照します。
GetTimeout() | 現在のサービス要求の応答待ち時間を参照します。
Open() | OpenTP1の各種メソッドを使う準備をします。
PollAnyReplies(System.Int32, System.Int32, System.Int32) | 非同期応答型RPC（CallメソッドのflagsパラメタにTP1ServerFlags.DCRPC_NOWAITを設定）でサービス要求した結果を受信します。
SetBindTable(Hitachi.OpenTP1.Server.RpcBindTable&, System.String, System.String, System.Int32) | 指定されたサービス要求先ノードのノード識別子（nodeIDパラメタの値），または指定されたサービス要求先ノードのホスト名（hostNameパラメタの値）をRpcBindTable構造体に設定し，CallToメソッドの第一引数を作成します。
SetDirectSchedule(Hitachi.OpenTP1.Server.RpcBindTable&, System.String, System.Int32) | 指定されたサービス要求先ノードのホスト名（hostNameパラメタの値）と，指定されたスケジュールサービスのポート番号（schedulePortNoパラメタの値）をRpcBindTable構造体に設定し，CallToメソッドの第一引数を作成します。
SetServicePriolity(System.Int32) | サービス要求のプライオリティを設定します。
SetServiceRetry() | 実行中のサービスメソッドの処理をリトライします。
SetTimeout(System.Int32) | サービス要求の応答待ち時間を変更します。

メソッドの詳細

●Call

説明

SPP.NETまたはSPPにサービスを要求します。Callメソッドを使うときは，要求するサービスがどのノードにあるかを意識する必要はありません。

サービスを要求するときには，サービスグループ名とサービス名をCallメソッドの引数に設定します。この名称に該当するサービスメソッドにサービスが要求されます。

Callメソッドを呼び出すUAPは，トランザクションとして実行していても，していなくてもかまいません。トランザクションとして実行している処理からCallメソッドでサービスを要求するときは，要求するサービスの処理はトランザクションブランチとして稼働します。Callメソッドを使う場合，サーバUAPがあるノードのOpenTP1が稼働していることが前提です。

Callメソッドを実行して応答を待っている間にシグナルを受信しても，メソッドは例外応答しません。

Callメソッドの詳しい説明については，このメソッドの「注意事項」を参照してください。「注意事項」では次に示す項目について説明しています。

Callメソッドの引数について

Callメソッドがエラーになる場合

Callメソッドがエラーになるタイミング

Callメソッドがエラーになったときに再実行する指定

サービス要求に優先度を付ける場合

エラーコードHitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICE_GROUPとHitachi.OpenTP1.TP1Error.DCRPCER_NET_DOWNとの違い

エラーコードHitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_TERMINATEDを返させる指定

エラーコードと同期点処理の関係

サービスを要求するときの注意

ドメイン修飾をしてサービスを要求する場合

宣言

【C#の場合】

public static int Call(
 string serviceGroupName,
 string serviceName,
 byte[] inputBuffer,
 int inputBuffer_len,
 byte[] outputBuffer,
 ref int outputBuffer_len,
 int flags
);

【Visual Basicの場合】

Public Shared Function Call( _
 ByVal serviceGroupName As String, _
 ByVal serviceName As String, _
 ByVal inputBuffer() As Byte, _
 ByVal inputBuffer_len As Integer, _
 ByVal outputBuffer() As Byte, _
 ByRef outputBuffer_len As Integer, _
 ByVal flags As Integer _
) As Integer

【J#の場合】

public static int Call(
 System.String serviceGroupName,
 System.String serviceName,
 ubyte[] inputBuffer,
 int inputBuffer_len,
 ubyte[] outputBuffer,
 int outputBuffer_len,
 int flags
);

パラメタ

serviceGroupName

SPP.NETまたはSPPのサービスグループ名を，31バイト以内の文字列で設定します。

ドメイン修飾をしてサービスを要求するときは，サービスグループ名の後ろに@（アットマーク）とDNSのドメイン名を付けて設定してください。

serviceName

SPP.NETまたはSPPのサービス名を，31バイト以内の文字列で設定します。

inputBuffer

サービスの入力パラメタを設定します。

inputBuffer_len

サービスの入力パラメタ長を設定します。

outputBuffer

サービスメソッドから返ってくる応答を格納します。

outputBuffer_len

サービスの応答の長さを設定します。

非応答型RPCの場合も，サービスの応答の長さを指定する必要があります。非応答型RPCの場合，サービスの応答の長さには0を設定します。

flags

RPCの形態とオプションを，次に示す形式で設定します。

{TP1ServerFlags.DCNOFLAGS|
TP1ServerFlags.DCRPC_NOWAIT|
TP1ServerFlags.DCRPC_NOREPLY|
TP1ServerFlags.DCRPC_CHAINED}
〔|TP1ServerFlags.DCRPC_TPNOTRAN〕
〔|TP1ServerFlags.DCRPC_DOMAIN〕

オプション
説明

TP1ServerFlags.DCNOFLAGS
同期応答型RPC

TP1ServerFlags.DCRPC_NOWAIT
非同期応答型RPC

TP1ServerFlags.DCRPC_NOREPLY
非応答型RPC

TP1ServerFlags.DCRPC_CHAINED
連鎖RPC

TP1ServerFlags.DCRPC_TPNOTRAN
トランザクション処理からのサービス要求で，要求先の処理をトランザクションにしない場合に設定します。
TP1ServerFlags.DCRPC_TPNOTRANオプションを設定すると，トランザクションの処理からのサービス要求でも，サービス関数およびサービスメソッドの処理はトランザクションになりません。

TP1ServerFlags.DCRPC_DOMAIN
サービスグループ名をドメイン修飾した場合に指定します。
ドメイン修飾をしたRPCはトランザクションブランチにできません。
そのため，トランザクションの処理からCallメソッドを使う場合は，必ずTP1ServerFlags.DCRPC_TPNOTRANオプションと一緒に指定してください。

TP1ServerFlags.DCRPC_TPNOTRANオプションとTP1ServerFlags.DCRPC_DOMAINオプションは，RPCの形態に付けて設定します。

（例1）

同期応答型RPCでトランザクションにしないサービス要求をする場合，flagsパラメタには「TP1ServerFlags.DCNOFLAGS|TP1ServerFlags.DCRPC_TPNOTRAN」と設定します。

（例2）

トランザクションの処理から，同期応答型RPCでドメイン修飾をしたサービス要求をする場合，flagsパラメタには「TP1ServerFlags.DCNOFLAGS|TP1ServerFlags.DCRPC_TPNOTRAN|TP1ServerFlags.DCRPC_DOMAIN」と設定します。

戻り値

非同期応答型RPCの場合は，正の整数は記述子です。それ以外の場合は，意味を持ちません。

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCRPCER_INVALID_ARGS
引数に設定した値が間違っています。

DCRPCER_INVALID_REPLY
サービスメソッドがOpenTP1に返した応答の長さが，1から1048576までの範囲にありません。

DCRPCER_MESSAGE_TOO_BIG
inputBuffer_lenパラメタに設定した入力パラメタ長が，最大値を超えています。

DCRPCER_NET_DOWN
ネットワークに障害が起こりました。

DCRPCER_NOT_TRN_EXTEND
トランザクション処理の連鎖RPCを使ったあとで，flagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANを設定したCallメソッドでサービスを要求しています。

DCRPCER_NO_BUFS
メモリが不足しました。
または，サーバのメッセージ格納領域に十分な空きがないため，サービス要求を受け付けられませんでした。

DCRPCER_NO_BUFS_AT_SERVER
設定したサービスで，メモリが不足しました。

DCRPCER_NO_BUFS_RB
メモリが不足しました。このエラーコードが返った場合は，トランザクションブランチをコミットできません。

DCRPCER_NO_PORT
ドメイン修飾をしてサービスを要求しましたが，ドメイン代表スケジュールサービスのポート番号が見つかりません。

DCRPCER_NO_SUCH_DOMAIN
ドメイン修飾をしたサービスグループ名の，ドメイン名が間違っています。

DCRPCER_NO_SUCH_SERVICE
serviceNameパラメタに設定したサービス名は，定義されていません。

DCRPCER_NO_SUCH_SERVICE_GROUP
serviceGroupNameパラメタに設定したサービスグループは，定義されていません。

DCRPCER_OLTF_INITIALIZING
サービスを要求されたノードにあるOpenTP1は，開始処理中です。

DCRPCER_OLTF_NOT_UP
serviceNameパラメタに設定したサービスがあるノードのOpenTP1が稼働していません。異常終了，停止中，終了処理中，または通信障害が起こったことが考えられます。

DCRPCER_PROTO
Openメソッドを呼び出していません。

DCRPCER_REPLY_TOO_BIG
返ってきた応答が，クライアントUAPで用意した領域に入り切りません。

DCRPCER_REPLY_TOO_BIG_RB
返ってきた応答が，クライアントUAPで用意した領域に入り切りません。このエラーコードが返った場合は，トランザクションブランチをコミットできません。

DCRPCER_SECCHK
サービスを要求されたSPP.NETまたはSPPは，OpenTP1のセキュリティ機能で保護されています。Callメソッドでサービスを要求したUAPには，SPP.NETまたはSPPへのアクセス権限がありません。

DCRPCER_SERVER_BUSY
サービスを要求されたソケット受信型サーバが，サービス要求を受け取れません。

DCRPCER_SERVICE_CLOSED
serviceNameパラメタに設定したサービス名のサービスがあるサービスグループは，閉塞しています。

DCRPCER_SERVICE_NOT_UP
serviceNameパラメタに設定したサービスのUAPプロセスが，稼働していません。
サービス要求の応答待ち時間に0を指定した場合に，サービスを要求されたSPP.NETまたはSPPが，処理を完了する前に異常終了しました。

DCRPCER_SERVICE_TERMINATED
サービスを要求されたSPP.NETまたはSPPが，処理を完了する前に異常終了しました。このエラーコードは，ユーザサービス定義のrpc_extend_functionオペランドに"00000001"を指定したクライアントUAPの場合にだけ返されます。rpc_extend_functionオペランドに"00000000"を指定，またはオペランドを省略した場合は，このエラーコードは返らないで，DCRPCER_TIMED_OUTエラーコードまたはDCRPCER_SERVICE_NOT_UPエラーコードが返されます。

DCRPCER_SERVICE_TERMINATING
serviceNameパラメタに設定したサービスは，終了処理中です。

DCRPCER_SYSERR
システムエラーが発生しました。

DCRPCER_SYSERR_AT_SERVER
設定したサービスで，システムエラーが発生しました。

DCRPCER_SYSERR_AT_SERVER_RB
設定したサービスで，システムエラーが発生しました。このエラーコードが返った場合は，トランザクションブランチをコミットできません。

DCRPCER_SYSERR_RB
システムエラーが発生しました。このエラーコードが返った場合は，トランザクションブランチをコミットできません。

DCRPCER_TESTMODE
オンラインテスタを使っている環境で，テストモードのUAPからテストモードでないSPPへサービスを要求しています。または，テストモードでないUAPからテストモードのSPPへサービスを要求しています。

DCRPCER_TIMED_OUT
Callメソッドの処理が時間切れ（タイムアウト）になりました。
サービスを要求されたSPP.NETまたはSPPが，処理を完了する前に異常終了しました。

DCRPCER_TRNCHK
ノード間負荷バランス機能およびノード間負荷バランス拡張機能の環境で，複数のSPP.NETまたはSPPのトランザクション属性が一致していません。または，負荷を分散する先のノードにあるOpenTP1のバージョンが，クライアントのOpenTP1のバージョンよりも低いため，ノード間負荷バランス機能およびノード間負荷バランス拡張機能を実行できません。
このエラーコードは，ノード間負荷バランス機能およびノード間負荷バランス拡張機能を使っているSPP.NETまたはSPPにサービスを要求した場合にだけ返されます。

DCRPCER_TRNCHK_EXTEND
同時に起動できるトランザクションブランチの数を超えたため，トランザクションブランチを開始できません。
一つのトランザクションブランチから開始できる子トランザクションブランチの最大数を超えたため，トランザクションブランチを開始できません。
トランザクション内でドメイン修飾をしたサービス要求で，flagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANオプションを設定していません。
リソースマネジャ（RM）でエラーが発生したため，トランザクションブランチを開始できません。

注意事項

システム共通定義のall_nodeオペランドで指定したドメイン以外のOpenTP1システムにトランザクショナルRPCを行う場合，自ドメインおよび他ドメイン内のすべてのOpenTP1システムのノード識別子（システム共通定義のnode_idオペランド）は一意にする必要があります。また，すべてのOpenTP1システムのバージョンは03-02以降にする必要があります。これらの条件を満たしていない場合，トランザクションが正しく回復できなくなることがあります。

(1)Callメソッドの引数について

Callメソッドの引数について説明します。

・サーバUAPに渡す値

サービスを要求するときは，サービスメソッドから返ってくる応答の領域をoutputBufferパラメタに確保しておきます。クライアントUAPでは，Callメソッドに次の値を設定しておきます。

入力パラメタ（inputBufferパラメタ）

入力パラメタ長（inputBuffer_lenパラメタ）

応答の長さ（outputBuffer_lenパラメタ）

入力パラメタ，入力パラメタ長，および応答の長さは，クライアントUAPのCallメソッドで設定した値が，そのままサービスメソッドに渡されます。

文字コードや数字の表記形式を変えたい場合は，クライアントUAP，または要求されたサービスメソッドの処理で変換してください。応答を返さないサービスメソッドのサービスを要求するときは，応答の長さを設定しても無視されます。

入力パラメタ長と応答の長さの最大値は，クラスリファレンスのTP1ServerLimitsのDCRPC_MAX_MESSAGE_SIZEで宣言しています。最大値を確認する場合は，クラスリファレンスの内容を参照してください。

・サーバUAPから戻ってくる値

サービスメソッドの処理が終了して応答が戻ってくると，次の値を参照できます。

サービスメソッドの応答（outputBufferパラメタ）

サービスメソッドの応答の長さ（outputBuffer_lenパラメタ）

outputBuffer_lenパラメタの値はサービスメソッドから実際に返ってきた応答の長さです。outputBufferパラメタとoutputBuffer_lenパラメタを参照できる場合を次に示します。

RPCの形態
outputBufferパラメタとoutputBuffer_lenパラメタを参照できる場合

同期応答型RPC，または連鎖RPC
Callメソッドが応答を返したあと。

非同期応答型RPC
PollAnyRepliesメソッドが該当する応答を受け取って応答を返したあと。
outputBuffer_lenパラメタは参照できません。

非応答型RPC
outputBufferパラメタとoutputBuffer_lenパラメタは参照できません。
Callメソッド，またはPollAnyRepliesメソッドが例外応答した場合には，outputBufferパラメタとoutputBuffer_lenパラメタは参照できません。
返ってきた応答が，クライアントUAPで確保した応答の領域（outputBufferパラメタの値）よりも大きい場合は，Hitachi.OpenTP1.TP1Error.DCRPCER_REPLY_TOO_BIGで例外応答します。

・flagsパラメタに設定する値

flagsパラメタに設定した値とCallメソッドの実行結果について説明します。

RPCの形態
Callメソッドの実行結果

同期応答型RPC
（flagsパラメタにTP1ServerFlags.DCNOFLAGSを設定）
Callメソッドは，応答が返るか，通信先でエラーが起こるまで応答を返しません。

非同期応答型RPC
（flagsパラメタにTP1ServerFlags.DCRPC_NOWAITを設定）
Callメソッドは，すぐに応答を返します。ただし，応答を参照できるのは，PollAnyRepliesメソッドで非同期に応答を受信したあとです。
応答（outputBufferパラメタの値）の領域は，次に示す方法で非同期応答型RPCを終了するまで，解放しないでください。

PollAnyRepliesメソッドで応答を受け取る。

DiscardFurtherRepliesメソッドで応答の受信を拒否する。

トランザクションの処理からサービスを要求した場合で，コミット，またはロールバックする。

トランザクションの処理で非同期応答型RPCを使う場合，同期点処理（コミット，またはロールバック）前にPollAnyRepliesメソッドで応答を受け取ってください。同期点処理後には，PollAnyRepliesメソッドで応答は受信できません。PollAnyRepliesメソッドが受信する応答を特定する場合は，Callメソッドが応答を返したときに返された正の整数（記述子）を，PollAnyRepliesメソッドの引数に設定します。受信する応答を特定する場合は，Callメソッドのリターン値を保持しておいてください。
なお，非トランザクションの処理で，同期点処理後に応答を受け取りたい場合は，システムサービス定義のrpc_extend_functionオペランドで該当するオプションを指定する必要があります。

非応答型RPC
（flagsパラメタにTP1ServerFlags.DCRPC_NOREPLYを設定）
Callメソッドは，サービスメソッドの処理が終わるのを待たないで，すぐに応答を返します。サービスメソッドは応答を返さないサービスとみなされます。そのため，サービスメソッドが実行されたかどうかは，サービスを要求したUAPからはわかりません。TP1ServerFlags.DCRPC_NOREPLYを設定した場合は，応答（outputBufferパラメタの値）と応答の長さ（outputBuffer_lenパラメタの値）の値は参照できません。

連鎖RPC
（flagsパラメタにTP1ServerFlags.DCRPC_CHAINEDを設定）
Callメソッドは，応答が返るか，通信先でエラーが起こるまで応答を返しません。連鎖RPCで同じサービスグループに属するサービスを複数回要求する場合は，最初の要求時と同じプロセスで実行できます。
連鎖RPCを使う場合には，次に示す制限があります。

2回目以降のCallメソッドでは，ユーザサーバおよびサービスの閉塞を検出できません。

2回目以降のCallメソッドでサービスメソッドの処理で異常が起こった場合には，ユーザサーバ全体が閉塞します。サービス単位では閉塞しません。

(2)Callメソッドがエラーになる場合

Callメソッドの例外応答する理由について説明します。

サーバUAPがあるノードのOpenTP1が稼働していない場合サービスを要求されるOpenTP1が稼働していない場合は，Callメソッドは次に示すエラーコードのどれかで例外応答します。

Hitachi.OpenTP1.TP1Error.DCRPCER_NET_DOWN

Hitachi.OpenTP1.TP1Error.DCRPCER_OLTF_INITIALIZING

Hitachi.OpenTP1.TP1Error.DCRPCER_OLTF_NOT_UP

Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_NOT_UP

・サーバUAPが稼働していない場合

サーバUAPがマルチサーバの場合，異常終了中，または部分回復処理中であっても，サービス要求はOpenTP1で新しく起動されたプロセスで実行されます。ただし，次に示す場合は，Callメソッドは例外応答します。

閉塞しているSPP.NETまたはSPPへはサービスを要求できません。サービスグループが閉塞されている場合は，Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_CLOSEDで例外応答します。

ユーザサーバの停止コマンド（dcsvstopコマンド）またはOpenTP1の停止コマンド（dcstopコマンド）で，SPP.NETまたはSPPが終了処理中もしくは終了している場合は，次に示すどれかで例外応答します。
・Hitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICE_GROUP
・Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_CLOSED
・Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_TERMINATING
上記のうち，どのエラーコードが返るかは，Callメソッドを呼び出したタイミングで決まります。

OpenTP1が開始処理中の場合は，Hitachi.OpenTP1.TP1Error.DCRPCER_OLTF_INITIALIZINGで例外応答します。この場合は，サーバUAPまたはOpenTP1が起動完了したあとに正常にサービスを要求できることがあります。OpenTP1は，メッセージID KFCA01809-Iのメッセージログが出力されると起動を完了するので，このメッセージが表示されてから再びサービスを要求してください。

・ノード間負荷バランス機能およびノード間負荷バランス拡張機能の環境でサービスを要求した場合

ノード間負荷バランス機能およびノード間負荷バランス拡張機能の環境では，該当するサービスのスケジュールが閉塞していると，OpenTP1が自動的にほかのノードにサービス要求を転送します。ただし，次に示す条件の場合，CallメソッドはHitachi.OpenTP1.TP1Error.DCRPCER_TRNCHKで例外応答します。

トランザクション処理の場合，転送しようとした先のノードにあるサービスのトランザクション属性が，閉塞していたサービスと一致していないとき。

転送しようとした先のノードにあるOpenTP1のバージョンが，サービスを要求したOpenTP1のノードのバージョンよりも古いとき。

上記の例外応答が起こった場合は，次に示す処置をしてください。

ノード間負荷バランス機能およびノード間負荷バランス拡張機能を構成する複数のSPP.NETまたはSPPのトランザクション属性を一致させてください。

ノード間負荷バランス機能およびノード間負荷バランス拡張機能を構成する複数のOpenTP1のバージョンを一致させてください。

・ソケット受信型サーバへサービスを要求する場合

ソケット受信型サーバでは，ユーザサービス定義のmax_socket_msgオペランドおよびmax_socket_msglenオペランドの指定で，データの輻輳制御をしています。そのため，定義した値を超えた場合，サービス要求を受信できないことがあります。

このときCallメソッドは，Hitachi.OpenTP1.TP1Error.DCRPCER_SERVER_BUSYで例外応答します。この値が返った場合，クライアントUAPは，適当な時間を置いてから再実行すると，サービスを要求できることがあります。

・連鎖RPCを使った場合

トランザクションとして処理している連鎖RPCを使っているUAPから，同じサーバUAPにトランザクションでないCallメソッドを呼び出すと，Hitachi.OpenTP1.TP1Error.DCRPCER_NOT_TRN_EXTENDで例外応答します。

・オンラインテスタを使っている場合

オンラインテスタを使っている場合に，テストモードのUAPとテストモードでないUAP間でCallメソッドを呼び出すと，Hitachi.OpenTP1.TP1Error.DCRPCER_TESTMODEで例外応答します。

・セキュリティ機能を使っている場合

Callメソッドを呼び出したときに，目的のサービスがセキュリティ機能で保護されていて，Callメソッドを呼び出したクライアントUAPにSPP.NETまたはSPPへのアクセス権がない場合は，Hitachi.OpenTP1.TP1Error.DCRPCER_SECCHKで例外応答します。

(3)Callメソッドがエラーになるタイミング

サービスを要求されたSPP.NETまたはSPPが異常終了した場合，クライアントUAPでエラーが返るタイミングについて説明します。

RPCの形態
エラーが返るタイミング

同期応答型RPCまたは連鎖RPC
（flagsパラメタにTP1ServerFlags.DCNOFLAGSまたはTP1ServerFlags.DCRPC_CHAINEDを設定）
サービスを実行するSPP.NETまたはSPPが処理の終わる前に異常終了すると，Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTで例外応答します。
クライアントUAPのユーザサービス定義のwatch_timeオペランドに，応答を受信するまで待ち続ける指定をしている場合は，Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_NOT_UPで例外応答します。

非同期応答型RPC
（flagsパラメタにTP1ServerFlags.DCRPC_NOWAITを設定）
サービスを実行するSPP.NETまたはSPPが処理の終わる前に異常終了すると，上記のエラーコードがPollAnyRepliesメソッドに例外応答します。

非応答型RPC
（flagsパラメタにTP1ServerFlags.DCRPC_NOREPLYを設定）
サーバUAPの異常終了を，クライアントUAPでは検知できません。

・クライアントUAPの時間監視でエラーになる場合

次に示す場合には，クライアントUAPのユーザサービス定義のwatch_timeオペランドに指定した時間が経過したあとで，Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTで例外応答します。

SPP.NETまたはSPPがあるノードのOpenTP1全体が異常終了した場合

サービス要求のデータをサーバUAPが受信する前，またはサーバUAPの処理が完了してからクライアントUAPが結果を受信する前に障害が起こった場合

(4)Callメソッドがエラーになったときに再実行する指定

開始処理中，または系切り替え中などでサービス要求先のOpenTP1が起動していない場合でも，Callメソッドを通信エラーとしないで，OpenTP1でサービス要求を再実行させられます。

サービス要求を再実行させる場合は，システム共通定義のrpc_retryオペランドにYを指定してください。サービス要求の再実行回数および再実行間隔は，システム共通定義のrpc_retry_countオペランドとrpc_retry_intervalオペランドで指定します。システム共通定義で指定した再実行回数を超えた場合は，Callメソッドは次に示すどれかで例外応答します。

Hitachi.OpenTP1.TP1Error.DCRPCER_NET_DOWN

Hitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICE_GROUP

Hitachi.OpenTP1.TP1Error.DCRPCER_OLTF_INITIALIZING

Hitachi.OpenTP1.TP1Error.DCRPCER_OLTF_NOT_UP

Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_NOT_UP

(5)サービス要求に優先度を付ける場合

サービス要求のスケジュールプライオリティは，Callメソッドを呼び出す直前に，SetServicePriolityメソッドを呼び出して設定します。

プライオリティを設定しない場合は，スケジュールサービスの省略時の解釈で，サービス要求の優先度が決まります。

(6)エラーコードHitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICE_GROUPとHitachi.OpenTP1.TP1Error.DCRPCER_NET_DOWNの違い

上記のエラーコードは，該当するサービスグループ名のユーザサーバが見つからなかった場合に返されます。

Hitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICE_GROUP
システム共通定義のall_nodeオペランドに指定した，すべてのノードを探して見つからなかったことを示します。

Hitachi.OpenTP1.TP1Error.DCRPCER_NET_DOWN
探している途中で，all_nodeオペランドに指定した一つ以上のノードとの通信で障害が起こったことを示します。これは，該当するOpenTP1システムがなかった場合も含みます。

(7)エラーコードHitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_TERMINATEDを返させる指定

サービスを要求されたSPP.NETまたはSPPが，処理を完了する前に異常終了したことをHitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTまたはHitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_NOT_UP以外のエラーコードで判別したい場合には，ユーザサービス定義のrpc_extend_functionオペランドに"00000001"を指定します。

この指定をすると，上記の例外発生時にHitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_TERMINATEDが返されるようになります。rpc_extend_functionオペランドに"00000000"を指定するか，またはオペランドを省略した場合は，Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_TERMINATEDは返らないで，Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTまたはHitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_NOT_UPが返されます。

(8)エラーコードと同期点処理の関係

Callメソッドの応答内容と同期点処理（コミット，ロールバック）の関係について説明します。ここで説明する内容は，サービス要求がトランザクション処理になる場合に該当します。トランザクションでないサービス要求（flagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANを設定した場合も含む）には該当しません。

・Callメソッドが例外応答してもコミットとなる場合

サービスを要求されたサービスメソッドの異常終了，ノードの障害，ネットワーク障害などの場合でも，Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTが返されることがあります。クライアントUAPがトランザクション処理でない場合は，Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTが返っても，要求したサービスがあるサービスメソッドは正常に終了していて，データベースへの更新などが実行されていることもあります。

・ロールバック処理が必要な例外応答値

トランザクション処理から呼び出したCallメソッドが例外応答した場合，エラーコードによっては，必ずトランザクションがロールバック（サーバUAPがrollback_only状態）になります。この場合，コミットのメソッド，またはロールバックのメソッドのどちらを使っても，必ずロールバックになります。必ずロールバックになるCallメソッドのエラーコードを次に示します。

Hitachi.OpenTP1.TP1Error.DCRPCER_INVALID_REPLY

Hitachi.OpenTP1.TP1Error.DCRPCER_NO_BUFS_AT_SERVER

Hitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICE

Hitachi.OpenTP1.TP1Error.DCRPCER_REPLY_TOO_BIG_RB

(9)サービスを要求するときの注意

Callメソッドに設定するサービスグループ名およびサービス名は，サーバUAPの環境設定で指定しておいてください。誤ったサービスグループ名またはサービス名をCallメソッドに設定してサービスを要求すると，Hitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICE_GROUPまたはHitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICEで例外応答します。
応答を返さないサービスメソッドの場合は，Hitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICEでは返しません。

サーバUAPは，クライアントUAPとは別のプロセスで実行します。
そのため，通常のメソッドの呼び出しや手続き呼び出しとは，次の点が異なります。
・OSがクライアントUAPのプロセスに与えている属性は，サーバUAPへは引き継がれません（例えば，環境変数，スケジュールの優先順位（nice値）など）。
・クライアントUAPのノードで設定したOpenTP1の環境設定は，サーバUAPのOpenTP1へは引き継がれません（例えば，トランザクション属性の指定有無，トランザクションブランチの限界経過時間，スケジュールの優先順位など）。

入力パラメタ（inputBufferパラメタ）およびサービスメソッドの応答（outputBufferパラメタ）に，同じバッファ領域を設定しないでください。

flagsパラメタにTP1ServerFlags.DCRPC_NOREPLYを設定した場合には，次に示すエラーコードは返りません。
・起こらないエラー
　Hitachi.OpenTP1.TP1Error.DCRPCER_INVALID_REPLY
　Hitachi.OpenTP1.TP1Error.DCRPCER_REPLY_TOO_BIG
・起こっても検出できないエラー
　Hitachi.OpenTP1.TP1Error.DCRPCER_NO_BUFS_AT_SERVER
　Hitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICE
　Hitachi.OpenTP1.TP1Error.DCRPCER_OLTF_INITIALIZING
　Hitachi.OpenTP1.TP1Error.DCRPCER_SECCHK
　Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_CLOSED
　Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_TERMINATING
　Hitachi.OpenTP1.TP1Error.DCRPCER_SYSERR_AT_SERVER
また，エラー発生時にOpenTP1にメッセージを出力することもありません。エラーを検出しなければならない場合，flagsパラメタにTP1ServerFlags.DCNOFLAGSを設定する（同期応答型RPC）ことを検討してください。

トランザクションの処理からCallメソッドでサービスグループを呼び出すと，トランザクションが決着するまで一つのSPP.NETまたはSPPを占有します。
同じトランザクションの処理から，Callメソッドで同じサービスを複数回使う場合は，次に示すようにしてください。
・使う回数に応じて，ユーザサービス定義のbalance_countオペランドおよびparallel_countオペランドの指定値を見積もり直す。
・プロセスが増えないように，連鎖RPCでサービスを要求する。
balance_countオペランドおよびparallel_countオペランドの指定値に誤りがあると，トランザクションが異常終了したり，デッドロックが発生したりする場合があります。

非同期応答型RPCを使う場合には，PollAnyRepliesメソッドですべての非同期の応答を受信するか，DiscardFurtherRepliesメソッドで非同期の応答を拒否するまで，サーバUAP（SPP.NETまたはSPP）を占有する場合があります。これは，トランザクションの処理の場合にもトランザクションの処理ではない場合にも起こります。非同期応答型RPCを使う場合には，使う回数に応じて，常駐プロセス数の指定を増やしておいてください。
非同期応答型RPCは，SPP.NETまたはSPPを占有すること以外にも多くの資源を必要とします。UAPの処理効率が下がったり，必要ないSPP.NETまたはSPPが開始されたりすることを防ぐため，非同期応答型RPCのCallメソッドを使ったあとには，確実に応答を受信するか，受信を拒否するかしてください。

非同期応答型RPCで連続して複数回使ったあとで応答を受け取る場合には，非同期応答型RPCのサービスを要求するときに，それぞれ異なる応答格納領域（outputBufferパラメタ）を設定してください。同じ領域を設定すると，あとから来た応答に上書きされて，応答を正しく受け取れなくなります。

非同期応答型RPCでサービス要求したサーバUAP（SPP.NETまたはSPP）は，非同期応答型RPCを実行したプロセスがPollAnyRepliesメソッドを発行したかどうかに関係なく，サービスメソッド実行後にすぐに応答を送信します。PollAnyRepliesメソッドを発行しないで，複数回の非同期応答型RPCを大量に実行すると，SPP.NETまたはSPPから送信される応答がTCP/IPのバッファにたまり，SPP.NETまたはSPPの応答送信処理が失敗する場合があります。SPP.NETまたはSPPで応答送信処理が失敗すると，非同期応答型RPC発行元では，PollAnyRepliesメソッドを発行しても，SPP.NETまたはSPPから応答を受信することはできません。

トランザクション属性の非同期応答型RPC,非応答型RPCを大量に実行すると，SPP.NETまたはSPPから送信されるトランザクションに関する電文を受信できなくなり，トランザクションがロールバックする場合があります。

(10)ドメイン修飾をしてサービスを要求する場合

ドメイン修飾したサービスグループ名を設定すると，DNSのドメイン内にあるOpenTP1のサービスを要求できます。ドメイン修飾をしたサービスグループ名は，サービスグループ名の後ろに，@とDNSのドメイン名を付けて設定します。

・ドメイン修飾をしてサービスを要求するときの注意

ドメイン修飾をしてサービスを要求する場合は，CallメソッドのflagsパラメタにTP1ServerFlags.DCRPC_DOMAINを設定します。TP1ServerFlags.DCRPC_DOMAINを設定しないでドメイン修飾をしたサービスグループ名を設定すると，CallメソッドはHitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICE_GROUPで例外応答します。

ドメイン修飾をしたRPCの場合，Callメソッドを呼び出したプロセスがトランザクションの処理でも，トランザクションを拡張できません。そのため，トランザクションの処理からドメイン修飾をしてサービスを要求する場合は，flagsパラメタにTP1ServerFlags.DCRPC_NOTRANを指定して，トランザクションを拡張しないようにしてください。なお，ドメイン名に自ドメインを設定した場合でも，トランザクションを拡張できません。

ドメイン修飾をしたRPCでは，キュー受信型サーバにだけサービスを要求できます。ソケット受信型サーバへは，ドメイン修飾をしたサービス要求はできません。

ドメイン修飾をしたサービス要求では，namdomainsetupコマンドで登録したホストで起動されるドメイン代表スケジュールサービスへサービス要求を送信します。ドメイン代表スケジュールサービスのポート番号は，〈Windowsディレクトリ〉¥System32¥drivers¥etc¥servicesから取得します。サービス要求の送信で障害が起こった場合は，namdomainsetupコマンドで複数のホスト名を登録していれば，順次送信を試みます。ドメイン修飾をしたRPCが正常に終了しても，ドメイン代表スケジュールサービスへの送信で障害が起こっている場合もあります。

・ドメイン修飾をしたサービス要求をする前の準備

ドメイン修飾をしたRPCでは，次に示す環境設定をしてください。

DNSのドメインデータファイルに，ドメイン代表スケジュールサービスを起動するホスト名を登録します。登録するときは，namdomainsetupコマンドを使います。

ドメイン修飾をしたサービス要求をするOpenTP1を起動するホストの〈Windowsディレクトリ〉¥System32¥drivers¥etc¥servicesに，ドメイン代表スケジュールサービスのポート番号を設定します。ポート番号は，次の形式で記述してください。
OpenTP1scd ポート番号/tcp

ドメイン代表スケジュールサービスを起動するOpenTP1のスケジュールサービス定義のscd_portオペランドに，ドメイン代表スケジュールサービスのポートを指定します。

●CallTo

説明

特定のSPP.NETまたはSPPにサービスを要求します。Callメソッドと同様にサービスグループ名とサービス名を引数に設定するのに加え，ホスト名またはノード識別子を指定したRpcBindTable構造体に指定したホスト名またはノード識別子は，サービス要求先を特定する検索キーとして使用します。この設定に該当するサービスメソッドにサービスが要求されます。

ただし，ドメイン修飾をしてサービスを要求できません。それ以外は，Callメソッドの機能と同じです。

なお，この機能は，TP1/Extension 1をインストールしていることが前提です。TP1/Extension 1をインストールしていない場合の動作は保証できません。

宣言

【C#の場合】

public static int CallTo(
 Hitachi.OpenTP1.Server.RpcBindTable direction,
 string serviceGroupName,
 string serviceName,
 byte[] inputBuffer,
 int inputBuffer_len,
 byte[] outputBuffer,
 ref int outputBuffer_len,
 int flags
);

【Visual Basicの場合】

Public Shared Function CallTo( _
 ByVal direction As Hitachi.OpenTP1.Server.RpcBindTable, _
 ByVal serviceGroupName As String, _
 ByVal serviceName As String, _
 ByVal inputBuffer() As Byte, _
 ByVal inputBuffer_len As Integer, _
 ByVal outputBuffer() As Byte, _
 ByRef outputBuffer_len As Integer, _
 ByVal flags As Integer _
) As Integer

【J#の場合】

public static int CallTo(
 Hitachi.OpenTP1.Server.RpcBindTable direction,
 System.String serviceGroupName,
 System.String serviceName,
 ubyte[] inputBuffer,
 int inputBuffer_len,
 ubyte[] outputBuffer,
 int outputBuffer_len,
 int flags
);

パラメタ

direction

サービス要求先を特定する検索キーを格納するRpcBindTable構造体を指定します。検索のキーはホスト名またはノード識別子のどちらかです。

serviceGroupName

SPP.NETまたはSPPのサービスグループ名を設定します。

serviceName

SPP.NETまたはSPPのサービス名を設定します。

inputBuffer

サービスの入力パラメタを設定します。

inputBuffer_len

サービスの入力パラメタ長を設定します。

outputBuffer

サービスメソッドから返ってくる応答を格納する領域を設定します。

outputBuffer_len

サービスメソッドから返ってくる応答を格納する領域長を設定します。

flags

RPCの形態とオプションを，次に示す形式で設定します。

{TP1ServerFlags.DCNOFLAGS|
TP1ServerFlags.DCRPC_NOWAIT|
TP1ServerFlags.DCRPC_NOREPLY|
TP1ServerFlags.DCRPC_CHAINED}
〔|TP1ServerFlags.DCRPC_TPNOTRAN〕
〔|TP1ServerFlags.DCRPC_DOMAIN〕

オプション
説明

TP1ServerFlags.DCNOFLAGS
同期応答型RPC

TP1ServerFlags.DCRPC_NOWAIT
非同期応答型RPC

TP1ServerFlags.DCRPC_NOREPLY
非応答型RPC

TP1ServerFlags.DCRPC_CHAINED
連鎖RPC

TP1ServerFlags.DCRPC_TPNOTRAN
トランザクション処理からのサービス要求で，要求先の処理をトランザクションにしない場合に設定します。
TP1ServerFlags.DCRPC_TPNOTRANオプションを設定すると，トランザクションの処理からのサービス要求でも，サービス関数およびサービスメソッドの処理はトランザクションになりません。

TP1ServerFlags.DCRPC_DOMAIN
サービスグループ名をドメイン修飾した場合に指定します。
ドメイン修飾をしたRPCはトランザクションブランチにできません。
そのため，トランザクションの処理からCallメソッドを使う場合は，必ずTP1ServerFlags.DCRPC_TPNOTRANオプションと一緒に指定してください。

TP1ServerFlags.DCRPC_TPNOTRANオプションとTP1ServerFlags.DCRPC_DOMAINオプションは，RPCの形態に付けて設定します。

（例1）

同期応答型RPCでトランザクションにしないサービス要求をする場合，flagsパラメタには「TP1ServerFlags.DCNOFLAGS|TP1ServerFlags.DCRPC_TPNOTRAN」と設定します。

（例2）

トランザクションの処理から，同期応答型RPCでドメイン修飾をしたサービス要求をする場合，flagsパラメタには「TP1ServerFlags.DCNOFLAGS|TP1ServerFlags.DCRPC_TPNOTRAN|TP1ServerFlags.DCRPC_DOMAIN」と設定します。

戻り値

正常に終了しました。

非同期応答型RPCの場合は，正の整数は「記述子」です。

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCRPCER_INVALID_ARGS
引数に設定した値が間違っています。
RpcBindTable構造体のHostNameプロパティに指定されたホスト名を，DNSなどでIPアドレスと対応づけできません。
CallToメソッドの第一引数に指定したRpcBindTable構造体が，SetDirectScheduleメソッドで作成されていて，SetDirectScheduleメソッドのhostNameパラメタに0を指定しています。

DCRPCER_INVALID_REPLY
サービスメソッドがOpenTP1に返した応答の長さが，1から1048576の範囲にありません。

DCRPCER_MESSAGE_TOO_BIG
inputBuffer_lenパラメタに設定した入力パラメタ長が，最大値を超えています。

DCRPCER_NET_DOWN
ネットワークに障害が起こりました。

DCRPCER_NOT_TRN_EXTEND
トランザクション処理の連鎖RPCを使ったあとで，flagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANを設定したCallメソッドでサービスを要求しています。

DCRPCER_NO_BUFS
メモリが不足しました。
または，サーバのメッセージ格納領域に十分な空きがないため，サービス要求を受け付けられませんでした。

DCRPCER_NO_BUFS_AT_SERVER
設定したサービスで，メモリが不足しました。

DCRPCER_NO_BUFS_RB
メモリが不足しました。このエラーコードが返った場合は，トランザクションブランチをコミットできません。

DCRPCER_NO_PORT
ドメイン修飾をしてサービスを要求しましたが，ドメイン代表スケジュールサービスのポート番号が見つかりません。

DCRPCER_NO_SUCH_DOMAIN
ドメイン修飾をしたサービスグループ名の，ドメイン名が間違っています。

DCRPCER_NO_SUCH_SERVICE
serviceNameパラメタに設定したサービス名は，定義されていません。

DCRPCER_NO_SUCH_SERVICE_GROUP
serviceGroupNameパラメタに設定したサービスグループは定義されていません。RpcBindTable構造体のNodeIDプロパティに指定されたノード識別子が，グローバルドメイン（システム共通定義のall_nodeオペランドで指定したノード名の集合）内にありません。
一つのトランザクションブランチから開始できる子トランザクションブランチの最大数を超えたため，トランザクションブランチを開始できません。
トランザクション内でドメイン修飾をしたサービス要求で，flagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANを設定していません。
リソースマネジャ（RM）でエラーが発生したため，トランザクションブランチを開始できません。
SetDirectScheduleメソッドを使用してRpcBindTable構造体を作成し，非トランザクション属性（ユーザサービス定義のatomic_updateオペランドにNを指定）のユーザサーバに対し，CallToメソッドのflagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANとの論理和を指定しないでサービスを要求しました。

DCRPCER_OLTF_INITIALIZING
サービスを要求されたノードにあるOpenTP1は，開始処理中です。

DCRPCER_OLTF_NOT_UP
serviceNameパラメタに設定したサービスがあるノードのOpenTP1が稼働していません。異常終了，停止中，終了処理中，または通信障害の発生が考えられます。

DCRPCER_PROTO
Openメソッドを呼び出していません。

DCRPCER_REPLY_TOO_BIG
返ってきた応答が，クライアントUAPで用意した領域に入り切りません。

DCRPCER_REPLY_TOO_BIG_RB
返ってきた応答が，クライアントUAPで用意した領域に入り切りません。このエラーコードが返った場合は，トランザクションブランチをコミットできません。

DCRPCER_SECCHK
サービスを要求されたSPP.NETまたはSPPは，OpenTP1のセキュリティ機能で保護されています。Callメソッドでサービスを要求したUAPには，SPP.NETまたはSPPへのアクセス権限がありません。

DCRPCER_SERVER_BUSY
サービスを要求されたソケット受信型サーバが，サービス要求を受け取れません。

DCRPCER_SERVICE_CLOSED
serviceNameパラメタに設定したサービス名のサービスがあるサービスグループは，閉塞しています。

DCRPCER_SERVICE_NOT_UP
serviceNameパラメタに設定したサービスのUAPプロセスが，稼働していません。
サービス要求の応答待ち時間に0を指定した場合に，サービスを要求されたSPP.NETまたはSPPが，処理を完了する前に異常終了しました。

DCRPCER_SERVICE_TERMINATING
serviceNameパラメタに設定したサービスは，終了処理中です。

DCRPCER_SYSERR
システムエラーが発生しました。

DCRPCER_SYSERR_AT_SERVER
設定したサービスで，システムエラーが発生しました。

DCRPCER_SYSERR_AT_SERVER_RB
設定したサービスで，システムエラーが発生しました。このエラーコードが返った場合は，トランザクションブランチをコミットできません。

DCRPCER_SYSERR_RB
システムエラーが発生しました。このエラーコードが返った場合は，トランザクションブランチをコミットできません。

DCRPCER_TESTMODE
オンラインテスタを使っている環境で，テストモードのUAPからテストモードでないSPPへサービスを要求しています。または，テストモードでないUAPからテストモードのSPPへサービスを要求しています。

DCRPCER_TIMED_OUT
Callメソッドの処理が時間切れ（タイムアウト）になりました。
サービスを要求されたSPP.NETまたはSPPが，処理を完了する前に異常終了しました。

DCRPCER_TRNCHK
ノード間負荷バランス機能およびノード間負荷バランス拡張機能の環境で，複数のSPP.NETまたはSPPのトランザクション属性が一致していません。または，負荷を分散する先のノードにあるOpenTP1のバージョンが，クライアントのOpenTP1のバージョンよりも古いため，ノード間負荷バランス機能およびノード間負荷バランス拡張機能を実行できません。
このエラーコードは，ノード間負荷バランス機能およびノード間負荷バランス拡張機能を使っているSPP.NETまたはSPPにサービスを要求した場合だけ返されます。

DCRPCER_TRNCHK_EXTEND
同時に起動できるトランザクションブランチの数を超えたため，トランザクションブランチを開始できません。
一つのトランザクションブランチから開始できる子トランザクションブランチの最大数を超えたため，トランザクションブランチを開始できません。
トランザクション内でドメイン修飾をしたサービス要求で，flagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANを設定していません。
リソースマネジャ（RM）でエラーが発生したため，トランザクションブランチを開始できません。
SetDirectScheduleメソッドを使用してRpcBindTable構造体を作成し，非トランザクション属性（ユーザサービス定義のatomic_updateオペランドにNを指定）のユーザサーバに対し，CallToメソッドのflagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANとの論理和を指定しないでサービスを要求しました。

注意事項

一つのマシン内に複数のLANアダプタが接続されているマルチホームドホスト環境で，システム共通定義のmy_hostオペランドに指定したホスト名と異なる自マシン内のほかのホスト名を，RpcBindTable構造体のHostNameプロパティ，SetBindTableメソッドのhostNameパラメタ，またはSetDirectScheduleメソッドのhostNameパラメタに指定してはいけません。指定した場合は，動作の保証はしません。

ホスト名とノード識別子を同時にRpcBindTable構造体に指定した場合，ホスト名の指定が有効になり，ノード識別子の指定は無視します。

RpcBindTable構造体に，ホスト名，ノード識別子ともに空文字またはnull（Visual Basicの場合はNothing）を指定した場合は，Callメソッドとまったく同じ動作をします。

スケジュールサービスの管理するユーザサーバに直接サービスを要求する場合は，必ずSetDirectScheduleメソッドを使用してRpcBindTable構造体を作成してください。

SetDirectScheduleメソッドを使用してRpcBindTable構造体を作成し，ソケット受信型（ユーザサービス定義のreceive_fromオペランドにsocketを指定）ユーザサーバへサービスを要求した場合は，CallToメソッドは，Hitachi.OpenTP1.Server.DCRPCER_SERVICE_NOT_UPで例外応答します。

SetDirectScheduleメソッドで作成したRpcBindTable構造体を指定してCallToメソッドを呼び出すときに，非トランザクション属性（ユーザサービス定義のatomic_updateオペランドにNを指定）のユーザサーバへサービスを要求する場合，flagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANとの論理和を指定しなければなりません。指定しなかった場合，CallToメソッドはTP1ServerFlags.DCRPCER_TRNCHK_EXTENDで例外応答します。

SetDirectScheduleメソッドで作成したRpcBindTable構造体を指定してCallToメソッドを呼び出す場合，サービス要求先のOpenTP1のバージョンは03-02以降でなければなりません。03-02より前の場合，動作の保証はしません。

ドメイン修飾をしたRPCはできません。CallToメソッドのflagsパラメタにTP1ServerFlags.DCRPC_DOMAINを指定した場合は，Hitachi.OpenTP1.Server.DCRPCER_INVALID_ARGSで例外応答します。

次の場合，CallToメソッドがHitachi.OpenTP1.Server.DCRPCER_TIMED_OUTで例外応答することがあります。
システム共通定義のall_nodeオペランドで指定していないノードのサービスグループに対して，ホスト名を検索のキーに使用してCallToメソッドを呼び出したあとに，このノード上のOpenTP1を停止または再開始し，同じサービスグループに対して再度ホスト名を検索のキーに使用してCallToメソッドを呼び出した場合。

SetDirectScheduleメソッドを使用して作成したRpcBindTable構造体をCallToメソッドのdirectionパラメタに指定して，CallToメソッドを呼び出した場合，システム共通定義のrpc_retryオペランドは無効になります。
SetDirectScheduleメソッドを使用して作成したRpcBindTable構造体をCallToメソッドのdirectionパラメタに指定して，CallToメソッドを呼び出した場合，性能検証用トレースは取得できますが，呼び出し先のUAPの性能検証用トレース情報とはリンクしていません。クライアントUAPで取得した性能検証用トレースの通番は，サーバUAPに引き継ぎません。

●Close

説明

OpenTP1の各種メソッドを使うための環境をクローズします。

SUP.NETでだけ使用します。SPP.NETではOpenメソッドおよびCloseメソッドを呼び出さないでください。

Closeメソッドを呼び出したあとは，OpenTP1のメソッドは使えません。

Closeメソッドはプロセスで1回だけ呼び出してください。

Closeメソッドは，OpenTP1にSUP.NETが正常に終了したことを知らせる働きをします。

Closeメソッドを呼び出さないでSUP.NETを終了すると，異常終了とみなされてサービスグループの閉塞やプロセス再起動の対象になることがあります。また，OpenTP1で管理する各種資源が解放されないままになって，そのあとの処理に悪影響を与える場合があります。OpenTP1で使うすべてのSUP.NETでは，Openメソッドを呼び出したら，Closeメソッドを必ず呼び出してください。

Closeメソッドは，Openメソッドが例外応答したときにも必ず呼び出してください。

Closeメソッドを呼び出したあとは，同じSUP.NETで再びOpenメソッドを呼び出せません。

宣言

【C#の場合】

public static void Close(
);

【Visual Basicの場合】

Public Shared Sub Close( _
)

【J#の場合】

public static void Close(
);

パラメタ

なし

戻り値

なし

例外

なし

●DiscardFurtherReplies

説明

非同期応答型RPC（CallメソッドのflagsパラメタにTP1ServerFlags.DCRPC_DOMAINを設定）で，まだ返ってきていない応答を，これ以上受信しないことを示すメソッドです。このメソッドを呼び出したあとは，応答が返ってきても受信しないで捨てます。

非同期応答型RPCの結果をこれ以上受信しない場合は，必ずDiscardFurtherRepliesメソッドを呼び出してください。呼び出さないと，PollAnyRepliesメソッドが不要な応答を受信してしまうことがあります。

DiscardFurtherRepliesメソッドを使う場合を次に示します。

応答待ち時間切れになったあと，結果を保持しておくバッファを解放する場合

非同期応答型RPCを複数回使って，そのうち最初の応答だけ必要な場合

宣言

【C#の場合】

public static void DiscardFurtherReplies(
);

【Visual Basicの場合】

Public Shared Sub DiscardFurtherReplies( _
)

【J#の場合】

public static void DiscardFurtherReplies(
);

パラメタ

なし

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード | 説明
DCRPCER_PROTO | Openメソッドを呼び出していません。

●DiscardSpecificReply

説明

非同期応答型RPC（CallメソッドのflagsパラメタにTP1ServerFlags.DCRPC_NOWAITを設定）で，まだ返ってきていない応答を，これ以上受信しないことを示すメソッドです。受信を拒否する非同期応答を特定するには，descriptorパラメタに，非同期応答型RPCが応答で返した記述子を設定します。このメソッドを呼び出したあとに返ってきた応答の中で，設定した記述子と同じ記述子を持つ応答は受信しないで捨てます。

宣言

【C#の場合】

public static void DiscardSpecificReply(
 int descriptor
);

【Visual Basicの場合】

Public Shared Sub DiscardSpecificReply( _
 ByVal descriptor As Integer _
)

【J#の場合】

public static void DiscardSpecificReply(
 int descriptor
);

パラメタ

descriptor

非同期応答型RPCのCallメソッドが正常に終了したときに返された記述子を設定します。

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCRPCER_INVALID_ARGS
引数に設定した値が間違っています。

DCRPCER_INVALID_DES
descriptorパラメタに設定した記述子は存在しません。要因として次のことが考えられます。

設定した記述子に対応する非同期応答型RPCを行っていない。

非同期応答型RPCの応答がすでに受信されている，または受信が拒否されている。

DCRPCER_PROTO
Openメソッドを呼び出していません。

●GetCallersAddress

説明

クライアントUAPのプロセスが稼働するノードアドレスを，サーバUAPで取得します。GetCallersAddressメソッドで返されたアドレス値で，クライアントUAPのセキュリティチェックができます。

GetCallersAddressメソッドで返されたアドレスを使って，サービスの応答やエラーの応答などは送信できません。

GetCallersAddressメソッドは，サービスメソッドから呼び出してください。

サービスメソッド以外から呼び出した場合の処理は保証しません。

宣言

【C#の場合】

public static System.Net.IPAddress GetCallersAddress(
);

【Visual Basicの場合】

Public Shared Function GetCallersAddress( _
) As System.Net.IPAddress

【J#の場合】

public static System.Net.IPAddress GetCallersAddress(
);

パラメタ

なし

戻り値

メソッドが正常終了の場合に，クライアントUAPのノードアドレスを格納します。

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード | 説明
DCRPCER_PROTO | Openメソッドを呼び出していません。

注意事項

次の条件が重なった場合，クライアントUAPのノードアドレスは，実際にクライアントUAPが通信で使用したノードアドレスと異なる場合があります。

リモートAPI機能を使用して，サービス要求を受け付けた。

クライアントUAPが存在するホストがマルチホームドホスト環境である。

●GetErrorDescriptor

説明

非同期応答を特定しないPollAnyRepliesメソッドで例外が発生した直後に呼び出すことで，エラーが発生した非同期応答型RPC要求に対応する記述子を取得します。

記述子を取得できるのは，SPP.NETまたはSPP側でエラーが発生した場合だけです。PollAnyRepliesメソッドの呼び出し側でエラーが発生した場合には，このメソッドの記述子を取得できません。

宣言

【C#の場合】

public static int GetErrorDescriptor(
);

【Visual Basicの場合】

Public Shared Function GetErrorDescriptor( _
) As Integer

【J#の場合】

public static int GetErrorDescriptor(
);

パラメタ

なし

戻り値

正の整数
PollAnyRepliesメソッドが返したエラーに対応する非同期応答型RPC要求の記述子を返します。

0
PollAnyRepliesメソッドが返したエラーに対応する非同期応答型RPC要求の記述子を取得できませんでした。

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード | 説明
DCRPCER_INVALID_ARGS | 引数に設定した値が間違っています。
DCRPCER_PROTO | Openメソッドを呼び出していません。

●GetGatewayAddress

説明

アプリケーションゲートウェイ型ファイアウォールなどの，ゲートウェイを介してクライアントUAPからのサービス要求を受信したとき，サーバUAPでゲートウェイのノードアドレスを取得します。

リモートAPI機能を使用してサービスを要求した場合，サーバUAPで，ゲートウェイのノードアドレスを取得できます。

GetGatewayAddressメソッドで返されたアドレスを使って，サービスの応答やエラーの応答などの送信はできません。

GetGatewayAddressメソッドは，サービスメソッドから呼び出してください。

サービスメソッド以外から呼び出した場合の処理は保証できません。

宣言

【C#の場合】

public static System.Net.IPAddress GetGatewayAddress(
);

【Visual Basicの場合】

Public Shared Function GetGatewayAddress( _
) As System.Net.IPAddress

【J#の場合】

public static System.Net.IPAddress GetGatewayAddress(
);

パラメタ

なし

戻り値

メソッドが正常終了の場合に，ゲートウェイのノードアドレスを格納します。

リモートAPI機能を使用していない場合には0.0.0.0が設定されます。

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCRPCER_INVALID_ARGS
引数に設定した値が間違っています。

DCRPCER_PROTO
サービスメソッドから呼び出されていません。
Openメソッドを呼び出していません。

●GetServicePriolity

説明

SetServicePriolityメソッドで設定した，サービス要求のスケジュールプライオリティを参照します。このメソッドが返すスケジュールプライオリティの値は，UAPが再びSetServicePriolityメソッドを呼び出すまで変わりません。

次に示す場合，GetServicePriolityメソッドは省略時仮定値（4）を返します。

UAPでSetServicePriolityメソッドを呼び出していない場合

SetServicePriolityメソッドのschedulePriolityパラメタに0を設定して呼び出した場合

宣言

【C#の場合】

public static int GetServicePriolity(
);

【Visual Basicの場合】

Public Shared Function GetServicePriolity( _
) As Integer

【J#の場合】

public static int GetServicePriolity(
);

パラメタ

なし

戻り値

SetServicePriolityメソッドで設定したスケジュールプライオリティを，1～8の範囲で示します。

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード | 説明
DCRPCER_PROTO | Openメソッドを呼び出していません。
上記以外の負の整数 | プログラムの破壊などによる，予期しないエラーが発生しました。

●GetTimeout

説明

現在のサービス要求の応答待ち時間を参照します。このメソッドは，SetTimeoutメソッドで応答待ち時間を一時的に変更する前に，元の値を退避するために使います。

このメソッドは，SetTimeoutメソッドで変更したサービス応答待ち時間を返します。変更していない場合は，次に示す値を返します。

TP1/Server Baseの場合：システム共通定義のwatch_timeオペランドの値

TP1/LiNKの場合：180秒

このメソッドで得られる値は，OpenTP1のCallメソッドに対して有効です。

宣言

【C#の場合】

public static int GetTimeout(
);

【Visual Basicの場合】

Public Shared Function GetTimeout( _
) As Integer

【J#の場合】

public static int GetTimeout(
);

パラメタ

なし

戻り値

現在のサービス応答待ち時間を示します。

0の場合は，無制限に待ち続ける指定です。

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力され
ます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード | 説明
DCRPCER_PROTO | Openメソッドを呼び出していません。
上記以外の負の整数 | プログラムの破壊などによる，予期しないエラーが発生しました。

●Open

説明

OpenTP1の各種メソッドを使う準備をします。

SUP.NETでだけ使用します。SPP.NETではOpenメソッドおよびCloseメソッドを呼び出さないでください。

Openメソッドはプロセスで1回だけ呼び出してください。

メインメソッドでの初期化手順を次に示します。

プロセス間通信のためのエントリポイントを開きます。

OpenTP1で使う共用メモリを取得します。

OpenTP1にSUP.NETの開始を通知して，プロセスの監視を要求します。

そのほか，設定したSUP.NETの環境に従って，使うOpenTP1の各機能の初期化処理をします。

SUP.NETにトランザクション属性を指定している場合は，そのノードでOpenTP1のトランザクションサービスとプロセスサービスが実行中であることが前提になります。Openメソッドは，OpenTP1がOSの開始に伴って，またはdcstartコマンドによって正常開始したあとでないと実行できません。OpenTP1が正常開始する前にOpenメソッドを呼び出すと，Hitachi.OpenTP1.TP1Error.DCRPCER_OLTF_NOT_UPで例外応答します。この場合は，CallメソッドなどのOpenTP1のメソッドは使えません。

UAPトレースは，Openメソッドが正常に終了したあとに呼び出したすべてのOpenTP1のメソッドについて取得されます。そのため，Openメソッドが例外応答した場合のUAPトレースは，取得されている場合も取得されていない場合もあります。

宣言

【C#の場合】

public static void Open(
);

【Visual Basicの場合】

Public Shared Sub Open( _
)

【J#の場合】

public static void Open(
);

パラメタ

なし

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード | 説明
DCNJSER_SYSTEM | 内部エラーが発生しました。
DCNJSER_XALIB_INVALID | トランザクション制御用ライブラリが不正です。
DCNJSER_XALIB_LOAD | トランザクション制御用ライブラリが見つかりません。
DCRPCER_FATAL | 初期化に失敗しました。以降，OpenTP1のメソッドは使えません。
DCRPCER_INVALID_ARGS | 引数が間違っています。
DCRPCER_OLTF_NOT_UP | SUP.NETがあるノードのOpenTP1が実行していません。
DCRPCER_PROTO | Openメソッドはすでに呼び出しています。
DCRPCER_SEC_INIT | セキュリティ機能を使ったOpenTP1が，セキュリティ環境の初期化処理でエラーになりました。
DCRPCER_STANDBY_END | 待機系のユーザサーバが，待機の終了を要求されました。または，系切り替え時にすでに終了していたため，待機の終了を要求されました。

●PollAnyReplies

説明

非同期応答型RPC（CallメソッドのflagsパラメタにTP1ServerFlags.DCRPC_NOWAITを設定）でサービス要求した結果を受信します。

受信する非同期応答を特定する場合は，flagsパラメタにTP1ServerFlags.DCRPC_SPECIFIC_MSGを設定します。このフラグを設定した場合は，descriptorパラメタに設定した記述子を設定した非同期応答型RPCの応答を受信します。

受信する非同期応答を特定しない場合は，flagsパラメタにTP1ServerFlags.DCNOFLAGSを設定します。このとき，descriptorパラメタに設定した値は無視されます。flagsパラメタにTP1ServerFlags.DCNOFLAGSを設定したPollAnyRepliesメソッドが正常に終了すると，受信した非同期応答の記述子と同じ値を返します。

PollAnyRepliesメソッドは，次のどちらかの場合に例外応答します。

非同期応答型RPCの応答を受信したとき

メソッドのパラメタに指定した応答待ち時間切れになったとき

PollAnyRepliesメソッドが正常に終了すると，非同期応答型RPCを使ったCallメソッドに設定した応答を格納する領域に，受信した応答が設定されます。

PollAnyRepliesメソッドの詳しい説明については，このメソッドの「注意事項」を参照してください。「注意事項」では次に示す項目について説明しています。

(1)PollAnyRepliesメソッドのtimeoutパラメタについて

(2)PollAnyRepliesメソッドがエラーになるタイミング

(3)エラーコードHitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_TERMINATEDを返させる指定

(4)エラーコードと同期点処理の関係

(5)PollAnyRepliesメソッドで応答が受け取れない場合

(6)PollAnyRepliesメソッドを使うときの注意

宣言

【C#の場合】

public static int PollAnyReplies(
 int descriptor,
 int timeout,
 int flags
);

【Visual Basicの場合】

Public Shared Function PollAnyReplies( _
 ByVal descriptor As Integer, _
 ByVal timeout As Integer, _
 ByVal flags As Integer _
) As Integer

【J#の場合】

public static int PollAnyReplies(
 int descriptor,
 int timeout,
 int flags
);

パラメタ

descriptor

非同期応答型RPCのCallメソッド（flagsパラメタにTP1ServerFlags.DCRPC_NOWAIT）が正常に終了したときに返された，記述子を設定します。

flagsパラメタにTP1ServerFlags.DCNOFLAGSを設定した場合は，ここに設定した値は無視されます。

timeout

非同期応答型RPCのCallメソッドの結果が返ってくるまでの待ち時間を，秒単位またはミリ秒単位で設定します。指定できる値の範囲は，-1から2147483647までです。

PollAnyRepliesメソッドで非同期応答を受信する場合は，UAPに設定した応答待ち時間を参照しません。

0を設定した場合，flagsパラメタにTP1ServerFlags.DCNOFLAGSまたはTP1ServerFlags.DCRPC_SPECIFIC_MSGを設定したとき，応答が返っていないとHitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTで，すぐに例外応答します。flagsパラメタにTP1ServerFlags.DCRPC_WAIT_MILLISECを設定したときは50ミリ秒として処理します。

-1を設定した場合は，応答が返るまで待ち続けます。

flags

RPCの形態とオプションを，次に示す形式で設定します。

{TP1ServerFlags.DCNOFLAGS|
TP1ServerFlags.DCRPC_SPECIFIC_MSG}
〔|TP1ServerFlags.DCRPC_WAIT_MILLISEC〕

オプション | 説明
TP1ServerFlags.DCNOFLAGS | 受信する非同期の応答を特定しません。
TP1ServerFlags.DCRPC_SPECIFIC_MSG | descriptorパラメタに設定した記述子をリターンした，非同期応答型RPCの応答を受信します。
TP1ServerFlags.DCRPC_WAIT_MILLISEC | timeoutパラメタで設定した待ち時間の単位をミリ秒にします。

戻り値

受信した非同期応答の記述子を示します。正の整数は，flagsパラメタにTP1ServerFlags.DCNOFLAGSを設定したメソッドが正常に終了した場合に返されます。

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCRPCER_ALL_RECEIVED
非同期応答型RPCで要求したサービスの処理結果は，すべて受信しました。

DCRPCER_INVALID_ARGS
引数に設定した値が間違っています。

DCRPCER_INVALID_DES
descriptorパラメタに設定した記述子は存在しません。このエラーコードは，flagsパラメタにTP1ServerFlags.DCRPC_SPECIFIC_MSGを設定した場合に返されます。

DCRPCER_INVALID_REPLY
サービスメソッドがOpenTP1に返した応答の長さが，1から1048576の範囲にありません。

DCRPCER_MESSAGE_TOO_BIG
inputBuffer_lenパラメタに設定した入力パラメタ長が，最大値を超えています。

DCRPCER_NET_DOWN
ネットワークに障害が起こりました。

DCRPCER_NO_BUFS
メモリが不足しました。

DCRPCER_NO_BUFS_AT_SERVER
Callメソッドに設定したサービスで，メモリが不足しました。

DCRPCER_NO_BUFS_RB
メモリが不足しました。このエラーコードが返った場合は，トランザクションブランチをコミットできません。

DCRPCER_NO_PORT
ドメイン修飾をしてサービスを要求しましたが，ドメイン代表スケジュールサービスのポート番号が見つかりません。

DCRPCER_NO_SUCH_DOMAIN
ドメイン修飾をしたサービスグループ名の，ドメイン名が間違っています。

DCRPCER_NO_SUCH_SERVICE
CallメソッドのserviceNameパラメタに設定したサービス名は，定義されていません。

DCRPCER_NO_SUCH_SERVICE_GROUP
CallメソッドのserviceGroupNameパラメタに設定したサービスグループは，定義されていません。

DCRPCER_OLTF_INITIALIZING
サービスを要求されたノードにあるOpenTP1は，開始処理中です。

DCRPCER_OLTF_NOT_UP
CallメソッドのserviceNameパラメタに設定したサービスがあるノードのOpenTP1が稼働していません。異常終了，停止中，終了処理中，または通信障害が起こったことが考えられます。

DCRPCER_PROTO
Openメソッドを呼び出していません。

DCRPCER_REPLY_TOO_BIG
返ってきた応答が，クライアントUAPで用意した領域に入り切りません。

DCRPCER_REPLY_TOO_BIG_RB
返ってきた応答が，クライアントUAPで用意した領域に入り切りません。このエラーコードが返った場合は，トランザクションブランチをコミットできません。

DCRPCER_SECCHK
サービスを要求されたSPP.NETまたはSPPは，OpenTP1のセキュリティ機能で保護されています。Callメソッドでサービスを要求したUAPには，SPP.NETまたはSPPへのアクセス権限がありません。

DCRPCER_SERVER_BUSY
サービスを要求されたソケット受信型サーバが，サービス要求を受け取れません。

DCRPCER_SERVICE_CLOSED
CallメソッドのserviceNameパラメタに設定したサービス名があるサービスグループは，閉塞しています。

DCRPCER_SERVICE_NOT_UP
CallメソッドのserviceNameパラメタに設定したサービスのUAPプロセスが，稼働していません。
timeoutパラメタに-1を指定した場合に，サービスを要求されたSPP.NETまたはSPPが，処理を完了する前に異常終了しました。

DCRPCER_SERVICE_TERMINATED
サービスを要求されたSPP.NETまたはSPPが，処理を完了する前に異常終了しました。このエラーコードは，ユーザサービス定義のrpc_extend_functionオペランドに"00000001"を指定したクライアントUAPの場合にだけ返されます。
rpc_extend_functionオペランドに"00000000"を指定，またはオペランドを省略した場合は，このエラーコードは返らないで，Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTまたはHitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_NOT_UPが返されます。

DCRPCER_SERVICE_TERMINATING
CallメソッドのserviceNameパラメタに設定したサービスは，終了処理中です。

DCRPCER_SYSERR
システムエラーが発生しました。

DCRPCER_SYSERR_AT_SERVER
Callメソッドに設定したサービスで，システムエラーが発生しました。

DCRPCER_SYSERR_AT_SERVER_RB
設定したサービスで，システムエラーが発生しました。このエラーコードが返った場合は，トランザクションブランチをコミットできません。

DCRPCER_SYSERR_RB
システムエラーが発生しました。このエラーコードが返った場合は，トランザクションブランチをコミットできません。

DCRPCER_TESTMODE
オンラインテスタを使っている環境で，テストモードのUAPからテストモードでないSPPへサービスを要求しています。または，テストモードでないUAPからテストモードのSPPへサービスを要求しています。

DCRPCER_TIMED_OUT
Callメソッドの処理が時間切れ（タイムアウト）になりました。
サービスを要求されたSPP.NETまたはSPPが，処理を完了する前に異常終了しました。

DCRPCER_TRNCHK
ノード間負荷バランス機能およびノード間負荷バランス拡張機能の環境で，複数のSPP.NETまたはSPPのトランザクション属性が一致していません。または，負荷を分散する先のノードにあるOpenTP1のバージョンが，クライアントのOpenTP1のバージョンよりも古いため，ノード間負荷バランス機能およびノード間負荷バランス拡張機能を実行できません。
このエラーコードは，ノード間負荷バランス機能およびノード間負荷バランス拡張機能を使っているSPP.NETまたはSPPにサービスを要求した場合にだけ返されます。

DCRPCER_TRNCHK_EXTEND
同時に起動できるトランザクションブランチの数を超えたため，トランザクションブランチを開始できません。
一つのトランザクションブランチから開始できる子トランザクションブランチの最大数を超えたため，トランザクションブランチを開始できません。トランザクション内でドメイン修飾をしたサービス要求で，flagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANを設定していません。
リソースマネジャ（RM）でエラーが発生したため，トランザクションブランチを開始できません。

注意事項

(1)PollAnyRepliesメソッドのtimeoutパラメタについて

非同期受信の監視時間は，応答が返るたびにリセットされます。

そのため，受信する非同期応答を特定（flagsパラメタにTP1ServerFlags.DCRPC_SPECIFIC_MSGを設定）した場合は，timeoutパラメタに設定した時間を経過しても，応答を受信できることがあります。また，timeoutパラメタに設定した時間を経過しても，Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTで例外応答しない場合もあります。

(2)PollAnyRepliesメソッドがエラーになるタイミング

サービスを要求されたSPP.NETまたはSPPが異常終了した場合，クライアントUAPでエラーが返るタイミングについて説明します。

サービスを実行するSPP.NETまたはSPPが，処理が終わる前に異常終了すると，PollAnyRepliesメソッドはHitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTで例外応答します。PollAnyRepliesメソッドのtimeoutパラメタに-1を設定している場合は，Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_NOT_UPで例外応答します。

PollAnyRepliesメソッドの時間監視でエラーになる場合

次に示す場合には，PollAnyRepliesメソッドのtimeoutパラメタに設定した時間が経過したあとで，Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTで例外応答します。

SPP.NETまたはSPPがあるノードのOpenTP1全体が異常終了した場合

サービス要求のデータをサーバUAPが受信する前，またはサーバUAPの処理が完了してからクライアントUAPが結果を受信する前に障害が起こった場合

(3)エラーコードHitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_TERMINATEDを返させる指定

サービスを要求されたSPP.NETまたはSPPが，処理を完了する前に異常終了したことをHitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTまたはHitachi.OpenTP1.Server.DCRPCER_SERVICE_NOT_UP以外のエラーコードで判別したい場合には，ユーザサービス定義のrpc_extend_functionオペランドに"00000001"を指定します。この指定をすると，上記のエラー時にHitachi.OpenTP1.Server.DCRPCER_SERVICE_TERMINATEDが返されるようになります。rpc_extend_functionオペランドに"00000000"を指定するか，またはオペランドを省略した場合は，Hitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_TERMINATEDは返らないで，Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTまたはHitachi.OpenTP1.TP1Error.DCRPCER_SERVICE_NOT_UPが返されます。

(4)エラーコードと同期点処理の関係

PollAnyRepliesメソッドのエラーコードと同期点処理（コミット，ロールバック）の関係について説明します。ここで説明する内容は，サービス要求がトランザクション処理になる場合に該当します。

トランザクションでないサービス要求（CallメソッドのflagsパラメタにTP1ServerFlags.DCRPC_TPNOTRANを設定した場合も含む）には該当しません。

PollAnyRepliesメソッドが例外応答してもコミットとなる場合

サービスを要求されたサービスメソッドの異常終了，ノードの障害，ネットワーク障害などの場合でも，Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTが返ることがあります。クライアントUAPがトランザクション処理でない場合は，Hitachi.OpenTP1.TP1Error.DCRPCER_TIMED_OUTが返っても，要求したサービスがあるサービスメソッドは正常終了していて，データベースへの更新などが実行されているときもあります。

ロールバック処理が必要な例外応答値

トランザクション処理から呼び出したPollAnyRepliesメソッドが例外応答した場合，エラーコードによっては，必ずトランザクションがロールバック（サーバUAPがrollback_only状態）になります。この場合，コミットのメソッド，またはロールバックのメソッドのどちらを使っても，必ずロールバックになります。必ずロールバックになるPollAnyRepliesメソッドのエラーコードを次に示します。

Hitachi.OpenTP1.TP1Error.DCRPCER_INVALID_REPLY

Hitachi.OpenTP1.TP1Error.DCRPCER_NO_BUFS_AT_SERVER

Hitachi.OpenTP1.TP1Error.DCRPCER_NO_SUCH_SERVICE

Hitachi.OpenTP1.TP1Error.DCRPCER_REPLY_TOO_BIG_RB

(5)PollAnyRepliesメソッドで応答が受け取れない場合

非同期応答型RPCでサービスを要求したUAPが次に示すメソッドを呼び出すと，PollAnyRepliesメソッドで応答を受け取れません。

DiscardFurtherRepliesメソッドで，非同期応答の受信を拒否した場合

トランザクションの処理の場合，同期点処理のメソッドでコミットまたはロールバックした場合

上記のメソッドを使ったあとで返ってきた応答は，破棄されます。

非同期応答型RPCでは，上記のメソッドを呼び出す前に，必要な非同期の応答をPollAnyRepliesメソッドですべて受け取ってください。

(6)PollAnyRepliesメソッドを使うときの注意

PollAnyRepliesメソッドを待ち時間0と設定（timeoutパラメタに0を設定）して呼び出すと，マルチスレッド環境のスケジューリングに関連して，応答が到着していても受信できない場合があります。そのため，すべての応答を受信するまで，待ち時間に0を設定したPollAnyRepliesメソッドを呼び出すUAPは，無限ループになることがあるので注意してください。

記述子を特定しないPollAnyRepliesメソッドが例外応答した場合，エラーとなった応答の記述子を特定できません。PollAnyRepliesメソッドが例外応答したときに該当する記述子がわかるようにしておきたい場合は，flagsパラメタにTP1ServerFlags.DCRPC_SPECIFIC_MSGを設定しておいてください。

●SetBindTable

説明

指定されたサービス要求先ノードのノード識別子（nodeIDパラメタの値），または指定されたサービス要求先ノードのホスト名（hostNameパラメタの値）をRpcBindTable構造体に設定し，CallToメソッドの第一引数を作成します。

宣言

【C#の場合】

public static void SetBindTable(
 ref Hitachi.OpenTP1.Server.RpcBindTable direction,
 string nodeID,
 string hostName,
 int portNo
);

【Visual Basicの場合】

Public Shared Sub SetBindTable( _
 ByRef direction As Hitachi.OpenTP1.Server.RpcBindTable, _
 ByVal nodeID As String, _
 ByVal hostName As String, _
 ByVal portNo As Integer _
)

【J#の場合】

public static void SetBindTable(
 Hitachi.OpenTP1.Server.RpcBindTable direction,
 System.String nodeID,
 System.String hostName,
 int portNo
);

パラメタ

direction

RpcBindTable構造体を設定します。

nodeID

ノード識別子を設定します。

ノード識別子を検索のキーにしない場合には，空文字列またはnull（Visual Basicの場合はNothing）を指定してください。

ノード識別子は，システム共通定義のnode_idオペランドに指定した名称で，かつサービス要求先ノードのホスト名がグローバルドメイン（システム共通定義のall_nodeオペランドで指定したノード名の集合）内にあることが前提です。

hostName

ホスト名を設定します。

ホスト名を，サービス要求先を特定する検索のキーにしない場合には，空文字列またはnull（Visual Basicの場合はNothing）を指定してください。

サービス要求先ノードのホスト名はグローバルドメイン（システム共通定義のall_nodeオペランドに指定したノード名の集合）に指定されていても，指定されていなくてもどちらでもかまいません。

portNo

ホスト名を検索のキーにする場合
サービス要求先のOpenTP1システムのネームサービスのポート番号（システム共通定義のname_portオペランドに指定した値）を指定します。
サービス要求先のネームサービスのポート番号が，サービス要求元のネームサービスのポート番号と同じ場合は，0を指定します。

ノード識別子を検索のキーとする場合
portNoパラメタに0を指定します。portNoパラメタに0を指定した場合は，サービス要求先のネームサービスのポート番号（システム共通定義のname_portオペランドに指定した値）と，サービス要求元のネームサービスのポート番号を同じにしてください。

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード | 説明
DCRPCER_PROTO | Openメソッドを呼び出していません。

注意事項

SetBindTableメソッドは，CallToメソッドの第一引数に指定する，RpcBindTable構造体を設定するためのメソッドです。

SetBindTableメソッドの引数の指定値のチェックや，指定方法によってどのような動作をするかについては，作成したRpcBindTable構造体を指定して呼び出したCallToメソッドの動作が示します。

SetBindTableメソッドは，UAPトレースを取得しません。

●SetDirectSchedule

説明

指定されたサービス要求先ノードのホスト名（hostNameパラメタの値）と，指定されたスケジュールサービスのポート番号（schedulePortNoパラメタの値）をRpcBindTable構造体に設定し，CallToメソッドの第一引数を作成します。

宣言

【C#の場合】

public static void SetDirectSchedule(
 ref Hitachi.OpenTP1.Server.RpcBindTable direction,
 string hostName,
 int schedulePortNo
);

【Visual Basicの場合】

Public Shared Sub SetDirectSchedule( _
 ByRef direction As Hitachi.OpenTP1.Server.RpcBindTable, _
 ByVal hostName As String, _
 ByVal schedulePortNo As Integer _
)

【J#の場合】

public static void SetDirectSchedule(
 Hitachi.OpenTP1.Server.RpcBindTable direction,
 System.String hostName,
 int schedulePortNo
);

パラメタ

direction

RpcBindTable構造体を設定します。

hostName

サービス要求先ノードのホスト名を指定します。

サービス要求先ノードのホスト名はグローバルドメイン（システム共通定義のall_nodeオペランドに指定したノード名の集合）に指定されていても，指定されていなくても，どちらでもかまいません。

ホスト名は必ず指定してください。ホスト名に空文字列またはnull（Visual Basicの場合はNothing）が指定された場合は，CallToメソッドで例外が発生します。

schedulePortNo

サービス要求先OpenTP1システムのスケジュールサービスのポート番号（サービス要求先のスケジュールサービス定義のscd_portオペランドに指定した値）を指定します。0を指定した場合は，送信先ポート番号の省略値として，サービス要求元のスケジュールサービス定義のscd_portオペランドの指定値を仮定します。

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード | 説明
DCRPCER_PROTO | Openメソッドを呼び出していません。

注意事項

SetDirectScheduleメソッドは，CallToメソッドの第一引数に指定するRpcBindTable構造体を設定するためのメソッドです。

SetDirectScheduleメソッドの引数の指定値のチェックや，指定方法によってどのような動作をするかについては，作成したRpcBindTable構造体を指定して呼び出したCallToメソッドの動作が示します。

SetDirectScheduleメソッドは，UAPトレースを取得しません。

●SetServicePriolity

説明

サービス要求のプライオリティを設定します。サービス要求単位でスケジュールプライオリティを制御する場合に呼び出します。

このメソッドで設定したプライオリティは，このメソッドを再び呼び出すまで更新されません。したがって，同じプライオリティでまとめてサービス要求する場合は，このメソッドを1回だけ呼び出します。

このメソッドで指定したプライオリティは，直後に呼び出すCallメソッドで，スケジュールキューを経由してサーバに通知されます。

このメソッドを一度も呼び出さない場合の処理は，スケジュールサービスの省略時解釈で，サービス要求のプライオリティが決定されます。

宣言

【C#の場合】

public static void SetServicePriolity(
 int schedulePriolity
);

【Visual Basicの場合】

Public Shared Sub SetServicePriolity( _
 ByVal schedulePriolity As Integer _
)

【J#の場合】

public static void SetServicePriolity(
 int schedulePriolity
);

パラメタ

schedulePriolity

サービス要求のスケジュールプライオリティを，0から8の範囲で設定します。schedulePriolityパラメタの設定は省略できません。

最も高いプライオリティの値は1で，最も低いプライオリティの値は8です。

0を設定した場合は，スケジュールサービスの省略時解釈となります。

上記以外の値を設定した場合は，SetServicePriolityメソッドは無視されます。

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード | 説明
DCRPCER_PROTO | Openメソッドを呼び出していません。

注意事項

キュー受信型サーバでは，設定したサービス要求のプライオリティは，サーバUAPのユーザサービス定義のservice_priority_controlオペランドにY（プライオリティを制御する）を指定している場合にだけ有効です。
サービス要求する相手のサーバUAPでプライオリティを制御していない場合は，このメソッドを呼び出しても無効になります。

2回目以降の連鎖RPCでのCallメソッドと，連鎖RPCを終了させるために呼び出す同期応答型RPCのCallメソッド（flagsパラメタにTP1ServerFlags.DCNOFLAGSを設定）のサービス要求に対してSetServicePriolityメソッドを呼び出しても無効となります。

Callメソッドは，サービス要求のプライオリティを省略値にリセットしません。サービス要求のプライオリティをリセットする場合は，schedulePriolityに0を設定したSetServicePriolityメソッドを呼び出し直してください。

●SetServiceRetry

説明

実行中のサービスメソッドの処理をリトライします。リトライする場合は，サービスメソッドでSetServiceRetryメソッドを呼び出したあとで，リトライするサービスメソッドをリターンしてください。リターンしたあと，同じプロセスで同じサービスメソッドが再起動されます。

応答型RPCで呼ばれたサービスメソッドがリトライされた場合は，リトライ前のサービスメソッドが設定した値（応答を格納する領域および応答の長さ）は無効になります。

ユーザサービス定義のrpc_service_retry_countオペランドに指定した回数を超えた（rpc_service_retry_countオペランドに0を指定した場合も含む）あとでSetServiceRetryメソッドを呼び出した場合，メソッドはHitachi.OpenTP1.TP1Error.DCRPCER_RETRY_COUNT_OVERで例外応答します。このとき，サービスメソッドはリトライされません。

応答型RPCで呼ばれたサービスメソッドの場合は，応答を格納する領域の内容をクライアントUAPに返します。

宣言

【C#の場合】

public static void SetServiceRetry(
);

【Visual Basicの場合】

Public Shared Sub SetServiceRetry( _
)

【J#の場合】

public static void SetServiceRetry(
);

パラメタ

なし

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCRPCER_PROTO
SetServiceRetryメソッドを呼び出す条件に誤りがあります。
次に示すことが考えられます。

サービスメソッドの中で呼び出していません。

グローバルトランザクションの範囲の中で呼び出しています。

Openメソッドを呼び出していません。

DCRPCER_RETRY_COUNT_OVER
ユーザサービス定義のrpc_service_retry_countオペランドに指定したサービスリトライ回数最大値を超えて，SetServiceRetryメソッドを呼び出しています。これ以上サービスメソッドをリトライできません。

注意事項

SetServiceRetryメソッドを呼び出す場合は，次に示す条件を満たしてください。これらの条件を満たしていない場合，SetServiceRetryメソッドは例外応答します。
・サービスメソッドの中でSetServiceRetryメソッドを呼び出していること。
・実行中のサービスメソッドが，グローバルトランザクションの範囲でないこと。

SetServiceRetryメソッドを呼び出すサービスメソッドでは，クライアントUAPから渡されたデータは参照できますが，変更できません。入力データ領域の内容を変更した場合，システムの動作は保証しません。

SetServiceRetryメソッドは，OpenTP1独自のリモートプロシジャコール（Callメソッド）でサービスを要求されたサービスメソッドでだけ呼び出せます。それ以外のサービスメソッドの処理は，SetServiceRetryメソッドでリトライできません。

●SetTimeout

説明

サービス要求の応答待ち時間を変更します。このメソッドで変更した値は，Closeメソッドを呼び出すまで有効です。

サービス要求の応答待ち時間をこのメソッドを呼び出す前の値に戻すときは，GetTimeoutメソッドで返された元の値を，このメソッドで再設定してください。

このメソッドは，システム共通定義のwatch_timeオペランドに指定した値を変更しません。このメソッドで設定する値は，直後に呼び出すCallメソッドにだけ影響します。

宣言

【C#の場合】

public static void SetTimeout(
 int waitTime
);

【Visual Basicの場合】

Public Shared Sub SetTimeout( _
 ByVal waitTime As Integer _
)

【J#の場合】

public static void SetTimeout(
 int waitTime
);

パラメタ

waitTime

サービス応答待ち時間を設定します。0～65535の範囲で設定します。

無制限に待ち続ける場合は，0を設定します。

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード | 説明
DCRPCER_PROTO | Openメソッドを呼び出していません。
上記以外の負の整数 | プログラムの破壊などによる，予期しないエラーが発生しました。

RpcBindTable構造体

RpcBindTable構造体の概要

名前空間

Hitachi.OpenTP1.Server

継承関係

System.Object
 +- System.ValueType
   +- Hitachi.OpenTP1.Server.RpcBindTable

説明

RpcBindTable構造体は，サービス要求先を特定する検索キーを格納します。

プロパティの一覧

名称 | 説明
Flags | フラグの設定および参照を行います。
HostName | サービス要求先ノードのホスト名の設定および参照を行います。
NodeID | サービス要求先のノード識別子の設定および参照を行います。
PortNo | サービス要求先ノードのネームサービスのポート番号の設定および参照を行います。

プロパティの詳細

●Flags

説明

フラグの設定および参照を行います。

通常，TP1ServerFlags.DCNOFLAGSを設定します。

portNoパラメタの設定を有効にする場合は，TP1ServerFlags.DCRPC_NAMPORTを設定してください。

参照時にTP1ServerFlags.DCNOFLAGSであった場合，portNoパラメタに値が設定されていても有効になりません。

宣言

【C#の場合】

public int Flags {get; set;}

【Visual Basicの場合】

Public Property Flags As Integer

【J#の場合】

public int get_Flags();
public void set_Flags(int);

例外

なし

●HostName

説明

サービス要求先ノードのホスト名の設定および参照を行います。

ホスト名を検索のキーとして使用しない場合は，空文字列またはnull（Visual Basicの場合はNothing）を指定してください。

参照時にホスト名が空文字列またはnull（Visual Basicの場合はNothing）であった場合，ホスト名を検索のキーとして使用できません。

宣言

【C#の場合】

public string HostName {get; set;}

【Visual Basicの場合】

Public Property HostName As String

【J#の場合】

public System.String get_HostName();
public void set_HostName(System.String);

例外

なし

●NodeID

説明

サービス要求先のノード識別子の設定および参照を行います。

ノード識別子を検索のキーにしない場合には，空文字列またはnull（Visual Basicの場合はNothing）を設定します。

参照時にノード識別子が空文字列またはnull（Visual Basicの場合はNothing）であった場合，ノード識別子を検索のキーとして使用できません。

宣言

【C#の場合】

public string NodeID {get; set;}

【Visual Basicの場合】

Public Property NodeID As String

【J#の場合】

public System.String get_NodeID();
public void set_NodeID(System.String);

例外

なし

●PortNo

説明

サービス要求先ノードのネームサービスのポート番号の設定および参照を行います。

ホスト名を検索のキーとして使用しない場合は，0を指定してください。

参照時にポート番号が0であった場合，ホスト名を検索のキーとして使用できません。

宣言

【C#の場合】

public int PortNo {get; set;}

【Visual Basicの場合】

Public Property PortNo As Integer

【J#の場合】

public int get_PortNo();
public void set_PortNo(int);

例外

なし

Rts

Rtsの概要

名前空間

Hitachi.OpenTP1.Server

継承関係

System.Object
 +- Hitachi.OpenTP1.Server.Rts

説明

Rtsクラスは，リアルタイム統計情報を取得する場合に使用するメソッドを提供します。

メソッドの一覧

名称 | 説明
PutUTrace(System.Int32, System.Int32) | UAP内の任意の区間で，eventIDに設定した項目の実行時間および実行回数をリアルタイム統計情報として取得します。

メソッドの詳細

●PutUTrace

説明

UAP内の任意の区間で，eventIDに設定した項目の実行時間および実行回数をリアルタイム統計情報として取得します。

宣言

【C#の場合】

public static void PutUTrace(
 int eventID,
 int flags
);

【Visual Basicの場合】

Public Shared Sub PutUTrace( _
 ByVal eventID As Integer, _
 ByVal flags As Integer _
)

【J#の場合】

public static void PutUTrace(
 int eventID,
 int flags
);

パラメタ

eventID

取得するリアルタイム統計情報の項目IDを設定します。IDに使用できる値は，1000000～2147483647です。

flags

PutUTraceメソッドで実行する処理を設定します。

TP1ServerFlags.DCRTS_START
eventIDに設定した項目IDの実行時間の計測を開始します。このフラグを設定してPutUTraceメソッドを呼び出した時点では，リアルタイム統計情報を取得しません。

TP1ServerFlags.DCRTS_END
eventIDに設定した項目IDの実行時間を取得して，計測を終了します。

TP1ServerFlags.DCNOFLAGS
eventIDに設定した項目IDの実行回数だけを取得します。実行時間は0秒となります。

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合だけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCRTSER_PARAM
引数に設定した値に誤りがあります。

DCRTSER_PROTO
RpcクラスのOpenメソッドを呼び出していません。
すでに実行時間の計測を開始している項目IDをeventIDに設定して，flagsにTP1ServerFlags.DCRTS_STARTを設定したPutUTraceメソッドを呼び出しました。
実行時間の計測を開始していない項目IDをeventIDに設定してflagsにTP1ServerFlags.DCRTS_ENDを設定したPutUTraceメソッドを呼び出しました。

DCRTSER_ITEM_OVER
取得項目の数がリアルタイム統計情報サービス定義のrts_item_maxオペランドの指定値を超えるため，情報を取得できません。

DCRTSER_ITEM_OVER_SRV
サーバ単位の取得項目の数が，リアルタイム統計情報サービス定義のrts_item_maxオペランドの指定値を超えるため，情報を取得できません。このエラーコードが返った場合，サービス単位，またはサービス以外の処理の統計情報は取得されています。

DCRTSER_ITEM_OVER_SVC
サービス単位，またはサービス以外の処理での取得項目の数が，リアルタイム統計情報サービス定義のrts_item_maxオペランドの指定値を超えるため，情報を取得できません。このエラーコードが返った場合，サーバ単位の統計情報は取得されています。

DCRTSER_NOMEM
プロセスメモリが不足したため，処理を実行できません。

DCRTSER_RTS_NOT_START
リアルタイム統計情報サービスが開始していません。

DCRTSER_NOENTRY
PutUTraceメソッドを呼び出したサーバ，およびサービスがリアルタイム統計情報の取得対象に登録されていません。

DCRTSER_VERSION
UAPが，現在稼働しているリアルタイム統計情報サービスでは稼働できないバージョンのライブラリと結合しています。

注意事項

PutUTraceメソッドでは，システム全体のリアルタイム統計情報は取得できません。

マルチサーバを使用しているUAPでは，同じ呼び出し元サービスおよび同じeventIDを設定したPutUTraceメソッドを複数プロセスから同時に呼び出した場合，プロセスによっては統計情報が取得されないことがあります。これは，統計情報の取得処理では排他制御がされないため，書き込み処理が同時に行われることが要因です。

PutUTraceメソッドは，UAPトレースを取得しません。

flagsにTP1ServerFlags.DCRTS_STARTを指定したPutUTraceメソッドが例外を返し，エラーコードがDCRTSER_RTS_NOT_STARTまたはDCRTSER_NOENTRYの場合があります。その場合に，同じeventIDでflagsにTP1ServerFlags.DCRTS_ENDを指定したPutUTraceメソッドを呼び出すまでの間にリアルタイム統計情報サービスを開始して，呼び出し元のUAPを取得対象に追加したとき，PutUTraceメソッドは例外を返し，エラーコードはDCRTSER_PROTOになります。

ShortArrayHolder

ShortArrayHolderの概要

名前空間

Hitachi.OpenTP1

継承関係

System.Object
 +- Hitachi.OpenTP1.ShortArrayHolder

実装インタフェース

Hitachi.OpenTP1.Common.IHolder

説明

ShortArrayHolderクラスは，System.Int16配列を保持するホルダークラスです。

プロパティの一覧

名称 | 説明
Value | 保持している変数に対して値の設定および参照を行います。

プロパティの詳細

●Value

説明

保持している変数に対して値の設定および参照を行います。

宣言

【C#の場合】

public short[] Value {get; set;}

【Visual Basicの場合】

Public Property Value As Short()

【J#の場合】

public short[] get_Value();
public void set_Value(short[]);

例外

なし

ShortHolder

ShortHolderの概要

名前空間

Hitachi.OpenTP1

継承関係

System.Object
 +- Hitachi.OpenTP1.ShortHolder

実装インタフェース

Hitachi.OpenTP1.Common.IHolder

説明

ShortHolderクラスは，System.Int16値を保持するホルダークラスです。

プロパティの一覧

名称 | 説明
Value | 保持している変数に対して値の設定および参照を行います。

プロパティの詳細

●Value

説明

保持している変数に対して値の設定および参照を行います。

宣言

【C#の場合】

public short Value {get; set;}

【Visual Basicの場合】

Public Property Value As Short

【J#の場合】

public short get_Value();
public void set_Value(short);

例外

なし

SPPBase

SPPBaseの概要

名前空間

Hitachi.OpenTP1.Server

継承関係

System.Object
 +- Hitachi.OpenTP1.Server.SPPBase

説明

SPPBaseクラスは，SPP.NET実装の抽象クラスです。

メソッドの一覧

名称 | 説明
FinalizeSPP() | このメソッドは，SPP.NET実装の抽象クラスの解放時に呼び出されます。
InitializeSPP() | このメソッドは，SPP.NET実装の抽象クラスの初期化時に呼び出されます。

メソッドの詳細

●FinalizeSPP

説明

このメソッドは，SPP.NET実装の抽象クラスの解放時に呼び出されます。

SPP.NET終了時の解放処理を追加する場合は，このメソッドをオーバライドします。

宣言

【C#の場合】

public virtual void FinalizeSPP(
);

【Visual Basicの場合】

Public Overridable Sub FinalizeSPP( _
)

【J#の場合】

public void FinalizeSPP(
);

パラメタ

なし

戻り値

なし

例外

なし

●InitializeSPP

説明

このメソッドは，SPP.NET実装の抽象クラスの初期化時に呼び出されます。

SPP.NET起動時の初期化処理を追加する場合は，このメソッドをオーバライドします。

宣言

【C#の場合】

public virtual void InitializeSPP(
);

【Visual Basicの場合】

Public Overridable Sub InitializeSPP( _
)

【J#の場合】

public void InitializeSPP(
);

パラメタ

なし

戻り値

なし

例外

なし

StringArrayHolder

StringArrayHolderの概要

名前空間

Hitachi.OpenTP1

継承関係

System.Object
 +- Hitachi.OpenTP1.StringArrayHolder

実装インタフェース

Hitachi.OpenTP1.Common.IHolder

説明

StringArrayHolderクラスは，System.String配列を保持するホルダークラスです。

プロパティの一覧

名称 | 説明
Value | 保持している変数に対して値の設定および参照を行います。

プロパティの詳細

●Value

説明

保持している変数に対して値の設定および参照を行います。

宣言

【C#の場合】

public string[] Value {get; set;}

【Visual Basicの場合】

Public Property Value As String()

【J#の場合】

public System.String[] get_Value();
public void set_Value(System.String[]);

例外

なし

StringHolder

StringHolderの概要

名前空間

Hitachi.OpenTP1

継承関係

System.Object
 +- Hitachi.OpenTP1.StringHolder

実装インタフェース

Hitachi.OpenTP1.Common.IHolder

説明

StringHolderクラスは，System.Stringを保持するホルダークラスです。

プロパティの一覧

名称 | 説明
Value | 保持している変数に対して値の設定および参照を行います。

プロパティの詳細

●Value

説明

保持している変数に対して値の設定および参照を行います。

宣言

【C#の場合】

public string Value {get; set;}

【Visual Basicの場合】

Public Property Value As String

【J#の場合】

public System.String get_Value();
public void set_Value(System.String);

例外

なし

Tam 【TP1/Server Base】

Tamの概要

名前空間

Hitachi.OpenTP1.Server

継承関係

System.Object
 +- Hitachi.OpenTP1.Server.Tam

説明

Tamクラスは，TAMファイルサービス機能を使用するメソッドを提供します。

Tamクラスのメソッドは，TP1/Server BaseのUAPでだけ使えます。TP1/LiNKのUAPでは，Tamクラスのメソッドは使えません。

メソッドの一覧

名称 | 説明
Close(System.Int32) | TAMテーブルをクローズします。
Delete(System.Int32, Hitachi.OpenTP1.Server.TamKeyTable&, System.Int32, System.Byte[], System.Int32, System.Int32) | キー値に示すレコードを，TAMテーブルから削除します。
GetInfo(System.String) | TAMテーブルの状態を取得します。
GetStatus(System.String, Hitachi.OpenTP1.Server.TamStatusTable&) | TAMテーブルの情報を，TamStatusTable構造体に返します。
Open(System.String, System.Int32) | TAMテーブルをオープンします。
Read(System.Int32, Hitachi.OpenTP1.Server.TamKeyTable&, System.Int32, System.Byte[], System.Int32, System.Int32) | flagsに設定した検索種別に従って，TAMテーブル上のレコードを参照または更新の目的で入力します。
ReadCancel(System.Int32, Hitachi.OpenTP1.Server.TamKeyTable&, System.Int32) | トランザクション内で，Tam.Readメソッドを使って排他を掛けた参照目的の入力，および更新目的の入力を取り消し，レコード排他を解除します。
Rewrite(System.Int32, Hitachi.OpenTP1.Server.TamKeyTable&, System.Int32, System.Byte[], System.Int32) | Tam.Readメソッドで入力したレコードを，更新して出力します。
Write(System.Int32, Hitachi.OpenTP1.Server.TamKeyTable&, System.Int32, System.Byte[], System.Int32, System.Int32) | キー値に示すレコードを，TAMテーブル上に更新または追加します。

メソッドの詳細

●Close

説明

TAMテーブルをクローズします。Closeメソッドを呼び出したあとは，tableIDパラメタに設定したテーブル記述子は使えません。

Closeメソッドが例外応答した場合は，このメソッド内で確保した資源はすべて解放して，メソッドを呼び出す前の状態に戻ります。

トランザクション外でTam.Openメソッドを呼び出した場合，Closeメソッドもトランザクション外で呼び出してください。

トランザクション内でTam.Openメソッドを呼び出した場合は，Closeメソッドもトランザクション内で呼び出してください。また，トランザクション終了時までにCloseメソッドを呼び出さなかった場合は，同期点でTAMテーブルがクローズされます。

サービスメソッドの中で，トランザクション外のオープンに対するCloseメソッドを呼び出す場合，クローズさせるTAMテーブルにアクセスしている同一プロセス上のトランザクションは，すべて終了させてください。このことに関するエラーチェックはしないので，トランザクションを終了させないでこのメソッドを呼び出した場合の動作については保証しません。

宣言

【C#の場合】

public static void Close(
   int tableID
);

【Visual Basicの場合】

Public Shared Sub Close( _
   ByVal tableID As Integer _
)

【J#の場合】

public static void Close(
   int tableID
);

パラメタ

tableID

クローズするTAMテーブルの，テーブル記述子を設定します。テーブル記述子は，Tam.Openメソッドで返された値です。

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCTAMER_PARAM_TID
tableIDに設定したテーブル記述子が間違っています。

DCTAMER_TAMEND
TAMサービスが終了中です。

DCTAMER_PROTO

TAMテーブルへアクセスする順序が間違っています。

UAPのユーザサービス定義に指定したトランザクション制御用ライブラリのリソースマネジャ登録が間違っています。または，UAPのユーザサービス定義にトランザクション制御用ライブラリを指定していません。

メソッドを呼び出したUAPのユーザサービス定義に，非トランザクション属性（atomic_updateオペランドにNを指定）を指定しています。

DCTAMER_TRNOPN
Tam.Openメソッドはトランザクション外で呼び出しています。

DCTAMER_NOOPEN
TAMテーブルがオープン状態ではありません。

DCTAMER_MEMORY
メモリが不足しました。

DCTAMER_IO
入出力エラーが発生しました。

●Delete

説明

キー値に示すレコードを，TAMテーブルから削除します。削除するレコードをバッファに退避することもできます。ただし，このメソッドが例外応答した場合には，バッファの内容は保証されません。

レコード排他でTAMテーブルがオープンしている場合，更新排他でテーブル排他を確保します。

Deleteメソッドが例外応答した場合は，このメソッド内で設定した資源はすべて解放して，メソッドを呼び出す前の状態に戻ります。ただし，メソッドを呼び出す前に参照排他で確保されていたTAMテーブルを削除しようとした場合は更新排他となり，参照排他には戻りません。

複数のレコードを設定して削除する場合，それらのレコードのうち一つでもエラーが起こったときは，このメソッドで設定した全レコードの処理をエラーとして，メソッドを呼び出す前の状態に戻ります。

宣言

【C#の場合】

public static void Delete(
   int tableID,
   Hitachi.OpenTP1.Server.TamKeyTable[] key,
   int keyNo,
   byte[] buffer,
   int bufferSize,
   int flags
);

【Visual Basicの場合】

Public Shared Sub Delete( _
   ByVal tableID As Integer, _
   ByVal key() As Hitachi.OpenTP1.Server.TamKeyTable, _
   ByVal keyNo As Integer, _
   ByVal buffer() As Byte, _
   ByVal bufferSize As Integer, _
   ByVal flags As Integer _
)

【J#の場合】

public static void Delete(
   int tableID,
   Hitachi.OpenTP1.Server.TamKeyTable[] key,
   int keyNo,
   ubyte[] buffer,
   int bufferSize,
   int flags
);

パラメタ

tableID

レコードを削除するTAMテーブルの，テーブル記述子を設定します。テーブル記述子は，Tam.Openメソッドで返された値です。

key

削除するレコードのキー値を持つ，構造体の配列を設定します。

keyNo

要求レコード数（keyで設定する構造体の数）を設定します。

buffer

削除するレコードをバッファに退避する場合に，そのバッファを設定します。flagsにTP1ServerFlags.DCTAM_NOOUTREC（削除するレコードを退避しません）を設定した場合は，この設定は無効です。

bufferSize

削除するレコードをバッファに退避する場合に，そのバッファ長を設定します。返却バッファ長は，「レコード長×要求レコード数」以上にします。flagsにTP1ServerFlags.DCTAM_NOOUTREC（削除するレコードを退避しません）を設定した場合は，この設定は無効です。

flags

レコードのアクセス種別，資源の競合が起こった場合の排他解除待ち種別を，次の形式で設定します。

{TP1ServerFlags.DCTAM_NOOUTREC|
TP1ServerFlags.DCTAM_OUTREC}
〔|{TP1ServerFlags.DCTAM_WAIT|
TP1ServerFlags.DCTAM_NOWAIT}〕

フラグ1
フラグ1には，レコードアクセス種別を指定します。
レコードのアクセス種別の設定は省略できません。次のアクセス種別のどちらかを指定してください。
TP1ServerFlags.DCTAM_NOOUTREC … 削除するレコードを退避しません。
TP1ServerFlags.DCTAM_OUTREC … 削除するレコードを退避します。

フラグ2
フラグ2には，排他解除待ち種別を指定します。
次の排他解除待ち種別のどちらかを指定してください。排他解除待ち種別を省略した場合は，排他解除待ちをしないで例外応答します。
TP1ServerFlags.DCTAM_WAIT … 排他解除待ちをします。
TP1ServerFlags.DCTAM_NOWAIT … 待たないで，例外応答します。

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCTAMER_PARAM_TID
tableIDに設定したテーブル記述子が間違っています。

DCTAMER_PARAM_KEY
keyに設定したキー値が間違っています。

DCTAMER_PARAM_KNO
keyNoに設定した値が間違っています。

DCTAMER_PARAM_BFA
bufferに設定した値が間違っています。

DCTAMER_PARAM_BFS
bufferSizeに設定したバッファ長が短過ぎます。

DCTAMER_PARAM_FLG
flagsに設定した値が間違っています。

DCTAMER_NOTTAM
tableIDに設定したテーブルはTAMテーブルではありません。

DCTAMER_TAMEND
TAMサービスが終了中です。

DCTAMER_PROTO

TAMテーブルへアクセスする順序が間違っています。

UAPのユーザサービス定義に指定したトランザクション制御用ライブラリのリソースマネジャ登録が間違っています。または，UAPのユーザサービス定義にトランザクション制御用ライブラリを指定していません。

メソッドを呼び出したUAPのユーザサービス定義に，非トランザクション属性（atomic_updateオペランドにNを指定）を指定しています。

DCTAMER_RMTBL
TAMテーブルが削除されています。

DCTAMER_NOLOAD
TAMテーブルがロードされていません。

DCTAMER_NOOPEN
TAMテーブルがオープン状態ではありません。

DCTAMER_LOGHLD
TAMテーブルが論理閉塞状態です。

DCTAMER_OBSHLD
TAMテーブルが障害閉塞状態です。

DCTAMER_ACSATL
TAMサービス定義で指定したTAMテーブルのアクセス形態では実行できません。

DCTAMER_NOREC
指定されたレコードは存在しません。

DCTAMER_LOCK
排他エラーが発生しました。flagsにTP1ServerFlags.DCTAM_WAITを設定した場合，ロックサービス定義で指定した待ち時間でタイムアウトが発生したため，資源を確保できませんでした。

DCTAMER_DLOCK
デッドロックが起こりました。

DCTAMER_TBLVR
UAPが，現在稼働しているTAMテーブルでは動作できないバージョンのTAMライブラリと結合されています。

DCTAMER_FLSVR
UAPが，現在稼働しているOpenTP1ファイルサービスでは動作できないバージョンのTAMライブラリと結合されています。

DCTAMER_RECOBS
レコードが破壊されています。

DCTAMER_TRNNUM
TAMサービスで管理できるトランザクション数を超えました。

DCTAMER_OPENNUM
キャラクタ型スペシャルファイルのオープン数の制限値を超えました。

DCTAMER_ACCESSS
スペシャルファイルに対するアクセス権がありません。

DCTAMER_ACCESSF
TAMファイルに対するアクセス権がありません。

DCTAMER_MEMORY
メモリが不足しました。

DCTAMER_IO
入出力エラーが発生しました。

DCTAMER_TMERR
トランザクションサービスでエラーが発生しました。

DCTAMER_ACCESS
アクセスしようとしたTAMファイルは，セキュリティ機能で保護されています。Deleteメソッドを呼び出したUAPには，アクセス権限がありません。

●GetInfo

説明

TAMテーブルの状態を取得します。取得するTAMテーブルの状態を次に示します。

オープン状態

クローズ状態

論理閉塞状態

障害閉塞状態

GetInfoメソッドは，トランザクション内でもトランザクション外でも呼び出せます。

GetInfoメソッドを呼び出したプロセスでTam.Openメソッドを呼び出していなくても，設定したTAMテーブルにほかのプロセスでTam.Openメソッドを呼び出している場合は，TAMテーブルはオープン状態としてリターンします。

宣言

【C#の場合】

public static int GetInfo(
   string tableName
);

【Visual Basicの場合】

Public Shared Function GetInfo( _
   ByVal tableName As String _
) As Integer

【J#の場合】

public static int GetInfo(
   System.String tableName
);

パラメタ

tableName

状態を取得するTAMテーブル名を設定します。TAMテーブル名は32文字以内の半角英数字文字列で設定してください。

戻り値

TP1ServerValues.DCTAM_STS_OPN
オープン状態であることを示します。

TP1ServerValues.DCTAM_STS_CLS
クローズ状態であることを示します。

TP1ServerValues.DCTAM_STS_LHLD
論理閉塞状態であることを示します。

TP1ServerValues.DCTAM_STS_OHLD
障害閉塞状態であることを示します。

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCTAMER_PARAM_TBL
tableNameに設定した値が間違っています。

DCTAMER_UNDEF
TAMテーブルが定義されていません。

DCTAMER_TAMEND
TAMサービスが終了中です。

DCTAMER_PROTO

TAMテーブルへアクセスする順序が間違っています。

UAPのユーザサービス定義に指定したトランザクション制御用ライブラリのリソースマネジャ登録が間違っています。または，UAPのユーザサービス定義にトランザクション制御用ライブラリを指定していません。

メソッドを呼び出したUAPのユーザサービス定義に，非トランザクション属性（atomic_updateオペランドにNを指定）を指定しています。

DCTAMER_TAMVR
UAPが，現在稼働しているTAMサービスでは動作できないバージョンのTAMライブラリと結合されています。

DCTAMER_NO_ACL
アクセスしようとしたTAMファイルは，セキュリティ機能で保護されています。該当するファイルに対するACLがありません。

DCTAMER_ACCESS
アクセスしようとしたTAMファイルは，セキュリティ機能で保護されています。GetInfoメソッドを呼び出したUAPには，アクセス権限がありません。

●GetStatus

説明

TAMテーブルの情報が，TamStatusTable構造体で返されます。リターンする値を次に示します。

TAMファイル名

TAMテーブルの状態

使用中のレコード数

最大レコード数

インデクス種別

アクセス形態

ローディング契機

TAMレコード長

キー長

キー開始位置

セキュリティ属性

宣言

【C#の場合】

public static Hitachi.OpenTP1.Server.TamStatusTable GetStatus(
   string tableName
);

【Visual Basicの場合】

Public Shared Function GetStatus( _
   ByVal tableName As String, _
) As Hitachi.OpenTP1.Server.TamStatusTable _

【J#の場合】

public static Hitachi.OpenTP1.Server.TamStatusTable GetStatus(
   System.String tableName
);

パラメタ

tableName

情報を取得するTAMテーブル名を設定します。TAMテーブル名は，32文字以内の半角英数字文字列で設定します。

戻り値

TAMテーブルの情報が，TamStatusTable構造体で返されます。

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCTAMER_PARAM_TBL
tableNameに設定した値が間違っています。

DCTAMER_NOTTAM
tableNameに設定した名称は，TAMテーブルではありません。

DCTAMER_UNDEF
TAMテーブルが定義されていません。

DCTAMER_TAMEND
TAMサービスが終了中です。

DCTAMER_PROTO

TAMテーブルへアクセスする順序が間違っています。

UAPのユーザサービス定義に指定したトランザクション制御用ライブラリのリソースマネジャ登録が間違っています。または，UAPのユーザサービス定義にトランザクション制御用ライブラリを指定していません。

メソッドを呼び出したUAPのユーザサービス定義に，非トランザクション属性（atomic_updateオペランドにNを指定）を指定しています。

DCTAMER_TBLVR
UAPが，現在稼働しているTAMテーブルでは動作できないバージョンのTAMライブラリと結合されています。

DCTAMER_TAMVR
UAPが，現在稼働しているTAMサービスでは動作できないバージョンのTAMライブラリと結合されています。

DCTAMER_OPENNUM
キャラクタ型スペシャルファイルのオープン数の制限値を超えました。

DCTAMER_ACCESSS
スペシャルファイルに対するアクセス権がありません。

DCTAMER_MEMORY
メモリが不足しました。

DCTAMER_IO
入出力エラーが発生しました。

DCTAMER_NO_ACL
情報を取得しようとしたTAMテーブルは，セキュリティ機能で保護されています。該当するTAMテーブルに対するACLがありません。

DCTAMER_ACCESS
情報を取得しようとしたTAMテーブルは，セキュリティ機能で保護されています。GetStatusメソッドを呼び出したUAPには，アクセス権限がありません。

●Open

説明

TAMテーブルをオープンします。Openメソッドは，トランザクション内でもトランザクション外でも呼び出せます。

トランザクション内で呼び出して，排他種別にテーブル排他を設定した場合，更新排他でテーブル排他を確保します。

Openメソッドが例外応答した場合は，このメソッド内で確保した資源はすべて解放して，メソッドを呼び出す前の状態に戻ります。

宣言

【C#の場合】

public static int Open(
   string tableName,
   int flags
);

【Visual Basicの場合】

Public Shared Function Open( _
   ByVal tableName As String, _
   ByVal flags As Integer _
) As Integer

【J#の場合】

public static int Open(
   System.String tableName,
   int flags
);

パラメタ

tableName

オープンするTAMテーブル名を設定します。TAMテーブル名は32文字以内の半角英数字文字列で設定してください。

flags

テーブル排他を掛けるかレコード排他を掛けるかを，次の形式で設定します。

〔{TP1ServerFlags.DCTAM_TBL_EXCLUSIVE
〔|{TP1ServerFlags.DCTAM_WAIT|
TP1ServerFlags.DCTAM_NOWAIT}〕|
TP1ServerFlags.DCTAM_REC_EXCLUSIVE}〕

フラグ1
フラグ1には，排他種別を指定します。
テーブル排他の場合は，更新排他で確保します。レコード排他の場合は，レコードのアクセスメソッド内で排他を確保します。Openメソッドをトランザクション外で呼び出す場合は，テーブル排他は指定できません。
次の排他種別のどちらかを指定してください。このフラグの指定を省略した場合は，TP1ServerFlags.DCTAM_REC_EXCLUSIVEが仮定されます。
TP1ServerFlags.DCTAM_TBL_EXCLUSIVE … テーブル排他です。
TP1ServerFlags.DCTAM_REC_EXCLUSIVE … レコード排他です。

フラグ2
テーブル排他の場合は，フラグ2に資源の競合が起こったときの排他解除待ち種別を指定します。
次の排他解除待ち種別のどちらかを指定してください。このフラグの指定を省略した場合は，TP1ServerFlags.DCTAM_NOWAITが仮定されます。
TP1ServerFlags.DCTAM_WAIT … 排他解除待ちをします。
TP1ServerFlags.DCTAM_NOWAIT … 待たないで，例外応答します。

戻り値

テーブル記述子を示します。

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCTAMER_PARAM_TBL
tableNameに設定した値が間違っています。

DCTAMER_PARAM_FLG
flagsに設定した値が間違っています。

DCTAMER_NOTTAM
tableNameに設定したテーブルはTAMテーブルではありません。

DCTAMER_UNDEF
TAMテーブルが定義されていません。

DCTAMER_TAMEND
TAMサービスが終了中です。

DCTAMER_PROTO

TAMテーブルへアクセスする順序が間違っています。

UAPのユーザサービス定義に指定したトランザクション制御用ライブラリのリソースマネジャ登録が間違っています。または，UAPのユーザサービス定義にトランザクション制御用ライブラリを指定していません。

メソッドを呼び出したUAPのユーザサービス定義に，非トランザクション属性（atomic_updateオペランドにNを指定）を指定しています。

DCTAMER_NOLOAD
TAMテーブルがロードされていません。

DCTAMER_OPENED
TAMテーブルがオープン済みです。

DCTAMER_LOGHLD
TAMテーブルが論理閉塞状態です。

DCTAMER_OBSHLD
TAMテーブルが障害閉塞状態です。

DCTAMER_LOCK
排他エラーが発生しました。flagsにTP1ServerFlags.DCTAM_WAITを設定した場合，ロックサービス定義で指定した待ち時間でタイムアウトが発生したため，資源を確保できませんでした。

DCTAMER_DLOCK
デッドロックが起こりました。

DCTAMER_TBLVR
UAPが，現在稼働しているTAMテーブルでは動作できないバージョンのTAMライブラリと結合されています。

DCTAMER_FLSVR
UAPが，現在稼働しているOpenTP1ファイルサービスでは動作できないバージョンのTAMライブラリと結合されています。

DCTAMER_TAMVR
UAPが，現在稼働しているTAMサービスでは動作できないバージョンのTAMライブラリと結合されています。

DCTAMER_RECOBS
レコードが破壊されています。

DCTAMER_TRNNUM
TAMサービスで管理できるトランザクション数を超えています。

DCTAMER_OPENNUM
キャラクタ型スペシャルファイルのオープン数の制限値を超えています。

DCTAMER_ACCESSS
スペシャルファイルに対するアクセス権がありません。

DCTAMER_ACCESSF
TAMファイルに対するアクセス権がありません。

DCTAMER_MEMORY
メモリが不足しました。

DCTAMER_IO
入出力エラーが発生しました。

DCTAMER_TMERR
トランザクションサービスでエラーが発生しました。

DCTAMER_NO_ACL
オープンしようとしたTAMファイルは，セキュリティ機能で保護されています。該当するファイルに対するACLがありません。

●Read

説明

flagsに設定した検索種別に従って，TAMテーブル上のレコードを参照または更新の目的で入力します。

参照目的の入力で排他を掛ける場合，参照排他でテーブル排他とレコード排他を確保します。レコード排他でオープンしたTAMテーブルを更新目的で入力する場合は，参照排他でテーブル排他を確保し，更新排他でレコード排他を確保します。

Readメソッドが例外応答した場合は，このメソッド内で設定した資源は すべて解放して，メソッドを呼び出す前の状態に戻ります。ただし，メソッドを呼び出す前に参照排他で確保されていたレコードを更新目的で入力した場合は，更新排他となり参照排他には戻りません。また，例外応答した場合には，バッファの内容は保証できません。

複数のレコードを設定して入力する場合，それらのレコードのうち一つでもエラーが発生したときは，このメソッドで設定した全レコードの処理をエラーとします。

宣言

【C#の場合】

public static void Read(
   int tableID,
   Hitachi.OpenTP1.Server.TamKeyTable[] key,
   int keyNo,
   byte[] buffer,
   int bufferSize,
   int flags
);

【Visual Basicの場合】

Public Shared Sub Read( _
   ByVal tableID As Integer, _
   ByVal key() As Hitachi.OpenTP1.Server.TamKeyTable, _
   ByVal keyNo As Integer, _
   ByVal buffer() As Byte, _
   ByVal bufferSize As Integer, _
   ByVal flags As Integer _
)

【J#の場合】

public static void Read(
   int tableID,
   Hitachi.OpenTP1.Server.TamKeyTable[] key,
   int keyNo,
   ubyte[] buffer,
   int bufferSize,
   int flags
);

パラメタ

tableID

レコードを入力するTAMテーブルの，テーブル記述子を設定します。テーブル記述子はTam.Openメソッドで返された値です。

key

レコードを検索するための，キー値を持つ構造体の配列を設定します。

keyNo

要求レコード数（keyで設定する構造体の数）を設定します。

buffer

レコードを入力するバッファを設定します。

bufferSize

レコードを入力するバッファの長さを設定します。バッファ長は「レコード長×要求レコード数」以上にします。

flags

レコードの検索種別，アクセス種別，参照目的の排他のときの排他要否種別を設定します。また，排他を掛ける場合に，資源の競合が起こったときの排他解除待ち種別を次の形式で設定します。

{フラグ1}|{TP1ServerFlags.DCTAM_REFERENCE
〔|{TP1ServerFlags.DCTAM_EXCLUSIVE|
TP1ServerFlags.DCTAM_NOEXCLUSIVE}〕|
TP1ServerFlags.DCTAM_MODIFY}
〔|{TP1ServerFlags.DCTAM_WAIT|
TP1ServerFlags.DCTAM_NOWAIT}〕

フラグ1
フラグ1には，次のレコードの検索種別のうちどれか一つを指定してください。
レコードの検索種別の設定は省略できません。また，検索種別は重複して設定できません。
TP1ServerFlags.DCTAM_EQLSRC … 'キー値＝'を検索します（ハッシュ，ツリー）。
TP1ServerFlags.DCTAM_GRTEQLSRC … 'キー値＜＝'を検索します（ツリー）。
TP1ServerFlags.DCTAM_GRTSRC … 'キー値＜'を検索します（ツリー）。
TP1ServerFlags.DCTAM_LSSEQLSRC … 'キー値＞＝'を検索します（ツリー）。
TP1ServerFlags.DCTAM_LSSSRC … 'キー値＞'を検索します（ツリー）。
TP1ServerFlags.DCTAM_FIRSTSRC … 先頭から検索します（ハッシュ）。
TP1ServerFlags.DCTAM_NEXTSRC … 設定したキー値の，次のレコードから検索します（ハッシュ）。

フラグ2
フラグ2には，レコードアクセス種別を指定します。
レコードのアクセス種別の指定は省略できません。
次のアクセス種別のどちらかを指定してください。
TP1ServerFlags.DCTAM_REFERENCE … 参照目的の排他です。
TP1ServerFlags.DCTAM_MODIFY … 更新目的の排他です。

フラグ3
参照目的の排他の場合は，フラグ3に排他するかどうかを指定します。
次のどちらかを指定してください。このフラグの設定を省略した場合は，TP1ServerFlags.DCTAM_NOEXCLUSIVEが仮定されます。
TP1ServerFlags.DCTAM_EXCLUSIVE … 排他します。
TP1ServerFlags.DCTAM_NOEXCLUSIVE … 排他をしません。

フラグ4
フラグ4には，排他解除待ち種別を指定します。
次のどちらかを指定してください。このフラグの設定を省略した場合は，TP1ServerFlags.DCTAM_NOWAITが仮定されます。
TP1ServerFlags.DCTAM_WAIT … 排他解除待ちをします。
TP1ServerFlags.DCTAM_NOWAIT … 待たないで，例外応答します。

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCTAMER_PARAM_TID
tableIDに設定したテーブル記述子が間違っています。

DCTAMER_PARAM_KEY
keyに設定したキー値が間違っています。

DCTAMER_PARAM_KNO
keyNoに設定した値が間違っています。

DCTAMER_PARAM_BFA
bufferに設定した値が間違っています。

DCTAMER_PARAM_BFS
bufferSizeに設定したバッファ長が短過ぎます。

DCTAMER_PARAM_FLG
flagsに設定した値が間違っています。

DCTAMER_NOTTAM
tableIDに設定したテーブルはTAMテーブルではありません。

DCTAMER_TAMEND
TAMサービスが終了中です。

DCTAMER_PROTO

TAMテーブルへアクセスする順序が間違っています。

UAPのユーザサービス定義に指定したトランザクション制御用ライブラリのリソースマネジャ登録が間違っています。または，UAPのユーザサービス定義にトランザクション制御用ライブラリを指定していません。

メソッドを呼び出したUAPのユーザサービス定義に，非トランザクション属性（atomic_updateオペランドにNを指定）を指定しています。

DCTAMER_RMTBL
TAMテーブルが削除されています。

DCTAMER_NOLOAD
TAMテーブルがロードされていません。

DCTAMER_NOOPEN
TAMテーブルがオープン状態ではありません。

DCTAMER_LOGHLD
TAMテーブルが論理閉塞状態です。

DCTAMER_OBSHLD
TAMテーブルが障害閉塞状態です。

DCTAMER_IDXTYP
TAMテーブルファイルの初期作成で設定したTAMテーブルのインデクス種別では実行できません。

DCTAMER_ACSATL
TAMサービス定義で設定したTAMテーブルのアクセス形態では実行できません。

DCTAMER_NOREC
flagsに設定した検索条件を満たすレコードがありません。

DCTAMER_LOCK
排他エラーが発生しました。flagsにTP1ServerFlags.DCTAM_WAITを設定した場合，ロックサービス定義で指定した待ち時間でタイムアウトが発生したため，資源を確保できませんでした。

DCTAMER_DLOCK
デッドロックが起こりました。

DCTAMER_TBLVR
UAPが，現在稼働しているTAMテーブルでは動作できないバージョンのTAMライブラリと結合されています。

DCTAMER_FLSVR
UAPが，現在稼働しているOpenTP1ファイルサービスでは動作できないバージョンのTAMライブラリと結合されています。

DCTAMER_RECOBS
レコードが破壊されています。

DCTAMER_TRNNUM
TAMサービスで管理できるトランザクション数を超えました。

DCTAMER_OPENNUM
キャラクタ型スペシャルファイルのオープン数の制限値を超えました。

DCTAMER_ACCESSS
スペシャルファイルに対するアクセス権がありません。

DCTAMER_ACCESSF
TAMファイルに対するアクセス権がありません。

DCTAMER_MEMORY
メモリが不足しました。

DCTAMER_IO
入出力エラーが発生しました。

DCTAMER_TMERR
トランザクションサービスでエラーが発生しました。

DCTAMER_ACCESS
アクセスしようとしたTAMファイルは，セキュリティ機能で保護されています。Readメソッドを呼び出したUAPには，アクセス権限がありません。

●ReadCancel

説明

トランザクション内で，Tam.Readメソッドを使って排他を掛けた参照目的の入力，および更新目的の入力を取り消し，レコード排他を解除します。

更新，または追加済みのレコードには，排他を掛けた参照目的の入力を取り消すことはできません。また，Tam.Rewriteメソッドで更新したレコードの，更新目的の入力の取り消しはできません。

更新，または追加済みのレコード，およびテーブル排他でオープンした，TAMテーブル上のレコードに対する更新目的の入力の取り消しでは，排他を解除しません。

ReadCancelメソッドで入力を取り消したあとも，トランザクションが終了するまでは，入力したTAMテーブルに対して，ほかのトランザクションからレコードの追加，削除はできません。

ReadCancelメソッドが例外を返した場合，このメソッドで解放した資源は再確保しないで，メソッドを呼び出す前の状態には戻しません。また，複数のレコードを設定してアクセスを要求した場合，それらのレコードのうち，一つでもエラーが発生したら処理を中断して，例外応答します。

宣言

【C#の場合】

public static void ReadCancel(
   int tableID,
   Hitachi.OpenTP1.Server.TamKeyTable[] key,
   int keyNo
);

【Visual Basicの場合】

Public Shared Sub ReadCancel( _
   ByVal tableID As Integer, _
   ByVal key() As Hitachi.OpenTP1.Server.TamKeyTable, _
   ByVal keyNo As Integer _
)

【J#の場合】

public static void ReadCancel(
   int tableID,
   Hitachi.OpenTP1.Server.TamKeyTable[] key,
   int keyNo
);

パラメタ

tableID

レコードの入力を取り消すTAMテーブルの，テーブル記述子を設定します。テーブル記述子はTam.Openメソッドで返された値です。

key

入力を取り消すレコードの，キー値を持つ構造体の配列を設定します。

keyNo

要求レコード数（keyで設定する構造体の数）を設定します。

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCTAMER_PARAM_TID
tableIDに設定したテーブル記述子が間違っています。

DCTAMER_PARAM_KEY
keyに設定したキー値が間違っています。

DCTAMER_PARAM_KNO
keyNoに設定した値が間違っています。

DCTAMER_NOTTAM
tableIDに設定したテーブルはTAMテーブルではありません。

DCTAMER_TAMEND
TAMサービスが終了中です。

DCTAMER_PROTO

TAMテーブルへアクセスする順序が間違っています。

UAPのユーザサービス定義に指定したトランザクション制御用ライブラリのリソースマネジャ登録が間違っています。または，UAPのユーザサービス定義にトランザクション制御用ライブラリを指定していません。

メソッドを呼び出したUAPのユーザサービス定義に，非トランザクション属性（atomic_updateオペランドにNを指定）を指定しています。

DCTAMER_RMTBL
TAMテーブルが削除されています。

DCTAMER_NOLOAD
TAMテーブルがロードされていません。

DCTAMER_NOOPEN
TAMテーブルがオープン状態ではありません。

DCTAMER_LOGHLD
TAMテーブルが論理閉塞状態です。

DCTAMER_OBSHLD
TAMテーブルが障害閉塞状態です。

DCTAMER_NOREC
指定されたレコードは存在しません。

DCTAMER_SEQENCE
Tam.Readメソッドを呼び出していません。

DCTAMER_EXWRITE
tableIDに設定したテーブル記述子はTam.Writeメソッドで更新または追加したレコードです。

DCTAMER_EXREWRT
tableIDに設定したテーブル記述子は，Tam.Rewriteメソッドで更新済みです。

DCTAMER_TBLVR
UAPが，現在稼働しているTAMテーブルでは動作できないバージョンのTAMライブラリと結合されています。

DCTAMER_FLSVR
UAPが，現在稼働しているOpenTP1ファイルサービスでは動作できないバージョンのTAMライブラリと結合されています。

DCTAMER_TRNNUM
TAMサービスで管理できるトランザクション数を超えました。

DCTAMER_OPENNUM
キャラクタ型スペシャルファイルのオープン数の制限値を超えました。

DCTAMER_ACCESSS
スペシャルファイルに対するアクセス権がありません。

DCTAMER_ACCESSF
TAMテーブルファイルに対するアクセス権がありません。

DCTAMER_MEMORY
メモリが不足しました。

DCTAMER_IO
入出力エラーが発生しました。

DCTAMER_TMERR
トランザクションサービスでエラーが発生しました。

●Rewrite

説明

Tam.Readメソッドで入力したレコードを，更新して出力します。

更新目的の入力のTam.Readメソッドを1回呼び出せば，その後トランザクションの同期点まで，何度でもRewriteメソッドを使えます。ただし，Tam.Deleteメソッド，Tam.ReadCancelメソッドを呼び出したあとには，Rewriteメソッドを使えません。

Rewriteメソッドが例外応答した場合は，このメソッド内で設定した資源はすべて解放して，メソッドを呼び出す前の状態に戻ります。

複数のレコードを設定して更新を要求する場合，それらのレコードのうち一つでもエラーが発生したときは，このメソッドで設定した全レコードの処理をエラーとします。

更新データ内のキー値の格納位置，およびキー領域長は，TAMテーブルファイルの初期作成時のtamcreコマンドに設定した値です。

TAMテーブルファイルの初期作成時，データ部にキー値を付けている（tamcreコマンドに-sオプションを指定していない）場合は，Rewriteメソッドに設定したキー値が更新データ内になければ，例外応答します。また，データ部にキー値を付けていない（tamcreコマンドに-sオプションを指定）場合は，更新データの内容をチェックしません。

宣言

【C#の場合】

public static void Rewrite(
   int tableID,
   Hitachi.OpenTP1.Server.TamKeyTable[] key,
   int keyNo,
   byte[] data,
   int dataSize
);

【Visual Basicの場合】

Public Shared Sub Rewrite( _
   ByVal tableID As Integer, _
   ByVal key() As Hitachi.OpenTP1.Server.TamKeyTable, _
   ByVal keyNo As Integer, _
   ByVal data() As Byte, _
   ByVal dataSize As Integer _
)

【J#の場合】

public static void Rewrite(
   int tableID,
   Hitachi.OpenTP1.Server.TamKeyTable[] key,
   int keyNo,
   ubyte[] data,
   int dataSize
);

パラメタ

tableID

レコードを更新するTAMテーブルの，テーブル記述子を設定します。テーブル記述子はTam.Openメソッドで返された値です。

key

更新するレコードの，キー値を持つ構造体の配列を設定します。

keyNo

要求レコード数（keyで設定する構造体の数）を設定します。

data

更新データを設定します。

dataSize

更新データ長を設定します。更新データ長は，「レコード長×要求レコード数」以上にしてください。

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCTAMER_PARAM_TID
tableIDに設定したテーブル記述子が間違っています。

DCTAMER_PARAM_KEY
keyに設定したキー値が間違っています。

DCTAMER_PARAM_KNO
keyNoに設定した値が間違っています。

DCTAMER_PARAM_DTA
dataに設定した値が間違っています。

DCTAMER_PARAM_DTS
dataSizeに設定したデータ長が短過ぎます。

DCTAMER_NOTTAM
tableIDに設定したテーブルはTAMテーブルではありません。

DCTAMER_TAMEND
TAMサービスが終了中です。

DCTAMER_PROTO

TAMテーブルへアクセスする順序が間違っています。

UAPのユーザサービス定義に指定したトランザクション制御用ライブラリのリソースマネジャ登録が間違っています。または，UAPのユーザサービス定義にトランザクション制御用ライブラリを指定していません。

メソッドを呼び出したUAPのユーザサービス定義に，非トランザクション属性（atomic_updateオペランドにNを指定）を指定しています。

DCTAMER_RMTBL
TAMテーブルが削除されています。

DCTAMER_NOLOAD
TAMテーブルがロードされていません。

DCTAMER_NOOPEN
TAMテーブルがオープン状態ではありません。

DCTAMER_LOGHLD
TAMテーブルが論理閉塞状態です。

DCTAMER_OBSHLD
TAMテーブルが障害閉塞状態です。

DCTAMER_NOREC
指定されたレコードは存在しません。

DCTAMER_SEQENCE
Tam.Readメソッドを呼び出していません。

DCTAMER_TBLVR
UAPが，現在稼働しているTAMテーブルでは動作できないバージョンのTAMライブラリと結合されています。

DCTAMER_FLSVR
UAPが，現在稼働しているOpenTP1ファイルサービスでは動作できないバージョンのTAMライブラリと結合されています。

DCTAMER_RECOBS
レコードが破壊されています。

DCTAMER_TRNNUM
TAMサービスで管理できるトランザクション数を超えました。

DCTAMER_OPENNUM
キャラクタ型スペシャルファイルのオープン数の制限値を超えました。

DCTAMER_ACCESSS
スペシャルファイルに対するアクセス権がありません。

DCTAMER_ACCESSF
TAMテーブルファイルに対するアクセス権がありません。

DCTAMER_MEMORY
メモリが不足しました。

DCTAMER_IO
入出力エラーが発生しました。

DCTAMER_TMERR
トランザクションサービスでエラーが発生しました。

●Write

説明

キー値に示すレコードを，TAMテーブル上に更新または追加します。

レコード排他でTAMテーブルがオープンしている場合，次のように排他を確保します。

アクセス種別が「更新」の場合 （flagsにTP1ServerFlags.DCTAM_WRITEを設定）
参照排他でテーブル排他を確保して，更新排他でレコード排他を確保します。ただし，TAMサービス定義の「アクセス時のテーブル排他モード」に，「テーブル排他なしモード」を指定している場合は，アクセス形態が「参照型」「追加・削除できない更新型」のテーブルには，テーブル排他を確保しません。

アクセス種別が「更新または追加」，「追加」の場合（flagsにTP1ServerFlags.DCTAM_WRTADD，またはTP1ServerFlags.DCTAM_ADDを設定）
更新排他でテーブル排他を確保します。

Writeメソッドが例外を返した場合，このメソッド内で確保した資源はすべて解放して，メソッドを呼び出す前の状態に戻します。ただし，このメソッドを呼び出す前に，参照排他で確保されていたTAMテーブルを更新または追加した場合は，更新排他となり参照排他には戻りません。

複数のレコードを設定して更新または追加する場合，それらのレコードのうち一つでもエラーが発生したら，このメソッドで設定した全レコードの処理をエラーとします。

更新または追加するデータ内のキー値の格納位置，およびキー領域長は，TAMテーブルファイルの初期作成時のtamcreコマンドに設定した値です。

TAMテーブルファイルの初期作成時，データ部にキー値を付けている（tamcreコマンドに-sオプションを指定していない）場合は，Writeメソッドに設定したキー値が更新または追加するデータ内になければ，例外応答します。また，データ部にキー値を付けていない（tamcreコマンドに-sオプションを指定）場合は，更新または追加するデータの内容をチェックしません。

宣言

【C#の場合】

public static void Write(
   int tableID,
   Hitachi.OpenTP1.Server.TamKeyTable[] key,
   int keyNo,
   byte[] data,
   int dataSize,
   int flags
);

【Visual Basicの場合】

Public Shared Sub Write( _
   ByVal tableID As Integer, _
   ByVal key() As Hitachi.OpenTP1.Server.TamKeyTable, _
   ByVal keyNo As Integer, _
   ByVal data() As Byte, _
   ByVal dataSize As Integer, _
   ByVal flags As Integer _
)

【J#の場合】

public static void Write(
   int tableID,
   Hitachi.OpenTP1.Server.TamKeyTable[] key,
   int keyNo,
   ubyte[] data,
   int dataSize,
   int flags
);

パラメタ

tableID

レコードを更新または追加するTAMテーブルの，テーブル記述子を設定します。テーブル記述子はTam.Openメソッドで返された値です。

key

更新または追加するレコードのキー値を持つ，構造体の配列を設定します。

keyNo

要求レコード数（keyで設定する構造体の数）を設定します。

data

更新または追加するデータを設定します。

dataSize

更新または追加するデータ長を設定します。更新または追加するデータ長は「レコード長×要求レコード数」以上にしてください。

flags

レコードのアクセス種別，資源が競合した場合の排他解除待ち種別を設定します。

{TP1ServerFlags.DCTAM_WRITE|
TP1ServerFlags.DCTAM_WRTADD|
TP1ServerFlags.DCTAM_ADD}
〔|{TP1ServerFlags.DCTAM_WAIT|
TP1ServerFlags.DCTAM_NOWAIT}〕

フラグ1
フラグ1には，レコードアクセス種別を指定します。
レコードのアクセス種別の設定は省略できません。次のアクセス種別のどちらかを指定してください。
TP1ServerFlags.DCTAM_WRITE … 更新します。
TP1ServerFlags.DCTAM_WRTADD … 更新または追加します。
TP1ServerFlags.DCTAM_ADD … 追加します。

フラグ2
フラグ2には，排他解除待ち種別を指定します。
次の排他解除待ち種別のどちらかを指定してください。このフラグの指定を省略した場合は，TP1ServerFlags.DCTAM_NOWAITが仮定されます。
TP1ServerFlags.DCTAM_WAIT … 排他解除待ちをします。
TP1ServerFlags.DCTAM_NOWAIT … 排他解除を待たないで，例外応答します。

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

引数名（OpenTP1提供関数呼び出し前の引数チェックでエラーになった場合にだけ出力）
例外が発生する原因となった引数名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCTAMER_PARAM_TID
tableIDに設定したテーブル記述子が間違っています。

DCTAMER_PARAM_KEY
keyに設定したキー値が間違っています。

DCTAMER_PARAM_KNO
keyNoに設定した値が間違っています。

DCTAMER_PARAM_DTA
dataに設定した値が間違っています。

DCTAMER_PARAM_DTS
dataSizeに設定したデータ長が短過ぎます。

DCTAMER_PARAM_FLG
flagsに設定した値が間違っています。

DCTAMER_NOTTAM
tableIDに設定したテーブルはTAMテーブルではありません。

DCTAMER_TAMEND
TAMサービスが終了中です。

DCTAMER_PROTO

TAMテーブルへアクセスする順序が間違っています。

UAPのユーザサービス定義に指定したトランザクション制御用ライブラリのリソースマネジャ登録が間違っています。または，UAPのユーザサービス定義にトランザクション制御用ライブラリを指定していません。

メソッドを呼び出したUAPのユーザサービス定義に，非トランザクション属性（atomic_updateオペランドにNを指定）を指定しています。

DCTAMER_RMTBL
TAMテーブルが削除されています。

DCTAMER_NOLOAD
TAMテーブルがロードされていません。

DCTAMER_NOOPEN
TAMテーブルがオープン状態ではありません。

DCTAMER_LOGHLD
TAMテーブルが論理閉塞状態です。

DCTAMER_OBSHLD
TAMテーブルが障害閉塞状態です。

DCTAMER_ACSATL
TAMサービス定義で設定したTAMテーブルのアクセス形態では実行できません。

DCTAMER_NOREC
指定されたレコードは存在しません。

DCTAMER_EXKEY
keyに設定したキー値がTAMテーブルに存在するので，レコードの追加はできません。

DCTAMER_LOCK
排他エラーが発生しました。flagsにTP1ServerFlags.DCTAM_WAITを設定した場合，ロックサービス定義で指定した待ち時間でタイムアウトが発生したため，資源を確保できませんでした。

DCTAMER_DLOCK
デッドロックが起こりました。

DCTAMER_TBLVR
UAPが，現在稼働しているTAMテーブルでは動作できないバージョンのTAMライブラリと結合されています。

DCTAMER_FLSVR
UAPが，現在稼働しているOpenTP1ファイルサービスでは動作できないバージョンのTAMライブラリと結合されています。

DCTAMER_NOAREA
TAMテーブルに空きレコードがありません。

DCTAMER_RECOBS
レコードが破壊されています。

DCTAMER_TRNNUM
TAMサービスで管理できるトランザクション数を超えました。

DCTAMER_OPENNUM
キャラクタ型スペシャルファイルのオープン数の制限値を超えました。

DCTAMER_ACCESSS
スペシャルファイルに対するアクセス権がありません。

DCTAMER_ACCESSF
TAMテーブルファイルに対するアクセス権がありません。

DCTAMER_MEMORY
メモリが不足しました。

DCTAMER_IO
入出力エラーが発生しました。

DCTAMER_TMERR
トランザクションサービスでエラーが発生しました。

DCTAMER_ACCESS
アクセスしようとしたTAMファイルは，セキュリティ機能で保護されています。Writeメソッドを呼び出したUAPには，アクセス権限がありません。

TamKeyTable構造体 【TP1/Server Base】

TamKeyTable構造体の概要

名前空間

Hitachi.OpenTP1.Server

継承関係

System.Object
 +- System.ValueType
   +- Hitachi.OpenTP1.Server.TamKeyTable

説明

TamKeyTable構造体は，レコードのキー値を格納します。

KeyNameプロパティ，KeyName2プロパティのどちらでもキー値を設定できますが，設定しない方のプロパティをnull（Visual Basicの場合はNothing）にしてください。両方にキー値を設定した場合は，KeyNameプロパティのキー値を有効なキー値とします。

TamKeyTable構造体配列にした場合，各要素のプロパティはTamKeyTable構造体配列の先頭のTamKeyTable構造体のプロパティと同一の型のプロパティを使用してください。

プロパティの一覧

名称 | 説明
KeyName | string型でキー値を設定します。
KeyName2 | byte配列型でキー値を設定します。

プロパティの詳細

●KeyName

説明

string型でキー値を設定します。

宣言

【C#の場合】

public string KeyName {get; set;}

【Visual Basicの場合】

Public Property KeyName As String

【J#の場合】

public System.String get_KeyName();
public void set_KeyName(System.String);

例外

なし

注意事項

KeyNameプロパティに設定した文字列はANSI文字列（マルチバイト文字列）に変換されます。変換後の文字列の長さがtamcreコマンドの-lオプションで設定したキー領域長と一致するようにしてください。変換後の文字列の長さがキー領域長より短い場合は，変換後の文字列の後ろに不正な値が付加され，不正な文字列になります。変換後の文字列の長さがキー領域長より長い場合は，キー値として有効な文字列はキー領域長分になります。

●KeyName2

説明

byte配列型でキー値を設定します。

宣言

【C#の場合】

public byte[] KeyName2 {get; set;}

【Visual Basicの場合】

Public Property KeyName2() As Byte

【J#の場合】

public ubyte[] get_KeyName2();
public void set_KeyName2(ubyte[]);

例外

なし

注意事項

KeyName2プロパティに設定したバイト配列の長さがtamcreコマンドの-lオプションで設定したキー領域長と一致するようにしてください。バイト配列の長さがキー領域長より短い場合は，設定したバイナリデータの後ろに不正な値が付加され，不正なバイナリデータになります。バイト配列の長さがキー領域長より長い場合は，キー値として有効なバイナリデータはキー領域長分になります。

KeyName2プロパティを使用する場合は，TamKeyTable構造体配列で指定したすべてのKeyName2プロパティに値を指定してください。null（Visual Basicの場合はNothing）または長さが0のバイト配列がある場合は，例外TP1Error.DCTAMER_PARAM_KEYが返ります。

KeyName2プロパティを使用する場合は，TamKeyTable構造体配列で指定したすべてのKeyName2プロパティの長さの総和が2147483647バイト以下になるようにしてください。2147483647バイトより長い場合は，例外TP1Error.DCTAMER_PARAM_KEYが返ります。

TamStatusTable構造体 【TP1/Server Base】

TamStatusTable構造体の概要

名前空間

Hitachi.OpenTP1.Server

継承関係

System.Object
 +- System.ValueType
   +- Hitachi.OpenTP1.Server.TamStatusTable

説明

TamStatusTable構造体は，TAMテーブルの情報を格納します。

TamStatusTable構造体は，TP1/Server BaseのUAPでだけ使えます。TP1/LiNKのUAPでは，TamStatusTable構造体は使えません。

プロパティの一覧

名称 | 説明
AccessType | TAMテーブルのアクセス形態が返されます。
FileName | TAMファイル名が返されます。
IndexType | TAMテーブルのインデクス種別が返されます。
KeyLength | TAMテーブルのキー長が返されます。
KeyPosition | TAMテーブルのデータ内のキー開始位置が返されます。
LoadType | TAMテーブルのローディング契機が返されます。
RecordLength | TAMテーブルのレコード長が返されます。
RecordMaxNumber | TAMテーブルの最大レコード数が返されます。
TableSecurity | TAMサービス定義で指定したTAMテーブルのセキュリティ属性が返されます。
TableStatus | TAMテーブルの状態が返されます。
UseRecordNumber | TAMテーブルで現在使っているレコードの数が返されます。

プロパティの詳細

●AccessType

説明

TAMテーブルのアクセス形態が，次に示す値のどれかで返されます。

TP1ServerValues.DCTAM_STS_READ
参照型であることを示します。

TP1ServerValues.DCTAM_STS_REWRITE
追加・削除できない更新型であることを示します。

TP1ServerValues.DCTAM_STS_WRITE
追加・削除できる更新型であることを示します。

TP1ServerValues.DCTAM_STS_RECLCK
テーブル排他を確保しない，追加・削除できる更新型であることを示します。

宣言

【C#の場合】

public byte AccessType {get;}

【Visual Basicの場合】

Public Property AccessType As Byte

【J#の場合】

public byte get_AccessType();

例外

なし

●FileName

説明

TAMファイル名が返されます。

宣言

【C#の場合】

public string FileName {get;}

【Visual Basicの場合】

Public Property FileName As String

【J#の場合】

public System.String get_FileName();

例外

なし

●IndexType

説明

TAMテーブルのインデクス種別が，次に示す値のどちらかで返されます。

TP1ServerValues.DCTAM_STS_HASH
ハッシュ形式であることを示します。

TP1ServerValues.DCTAM_STS_TREE
ツリー形式であることを示します。

宣言

【C#の場合】

public byte IndexType {get;}

【Visual Basicの場合】

Public Property IndexType As Byte

【J#の場合】

public byte get_IndexType();

例外

なし

●KeyLength

説明

TAMテーブルのキー長が返されます。

宣言

【C#の場合】

public int KeyLength {get;}

【Visual Basicの場合】

Public Property KeyLength As Integer

【J#の場合】

public int get_KeyLength();

例外

なし

●KeyPosition

説明

TAMテーブルのデータ内のキー開始位置が返されます。

宣言

【C#の場合】

public int KeyPosition {get;}

【Visual Basicの場合】

Public Property KeyPosition As Integer

【J#の場合】

public int get_KeyPosition();

例外

なし

●LoadType

説明

TAMテーブルのローディング契機が，次に示す値のどれかで返されます。

TP1ServerValues.DCTAM_STS_START
TAMサービスの開始時であることを示します。

TP1ServerValues.DCTAM_STS_LIB
Tam.OpenメソッドでTAMテーブルをオープンしたときであることを示します。

TP1ServerValues.DCTAM_STS_CMD
tamloadコマンドを実行したときであることを示します。

宣言

【C#の場合】

public byte LoadType {get;}

【Visual Basicの場合】

Public Property LoadType As Byte

【J#の場合】

public byte get_LoadType();

例外

なし

●RecordLength

説明

TAMテーブルのレコード長が返されます。

宣言

【C#の場合】

public int RecordLength {get;}

【Visual Basicの場合】

Public Property RecordLength As Integer

【J#の場合】

public int get_RecordLength();

例外

なし

●RecordMaxNumber

説明

TAMテーブルの最大レコード数が返されます。

宣言

【C#の場合】

public int RecordMaxNumber {get;}

【Visual Basicの場合】

Public Property RecordMaxNumber As Integer

【J#の場合】

public int get_RecordMaxNumber();

例外

なし

●TableSecurity

説明

TAMサービス定義で指定したTAMテーブルのセキュリティ属性が，次に示す値のどちらかで返されます。

TP1ServerValues.DCTAM_STS_NOSEC
セキュリティの指定がないことを示します。

TP1ServerValues.DCTAM_STS_SEC
セキュリティの指定があることを示します。

宣言

【C#の場合】

public int TableSecurity {get;}

【Visual Basicの場合】

Public Property TableSecurity As Integer

【J#の場合】

public int get_TableSecurity();

例外

なし

●TableStatus

説明

TAMテーブルの状態が，次に示す値のどれかで返されます。

TP1ServerValues.DCTAM_STS_OPN
オープン状態であることを示します。

TP1ServerValues.DCTAM_STS_CLS
クローズ状態であることを示します。

TP1ServerValues.DCTAM_STS_LHLD
論理閉塞状態であることを示します。

TP1ServerValues.DCTAM_STS_OHLD
障害閉塞状態であることを示します。

宣言

【C#の場合】

public int TableStatus {get;}

【Visual Basicの場合】

Public Property TableStatus As Integer

【J#の場合】

public int get_TableStatus();

例外

なし

●UseRecordNumber

説明

TAMテーブルで現在使っているレコードの数が返されます。ただし，Tam.GetStatusメソッドを呼び出したあとでレコードの追加や削除があった場合は，値を保証しません。

宣言

【C#の場合】

public int UseRecordNumber {get;}

【Visual Basicの場合】

Public Property UseRecordNumber As Integer

【J#の場合】

public int get_UseRecordNumber();

例外

なし

TP1Error

TP1Errorの概要

名前空間

Hitachi.OpenTP1

継承関係

System.Object
 +- Hitachi.OpenTP1.TP1Error

説明

TP1Errorクラスは，クラスライブラリの各メソッドで返されるエラーや例外に設定されるエラーの値を定義したクラスです。

フィールドの一覧

名称
説明

DCADMER_COMM
プロセス間の通信エラーが発生しました。

DCADMER_DEF
マルチノード構成定義に指定した値に誤りがあります。

DCADMER_MEMORY
メモリが不足しました。

DCADMER_MEMORY_ERR
標準エラー出力のデータが，領域に入り切りませんでした。

DCADMER_MEMORY_OUT
標準出力のデータが，領域に入り切りませんでした。

DCADMER_MEMORY_OUTERR
標準出力のデータと標準エラー出力のデータの両方が，領域に入り切りませんでした。

DCADMER_MULTI_DEF
システム共通定義のmulti_node_optionオペランドにNを指定しています。
または，システムにTP1/Multiが組み込まれていません。

DCADMER_NODE_NOT_EXIST
ノード識別子に該当するOpenTP1ノードはありません。

DCADMER_NO_MORE_ENTRY
OpenTP1ノードは，これ以上ありません。

DCADMER_PARAM
引数に設定した値が間違っています。

DCADMER_PROTO
プロトコル不正です。

DCADMER_REMOTE
指定したOpenTP1ノードではマルチノード機能は使用できません。

DCADMER_STATNOTZERO
標準出力および標準エラー出力のデータを領域に格納しました。

DCADMER_STS_IO
ステータス情報の入出力エラーが発生しました。

DCADMER_SUBAREA_NOT_EXIST
メソッドのパラメタに設定した名称に該当するマルチノードサブエリアはありません。

DCADMER_SWAP
系切り替えが起こっているため，ユーザサーバの状態を取得できません。

DCADMER_SYSTEMCALL
システムコール（close，pipe，dup，またはread）の呼び出しに失敗しました。

DCJNLER_LONG
ユーザジャーナルの長さに，設定できる範囲以上の値を設定しています。

DCJNLER_MODE
PutUJメソッドを，トランザクションでないUAPの処理から呼び出しています。このフィールドは，下位互換のためのフィールドです。実際にエラーが発生することはありません。

DCJNLER_PARAM
パラメタの形式が間違っています。

DCJNLER_PROTO
UAPを開始する準備ができていません。

DCJNLER_SHORT
ユーザジャーナルの長さに，0以下のデータ長を設定しています。

DCLCKER_DLOCK
デッドロックが起こりました。

DCLCKER_MEMORY
排他制御用のテーブルが不足しています。

DCLCKER_NOTHING
このメソッドを呼び出したトランザクションでは，資源を確保していません。

DCLCKER_OUTOFTRN
トランザクション処理でないUAPから指定しています。

DCLCKER_PARAM
引数に設定した値が間違っています。

DCLCKER_TIMOUT
OpenTP1のロックサービス定義で指定した待ち時間でタイムアウトが発生したため，資源を確保できませんでした。

DCLCKER_VERSION
OpenTP1のライブラリとロックサービスのバージョンが一致していません。

DCLCKER_WAIT
ほかのUAPが，nameに名称を設定した資源を使っています。

DCLOGER_COMM
通信障害が発生しました。

DCLOGER_DEFFILE
システムの環境設定に誤りがあります。

DCLOGER_HEADER
ログサービスがメッセージログに付ける情報を取得したときに，障害が発生しました。

DCLOGER_MEMORY
メモリが不足しました。

DCLOGER_NOT_UP
ログサービスが起動していません。

DCLOGER_PARAM_ARGS
引数に設定した値が間違っています。

DCLOGER_PROTO
プロトコル不正です。

DCLOGER_TIMEOUT
メソッドのパラメタに設定した時間を超えましたが，メッセージログが通知されません。

DCMCFER_INVALID_ARGS
引数に設定した値が間違っています。

DCMCFER_PROTO
プロトコル不正です。

DCMCFRTN_71002
メッセージキューへの出力処理中に障害が発生しました。
メッセージキューが閉塞されています。
メッセージキューが割り当てられていません。
セグメント長に32000バイトを超える値を設定しています。
MCFが終了処理中のため，メッセージの送信を受け付けられません。

DCMCFRTN_71003
メッセージキューが満杯です。

DCMCFRTN_71004
メッセージを格納するバッファをメモリ上に確保できませんでした。

DCMCFRTN_71108
メッセージを送信しようとしましたが，送信先の管理テーブルが確保できませんでした。
プロセスのローカルメモリが不足しています。

DCMCFRTN_72000
トランザクションでないSPP.NETの処理から，Sendメソッドを呼び出しています。

DCMCFRTN_72001
SendメソッドまたはSendReceiveメソッドを呼び出せない論理端末を設定しています。
terminalNameに設定した論理端末名称が間違っています。

DCMCFRTN_72012
MCFバッファグループ定義のバッファ長が不足しました。

DCMCFRTN_72013
受信領域の長さを超えるセグメントを受信しました。
受信領域の長さを超えた部分は切り捨てられました。

DCMCFRTN_72016
actionに設定したメッセージ種別（TP1ServerFlags.DCMCFNORMまたはTP1ServerFlags.DCMCFPRIO）の値が間違っています。
actionに設定した値が間違っています。
引数に設定した値が間違っています。

DCMCFRTN_72017
actionに設定した出力通番の要否（TP1ServerFlags.DCMCFSEQまたはTP1ServerFlags.DCMCFNSEQ）の値が間違っています。

DCMCFRTN_72026
Sendメソッドのactionに設定したセグメント種別（TP1ServerFlags.DCMCFEMI）の値が間違っています。または，SendReceiveメソッドのactionに設定した値が間違っています。
引数に設定した値が間違っています。

DCMCFRTN_72036
セグメントを受信する領域の長さが不足しています。バッファ形式1の場合は9バイト以上，バッファ形式2の場合は5バイト以上の領域を確保してください。

DCMCFRTN_72041
送信するメッセージの内容がありません。
Sendメソッドで長さが0バイトのセグメントを送信しています。または，単一セグメントを送信するSendReceiveメソッドで，長さが0バイトのセグメントを送信しています。

DCMCFRTN_72073
非同期メッセージを送信処理中です。

DCMCFRTN_73001
出力先の論理端末で障害が発生しました。

DCMCFRTN_73002
MCF通信サービスで障害が発生しました。

DCMCFRTN_73003
MCFバッファグループ定義のバッファ長が不足しました。

DCMCFRTN_73005
watchTimeに設定した時間が経過しましたが，論理端末からの応答がありません。

DCMCFRTN_73010
メッセージの読み込み時に障害が発生しました。
メッセージの編集エラーが発生しました。

DCMCFRTN_73015
出力先の論理端末は，ほかのUAPで仕掛り中です。

DCMCFRTN_73018
watchTimeに設定した値が間違っています。

DCMCFRTN_73019
メッセージ送信完了監視タイマのタイムアウトが発生しました。

DCMCFRTN_73020
出力先の論理端末は停止しています。

DCNJS2ER_INTERNAL
マーシャリング処理で内部エラーが発生しました。

DCNJS2ER_INVALID_ARGS
カスタムレコードのメンバに不正な値が指定されました。

DCNJS2ER_INVALID_DATA
マーシャリング処理で不正なデータを検出しました。

DCNJS2ER_XML_ANALYSIS_ERR
XMLドキュメントの解析処理でエラーが発生しました。

DCNJSER_SYSTEM
内部エラーが発生しました。

DCNJSER_XALIB_INVALID
トランザクション制御用ライブラリが不正です。

DCNJSER_XALIB_LOAD
トランザクション制御用ライブラリが見つかりません。

DCPRFER_PARAM
引数に指定した値に誤りがあります。

DCRAPER_ALREADY_CONNECT
すでにrapリスナーとのコネクションは確立しています。

DCRAPER_MAX_CONNECTION
一つのプロセスからRapクラスのConnectメソッドを呼び出せる上限値を超えました。

DCRAPER_MAX_CONNECTION_SV
rapリスナーの管理するrapクライアントとのコネクション要求受け付け可能最大数を超えました。

DCRAPER_NETDOWN
rapリスナーとの通信でネットワーク障害が発生しました。

DCRAPER_NOCONTINUE
続行できない障害が発生しました。

DCRAPER_NOHOSTNAME
ホスト名称が解決できません。

DCRAPER_NOMEMORY
メモリ不足が発生しました。

DCRAPER_NOMEMORY_SV
rapリスナーまたはrapサーバでメモリ不足が発生しました。

DCRAPER_NOSERVICE
rapリスナーは開始処理中，または停止処理中です。

DCRAPER_NOSOCKET
ソケット不足が発生しました。

DCRAPER_PANIC_SV
rapリスナーでシステム障害が発生しました。

DCRAPER_PARAM
引数が間違っています。

DCRAPER_PROTO
プロトコル不正です。

DCRAPER_SHUTDOWN
rapリスナーは停止中です。

DCRAPER_SYSCALL
システムコールで予期しないエラーが発生しました。

DCRAPER_TIMEDOUT
rapリスナーとの通信でタイムアウトが発生しました。

DCRAPER_TIMEOUT_SV
rapリスナーサービス定義に指定したメッセージ送受信最大監視時間内にコネクションが確立できませんでした。

DCRAPER_UNKNOWN_NODE
接続されていないネットワーク上のrapリスナーに対してコネクションを確立しようとしています。

DCRPCER_ALL_RECEIVED
非同期応答型RPCで要求したサービスの処理結果は，すべて受信しました。

DCRPCER_FATAL
初期化に失敗しました。

DCRPCER_INVALID_ARGS
引数に設定した値が間違っています。

DCRPCER_INVALID_DES
設定した記述子は存在しません。

DCRPCER_INVALID_REPLY
サービスメソッドまたはサービス関数がOpenTP1に返した応答の長さが定義の範囲外です。

DCRPCER_MESSAGE_TOO_BIG
設定した電文長が，最大値を超えています。

DCRPCER_NET_DOWN
ネットワークに障害が発生しました。

DCRPCER_NOT_TRN_EXTEND
トランザクション処理の連鎖RPCを使ったあとで，flagsパラメタにDCRPC_TPNOTRANを設定してサービスを要求しています。

DCRPCER_NO_BUFS
メモリが不足しました。または，サーバのメッセージ格納領域に十分な空きがないため，サービス要求を受け付けられませんでした。

DCRPCER_NO_BUFS_AT_SERVER
設定したサービスで，メモリが不足しました。

DCRPCER_NO_BUFS_RB
メモリが不足しました。このリターン値が返った場合は，トランザクションブランチをコミットできません。

DCRPCER_NO_PORT
サービスのポート番号が見つかりません。

DCRPCER_NO_SUCH_DOMAIN
ドメイン修飾をしたサービスグループ名の，ドメイン名が間違っています。

DCRPCER_NO_SUCH_SERVICE
設定したサービス名は，定義されていません。

DCRPCER_NO_SUCH_SERVICE_GROUP
設定したサービスグループは，定義されていません。

DCRPCER_OLTF_INITIALIZING
サービスを要求されたノードにあるOpenTP1は，開始処理中です。

DCRPCER_OLTF_NOT_UP
設定したサービスのUAPプロセスが，稼働していません。

DCRPCER_PROTO
プロトコル不正です。

DCRPCER_REPLY_TOO_BIG
返ってきた応答が，クライアントUAPで用意した領域に入り切りません。

DCRPCER_REPLY_TOO_BIG_RB
返ってきた応答が，クライアントUAPで用意した領域に入り切りません。このリターン値が返った場合は，トランザクションブランチをコミットできません。

DCRPCER_RETRY_COUNT_OVER
指定したサービスリトライ回数最大値を超えています。

DCRPCER_SECCHK
サービスを要求されたSPP.NETまたはSPPは，OpenTP1のセキュリティ機能で保護されているかSPP.NETまたはSPPへのアクセス権がありません。

DCRPCER_SEC_INIT
セキュリティ機能を使ったOpenTP1が，セキュリティ環境の初期化処理でエラーになりました。

DCRPCER_SERVER_BUSY
ソケット受信型サーバが，サービス要求を受け取れません。

DCRPCER_SERVICE_CLOSED
設定したサービス名のサービスがあるサービスグループは，閉塞しています。

DCRPCER_SERVICE_NOT_UP
指定したサービスは実行していません。

DCRPCER_SERVICE_TERMINATED
サービスを要求されたSPP.NETまたはSPPが，処理を完了する前に異常終了しました。

DCRPCER_SERVICE_TERMINATING
設定したサービスは，終了処理中です。

DCRPCER_STANDBY_END
待機系のユーザサーバが，待機の終了を要求されました。または，系切り替え時にすでに終了していたため，待機の終了を要求されました。

DCRPCER_SYSERR
システムエラーが発生しました。

DCRPCER_SYSERR_AT_SERVER
設定したサービスで，システムエラーが発生しました。

DCRPCER_SYSERR_AT_SERVER_RB
設定したサービスで，システムエラーが発生しました。このリターン値が返った場合は，トランザクションブランチをコミットできません。

DCRPCER_SYSERR_RB
システムエラーが発生しました。このリターン値が返った場合は，トランザクションブランチをコミットできません。

DCRPCER_TESTMODE
テストモードのUAPからテストモードでないSPPへ，またはテストモードでないUAPからテストモードのSPPへサービスを要求しています。

DCRPCER_TIMED_OUT
処理を完了する前にタイムアウトして異常終了しました。

DCRPCER_TRNCHK
複数のSPP.NETまたはSPPのトランザクション属性が一致していません。

DCRPCER_TRNCHK_EXTEND
同時に起動できるトランザクションブランチの数を超えたため，トランザクションブランチを開始できません。

DCRTSER_ITEM_OVER
取得項目の数がリアルタイム統計情報サービス定義のrts_item_maxオペランドの指定値を超えるため，情報を取得できません。

DCRTSER_ITEM_OVER_SRV
サーバ単位の取得項目の数が，リアルタイム統計情報サービス定義のrts_item_maxオペランドの指定値を超えるため，情報を取得できません。このエラーコードが返った場合，サービス単位またはサービス以外の処理の統計情報は取得されています。

DCRTSER_ITEM_OVER_SVC
サービス単位またはサービス以外の処理での取得項目の数が，リアルタイム統計情報サービス定義のrts_item_maxオペランドの指定値を超えるため，情報を取得できません。このエラーコードが返った場合，サーバ単位の統計情報は取得されています。

DCRTSER_NOENTRY
RtsクラスのPutUTraceメソッドを呼び出したサーバ，およびサービスがリアルタイム統計情報の取得対象に登録されていません。

DCRTSER_NOMEM
プロセスメモリが不足したため，処理を実行できません。

DCRTSER_PARAM
引数に設定した値に誤りがあります。

DCRTSER_PROTO
RpcクラスのOpenメソッドを呼び出していません。
すでに実行時間の計測を開始している項目IDをeventIDに設定して，flagsにTP1ServerFlags.DCRTS_STARTを設定したPutUTraceメソッドを呼び出しました。
実行時間の計測を開始していない項目IDをeventIDに設定して，flagsにTP1ServerFlags.DCRTS_ENDを設定したPutUTraceメソッドを呼び出しました。

DCRTSER_RTS_NOT_START
リアルタイム統計情報サービスが開始していません。

DCRTSER_VERSION
UAPが，現在稼働しているリアルタイム統計情報サービスでは稼働できないバージョンのライブラリと結合しています。

DCTAMER_ACCESS
アクセスしようとしたTAMファイルは，セキュリティ機能で保護されています。メソッドを呼び出したUAPには，アクセス権限がありません。

DCTAMER_ACCESSF
TAMファイルに対するアクセス権がありません。

DCTAMER_ACCESSS
スペシャルファイルに対するアクセス権がありません。

DCTAMER_ACSATL
TAMサービス定義で指定したTAMテーブルのアクセス形態では実行できません。

DCTAMER_DLOCK
デッドロックが起こりました。

DCTAMER_EXKEY
keyに設定したキー値がTAMテーブルに存在するので，レコードの追加はできません。

DCTAMER_EXREWRT
tableIDに設定したテーブル記述子は，Tam.Rewriteメソッドで更新済みです。

DCTAMER_EXWRITE
tableIDに設定したテーブル記述子はTam.Writeメソッドで更新または追加したレコードです。

DCTAMER_FLSVR
UAPが，現在稼働しているOpenTP1ファイルサービスでは動作できないバージョンのTAMライブラリと結合されています。

DCTAMER_IDXTYP
TAMテーブルファイルの初期作成で設定したTAMテーブルのインデクス種別では実行できません。

DCTAMER_IO
入出力エラーが発生しました。

DCTAMER_LOCK
排他エラーが発生しました。flagsにTP1ServerFlags.DCTAM_WAITを設定した場合，ロックサービス定義で指定した待ち時間でタイムアウトが発生したため，資源を確保できませんでした。

DCTAMER_LOGHLD
TAMテーブルが論理閉塞状態です。

DCTAMER_MEMORY
メモリが不足しました。

DCTAMER_NO_ACL
アクセスしようとしたTAMファイルは，セキュリティ機能で保護されています。該当するファイルに対するACLがありません。

DCTAMER_NOAREA
TAMテーブルに空きレコードがありません。

DCTAMER_NOLOAD
TAMテーブルがロードされていません。

DCTAMER_NOOPEN
TAMテーブルがオープン状態ではありません。

DCTAMER_NOREC
指定されたレコードは存在しません。

DCTAMER_NOTTAM
tableIDに設定したテーブルはTAMテーブルではありません。

DCTAMER_OBSHLD
TAMテーブルが障害閉塞状態です。

DCTAMER_OPENED
TAMテーブルがオープン済みです。

DCTAMER_OPENNUM
キャラクタ型スペシャルファイルのオープン数の制限値を超えました。

DCTAMER_PARAM_BFA
bufferに設定した値が間違っています。

DCTAMER_PARAM_BFS
bufferSizeに設定したバッファ長が短過ぎます。

DCTAMER_PARAM_DTA
dataに設定した値が間違っています。

DCTAMER_PARAM_DTS
dataSizeに設定したデータ長が短過ぎます。

DCTAMER_PARAM_FLG
flagsに設定した値が間違っています。

DCTAMER_PARAM_KEY
keyに設定しキー値が間違っています。

DCTAMER_PARAM_KNO
keyNoに設定した値が間違っています。

DCTAMER_PARAM_TBL
tableNameに設定した値が間違っています。

DCTAMER_PARAM_TID
tableIDに設定したテーブル記述子が間違っています。

DCTAMER_PROTO

TAMテーブルへアクセスする順序が間違っています。

UAPのユーザサービス定義に指定したトランザクション制御用ライブラリのリソースマネジャ登録が間違っています。または，UAPのユーザサービス定義にトランザクション制御用ライブラリを指定していません。

メソッドを呼び出したUAPのユーザサービス定義に，非トランザクション属性（atomic_updateオペランドにNを指定）を指定しています。

DCTAMER_RECOBS
レコードが破壊されています。

DCTAMER_RMTBL
TAMテーブルが削除されています。

DCTAMER_SEQENCE
Tam.Readメソッドを呼び出していません。

DCTAMER_TAMEND
TAMサービスが終了中です。

DCTAMER_TAMVR
UAPが，現在稼働しているTAMサービスでは動作できないバージョンのTAMライブラリと結合されています。

DCTAMER_TBLVR
UAPが，現在稼働しているTAMテーブルでは動作できないバージョンのTAMライブラリと結合されています。

DCTAMER_TMERR
トランザクションサービスでエラーが発生しました。

DCTAMER_TRNNUM
TAMサービスで管理できるトランザクション数を超えました。

DCTAMER_TRNOPN
Tam.Openメソッドはトランザクション外で呼び出しています。

DCTAMER_UNDEF
TAMテーブルが定義されていません。

DCTRNER_HAZARD
グローバルトランザクションのトランザクションブランチがヒューリスティックに完了しました。
しかし，障害のため，ヒューリスティックに完了したトランザクションブランチの同期点の結果がわかりません。

DCTRNER_HAZARD_NO_BEGIN
新しいトランザクションは開始できませんでした。
リターン値が返ったあと，このプロセスはトランザクション下にはありません。

DCTRNER_HEURISTIC
ヒューリスティック決定のため，あるトランザクションブランチはコミットし，あるトランザクションブランチはロールバックしました。

DCTRNER_HEURISTIC_NO_BEGIN
新しいトランザクションは開始できませんでした。
リターン値が返ったあと，プロセスはトランザクション下にはありません。

DCTRNER_NO_BEGIN
新しいトランザクションは開始できません。

DCTRNER_PROTO
プロトコル不正です。

DCTRNER_RM
リソースマネジャでエラーが発生しました。トランザクションは開始できませんでした。

DCTRNER_ROLLBACK
現在のトランザクションは，コミットできないでロールバックしました。

DCTRNER_ROLLBACK_NO_BEGIN
コミットしようとしたトランザクションは，コミットできないでロールバックしました。

DCTRNER_TM
トランザクションサービスでエラーが発生しました。

フィールドの詳細

●DCADMER_COMM

説明

プロセス間の通信エラーが発生しました。

宣言

【C#の場合】

public const int DCADMER_COMM

【Visual Basicの場合】

Public Const DCADMER_COMM As Integer

【J#の場合】

public static final int DCADMER_COMM

●DCADMER_DEF

説明

マルチノード構成定義に指定した値に誤りがあります。

宣言

【C#の場合】

public const int DCADMER_DEF

【Visual Basicの場合】

Public Const DCADMER_DEF As Integer

【J#の場合】

public static final int DCADMER_DEF

●DCADMER_MEMORY

説明

メモリが不足しました。

宣言

【C#の場合】

public const int DCADMER_MEMORY

【Visual Basicの場合】

Public Const DCADMER_MEMORY As Integer

【J#の場合】

public static final int DCADMER_MEMORY

●DCADMER_MEMORY_ERR

説明

標準エラー出力のデータが，領域に入り切りませんでした。

宣言

【C#の場合】

public const int DCADMER_MEMORY_ERR

【Visual Basicの場合】

Public Const DCADMER_MEMORY_ERR As Integer

【J#の場合】

public static final int DCADMER_MEMORY_ERR

●DCADMER_MEMORY_OUT

説明

標準出力のデータが，領域に入り切りませんでした。

宣言

【C#の場合】

public const int DCADMER_MEMORY_OUT

【Visual Basicの場合】

Public Const DCADMER_MEMORY_OUT As Integer

【J#の場合】

public static final int DCADMER_MEMORY_OUT

●DCADMER_MEMORY_OUTERR

説明

標準出力のデータと標準エラー出力のデータの両方が，領域に入り切りませんでした。

宣言

【C#の場合】

public const int DCADMER_MEMORY_OUTERR

【Visual Basicの場合】

Public Const DCADMER_MEMORY_OUTERR As Integer

【J#の場合】

public static final int DCADMER_MEMORY_OUTERR

●DCADMER_MULTI_DEF

説明

システム共通定義のmulti_node_optionオペランドにNを指定しています。

または，システムにTP1/Multiが組み込まれていません。

宣言

【C#の場合】

public const int DCADMER_MULTI_DEF

【Visual Basicの場合】

Public Const DCADMER_MULTI_DEF As Integer

【J#の場合】

public static final int DCADMER_MULTI_DEF

●DCADMER_NODE_NOT_EXIST

説明

ノード識別子に該当するOpenTP1ノードはありません。

宣言

【C#の場合】

public const int DCADMER_NODE_NOT_EXIST

【Visual Basicの場合】

Public Const DCADMER_NODE_NOT_EXIST As Integer

【J#の場合】

public static final int DCADMER_NODE_NOT_EXIST

●DCADMER_NO_MORE_ENTRY

説明

OpenTP1ノードは，これ以上ありません。

宣言

【C#の場合】

public const int DCADMER_NO_MORE_ENTRY

【Visual Basicの場合】

Public Const DCADMER_NO_MORE_ENTRY As Integer

【J#の場合】

public static final int DCADMER_NO_MORE_ENTRY

●DCADMER_PARAM

説明

引数に設定した値が間違っています。

宣言

【C#の場合】

public const int DCADMER_PARAM

【Visual Basicの場合】

Public Const DCADMER_PARAM As Integer

【J#の場合】

public static final int DCADMER_PARAM

●DCADMER_PROTO

説明

プロトコル不正です。

宣言

【C#の場合】

public const int DCADMER_PROTO

【Visual Basicの場合】

Public Const DCADMER_PROTO As Integer

【J#の場合】

public static final int DCADMER_PROTO

●DCADMER_REMOTE

説明

指定したOpenTP1ノードではマルチノード機能は使用できません。

宣言

【C#の場合】

public const int DCADMER_REMOTE

【Visual Basicの場合】

Public Const DCADMER_REMOTE As Integer

【J#の場合】

public static final int DCADMER_REMOTE

●DCADMER_STATNOTZERO

説明

標準出力および標準エラー出力のデータを領域に格納しました。

宣言

【C#の場合】

public const int DCADMER_STATNOTZERO

【Visual Basicの場合】

Public Const DCADMER_STATNOTZERO As Integer

【J#の場合】

public static final int DCADMER_STATNOTZERO

●DCADMER_STS_IO

説明

ステータス情報の入出力エラーが発生しました。

宣言

【C#の場合】

public const int DCADMER_STS_IO

【Visual Basicの場合】

Public Const DCADMER_STS_IO As Integer

【J#の場合】

public static final int DCADMER_STS_IO

●DCADMER_SUBAREA_NOT_EXIST

説明

メソッドのパラメタに設定した名称に該当するマルチノードサブエリアはありません。

宣言

【C#の場合】

public const int DCADMER_SUBAREA_NOT_EXIST

【Visual Basicの場合】

Public Const DCADMER_SUBAREA_NOT_EXIST As Integer

【J#の場合】

public static final int DCADMER_SUBAREA_NOT_EXIST

●DCADMER_SWAP

説明

系切り替えが起こっているため，ユーザサーバの状態を取得できません。

宣言

【C#の場合】

public const int DCADMER_SWAP

【Visual Basicの場合】

Public Const DCADMER_SWAP As Integer

【J#の場合】

public static final int DCADMER_SWAP

●DCADMER_SYSTEMCALL

説明

システムコール（close，pipe，dup，またはread）の呼び出しに失敗しました。

宣言

【C#の場合】

public const int DCADMER_SYSTEMCALL

【Visual Basicの場合】

Public Const DCADMER_SYSTEMCALL As Integer

【J#の場合】

public static final int DCADMER_SYSTEMCALL

●DCJNLER_LONG

説明

ユーザジャーナルの長さに，設定できる範囲以上の値を設定しています。

宣言

【C#の場合】

public const int DCJNLER_LONG

【Visual Basicの場合】

Public Const DCJNLER_LONG As Integer

【J#の場合】

public static final int DCJNLER_LONG

●DCJNLER_MODE

説明

PutUJメソッドを，トランザクションでないUAPの処理から呼び出しています。このフィールドは，下位互換のためのフィールドです。実際にこのエラーが発生することはありません。

宣言

【C#の場合】

public const int DCJNLER_MODE

【Visual Basicの場合】

Public Const DCJNLER_MODE As Integer

【J#の場合】

public static final int DCJNLER_MODE

●DCJNLER_PARAM

説明

パラメタの形式が間違っています。

宣言

【C#の場合】

public const int DCJNLER_PARAM

【Visual Basicの場合】

Public Const DCJNLER_PARAM As Integer

【J#の場合】

public static final int DCJNLER_PARAM

●DCJNLER_PROTO

説明

UAPを開始する準備ができていません。

宣言

【C#の場合】

public const int DCJNLER_PROTO

【Visual Basicの場合】

Public Const DCJNLER_PROTO As Integer

【J#の場合】

public static final int DCJNLER_PROTO

●DCJNLER_SHORT

説明

ユーザジャーナルの長さに，0以下のデータ長を設定しています。

宣言

【C#の場合】

public const int DCJNLER_SHORT

【Visual Basicの場合】

Public Const DCJNLER_SHORT As Integer

【J#の場合】

public static final int DCJNLER_SHORT

●DCLCKER_DLOCK

説明

デッドロックが起こりました。

宣言

【C#の場合】

public const int DCLCKER_DLOCK

【Visual Basicの場合】

Public Const DCLCKER_DLOCK As Integer

【J#の場合】

public static final int DCLCKER_DLOCK

●DCLCKER_MEMORY

説明

排他制御用のテーブルが不足しています。

宣言

【C#の場合】

public const int DCLCKER_MEMORY

【Visual Basicの場合】

Public Const DCLCKER_MEMORY As Integer

【J#の場合】

public static final int DCLCKER_MEMORY

●DCLCKER_NOTHING

説明

このメソッドを呼び出したトランザクションでは，資源を確保していません。

宣言

【C#の場合】

public const int DCLCKER_NOTHING

【Visual Basicの場合】

Public Const DCLCKER_NOTHING As Integer

【J#の場合】

public static final int DCLCKER_NOTHING

●DCLCKER_OUTOFTRN

説明

トランザクション処理でないUAPから指定しています。

宣言

【C#の場合】

public const int DCLCKER_OUTOFTRN

【Visual Basicの場合】

Public Const DCLCKER_OUTOFTRN As Integer

【J#の場合】

public static final int DCLCKER_OUTOFTRN

●DCLCKER_PARAM

説明

引数に設定した値が間違っています。

宣言

【C#の場合】

public const int DCLCKER_PARAM

【Visual Basicの場合】

Public Const DCLCKER_PARAM As Integer

【J#の場合】

public static final int DCLCKER_PARAM

●DCLCKER_TIMOUT

説明

OpenTP1のロックサービス定義で指定した待ち時間でタイムアウトが発生したため，資源を確保できませんでした。

宣言

【C#の場合】

public const int DCLCKER_TIMOUT

【Visual Basicの場合】

Public Const DCLCKER_TIMOUT As Integer

【J#の場合】

public static final int DCLCKER_TIMOUT

●DCLCKER_VERSION

説明

OpenTP1のライブラリとロックサービスのバージョンが一致していません。

宣言

【C#の場合】

public const int DCLCKER_VERSION

【Visual Basicの場合】

Public Const DCLCKER_VERSION As Integer

【J#の場合】

public static final int DCLCKER_VERSION

●DCLCKER_WAIT

説明

ほかのUAPが，nameに名称を設定した資源を使っています。

宣言

【C#の場合】

public const int DCLCKER_WAIT

【Visual Basicの場合】

Public Const DCLCKER_WAIT As Integer

【J#の場合】

public static final int DCLCKER_WAIT

●DCLOGER_COMM

説明

通信障害が発生しました。

宣言

【C#の場合】

public const int DCLOGER_COMM

【Visual Basicの場合】

Public Const DCLOGER_COMM As Integer

【J#の場合】

public static final int DCLOGER_COMM

●DCLOGER_DEFFILE

説明

システムの環境設定に誤りがあります。

宣言

【C#の場合】

public const int DCLOGER_DEFFILE

【Visual Basicの場合】

Public Const DCLOGER_DEFFILE As Integer

【J#の場合】

public static final int DCLOGER_DEFFILE

●DCLOGER_HEADER

説明

ログサービスがメッセージログに付ける情報を取得したときに，障害が発生しました。

宣言

【C#の場合】

public const int DCLOGER_HEADER

【Visual Basicの場合】

Public Const DCLOGER_HEADER As Integer

【J#の場合】

public static final int DCLOGER_HEADER

●DCLOGER_MEMORY

説明

メモリが不足しました。

宣言

【C#の場合】

public const int DCLOGER_MEMORY

【Visual Basicの場合】

Public Const DCLOGER_MEMORY As Integer

【J#の場合】

public static final int DCLOGER_MEMORY

●DCLOGER_NOT_UP

説明

ログサービスが起動していません。

宣言

【C#の場合】

public const int DCLOGER_NOT_UP

【Visual Basicの場合】

Public Const DCLOGER_NOT_UP As Integer

【J#の場合】

public static final int DCLOGER_NOT_UP

●DCLOGER_PARAM_ARGS

説明

引数に設定した値が間違っています。

宣言

【C#の場合】

public const int DCLOGER_PARAM_ARGS

【Visual Basicの場合】

Public Const DCLOGER_PARAM_ARGS As Integer

【J#の場合】

public static final int DCLOGER_PARAM_ARGS

●DCLOGER_PROTO

説明

プロトコル不正です。

宣言

【C#の場合】

public const int DCLOGER_PROTO

【Visual Basicの場合】

Public Const DCLOGER_PROTO As Integer

【J#の場合】

public static final int DCLOGER_PROTO

●DCLOGER_TIMEOUT

説明

メソッドのパラメタに設定した時間を超えましたが，メッセージログが通知されません。

宣言

【C#の場合】

public const int DCLOGER_TIMEOUT

【Visual Basicの場合】

Public Const DCLOGER_TIMEOUT As Integer

【J#の場合】

public static final int DCLOGER_TIMEOUT

●DCMCFER_INVALID_ARGS

説明

引数に設定した値が間違っています。

宣言

【C#の場合】

public const int DCMCFER_INVALID_ARGS

【Visual Basicの場合】

Public Const DCMCFER_INVALID_ARGS As Integer

【J#の場合】

public static final int DCMCFER_INVALID_ARGS

●DCMCFER_PROTO

説明

プロトコル不正です。

宣言

【C#の場合】

public const int DCMCFER_PROTO

【Visual Basicの場合】

Public Const DCMCFER_PROTO As Integer

【J#の場合】

public static final int DCMCFER_PROTO

●DCMCFRTN_71002

説明

メッセージキューへの出力処理中に障害が発生しました。

メッセージキューが閉塞されています。

メッセージキューが割り当てられていません。

セグメント長に32000バイトを超える値を設定しています。

MCFが終了処理中のため，メッセージの送信を受け付けられません。

宣言

【C#の場合】

public const int DCMCFRTN_71002

【Visual Basicの場合】

Public Const DCMCFRTN_71002 As Integer

【J#の場合】

public static final int DCMCFRTN_71002

●DCMCFRTN_71003

説明

メッセージキューが満杯です。

宣言

【C#の場合】

public const int DCMCFRTN_71003

【Visual Basicの場合】

Public Const DCMCFRTN_71003 As Integer

【J#の場合】

public static final int DCMCFRTN_71003

●DCMCFRTN_71004

説明

メッセージを格納するバッファをメモリ上に確保できませんでした。

宣言

【C#の場合】

public const int DCMCFRTN_71004

【Visual Basicの場合】

Public Const DCMCFRTN_71004 As Integer

【J#の場合】

public static final int DCMCFRTN_71004

●DCMCFRTN_71108

説明

メッセージを送信しようとしましたが，送信先の管理テーブルが確保できませんでした。

プロセスのローカルメモリが不足しています。

宣言

【C#の場合】

public const int DCMCFRTN_71108

【Visual Basicの場合】

Public Const DCMCFRTN_71108 As Integer

【J#の場合】

public static final int DCMCFRTN_71108

●DCMCFRTN_72000

説明

トランザクションでないSPP.NETの処理から，Sendメソッドを呼び出しています。

宣言

【C#の場合】

public const int DCMCFRTN_72000

【Visual Basicの場合】

Public Const DCMCFRTN_72000 As Integer

【J#の場合】

public static final int DCMCFRTN_72000

●DCMCFRTN_72001

説明

SendメソッドまたはSendReceiveメソッドを呼び出せない論理端末を設定しています。

terminalNameに設定した論理端末名称が間違っています。

宣言

【C#の場合】

public const int DCMCFRTN_72001

【Visual Basicの場合】

Public Const DCMCFRTN_72001 As Integer

【J#の場合】

public static final int DCMCFRTN_72001

●DCMCFRTN_72012

説明

MCFバッファグループ定義のバッファ長が不足しました。

宣言

【C#の場合】

public const int DCMCFRTN_72012

【Visual Basicの場合】

Public Const DCMCFRTN_72012 As Integer

【J#の場合】

public static final int DCMCFRTN_72012

●DCMCFRTN_72013

説明

受信領域の長さを超えるセグメントを受信しました。

受信領域の長さを超えた部分は切り捨てられました。

宣言

【C#の場合】

public const int DCMCFRTN_72013

【Visual Basicの場合】

Public Const DCMCFRTN_72013 As Integer

【J#の場合】

public static final int DCMCFRTN_72013

●DCMCFRTN_72016

説明

actionに設定したメッセージ種別（TP1ServerFlags.DCMCFNORMまたはTP1ServerFlags.DCMCFPRIO）の値が間違っています。

actionに設定した値が間違っています。

引数に設定した値が間違っています。

宣言

【C#の場合】

public const int DCMCFRTN_72016

【Visual Basicの場合】

Public Const DCMCFRTN_72016 As Integer

【J#の場合】

public static final int DCMCFRTN_72016

●DCMCFRTN_72017

説明

actionに設定した出力通番の要否（TP1ServerFlags.DCMCFSEQまたはTP1ServerFlags.DCMCFNSEQ）の値が間違っています。

宣言

【C#の場合】

public const int DCMCFRTN_72017

【Visual Basicの場合】

Public Const DCMCFRTN_72017 As Integer

【J#の場合】

public static final int DCMCFRTN_72017

●DCMCFRTN_72026

説明

Sendメソッドのactionに設定したセグメント種別（TP1ServerFlags.DCMCFEMI）の値が間違っています。または，SendReceiveメソッドのactionに設定した値が間違っています。

引数に設定した値が間違っています。

宣言

【C#の場合】

public const int DCMCFRTN_72026

【Visual Basicの場合】

Public Const DCMCFRTN_72026 As Integer

【J#の場合】

public static final int DCMCFRTN_72026

●DCMCFRTN_72036

説明

セグメントを受信する領域の長さが不足しています。バッファ形式1の場合は9バイト以上，バッファ形式2の場合は5バイト以上の領域を確保してください。

宣言

【C#の場合】

public const int DCMCFRTN_72036

【Visual Basicの場合】

Public Const DCMCFRTN_72036 As Integer

【J#の場合】

public static final int DCMCFRTN_72036

●DCMCFRTN_72041

説明

送信するメッセージの内容がありません。

Sendメソッドで長さが0バイトのセグメントを送信しています。または，単一セグメントを送信するSendReceiveメソッドで，長さが0バイトのセグメントを送信しています。

宣言

【C#の場合】

public const int DCMCFRTN_72041

【Visual Basicの場合】

Public Const DCMCFRTN_72041 As Integer

【J#の場合】

public static final int DCMCFRTN_72041

●DCMCFRTN_72073

説明

非同期メッセージを送信処理中です。

宣言

【C#の場合】

public const int DCMCFRTN_72073

【Visual Basicの場合】

Public Const DCMCFRTN_72073 As Integer

【J#の場合】

public static final int DCMCFRTN_72073

●DCMCFRTN_73001

説明

出力先の論理端末で障害が発生しました。

宣言

【C#の場合】

public const int DCMCFRTN_73001

【Visual Basicの場合】

Public Const DCMCFRTN_73001 As Integer

【J#の場合】

public static final int DCMCFRTN_73001

●DCMCFRTN_73002

説明

MCF通信サービスで障害が発生しました。

宣言

【C#の場合】

public const int DCMCFRTN_73002

【Visual Basicの場合】

Public Const DCMCFRTN_73002 As Integer

【J#の場合】

public static final int DCMCFRTN_73002

●DCMCFRTN_73003

説明

MCFバッファグループ定義のバッファ長が不足しました。

宣言

【C#の場合】

public const int DCMCFRTN_73003

【Visual Basicの場合】

Public Const DCMCFRTN_73003 As Integer

【J#の場合】

public static final int DCMCFRTN_73003

●DCMCFRTN_73005

説明

watchTimeに設定した時間が経過しましたが，論理端末からの応答がありません。

宣言

【C#の場合】

public const int DCMCFRTN_73005

【Visual Basicの場合】

Public Const DCMCFRTN_73005 As Integer

【J#の場合】

public static final int DCMCFRTN_73005

●DCMCFRTN_73010

説明

メッセージの読み込み時に障害が発生しました。

メッセージの編集エラーが発生しました。

宣言

【C#の場合】

public const int DCMCFRTN_73010

【Visual Basicの場合】

Public Const DCMCFRTN_73010 As Integer

【J#の場合】

public static final int DCMCFRTN_73010

●DCMCFRTN_73015

説明

出力先の論理端末は，ほかのUAPで仕掛り中です。

宣言

【C#の場合】

public const int DCMCFRTN_73015

【Visual Basicの場合】

Public Const DCMCFRTN_73015 As Integer

【J#の場合】

public static final int DCMCFRTN_73015

●DCMCFRTN_73018

説明

watchTimeに設定した値が間違っています。

宣言

【C#の場合】

public const int DCMCFRTN_73018

【Visual Basicの場合】

Public Const DCMCFRTN_73018 As Integer

【J#の場合】

public static final int DCMCFRTN_73018

●DCMCFRTN_73019

説明

メッセージ送信完了監視タイマのタイムアウトが発生しました。

宣言

【C#の場合】

public const int DCMCFRTN_73019

【Visual Basicの場合】

Public Const DCMCFRTN_73019 As Integer

【J#の場合】

public static final int DCMCFRTN_73019

●DCMCFRTN_73020

説明

出力先の論理端末は停止しています。

宣言

【C#の場合】

public const int DCMCFRTN_73020

【Visual Basicの場合】

Public Const DCMCFRTN_73020 As Integer

【J#の場合】

public static final int DCMCFRTN_73020

●DCNJS2ER_INTERNAL

説明

マーシャリング処理で内部エラーが発生しました。

宣言

【C#の場合】

public const int DCNJS2ER_INTERNAL

【Visual Basicの場合】

Public Const DCNJS2ER_INTERNAL As Integer

【J#の場合】

public static final int DCNJS2ER_INTERNAL

●DCNJS2ER_INVALID_ARGS

説明

カスタムレコードのメンバに不正な値が指定されました。

宣言

【C#の場合】

public const int DCNJS2ER_INVALID_ARGS

【Visual Basicの場合】

Public Const DCNJS2ER_INVALID_ARGS As Integer

【J#の場合】

public static final int DCNJS2ER_INVALID_ARGS

●DCNJS2ER_INVALID_DATA

説明

マーシャリング処理で不正なデータを検出しました。

宣言

【C#の場合】

public const int DCNJS2ER_INVALID_DATA

【Visual Basicの場合】

Public Const DCNJS2ER_INVALID_DATA As Integer

【J#の場合】

public static final int DCNJS2ER_INVALID_DATA

●DCNJS2ER_XML_ANALYSIS_ERR

説明

XMLドキュメントの解析処理でエラーが発生しました。

宣言

【C#の場合】

public const int DCNJS2ER_XML_ANALYSIS_ERR

【Visual Basicの場合】

Public Const DCNJS2ER_XML_ANALYSIS_ERR As Integer

【J#の場合】

public static final int DCNJS2ER_XML_ANALYSIS_ERR

●DCNJSER_SYSTEM

説明

内部エラーが発生しました。

宣言

【C#の場合】

public const int DCNJSER_SYSTEM

【Visual Basicの場合】

Public Const DCNJSER_SYSTEM As Integer

【J#の場合】

public static final int DCNJSER_SYSTEM

●DCNJSER_XALIB_INVALID

説明

トランザクション制御用ライブラリが不正です。

宣言

【C#の場合】

public const int DCNJSER_XALIB_INVALID

【Visual Basicの場合】

Public Const DCNJSER_XALIB_INVALID As Integer

【J#の場合】

public static final int DCNJSER_XALIB_INVALID

●DCNJSER_XALIB_LOAD

説明

トランザクション制御用ライブラリが見つかりません。

宣言

【C#の場合】

public const int DCNJSER_XALIB_LOAD

【Visual Basicの場合】

Public Const DCNJSER_XALIB_LOAD As Integer

【J#の場合】

public static final int DCNJSER_XALIB_LOAD

●DCPRFER_PARAM

説明

引数に指定した値に誤りがあります。

宣言

【C#の場合】

public const int DCPRFER_PARAM

【Visual Basicの場合】

Public Const DCPRFER_PARAM As Integer

【J#の場合】

public static final int DCPRFER_PARAM

●DCRAPER_ALREADY_CONNECT

説明

すでにrapリスナーとのコネクションは確立しています。

宣言

【C#の場合】

public const int DCRAPER_ALREADY_CONNECT

【Visual Basicの場合】

Public Const DCRAPER_ALREADY_CONNECT As Integer

【J#の場合】

public static final int DCRAPER_ALREADY_CONNECT

●DCRAPER_MAX_CONNECTION

説明

一つのプロセスからRapクラスのConnectメソッドを呼び出せる上限値を超えました。

宣言

【C#の場合】

public const int DCRAPER_MAX_CONNECTION

【Visual Basicの場合】

Public Const DCRAPER_MAX_CONNECTION As Integer

【J#の場合】

public static final int DCRAPER_MAX_CONNECTION

●DCRAPER_MAX_CONNECTION_SV

説明

rapリスナーの管理するrapクライアントとのコネクション要求受け付け可能最大数を超えました。

宣言

【C#の場合】

public const int DCRAPER_MAX_CONNECTION_SV

【Visual Basicの場合】

Public Const DCRAPER_MAX_CONNECTION_SV As Integer

【J#の場合】

public static final int DCRAPER_MAX_CONNECTION_SV

●DCRAPER_NETDOWN

説明

rapリスナーとの通信でネットワーク障害が発生しました。

宣言

【C#の場合】

public const int DCRAPER_NETDOWN

【Visual Basicの場合】

Public Const DCRAPER_NETDOWN As Integer

【J#の場合】

public static final int DCRAPER_NETDOWN

●DCRAPER_NOCONTINUE

説明

続行できない障害が発生しました。

宣言

【C#の場合】

public const int DCRAPER_NOCONTINUE

【Visual Basicの場合】

Public Const DCRAPER_NOCONTINUE As Integer

【J#の場合】

public static final int DCRAPER_NOCONTINUE

●DCRAPER_NOHOSTNAME

説明

ホスト名称が解決できません。

宣言

【C#の場合】

public const int DCRAPER_NOHOSTNAME

【Visual Basicの場合】

Public Const DCRAPER_NOHOSTNAME As Integer

【J#の場合】

public static final int DCRAPER_NOHOSTNAME

●DCRAPER_NOMEMORY

説明

メモリ不足が発生しました。

宣言

【C#の場合】

public const int DCRAPER_NOMEMORY

【Visual Basicの場合】

Public Const DCRAPER_NOMEMORY As Integer

【J#の場合】

public static final int DCRAPER_NOMEMORY

●DCRAPER_NOMEMORY_SV

説明

rapリスナーまたはrapサーバでメモリ不足が発生しました。

宣言

【C#の場合】

public const int DCRAPER_NOMEMORY_SV

【Visual Basicの場合】

Public Const DCRAPER_NOMEMORY_SV As Integer

【J#の場合】

public static final int DCRAPER_NOMEMORY_SV

●DCRAPER_NOSERVICE

説明

rapリスナーは開始処理中，または停止処理中です。

宣言

【C#の場合】

public const int DCRAPER_NOSERVICE

【Visual Basicの場合】

Public Const DCRAPER_NOSERVICE As Integer

【J#の場合】

public static final int DCRAPER_NOSERVICE

●DCRAPER_NOSOCKET

説明

ソケット不足が発生しました。

宣言

【C#の場合】

public const int DCRAPER_NOSOCKET

【Visual Basicの場合】

Public Const DCRAPER_NOSOCKET As Integer

【J#の場合】

public static final int DCRAPER_NOSOCKET

●DCRAPER_PANIC_SV

説明

rapリスナーでシステム障害が発生しました。

宣言

【C#の場合】

public const int DCRAPER_PANIC_SV

【Visual Basicの場合】

Public Const DCRAPER_PANIC_SV As Integer

【J#の場合】

public static final int DCRAPER_PANIC_SV

●DCRAPER_PARAM

説明

引数が間違っています。

宣言

【C#の場合】

public const int DCRAPER_PARAM

【Visual Basicの場合】

Public Const DCRAPER_PARAM As Integer

【J#の場合】

public static final int DCRAPER_PARAM

●DCRAPER_PROTO

説明

プロトコル不正です。

宣言

【C#の場合】

public const int DCRAPER_PROTO

【Visual Basicの場合】

Public Const DCRAPER_PROTO As Integer

【J#の場合】

public static final int DCRAPER_PROTO

●DCRAPER_SHUTDOWN

説明

rapリスナーは停止中です。

宣言

【C#の場合】

public const int DCRAPER_SHUTDOWN

【Visual Basicの場合】

Public Const DCRAPER_SHUTDOWN As Integer

【J#の場合】

public static final int DCRAPER_SHUTDOWN

●DCRAPER_SYSCALL

説明

システムコールで予期しないエラーが発生しました。

宣言

【C#の場合】

public const int DCRAPER_SYSCALL

【Visual Basicの場合】

Public Const DCRAPER_SYSCALL As Integer

【J#の場合】

public static final int DCRAPER_SYSCALL

●DCRAPER_TIMEDOUT

説明

rapリスナーとの通信でタイムアウトが発生しました。

宣言

【C#の場合】

public const int DCRAPER_TIMEDOUT

【Visual Basicの場合】

Public Const DCRAPER_TIMEDOUT As Integer

【J#の場合】

public static final int DCRAPER_TIMEDOUT

●DCRAPER_TIMEOUT_SV

説明

rapリスナーサービス定義に指定したメッセージ送受信最大監視時間内にコネクションが確立できませんでした。

宣言

【C#の場合】

public const int DCRAPER_TIMEOUT_SV

【Visual Basicの場合】

Public Const DCRAPER_TIMEOUT_SV As Integer

【J#の場合】

public static final int DCRAPER_TIMEOUT_SV

●DCRAPER_UNKNOWN_NODE

説明

接続されていないネットワーク上のrapリスナーに対してコネクションを確立しようとしています。

宣言

【C#の場合】

public const int DCRAPER_UNKNOWN_NODE

【Visual Basicの場合】

Public Const DCRAPER_UNKNOWN_NODE As Integer

【J#の場合】

public static final int DCRAPER_UNKNOWN_NODE

●DCRPCER_ALL_RECEIVED

説明

非同期応答型RPCで要求したサービスの処理結果は，すべて受信しました。

宣言

【C#の場合】

public const int DCRPCER_ALL_RECEIVED

【Visual Basicの場合】

Public Const DCRPCER_ALL_RECEIVED As Integer

【J#の場合】

public static final int DCRPCER_ALL_RECEIVED

●DCRPCER_FATAL

説明

初期化に失敗しました。

宣言

【C#の場合】

public const int DCRPCER_FATAL

【Visual Basicの場合】

Public Const DCRPCER_FATAL As Integer

【J#の場合】

public static final int DCRPCER_FATAL

●DCRPCER_INVALID_ARGS

説明

引数に設定した値が間違っています。

宣言

【C#の場合】

public const int DCRPCER_INVALID_ARGS

【Visual Basicの場合】

Public Const DCRPCER_INVALID_ARGS As Integer

【J#の場合】

public static final int DCRPCER_INVALID_ARGS

●DCRPCER_INVALID_DES

説明

設定した記述子は存在しません。

宣言

【C#の場合】

public const int DCRPCER_INVALID_DES

【Visual Basicの場合】

Public Const DCRPCER_INVALID_DES As Integer

【J#の場合】

public static final int DCRPCER_INVALID_DES

●DCRPCER_INVALID_REPLY

説明

サービスメソッドまたはサービス関数がOpenTP1に返した応答の長さが定義の範囲外です。

宣言

【C#の場合】

public const int DCRPCER_INVALID_REPLY

【Visual Basicの場合】

Public Const DCRPCER_INVALID_REPLY As Integer

【J#の場合】

public static final int DCRPCER_INVALID_REPLY

●DCRPCER_MESSAGE_TOO_BIG

説明

設定した電文長が，最大値を超えています。

宣言

【C#の場合】

public const int DCRPCER_MESSAGE_TOO_BIG

【Visual Basicの場合】

Public Const DCRPCER_MESSAGE_TOO_BIG As Integer

【J#の場合】

public static final int DCRPCER_MESSAGE_TOO_BIG

●DCRPCER_NET_DOWN

説明

ネットワークに障害が発生しました。

宣言

【C#の場合】

public const int DCRPCER_NET_DOWN

【Visual Basicの場合】

Public Const DCRPCER_NET_DOWN As Integer

【J#の場合】

public static final int DCRPCER_NET_DOWN

●DCRPCER_NOT_TRN_EXTEND

説明

トランザクション処理の連鎖RPCを使ったあとで，flagsパラメタにDCRPC_TPNOTRANを設定してサービスを要求しています。

宣言

【C#の場合】

public const int DCRPCER_NOT_TRN_EXTEND

【Visual Basicの場合】

Public Const DCRPCER_NOT_TRN_EXTEND As Integer

【J#の場合】

public static final int DCRPCER_NOT_TRN_EXTEND

●DCRPCER_NO_BUFS

説明

メモリが不足しました。または，サーバのメッセージ格納領域に十分な空きがないため，サービス要求を受け付けられませんでした。

宣言

【C#の場合】

public const int DCRPCER_NO_BUFS

【Visual Basicの場合】

Public Const DCRPCER_NO_BUFS As Integer

【J#の場合】

public static final int DCRPCER_NO_BUFS

●DCRPCER_NO_BUFS_AT_SERVER

説明

設定したサービスで，メモリが不足しました。

宣言

【C#の場合】

public const int DCRPCER_NO_BUFS_AT_SERVER

【Visual Basicの場合】

Public Const DCRPCER_NO_BUFS_AT_SERVER As Integer

【J#の場合】

public static final int DCRPCER_NO_BUFS_AT_SERVER

●DCRPCER_NO_BUFS_RB

説明

メモリが不足しました。このリターン値が返った場合は，トランザクションブランチをコミットできません。

宣言

【C#の場合】

public const int DCRPCER_NO_BUFS_RB

【Visual Basicの場合】

Public Const DCRPCER_NO_BUFS_RB As Integer

【J#の場合】

public static final int DCRPCER_NO_BUFS_RB

●DCRPCER_NO_PORT

説明

サービスのポート番号が見つかりません。

宣言

【C#の場合】

public const int DCRPCER_NO_PORT

【Visual Basicの場合】

Public Const DCRPCER_NO_PORT As Integer

【J#の場合】

public static final int DCRPCER_NO_PORT

●DCRPCER_NO_SUCH_DOMAIN

説明

ドメイン修飾をしたサービスグループ名の，ドメイン名が間違っています。

宣言

【C#の場合】

public const int DCRPCER_NO_SUCH_DOMAIN

【Visual Basicの場合】

Public Const DCRPCER_NO_SUCH_DOMAIN As Integer

【J#の場合】

public static final int DCRPCER_NO_SUCH_DOMAIN

●DCRPCER_NO_SUCH_SERVICE

説明

設定したサービス名は，定義されていません。

宣言

【C#の場合】

public const int DCRPCER_NO_SUCH_SERVICE

【Visual Basicの場合】

Public Const DCRPCER_NO_SUCH_SERVICE As Integer

【J#の場合】

public static final int DCRPCER_NO_SUCH_SERVICE

●DCRPCER_NO_SUCH_SERVICE_GROUP

説明

設定したサービスグループは，定義されていません。

宣言

【C#の場合】

public const int DCRPCER_NO_SUCH_SERVICE_GROUP

【Visual Basicの場合】

Public Const DCRPCER_NO_SUCH_SERVICE_GROUP As Integer

【J#の場合】

public static final int DCRPCER_NO_SUCH_SERVICE_GROUP

●DCRPCER_OLTF_INITIALIZING

説明

サービスを要求されたノードにあるOpenTP1は，開始処理中です。

宣言

【C#の場合】

public const int DCRPCER_OLTF_INITIALIZING

【Visual Basicの場合】

Public Const DCRPCER_OLTF_INITIALIZING As Integer

【J#の場合】

public static final int DCRPCER_OLTF_INITIALIZING

●DCRPCER_OLTF_NOT_UP

説明

設定したサービスのUAPプロセスが，稼働していません。

宣言

【C#の場合】

public const int DCRPCER_OLTF_NOT_UP

【Visual Basicの場合】

Public Const DCRPCER_OLTF_NOT_UP As Integer

【J#の場合】

public static final int DCRPCER_OLTF_NOT_UP

●DCRPCER_PROTO

説明

プロトコル不正です。

宣言

【C#の場合】

public const int DCRPCER_PROTO

【Visual Basicの場合】

Public Const DCRPCER_PROTO As Integer

【J#の場合】

public static final int DCRPCER_PROTO

●DCRPCER_REPLY_TOO_BIG

説明

返ってきた応答が，クライアントUAPで用意した領域に入り切りません。

宣言

【C#の場合】

public const int DCRPCER_REPLY_TOO_BIG

【Visual Basicの場合】

Public Const DCRPCER_REPLY_TOO_BIG As Integer

【J#の場合】

public static final int DCRPCER_REPLY_TOO_BIG

●DCRPCER_REPLY_TOO_BIG_RB

説明

返ってきた応答が，クライアントUAPで用意した領域に入り切りません。このリターン値が返った場合は，トランザクションブランチをコミットできません。

宣言

【C#の場合】

public const int DCRPCER_REPLY_TOO_BIG_RB

【Visual Basicの場合】

Public Const DCRPCER_REPLY_TOO_BIG_RB As Integer

【J#の場合】

public static final int DCRPCER_REPLY_TOO_BIG_RB

●DCRPCER_RETRY_COUNT_OVER

説明

指定したサービスリトライ回数最大値を超えています。

宣言

【C#の場合】

public const int DCRPCER_RETRY_COUNT_OVER

【Visual Basicの場合】

Public Const DCRPCER_RETRY_COUNT_OVER As Integer

【J#の場合】

public static final int DCRPCER_RETRY_COUNT_OVER

●DCRPCER_SECCHK

説明

サービスを要求されたSPP.NETまたはSPPは，OpenTP1のセキュリティ機能で保護されているかSPP.NETまたはSPPへのアクセス権がありません。

宣言

【C#の場合】

public const int DCRPCER_SECCHK

【Visual Basicの場合】

Public Const DCRPCER_SECCHK As Integer

【J#の場合】

public static final int DCRPCER_SECCHK

●DCRPCER_SEC_INIT

説明

セキュリティ機能を使ったOpenTP1が，セキュリティ環境の初期化処理でエラーになりました。

宣言

【C#の場合】

public const int DCRPCER_SEC_INIT

【Visual Basicの場合】

Public Const DCRPCER_SEC_INIT As Integer

【J#の場合】

public static final int DCRPCER_SEC_INIT

●DCRPCER_SERVER_BUSY

説明

ソケット受信型サーバが，サービス要求を受け取れません。

宣言

【C#の場合】

public const int DCRPCER_SERVER_BUSY

【Visual Basicの場合】

Public Const DCRPCER_SERVER_BUSY As Integer

【J#の場合】

public static final int DCRPCER_SERVER_BUSY

●DCRPCER_SERVICE_CLOSED

説明

設定したサービス名のサービスがあるサービスグループは，閉塞しています。

宣言

【C#の場合】

public const int DCRPCER_SERVICE_CLOSED

【Visual Basicの場合】

Public Const DCRPCER_SERVICE_CLOSED As Integer

【J#の場合】

public static final int DCRPCER_SERVICE_CLOSED

●DCRPCER_SERVICE_NOT_UP

説明

指定したサービスは実行していません。

宣言

【C#の場合】

public const int DCRPCER_SERVICE_NOT_UP

【Visual Basicの場合】

Public Const DCRPCER_SERVICE_NOT_UP As Integer

【J#の場合】

public static final int DCRPCER_SERVICE_NOT_UP

●DCRPCER_SERVICE_TERMINATED

説明

サービスを要求されたSPP.NETまたはSPPが，処理を完了する前に異常終了しました。

宣言

【C#の場合】

public const int DCRPCER_SERVICE_TERMINATED

【Visual Basicの場合】

Public Const DCRPCER_SERVICE_TERMINATED As Integer

【J#の場合】

public static final int DCRPCER_SERVICE_TERMINATED

●DCRPCER_SERVICE_TERMINATING

説明

設定したサービスは，終了処理中です。

宣言

【C#の場合】

public const int DCRPCER_SERVICE_TERMINATING

【Visual Basicの場合】

Public Const DCRPCER_SERVICE_TERMINATING As Integer

【J#の場合】

public static final int DCRPCER_SERVICE_TERMINATING

●DCRPCER_STANDBY_END

説明

待機系のユーザサーバが，待機の終了を要求されました。または，系切り替え時にすでに終了していたため，待機の終了を要求されました。

宣言

【C#の場合】

public const int DCRPCER_STANDBY_END

【Visual Basicの場合】

Public Const DCRPCER_STANDBY_END As Integer

【J#の場合】

public static final int DCRPCER_STANDBY_END

●DCRPCER_SYSERR

説明

システムエラーが発生しました。

宣言

【C#の場合】

public const int DCRPCER_SYSERR

【Visual Basicの場合】

Public Const DCRPCER_SYSERR As Integer

【J#の場合】

public static final int DCRPCER_SYSERR

●DCRPCER_SYSERR_AT_SERVER

説明

設定したサービスで，システムエラーが発生しました。

宣言

【C#の場合】

public const int DCRPCER_SYSERR_AT_SERVER

【Visual Basicの場合】

Public Const DCRPCER_SYSERR_AT_SERVER As Integer

【J#の場合】

public static final int DCRPCER_SYSERR_AT_SERVER

●DCRPCER_SYSERR_AT_SERVER_RB

説明

設定したサービスで，システムエラーが発生しました。このリターン値が返った場合は，トランザクションブランチをコミットできません。

宣言

【C#の場合】

public const int DCRPCER_SYSERR_AT_SERVER_RB

【Visual Basicの場合】

Public Const DCRPCER_SYSERR_AT_SERVER_RB As Integer

【J#の場合】

public static final int DCRPCER_SYSERR_AT_SERVER_RB

●DCRPCER_SYSERR_RB

説明

システムエラーが発生しました。このリターン値が返った場合は，トランザクションブランチをコミットできません。

宣言

【C#の場合】

public const int DCRPCER_SYSERR_RB

【Visual Basicの場合】

Public Const DCRPCER_SYSERR_RB As Integer

【J#の場合】

public static final int DCRPCER_SYSERR_RB

●DCRPCER_TESTMODE

説明

テストモードのUAPからテストモードでないSPPへ，またはテストモードでないUAPからテストモードのSPPへサービスを要求しています。

宣言

【C#の場合】

public const int DCRPCER_TESTMODE

【Visual Basicの場合】

Public Const DCRPCER_TESTMODE As Integer

【J#の場合】

public static final int DCRPCER_TESTMODE

●DCRPCER_TIMED_OUT

説明

処理を完了する前にタイムアウトして異常終了しました。

宣言

【C#の場合】

public const int DCRPCER_TIMED_OUT

【Visual Basicの場合】

Public Const DCRPCER_TIMED_OUT As Integer

【J#の場合】

public static final int DCRPCER_TIMED_OUT

●DCRPCER_TRNCHK

説明

複数のSPP.NETまたはSPPのトランザクション属性が一致していません。

宣言

【C#の場合】

public const int DCRPCER_TRNCHK

【Visual Basicの場合】

Public Const DCRPCER_TRNCHK As Integer

【J#の場合】

public static final int DCRPCER_TRNCHK

●DCRPCER_TRNCHK_EXTEND

説明

同時に起動できるトランザクションブランチの数を超えたため，トランザクションブランチを開始できません。

宣言

【C#の場合】

public const int DCRPCER_TRNCHK_EXTEND

【Visual Basicの場合】

Public Const DCRPCER_TRNCHK_EXTEND As Integer

【J#の場合】

public static final int DCRPCER_TRNCHK_EXTEND

●DCRTSER_ITEM_OVER

説明

取得項目の数が，リアルタイム統計情報サービス定義のrts_item_maxオペランドの指定値を超えるため，情報を取得できません。

宣言

【C#の場合】

public const int DCRTSER_ITEM_OVER

【Visual Basicの場合】

Public Const DCRTSER_ITEM_OVER As Integer

【J#の場合】

public static final int DCRTSER_ITEM_OVER

●DCRTSER_ITEM_OVER_SRV

説明

サーバ単位の取得項目の数が，リアルタイム統計情報サービス定義のrts_item_maxオペランドの指定値を超えるため，情報を取得できません。このエラーコードが返った場合，サービス単位またはサービス以外の処理の統計情報は取得されています。

宣言

【C#の場合】

public const int DCRTSER_ITEM_OVER_SRV

【Visual Basicの場合】

Public Const DCRTSER_ITEM_OVER_SRV As Integer

【J#の場合】

public static final int DCRTSER_ITEM_OVER_SRV

●DCRTSER_ITEM_OVER_SVC

説明

サービス単位またはサービス以外の処理での取得項目の数が，リアルタイム統計情報サービス定義のrts_item_maxオペランドの指定値を超えるため，情報を取得できません。このエラーコードが返った場合，サーバ単位の統計情報は取得されています。

宣言

【C#の場合】

public const int DCRTSER_ITEM_OVER_SVC

【Visual Basicの場合】

Public Const DCRTSER_ITEM_OVER_SVC As Integer

【J#の場合】

public static final int DCRTSER_ITEM_OVER_SVC

●DCRTSER_NOENTRY

説明

RtsクラスのPutUTraceメソッドを呼び出したサーバ，およびサービスがリアルタイム統計情報の取得対象に登録されていません。

宣言

【C#の場合】

public const int DCRTSER_NOENTRY

【Visual Basicの場合】

Public Const DCRTSER_NOENTRY As Integer

【J#の場合】

public static final int DCRTSER_NOENTRY

●DCRTSER_NOMEM

説明

プロセスメモリが不足したため，処理を実行できません。

宣言

【C#の場合】

public const int DCRTSER_NOMEM

【Visual Basicの場合】

Public Const DCRTSER_NOMEM As Integer

【J#の場合】

public static final int DCRTSER_NOMEM

●DCRTSER_PARAM

説明

引数に設定した値に誤りがあります。

宣言

【C#の場合】

public const int DCRTSER_PARAM

【Visual Basicの場合】

Public Const DCRTSER_PARAM As Integer

【J#の場合】

public static final int DCRTSER_PARAM

●DCRTSER_PROTO

説明

RpcクラスのOpenメソッドを呼び出していません。

すでに実行時間の計測を開始している項目IDをeventIDに設定して，flagsにTP1ServerFlags.DCRTS_STARTを設定したPutUTraceメソッドを呼び出しました。

実行時間の計測を開始していない項目IDをeventIDに設定して，flagsにTP1ServerFlags.DCRTS_ENDを設定したPutUTraceメソッドを呼び出しました。

宣言

【C#の場合】

public const int DCRTSER_PROTO

【Visual Basicの場合】

Public Const DCRTSER_PROTO As Integer

【J#の場合】

public static final int DCRTSER_PROTO

●DCRTSER_RTS_NOT_START

説明

リアルタイム統計情報サービスが開始していません。

宣言

【C#の場合】

public const int DCRTSER_RTS_NOT_START

【Visual Basicの場合】

Public Const DCRTSER_RTS_NOT_START As Integer

【J#の場合】

public static final int DCRTSER_RTS_NOT_START

●DCRTSER_VERSION

説明

UAPが，現在稼働しているリアルタイム統計情報サービスでは稼働できないバージョンのライブラリと結合しています。

宣言

【C#の場合】

public const int DCRTSER_VERSION

【Visual Basicの場合】

Public Const DCRTSER_VERSION As Integer

【J#の場合】

public static final int DCRTSER_VERSION

●DCTAMER_ACCESS

説明

アクセスしようとしたTAMファイルは，セキュリティ機能で保護されています。メソッドを呼び出したUAPには，アクセス権限がありません。

宣言

【C#の場合】

public const int DCTAMER_ACCESS

【Visual Basicの場合】

Public Const DCTAMER_ACCESS As Integer

【J#の場合】

public static final int DCTAMER_ACCESS

●DCTAMER_ACCESSF

説明

TAMファイルに対するアクセス権がありません。

宣言

【C#の場合】

public const int DCTAMER_ACCESSF

【Visual Basicの場合】

Public Const DCTAMER_ACCESSF As Integer

【J#の場合】

public static final int DCTAMER_ACCESSF

●DCTAMER_ACCESSS

説明

スペシャルファイルに対するアクセス権がありません。

宣言

【C#の場合】

public const int DCTAMER_ACCESSS

【Visual Basicの場合】

Public Const DCTAMER_ACCESSS As Integer

【J#の場合】

public static final int DCTAMER_ACCESSS

●DCTAMER_ACSATL

説明

TAMサービス定義で指定したTAMテーブルのアクセス形態では実行できません。

宣言

【C#の場合】

public const int DCTAMER_ACSATL

【Visual Basicの場合】

Public Const DCTAMER_ACSATL As Integer

【J#の場合】

public static final int DCTAMER_ACSATL

●DCTAMER_DLOCK

説明

デッドロックが起こりました。

宣言

【C#の場合】

public const int DCTAMER_DLOCK

【Visual Basicの場合】

Public Const DCTAMER_DLOCK As Integer

【J#の場合】

public static final int DCTAMER_DLOCK

●DCTAMER_EXKEY

説明

keyに設定したキー値がTAMテーブルに存在するので，レコードの追加はできません。

宣言

【C#の場合】

public const int DCTAMER_EXKEY

【Visual Basicの場合】

Public Const DCTAMER_EXKEY As Integer

【J#の場合】

public static final int DCTAMER_EXKEY

●DCTAMER_EXREWRT

説明

tableIDに設定したテーブル記述子は，すでにTam.Rewriteメソッドで更新済みです。

宣言

【C#の場合】

public const int DCTAMER_EXREWRT

【Visual Basicの場合】

Public Const DCTAMER_EXREWRT As Integer

【J#の場合】

public static final int DCTAMER_EXREWRT

●DCTAMER_EXWRITE

説明

tableIDに設定したテーブル記述子はTam.Writeメソッドで更新または追加したレコードです。

宣言

【C#の場合】

public const int DCTAMER_EXWRITE

【Visual Basicの場合】

Public Const DCTAMER_EXWRITE As Integer

【J#の場合】

public static final int DCTAMER_EXWRITE

●DCTAMER_FLSVR

説明

UAPが，現在稼働しているOpenTP1ファイルサービスでは動作できないバージョンのTAMライブラリと結合されています。

宣言

【C#の場合】

public const int DCTAMER_FLSVR

【Visual Basicの場合】

Public Const DCTAMER_FLSVR As Integer

【J#の場合】

public static final int DCTAMER_FLSVR

●DCTAMER_IDXTYP

説明

TAMテーブルファイルの初期作成で設定したTAMテーブルのインデクス種別では実行できません。

宣言

【C#の場合】

public const int DCTAMER_IDXTYP

【Visual Basicの場合】

Public Const DCTAMER_IDXTYP As Integer

【J#の場合】

public static final int DCTAMER_IDXTYP

●DCTAMER_IO

説明

入出力エラーが発生しました。

宣言

【C#の場合】

public const int DCTAMER_IO

【Visual Basicの場合】

Public Const DCTAMER_IO As Integer

【J#の場合】

public static final int DCTAMER_IO

●DCTAMER_LOCK

説明

排他エラーが発生しました。flagsにTP1ServerFlags.DCTAM_WAITを設定した場合，ロックサービス定義で指定した待ち時間でタイムアウトが発生したため，資源を確保できませんでした。

宣言

【C#の場合】

public const int DCTAMER_LOCK

【Visual Basicの場合】

Public Const DCTAMER_LOCK As Integer

【J#の場合】

public static final int DCTAMER_LOCK

●DCTAMER_LOGHLD

説明

TAMテーブルが論理閉塞状態です。

宣言

【C#の場合】

public const int DCTAMER_LOGHLD

【Visual Basicの場合】

Public Const DCTAMER_LOGHLD As Integer

【J#の場合】

public static final int DCTAMER_LOGHLD

●DCTAMER_MEMORY

説明

メモリが不足しました。

宣言

【C#の場合】

public const int DCTAMER_MEMORY

【Visual Basicの場合】

Public Const DCTAMER_MEMORY As Integer

【J#の場合】

public static final int DCTAMER_MEMORY

●DCTAMER_NO_ACL

説明

アクセスしようとしたTAMファイルは，セキュリティ機能で保護されています。該当するファイルに対するACLがありません。

宣言

【C#の場合】

public const int DCTAMER_NO_ACL

【Visual Basicの場合】

Public Const DCTAMER_NO_ACL As Integer

【J#の場合】

public static final int DCTAMER_NO_ACL

●DCTAMER_NOAREA

説明

TAMテーブルに空きレコードがありません。

宣言

【C#の場合】

public const int DCTAMER_NOAREA

【Visual Basicの場合】

Public Const DCTAMER_NOAREA As Integer

【J#の場合】

public static final int DCTAMER_NOAREA

●DCTAMER_NOLOAD

説明

TAMテーブルがロードされていません。

宣言

【C#の場合】

public const int DCTAMER_NOLOAD

【Visual Basicの場合】

Public Const DCTAMER_NOLOAD As Integer

【J#の場合】

public static final int DCTAMER_NOLOAD

●DCTAMER_NOOPEN

説明

TAMテーブルがオープン状態ではありません。

宣言

【C#の場合】

public const int DCTAMER_NOOPEN

【Visual Basicの場合】

Public Const DCTAMER_NOOPEN As Integer

【J#の場合】

public static final int DCTAMER_NOOPEN

●DCTAMER_NOREC

説明

指定されたレコードは存在しません。

宣言

【C#の場合】

public const int DCTAMER_NOREC

【Visual Basicの場合】

Public Const DCTAMER_NOREC As Integer

【J#の場合】

public static final int DCTAMER_NOREC

●DCTAMER_NOTTAM

説明

tableIDに設定したテーブルはTAMテーブルではありません。

宣言

【C#の場合】

public const int DCTAMER_NOTTAM

【Visual Basicの場合】

Public Const DCTAMER_NOTTAM As Integer

【J#の場合】

public static final int DCTAMER_NOTTAM

●DCTAMER_OBSHLD

説明

TAMテーブルが障害閉塞状態です。

宣言

【C#の場合】

public const int DCTAMER_OBSHLD

【Visual Basicの場合】

Public Const DCTAMER_OBSHLD As Integer

【J#の場合】

public static final int DCTAMER_OBSHLD

●DCTAMER_OPENED

説明

TAMテーブルがオープン済みです。

宣言

【C#の場合】

public const int DCTAMER_OPENED

【Visual Basicの場合】

Public Const DCTAMER_OPENED As Integer

【J#の場合】

public static final int DCTAMER_OPENED

●DCTAMER_OPENNUM

説明

キャラクタ型スペシャルファイルのオープン数の制限値を超えました。

宣言

【C#の場合】

public const int DCTAMER_OPENNUM

【Visual Basicの場合】

Public Const DCTAMER_OPENNUM As Integer

【J#の場合】

public static final int DCTAMER_OPENNUM

●DCTAMER_PARAM_BFA

説明

bufferに設定した値が間違っています。

宣言

【C#の場合】

public const int DCTAMER_PARAM_BFA

【Visual Basicの場合】

Public Const DCTAMER_PARAM_BFA As Integer

【J#の場合】

public static final int DCTAMER_PARAM_BFA

●DCTAMER_PARAM_BFS

説明

bufferSizeに設定したバッファ長が短過ぎます。

宣言

【C#の場合】

public const int DCTAMER_PARAM_BFS

【Visual Basicの場合】

Public Const DCTAMER_PARAM_BFS As Integer

【J#の場合】

public static final int DCTAMER_PARAM_BFS

●DCTAMER_PARAM_DTA

説明

dataに設定した値が間違っています。

宣言

【C#の場合】

public const int DCTAMER_PARAM_DTA

【Visual Basicの場合】

Public Const DCTAMER_PARAM_DTA As Integer

【J#の場合】

public static final int DCTAMER_PARAM_DTA

●DCTAMER_PARAM_DTS

説明

dataSizeに設定したデータ長が短過ぎます。

宣言

【C#の場合】

public const int DCTAMER_PARAM_DTS

【Visual Basicの場合】

Public Const DCTAMER_PARAM_DTS As Integer

【J#の場合】

public static final int DCTAMER_PARAM_DTS

●DCTAMER_PARAM_FLG

説明

flagsに設定した値が間違っています。

宣言

【C#の場合】

public const int DCTAMER_PARAM_FLG

【Visual Basicの場合】

Public Const DCTAMER_PARAM_FLG As Integer

【J#の場合】

public static final int DCTAMER_PARAM_FLG

●DCTAMER_PARAM_KEY

説明

keyに設定したキー値が間違っています。

宣言

【C#の場合】

public const int DCTAMER_PARAM_KEY

【Visual Basicの場合】

Public Const DCTAMER_PARAM_KEY As Integer

【J#の場合】

public static final int DCTAMER_PARAM_KEY

●DCTAMER_PARAM_KNO

説明

keyNoに設定した値が間違っています。

宣言

【C#の場合】

public const int DCTAMER_PARAM_KNO

【Visual Basicの場合】

Public Const DCTAMER_PARAM_KNO As Integer

【J#の場合】

public static final int DCTAMER_PARAM_KNO

●DCTAMER_PARAM_TBL

説明

tableNameに設定した値が間違っています。

宣言

【C#の場合】

public const int DCTAMER_PARAM_TBL

【Visual Basicの場合】

Public Const DCTAMER_PARAM_TBL As Integer

【J#の場合】

public static final int DCTAMER_PARAM_TBL

●DCTAMER_PARAM_TID

説明

tableIDに設定したテーブル記述子が間違っています。

宣言

【C#の場合】

public const int DCTAMER_PARAM_TID

【Visual Basicの場合】

Public Const DCTAMER_PARAM_TID As Integer

【J#の場合】

public static final int DCTAMER_PARAM_TID

●DCTAMER_PROTO

説明

TAMテーブルへアクセスする順序が間違っています。

UAPのユーザサービス定義に指定したトランザクション制御用ライブラリのリソースマネジャ登録が間違っています。または，UAPのユーザサービス定義にトランザクション制御用ライブラリを指定していません。

メソッドを呼び出したUAPのユーザサービス定義に，非トランザクション属性（atomic_updateオペランドにNを指定）を指定しています。

宣言

【C#の場合】

public const int DCTAMER_PROTO

【Visual Basicの場合】

Public Const DCTAMER_PROTO As Integer

【J#の場合】

public static final int DCTAMER_PROTO

●DCTAMER_RECOBS

説明

レコードが破壊されています。

宣言

【C#の場合】

public const int DCTAMER_RECOBS

【Visual Basicの場合】

Public Const DCTAMER_RECOBS As Integer

【J#の場合】

public static final int DCTAMER_RECOBS

●DCTAMER_RMTBL

説明

TAMテーブルが削除されています。

宣言

【C#の場合】

public const int DCTAMER_RMTBL

【Visual Basicの場合】

Public Const DCTAMER_RMTBL As Integer

【J#の場合】

public static final int DCTAMER_RMTBL

●DCTAMER_SEQENCE

説明

Tam.Readメソッドを呼び出していません。

宣言

【C#の場合】

public const int DCTAMER_SEQENCE

【Visual Basicの場合】

Public Const DCTAMER_SEQENCE As Integer

【J#の場合】

public static final int DCTAMER_SEQENCE

●DCTAMER_TAMEND

説明

TAMサービスが終了中です。

宣言

【C#の場合】

public const int DCTAMER_TAMEND

【Visual Basicの場合】

Public Const DCTAMER_TAMEND As Integer

【J#の場合】

public static final int DCTAMER_TAMEND

●DCTAMER_TAMVR

説明

UAPが，現在稼働しているTAMサービスでは動作できないバージョンのTAMライブラリと結合されています。

宣言

【C#の場合】

public const int DCTAMER_TAMVR

【Visual Basicの場合】

Public Const DCTAMER_TAMVR As Integer

【J#の場合】

public static final int DCTAMER_TAMVR

●DCTAMER_TBLVR

説明

UAPが，現在稼働しているTAMテーブルでは動作できないバージョンのTAMライブラリと結合されています。

宣言

【C#の場合】

public const int DCTAMER_TBLVR

【Visual Basicの場合】

Public Const DCTAMER_TBLVR As Integer

【J#の場合】

public static final int DCTAMER_TBLVR

●DCTAMER_TMERR

説明

トランザクションサービスでエラーが発生しました。

宣言

【C#の場合】

public const int DCTAMER_TMERR

【Visual Basicの場合】

Public Const DCTAMER_TMERR As Integer

【J#の場合】

public static final int DCTAMER_TMERR

●DCTAMER_TRNNUM

説明

TAMサービスで管理できるトランザクション数を超えました。

宣言

【C#の場合】

public const int DCTAMER_TRNNUM

【Visual Basicの場合】

Public Const DCTAMER_TRNNUM As Integer

【J#の場合】

public static final int DCTAMER_TRNNUM

●DCTAMER_TRNOPN

説明

Tam.Openメソッドはトランザクション外で呼び出しています。

宣言

【C#の場合】

public const int DCTAMER_TRNOPN

【Visual Basicの場合】

Public Const DCTAMER_TRNOPN As Integer

【J#の場合】

public static final int DCTAMER_TRNOPN

●DCTAMER_UNDEF

説明

TAMテーブルが定義されていません。

宣言

【C#の場合】

public const int DCTAMER_UNDEF

【Visual Basicの場合】

Public Const DCTAMER_UNDEF Integer

【J#の場合】

public static final int DCTAMER_UNDEF

●DCTRNER_HAZARD

説明

グローバルトランザクションのトランザクションブランチがヒューリスティックに完了しました。

しかし，障害のため，ヒューリスティックに完了したトランザクションブランチの同期点の結果がわかりません。

宣言

【C#の場合】

public const int DCTRNER_HAZARD

【Visual Basicの場合】

Public Const DCTRNER_HAZARD As Integer

【J#の場合】

public static final int DCTRNER_HAZARD

●DCTRNER_HAZARD_NO_BEGIN

説明

新しいトランザクションは開始できませんでした。

リターン値が返ったあと，このプロセスはトランザクション下にはありません。

宣言

【C#の場合】

public const int DCTRNER_HAZARD_NO_BEGIN

【Visual Basicの場合】

Public Const DCTRNER_HAZARD_NO_BEGIN As Integer

【J#の場合】

public static final int DCTRNER_HAZARD_NO_BEGIN

●DCTRNER_HEURISTIC

説明

ヒューリスティック決定のため，あるトランザクションブランチはコミットし，あるトランザクションブランチはロールバックしました。

宣言

【C#の場合】

public const int DCTRNER_HEURISTIC

【Visual Basicの場合】

Public Const DCTRNER_HEURISTIC As Integer

【J#の場合】

public static final int DCTRNER_HEURISTIC

●DCTRNER_HEURISTIC_NO_BEGIN

説明

新しいトランザクションは開始できませんでした。

リターン値が返ったあと，プロセスはトランザクション下にはありません。

宣言

【C#の場合】

public const int DCTRNER_HEURISTIC_NO_BEGIN

【Visual Basicの場合】

Public Const DCTRNER_HEURISTIC_NO_BEGIN As Integer

【J#の場合】

public static final int DCTRNER_HEURISTIC_NO_BEGIN

●DCTRNER_NO_BEGIN

説明

新しいトランザクションは開始できません。

宣言

【C#の場合】

public const int DCTRNER_NO_BEGIN

【Visual Basicの場合】

Public Const DCTRNER_NO_BEGIN As Integer

【J#の場合】

public static final int DCTRNER_NO_BEGIN

●DCTRNER_PROTO

説明

プロトコル不正です。

宣言

【C#の場合】

public const int DCTRNER_PROTO

【Visual Basicの場合】

Public Const DCTRNER_PROTO As Integer

【J#の場合】

public static final int DCTRNER_PROTO

●DCTRNER_RM

説明

リソースマネジャでエラーが発生しました。トランザクションは開始できませんでした。

宣言

【C#の場合】

public const int DCTRNER_RM

【Visual Basicの場合】

Public Const DCTRNER_RM As Integer

【J#の場合】

public static final int DCTRNER_RM

●DCTRNER_ROLLBACK

説明

現在のトランザクションは，コミットできないでロールバックしました。

宣言

【C#の場合】

public const int DCTRNER_ROLLBACK

【Visual Basicの場合】

Public Const DCTRNER_ROLLBACK As Integer

【J#の場合】

public static final int DCTRNER_ROLLBACK

●DCTRNER_ROLLBACK_NO_BEGIN

説明

コミットしようとしたトランザクションは，コミットできないでロールバックしました。

宣言

【C#の場合】

public const int DCTRNER_ROLLBACK_NO_BEGIN

【Visual Basicの場合】

Public Const DCTRNER_ROLLBACK_NO_BEGIN As Integer

【J#の場合】

public static final int DCTRNER_ROLLBACK_NO_BEGIN

●DCTRNER_TM

説明

トランザクションサービスでエラーが発生しました。

宣言

【C#の場合】

public const int DCTRNER_TM

【Visual Basicの場合】

Public Const DCTRNER_TM As Integer

【J#の場合】

public static final int DCTRNER_TM

TP1Exception

TP1Exceptionの概要

名前空間

Hitachi.OpenTP1

継承関係

System.Object
 +- System.Exception
   +- Hitachi.OpenTP1.TP1Exception

実装インタフェース

System.Runtime.Serialization.ISerializable

説明

（例外の共通基底クラス）

TP1Exceptionクラスは，OpenTP1 for .NET Frameworkで使用するExceptionクラスの基底となるクラスです。

プロパティの一覧

名称 | 説明
ErrorCode | エラーコードを返します。

メソッドの一覧

名称 | 説明
ToString() | このExceptionクラスを表す文字列を返します。

プロパティの詳細

●ErrorCode

説明

エラーコードを返します。

宣言

【C#の場合】

public int ErrorCode {get;}

【Visual Basicの場合】

Public ReadOnly Property ErrorCode As Integer

【J#の場合】

public int get_ErrorCode();

例外

なし

メソッドの詳細

●ToString

説明

このExceptionクラスを表す，次の形式の文字列を返します。

Exceptionクラスの名称: Messageプロパティの値

ErrorCode = ErrorCodeプロパティの値

InnerExceptionプロパティのToStringメソッドの値

StackTraceプロパティの値

宣言

【C#の場合】

public virtual string ToString(
);

【Visual Basicの場合】

Public Overridable Function ToString( _
) As String

【J#の場合】

public System.String ToString(
);

パラメタ

なし

戻り値

このExceptionクラスを表す文字列。

例外

なし

TP1MarshalException

TP1MarshalExceptionの概要

名前空間

Hitachi.OpenTP1

継承関係

System.Object
 +- System.Exception
   +- Hitachi.OpenTP1.TP1Exception
     +- Hitachi.OpenTP1.TP1MarshalException

実装インタフェース

System.Runtime.Serialization.ISerializable

説明

TP1MarshalExceptionクラスは，読み込みおよび書き込みできないバイト配列のインデクスが参照された場合，またはデータの内容が不正な場合に出力される例外です。

TP1RemoteException

TP1RemoteExceptionの概要

名前空間

Hitachi.OpenTP1

継承関係

System.Object
 +- System.Exception
   +- Hitachi.OpenTP1.TP1Exception
     +- Hitachi.OpenTP1.TP1RemoteException

実装インタフェース

System.Runtime.Serialization.ISerializable

説明

（リモート受信例外）

TP1RemoteExceptionクラスは，SPP.NETで例外が発生したことをSPP.NET，SUP.NET，またはCUP.NETに知らせる例外です。

プロパティの一覧

名称 | 説明
ExceptionMessage | SPP.NETで発生した例外のエラーメッセージの文字列を返します。
ExceptionName | SPP.NETで発生した例外の名前を返します。

メソッドの一覧

名称 | 説明
ToString() | このExceptionクラスを表す文字列を返します。

プロパティの詳細

●ExceptionMessage

説明

SPP.NETで発生した例外のエラーメッセージの文字列を返します。

宣言

【C#の場合】

public string ExceptionMessage {get;}

【Visual Basicの場合】

Public ReadOnly Property ExceptionMessage As String

【J#の場合】

public System.String get_ExceptionMessage();

例外

なし

●ExceptionName

説明

SPP.NETで発生した例外の名前を返します。

宣言

【C#の場合】

public string ExceptionName {get;}

【Visual Basicの場合】

Public ReadOnly Property ExceptionName As String

【J#の場合】

public System.String get_ExceptionName();

例外

なし

メソッドの詳細

●ToString

説明

このExceptionクラスを表す，次の形式の文字列を返します。

Exceptionクラスの名称: Messageプロパティの値

ErrorCode = ErrorCodeプロパティの値

ExceptionName = ExceptionNameプロパティの値

ExceptionMessage = ExceptionMessageプロパティの値

StackTraceプロパティの値

宣言

【C#の場合】

public virtual string ToString(
);

【Visual Basicの場合】

Public Overridable Function ToString( _
) As String

【J#の場合】

public System.String ToString(
);

パラメタ

なし

戻り値

このExceptionクラスを表す文字列。

例外

なし

TP1RpcMethod

TP1RpcMethodの概要

名前空間

Hitachi.OpenTP1

継承関係

System.Object
 +- System.Attribute
   +- Hitachi.OpenTP1.TP1RpcMethod

説明

サービスメソッドカスタム属性です。

コンストラクタの一覧

名称 | 説明
TP1RpcMethod() | TP1RpcMethodのコンストラクタです。

コンストラクタの詳細

●TP1RpcMethod

説明

TP1RpcMethodのコンストラクタです。

宣言

【C#の場合】

public TP1RpcMethod(
);

【Visual Basicの場合】

Public New( _
)

【J#の場合】

public TP1RpcMethod(
);

パラメタ

なし

例外

なし

TP1ServerException

TP1ServerExceptionの概要

名前空間

Hitachi.OpenTP1.Server

継承関係

System.Object
 +- System.Exception
   +- Hitachi.OpenTP1.TP1Exception
     +- Hitachi.OpenTP1.Server.TP1ServerException

実装インタフェース

System.Runtime.Serialization.ISerializable

説明

TP1/Extension for .NET Frameworkが返す例外のクラスです。クラスライブラリの各メソッドでエラーを検知した場合に発生します。

TP1ServerFlags

TP1ServerFlagsの概要

名前空間

Hitachi.OpenTP1.Server

継承関係

System.Object
 +- Hitachi.OpenTP1.Server.TP1ServerFlags

説明

TP1ServerFlagsクラスは，OpenTP1の各種フラグを提供します。

フィールドの一覧

名称
説明

DCADM_DELAY
実行したコマンドの処理を中断して，処理を中止します。

DCADM_STAT_NOT_UP
指定したOpenTP1ノードとは，次に示す理由で通信できません。

OpenTP1ノードのOpenTP1を，dcsetupコマンドで登録するか，または登録し直す必要があります。

マルチノード物理定義に指定した値が間違っています。

通信障害が起こりました。

DCADM_STAT_ONLINE
ユーザサーバはオンライン中です。

DCADM_STAT_START_NORMAL
ユーザサーバは正常開始中です。

DCADM_STAT_START_RECOVER
ユーザサーバは再開始中です。

DCADM_STAT_STOP
ユーザサーバは正常終了処理中です。

DCADM_STAT_STOPA
OpenTP1ノードは計画停止Aで終了処理中です。

DCADM_STAT_STOPB
OpenTP1ノードは計画停止Bで終了処理中です。

DCADM_STAT_SWAP
系切り替えが起こっています。

DCADM_STAT_TERM
OpenTP1ノードが停止中です。または異常終了中です。

DCJNL_FLUSH
UJレコードを取得する時点で，システムジャーナルファイルに UJレコードを出力します。トランザクション内でUJレコードが取得されている場合，この設定は無視されます。

DCLCK_EX
資源を更新します。ほかのUAPには参照も更新も禁止します。

DCLCK_PR
資源を参照します。ほかのUAPには参照だけを許可します。

DCLCK_TEST
資源が使えるかどうかをテストするときに設定します。

DCLCK_WAIT
ほかのUAPと資源を競合した場合に，資源の解放待ちにします。

DCMCFBUF1
バッファ形式1を使用する場合に設定します。

DCMCFBUF2
バッファ形式2を使用する場合に設定します。

DCMCFEMI
最終セグメントを送信する場合に設定します。

DCMCFNORM
一般の一方送信メッセージとして送信する場合に設定します。

DCMCFNSEQ
出力通番が必要ない場合に設定します。

DCMCFPRIO
優先の一方送信メッセージとして送信する場合に設定します。

DCMCFSEQ
出力通番が必要な場合に設定します。

DCNOFLAGS
オプションフラグを指定しません。

DCRPC_CHAINED
連鎖RPCです。

DCRPC_DOMAIN
サービスグループ名をドメイン修飾した場合に指定します。

DCRPC_NAMPORT
ホスト名を検索のキーにする場合に指定します。

DCRPC_NOREPLY
非応答型RPCです。

DCRPC_NOWAIT
非同期応答型RPCです。

DCRPC_SPECIFIC_MSG
引数に設定した記述子をリターンした，非同期応答型RPCの応答を受信します。

DCRPC_TPNOTRAN
トランザクション処理からのサービス要求で，要求先の処理をトランザクションにしない場合に設定します。

DCRPC_WAIT_MILLISEC
引数で設定した待ち時間の単位をミリ秒にします。

DCRTS_END
eventIDに設定した項目IDの実行時間を取得して，計測を終了します。

DCRTS_START
eventIDに設定した項目IDの実行時間の計測を開始します。このフラグを設定してPutUTraceメソッドを呼び出した時点では，リアルタイム統計情報を取得しません。

DCTAM_ADD
追加します。

DCTAM_EQLSRC
'キー値='を検索します（ハッシュ，ツリー）。

DCTAM_EXCLUSIVE
排他します。

DCTAM_FIRSTSRC
先頭から検索します（ハッシュ）。

DCTAM_GRTEQLSRC
'キー値<='を検索します（ツリー）。

DCTAM_GRTSRC
'キー値<'を検索します（ツリー）。

DCTAM_LSSEQLSRC
'キー値>='を検索します（ツリー）。

DCTAM_LSSSRC
'キー値>'を検索します（ツリー）。

DCTAM_MODIFY
更新目的の排他です。

DCTAM_NEXTSRC
設定したキー値の，次のレコードから検索します（ハッシュ）。

DCTAM_NOEXCLUSIVE
排他をしません。

DCTAM_NOOUTREC
削除するレコードを退避しません。

DCTAM_NOWAIT
排他解除待ちをしません。

DCTAM_OUTREC
削除するレコードを退避します。

DCTAM_REC_EXCLUSIVE
レコード排他です。

DCTAM_REFERENCE
参照目的の排他です。

DCTAM_TBL_EXCLUSIVE
テーブル排他です。

DCTAM_WAIT
排他解除待ちをします。

DCTAM_WRITE
更新します。

DCTAM_WRTADD
更新または追加します。

フィールドの詳細

●DCADM_DELAY

説明

実行したコマンドの処理を中断して，処理を中止します。

宣言

【C#の場合】

public const int DCADM_DELAY

【Visual Basicの場合】

Public Const DCADM_DELAY As Integer

【J#の場合】

public static final int DCADM_DELAY

●DCADM_STAT_NOT_UP

説明

指定したOpenTP1ノードとは，次に示す理由で通信できません。

OpenTP1ノードのOpenTP1を，dcsetupコマンドで登録するか，または登録し直す必要があります。

マルチノード物理定義に指定した値が間違っています（OpenTP1ノードを登録していないか，指定したホスト名またはポート番号が間違っています）。

通信障害が起こりました（OpenTP1ノードのマシンの電源を入れていないか，またはネットワーク障害が起こりました）。

このフィールドは前バージョンとの互換性を保つために定義してあります。

TP1ServerValues.DCADM_STAT_NOT_UPを使用してください。

宣言

【C#の場合】

public const int DCADM_STAT_NOT_UP

【Visual Basicの場合】

Public Const DCADM_STAT_NOT_UP As Integer

【J#の場合】

public static final int DCADM_STAT_NOT_UP

●DCADM_STAT_ONLINE

説明

ユーザサーバはオンライン中です。

このフィールドは前バージョンとの互換性を保つために定義してあります。

TP1ServerValues.DCADM_STAT_ONLINEを使用してください。

宣言

【C#の場合】

public const int DCADM_STAT_ONLINE

【Visual Basicの場合】

Public Const DCADM_STAT_ONLINE As Integer

【J#の場合】

public static final int DCADM_STAT_ONLINE

●DCADM_STAT_START_NORMAL

説明

ユーザサーバは正常開始中です。

このフィールドは前バージョンとの互換性を保つために定義してあります。

TP1ServerValues.DCADM_STAT_START_NORMALを使用してください。

宣言

【C#の場合】

public const int DCADM_STAT_START_NORMAL

【Visual Basicの場合】

Public Const DCADM_STAT_START_NORMAL As Integer

【J#の場合】

public static final int DCADM_STAT_START_NORMAL

●DCADM_STAT_START_RECOVER

説明

ユーザサーバは再開始中です。

このフィールドは前バージョンとの互換性を保つために定義してあります。

TP1ServerValues.DCADM_STAT_START_RECOVERを使用してください。

宣言

【C#の場合】

public const int DCADM_STAT_START_RECOVER

【Visual Basicの場合】

Public Const DCADM_STAT_START_RECOVER As Integer

【J#の場合】

public static final int DCADM_STAT_START_RECOVER

●DCADM_STAT_STOP

説明

ユーザサーバは正常終了処理中です。

このフィールドは前バージョンとの互換性を保つために定義してあります。

TP1ServerValues.DCADM_STAT_STOPを使用してください。

宣言

【C#の場合】

public const int DCADM_STAT_STOP

【Visual Basicの場合】

Public Const DCADM_STAT_STOP As Integer

【J#の場合】

public static final int DCADM_STAT_STOP

●DCADM_STAT_STOPA

説明

OpenTP1ノードは計画停止Aで終了処理中です。

このフィールドは前バージョンとの互換性を保つために定義してあります。

TP1ServerValues.DCADM_STAT_STOPAを使用してください。

宣言

【C#の場合】

public const int DCADM_STAT_STOPA

【Visual Basicの場合】

Public Const DCADM_STAT_STOPA As Integer

【J#の場合】

public static final int DCADM_STAT_STOPA

●DCADM_STAT_STOPB

説明

OpenTP1ノードは計画停止Bで終了処理中です。

このフィールドは前バージョンとの互換性を保つために定義してあります。

TP1ServerValues.DCADM_STAT_STOPBを使用してください。

宣言

【C#の場合】

public const int DCADM_STAT_STOPB

【Visual Basicの場合】

Public Const DCADM_STAT_STOPB As Integer

【J#の場合】

public static final int DCADM_STAT_STOPB

●DCADM_STAT_SWAP

説明

系切り替えが起こっています。

このフィールドは前バージョンとの互換性を保つために定義してあります。

TP1ServerValues.DCADM_STAT_SWAPを使用してください。

宣言

【C#の場合】

public const int DCADM_STAT_SWAP

【Visual Basicの場合】

Public Const DCADM_STAT_SWAP As Integer

【J#の場合】

public static final int DCADM_STAT_SWAP

●DCADM_STAT_TERM

説明

OpenTP1ノードが停止中です。または異常終了中です。

このフィールドは前バージョンとの互換性を保つために定義してあります。

TP1ServerValues.DCADM_STAT_TERMを使用してください。

宣言

【C#の場合】

public const int DCADM_STAT_TERM

【Visual Basicの場合】

Public Const DCADM_STAT_TERM As Integer

【J#の場合】

public static final int DCADM_STAT_TERM

●DCJNL_FLUSH

説明

UJレコードを取得する時点で，システムジャーナルファイルに UJレコードを出力します。トランザクション内でUJレコードが取得されている場合，この設定は無視されます。

宣言

【C#の場合】

public const int DCJNL_FLUSH

【Visual Basicの場合】

Public Const DCJNL_FLUSH As Integer

【J#の場合】

public static final int DCJNL_FLUSH

●DCLCK_EX

説明

資源を更新します。ほかのUAPには参照も更新も禁止します。

宣言

【C#の場合】

public const int DCLCK_EX

【Visual Basicの場合】

Public Const DCLCK_EX As Integer

【J#の場合】

public static final int DCLCK_EX

●DCLCK_PR

説明

資源を参照します。ほかのUAPには参照だけを許可します。

宣言

【C#の場合】

public const int DCLCK_PR

【Visual Basicの場合】

Public Const DCLCK_PR As Integer

【J#の場合】

public static final int DCLCK_PR

●DCLCK_TEST

説明

資源が使えるかどうかをテストするときに設定します。

宣言

【C#の場合】

public const int DCLCK_TEST

【Visual Basicの場合】

Public Const DCLCK_TEST As Integer

【J#の場合】

public static final int DCLCK_TEST

●DCLCK_WAIT

説明

ほかのUAPと資源を競合した場合に，資源の解放待ちにします。このフラグが設定されてない場合に競合したときは，例外応答します。

宣言

【C#の場合】

public const int DCLCK_WAIT

【Visual Basicの場合】

Public Const DCLCK_WAIT As Integer

【J#の場合】

public static final int DCLCK_WAIT

●DCMCFBUF1

説明

バッファ形式1を使用する場合に設定します。

宣言

【C#の場合】

public const int DCMCFBUF1

【Visual Basicの場合】

Public Const DCMCFBUF1 As Integer

【J#の場合】

public static final int DCMCFBUF1

●DCMCFBUF2

説明

バッファ形式2を使用する場合に設定します。

宣言

【C#の場合】

public const int DCMCFBUF2

【Visual Basicの場合】

Public Const DCMCFBUF2 As Integer

【J#の場合】

public static final int DCMCFBUF2

●DCMCFEMI

説明

最終セグメントを送信する場合に設定します。

メッセージが単一セグメントの場合も，DCMCFEMIを設定します。

メッセージの送信の終了を連絡するために，最後は必ずこの値を設定してください。

この値を設定してSendReceiveメソッドを呼び出すと，論理端末からの応答を待ちます。

宣言

【C#の場合】

public const int DCMCFEMI

【Visual Basicの場合】

Public Const DCMCFEMI As Integer

【J#の場合】

public static final int DCMCFEMI

●DCMCFNORM

説明

一般の一方送信メッセージとして送信する場合に設定します。

宣言

【C#の場合】

public const int DCMCFNORM

【Visual Basicの場合】

Public Const DCMCFNORM As Integer

【J#の場合】

public static final int DCMCFNORM

●DCMCFNSEQ

説明

出力通番が必要ない場合に設定します。

宣言

【C#の場合】

public const int DCMCFNSEQ

【Visual Basicの場合】

Public Const DCMCFNSEQ As Integer

【J#の場合】

public static final int DCMCFNSEQ

●DCMCFPRIO

説明

優先の一方送信メッセージとして送信する場合に設定します。

宣言

【C#の場合】

public const int DCMCFPRIO

【Visual Basicの場合】

Public Const DCMCFPRIO As Integer

【J#の場合】

public static final int DCMCFPRIO

●DCMCFSEQ

説明

出力通番が必要な場合に設定します。

宣言

【C#の場合】

public const int DCMCFSEQ

【Visual Basicの場合】

Public Const DCMCFSEQ As Integer

【J#の場合】

public static final int DCMCFSEQ

●DCNOFLAGS

説明

オプションフラグを指定しません。

宣言

【C#の場合】

public const int DCNOFLAGS

【Visual Basicの場合】

Public Const DCNOFLAGS As Integer

【J#の場合】

public static final int DCNOFLAGS

●DCRPC_CHAINED

説明

連鎖RPCです。

宣言

【C#の場合】

public const int DCRPC_CHAINED

【Visual Basicの場合】

Public Const DCRPC_CHAINED As Integer

【J#の場合】

public static final int DCRPC_CHAINED

●DCRPC_DOMAIN

説明

サービスグループ名をドメイン修飾した場合に指定します。ドメイン修飾をしたRPCはトランザクションブランチにできません。そのため，トランザクションの処理からCallメソッドを使う場合は，必ずDCRPC_TPNOTRANと一緒に指定してください。

宣言

【C#の場合】

public const int DCRPC_DOMAIN

【Visual Basicの場合】

Public Const DCRPC_DOMAIN As Integer

【J#の場合】

public static final int DCRPC_DOMAIN

●DCRPC_NAMPORT

説明

ホスト名を検索のキーにする場合に指定します。

宣言

【C#の場合】

public const int DCRPC_NAMPORT

【Visual Basicの場合】

Public Const DCRPC_NAMPORT As Integer

【J#の場合】

public static final int DCRPC_NAMPORT

●DCRPC_NOREPLY

説明

非応答型RPCです。

宣言

【C#の場合】

public const int DCRPC_NOREPLY

【Visual Basicの場合】

Public Const DCRPC_NOREPLY As Integer

【J#の場合】

public static final int DCRPC_NOREPLY

●DCRPC_NOWAIT

説明

非同期応答型RPCです。

宣言

【C#の場合】

public const int DCRPC_NOWAIT

【Visual Basicの場合】

Public Const DCRPC_NOWAIT As Integer

【J#の場合】

public static final int DCRPC_NOWAIT

●DCRPC_SPECIFIC_MSG

説明

引数に設定した記述子をリターンした，非同期応答型RPCの応答を受信します。

宣言

【C#の場合】

public const int DCRPC_SPECIFIC_MSG

【Visual Basicの場合】

Public Const DCRPC_SPECIFIC_MSG As Integer

【J#の場合】

public static final int DCRPC_SPECIFIC_MSG

●DCRPC_TPNOTRAN

説明

トランザクション処理からのサービス要求で，要求先の処理をトランザクションにしない場合に設定します。

宣言

【C#の場合】

public const int DCRPC_TPNOTRAN

【Visual Basicの場合】

Public Const DCRPC_TPNOTRAN As Integer

【J#の場合】

public static final int DCRPC_TPNOTRAN

●DCRPC_WAIT_MILLISEC

説明

引数で設定した待ち時間の単位をミリ秒にします。

宣言

【C#の場合】

public const int DCRPC_WAIT_MILLISEC

【Visual Basicの場合】

Public Const DCRPC_WAIT_MILLISEC As Integer

【J#の場合】

public static final int DCRPC_WAIT_MILLISEC

●DCRTS_END

説明

eventIDに設定した項目IDの実行時間を取得して，計測を終了します。

宣言

【C#の場合】

public const int DCRTS_END

【Visual Basicの場合】

Public Const DCRTS_END As Integer

【J#の場合】

public static final int DCRTS_END

●DCRTS_START

説明

eventIDに設定した項目IDの実行時間の計測を開始します。このフラグを設定してPutUTraceメソッドを呼び出した時点では，リアルタイム統計情報を取得しません。

宣言

【C#の場合】

public const int DCRTS_START

【Visual Basicの場合】

Public Const DCRTS_START As Integer

【J#の場合】

public static final int DCRTS_START

●DCTAM_ADD

説明

追加します。

宣言

【C#の場合】

public const int DCTAM_ADD

【Visual Basicの場合】

Public Const DCTAM_ADD As Integer

【J#の場合】

public static final int DCTAM_ADD

●DCTAM_EQLSRC

説明

'キー値='を検索します（ハッシュ，ツリー）。

宣言

【C#の場合】

public const int DCTAM_EQLSRC

【Visual Basicの場合】

Public Const DCTAM_EQLSRC As Integer

【J#の場合】

public static final int DCTAM_EQLSRC

●DCTAM_EXCLUSIVE

説明

排他します。

宣言

【C#の場合】

public const int DCTAM_EXCLUSIVE

【Visual Basicの場合】

Public Const DCTAM_EXCLUSIVE As Integer

【J#の場合】

public static final int DCTAM_EXCLUSIVE

●DCTAM_FIRSTSRC

説明

先頭から検索します（ハッシュ）。

宣言

【C#の場合】

public const int DCTAM_FIRSTSRC

【Visual Basicの場合】

Public Const DCTAM_FIRSTSRC As Integer

【J#の場合】

public static final int DCTAM_FIRSTSRC

●DCTAM_GRTEQLSRC

説明

'キー値<='を検索します（ツリー）。

宣言

【C#の場合】

public const int DCTAM_GRTEQLSRC

【Visual Basicの場合】

Public Const DCTAM_GRTEQLSRC As Integer

【J#の場合】

public static final int DCTAM_GRTEQLSRC

●DCTAM_GRTSRC

説明

'キー値<'を検索します（ツリー）。

宣言

【C#の場合】

public const int DCTAM_GRTSRC

【Visual Basicの場合】

Public Const DCTAM_GRTSRC As Integer

【J#の場合】

public static final int DCTAM_GRTSRC

●DCTAM_LSSEQLSRC

説明

'キー値>='を検索します（ツリー）。

宣言

【C#の場合】

public const int DCTAM_LSSEQLSRC

【Visual Basicの場合】

Public Const DCTAM_LSSEQLSRC As Integer

【J#の場合】

public static final int DCTAM_LSSEQLSRC

●DCTAM_LSSSRC

説明

'キー値>'を検索します（ツリー）。

宣言

【C#の場合】

public const int DCTAM_LSSSRC

【Visual Basicの場合】

Public Const DCTAM_LSSSRC As Integer

【J#の場合】

public static final int DCTAM_LSSSRC

●DCTAM_MODIFY

説明

更新目的の排他です。

宣言

【C#の場合】

public const int DCTAM_MODIFY

【Visual Basicの場合】

Public Const DCTAM_MODIFY As Integer

【J#の場合】

public static final int DCTAM_MODIFY

●DCTAM_NEXTSRC

説明

設定したキー値の，次のレコードから検索します（ハッシュ）。

宣言

【C#の場合】

public const int DCTAM_NEXTSRC

【Visual Basicの場合】

Public Const DCTAM_NEXTSRC As Integer

【J#の場合】

public static final int DCTAM_NEXTSRC

●DCTAM_NOEXCLUSIVE

説明

排他をしません。

宣言

【C#の場合】

public const int DCTAM_NOEXCLUSIVE

【Visual Basicの場合】

Public Const DCTAM_NOEXCLUSIVE As Integer

【J#の場合】

public static final int DCTAM_NOEXCLUSIVE

●DCTAM_NOOUTREC

説明

削除するレコードを退避しません。

宣言

【C#の場合】

public const int DCTAM_NOOUTREC

【Visual Basicの場合】

Public Const DCTAM_NOOUTREC As Integer

【J#の場合】

public static final int DCTAM_NOOUTREC

●DCTAM_NOWAIT

説明

排他解除待ちをしません。

宣言

【C#の場合】

public const int DCTAM_NOWAIT

【Visual Basicの場合】

Public Const DCTAM_NOWAIT As Integer

【J#の場合】

public static final int DCTAM_NOWAIT

●DCTAM_OUTREC

説明

削除するレコードを退避します。

宣言

【C#の場合】

public const int DCTAM_OUTREC

【Visual Basicの場合】

Public Const DCTAM_OUTREC As Integer

【J#の場合】

public static final int DCTAM_OUTREC

●DCTAM_REC_EXCLUSIVE

説明

レコード排他です。

宣言

【C#の場合】

public const int DCTAM_REC_EXCLUSIVE

【Visual Basicの場合】

Public Const DCTAM_REC_EXCLUSIVE As Integer

【J#の場合】

public static final int DCTAM_REC_EXCLUSIVE

●DCTAM_REFERENCE

説明

参照目的の排他です。

宣言

【C#の場合】

public const int DCTAM_REFERENCE

【Visual Basicの場合】

Public Const DCTAM_REFERENCE As Integer

【J#の場合】

public static final int DCTAM_REFERENCE

●DCTAM_TBL_EXCLUSIVE

説明

テーブル排他です。

宣言

【C#の場合】

public const int DCTAM_TBL_EXCLUSIVE

【Visual Basicの場合】

Public Const DCTAM_TBL_EXCLUSIVE As Integer

【J#の場合】

public static final int DCTAM_TBL_EXCLUSIVE

●DCTAM_WAIT

説明

排他解除待ちをします。

宣言

【C#の場合】

public const int DCTAM_WAIT

【Visual Basicの場合】

Public Const DCTAM_WAIT As Integer

【J#の場合】

public static final int DCTAM_WAIT

●DCTAM_WRITE

説明

更新します。

宣言

【C#の場合】

public const int DCTAM_WRITE

【Visual Basicの場合】

Public Const DCTAM_WRITE As Integer

【J#の場合】

public static final int DCTAM_WRITE

●DCTAM_WRTADD

説明

更新または追加します。

宣言

【C#の場合】

public const int DCTAM_WRTADD

【Visual Basicの場合】

Public Const DCTAM_WRTADD As Integer

【J#の場合】

public static final int DCTAM_WRTADD

TP1ServerLimits

TP1ServerLimitsの概要

名前空間

Hitachi.OpenTP1.Server

継承関係

System.Object
 +- Hitachi.OpenTP1.Server.TP1ServerLimits

説明

OpenTP1で使用する長さの制限などを定義します。

フィールドの一覧

名称 | 説明
DCRPC_MAX_MESSAGE_SIZE | RPCの送受信メッセージの最大長です。

フィールドの詳細

●DCRPC_MAX_MESSAGE_SIZE

説明

RPCの送受信メッセージの最大長です。

宣言

【C#の場合】

public const long DCRPC_MAX_MESSAGE_SIZE

【Visual Basicの場合】

Public Const DCRPC_MAX_MESSAGE_SIZE As Long

【J#の場合】

public static final long DCRPC_MAX_MESSAGE_SIZE

TP1ServerValues

TP1ServerValuesの概要

名前空間

Hitachi.OpenTP1.Server

継承関係

System.Object
 +- Hitachi.OpenTP1.Server.TP1ServerValues

説明

TP1ServerValuesクラスは，OpenTP1の各種値を提供します。

フィールドの一覧

名称
説明

DCADM_STAT_NOT_UP
指定したOpenTP1ノードとは，次に示す理由で通信できません。

OpenTP1ノードのOpenTP1を，dcsetupコマンドで登録するか，または登録し直す必要があります。

マルチノード物理定義に指定した値が間違っています。

通信障害が起こりました。

DCADM_STAT_ONLINE
ユーザサーバはオンライン中です。

DCADM_STAT_START_NORMAL
ユーザサーバは正常開始中です。

DCADM_STAT_START_RECOVER
ユーザサーバは再開始中です。

DCADM_STAT_STOP
ユーザサーバは正常終了処理中です。

DCADM_STAT_STOPA
OpenTP1ノードは計画停止Aで終了処理中です。

DCADM_STAT_STOPB
OpenTP1ノードは計画停止Bで終了処理中です。

DCADM_STAT_SWAP
系切り替えが起こっています。

DCADM_STAT_TERM
OpenTP1ノードが停止中です。または異常終了中です。

DCTAM_STS_CLS
TAMテーブルがクローズ状態であることを示します。

DCTAM_STS_CMD
tamloadコマンドを実行したときであることを示します。

DCTAM_STS_HASH
ハッシュ形式であることを示します。

DCTAM_STS_LHLD
TAMテーブルが論理閉塞状態であることを示します。

DCTAM_STS_LIB
Tam.OpenメソッドでTAMテーブルをオープンしたときであることを示します。

DCTAM_STS_NOSEC
セキュリティの指定がないことを示します。

DCTAM_STS_OHLD
TAMテーブルが障害閉塞状態であることを示します。

DCTAM_STS_OPN
TAMテーブルがオープン状態であることを示します。

DCTAM_STS_READ
参照型であることを示します。

DCTAM_STS_RECLCK
テーブル排他を確保しない，追加・削除できる更新型であることを示します。

DCTAM_STS_REWRITE
追加・削除できない更新型であることを示します。

DCTAM_STS_SEC
セキュリティの指定があることを示します。

DCTAM_STS_START
TAMサービスの開始時であることを示します。

DCTAM_STS_TREE
ツリー形式であることを示します。

DCTAM_STS_WRITE
追加・削除できる更新型であることを示します。

フィールドの詳細

●DCADM_STAT_NOT_UP

説明

指定したOpenTP1ノードとは，次に示す理由で通信できません。

OpenTP1ノードのOpenTP1を，dcsetupコマンドで登録するか，または登録し直す必要があります。

マルチノード物理定義に指定した値が間違っています（OpenTP1ノードを登録していない，もしくは指定したホスト名またはポート番号が間違っています）。

通信障害が起こりました（OpenTP1ノードのマシンの電源を入れていないか，またはネットワーク障害が起こりました）。

宣言

【C#の場合】

public const int DCADM_STAT_NOT_UP

【Visual Basicの場合】

Public Const DCADM_STAT_NOT_UP As Integer

【J#の場合】

public static final int DCADM_STAT_NOT_UP

●DCADM_STAT_ONLINE

説明

ユーザサーバはオンライン中です。

宣言

【C#の場合】

public const int DCADM_STAT_ONLINE

【Visual Basicの場合】

Public Const DCADM_STAT_ONLINE As Integer

【J#の場合】

public static final int DCADM_STAT_ONLINE

●DCADM_STAT_START_NORMAL

説明

ユーザサーバは正常開始中です。

宣言

【C#の場合】

public const int DCADM_STAT_START_NORMAL

【Visual Basicの場合】

Public Const DCADM_STAT_START_NORMAL As Integer

【J#の場合】

public static final int DCADM_STAT_START_NORMAL

●DCADM_STAT_START_RECOVER

説明

ユーザサーバは再開始中です。

宣言

【C#の場合】

public const int DCADM_STAT_START_RECOVER

【Visual Basicの場合】

Public Const DCADM_STAT_START_RECOVER As Integer

【J#の場合】

public static final int DCADM_STAT_START_RECOVER

●DCADM_STAT_STOP

説明

ユーザサーバは正常終了処理中です。

宣言

【C#の場合】

public const int DCADM_STAT_STOP

【Visual Basicの場合】

Public Const DCADM_STAT_STOP As Integer

【J#の場合】

public static final int DCADM_STAT_STOP

●DCADM_STAT_STOPA

説明

OpenTP1ノードは計画停止Aで終了処理中です。

宣言

【C#の場合】

public const int DCADM_STAT_STOPA

【Visual Basicの場合】

Public Const DCADM_STAT_STOPA As Integer

【J#の場合】

public static final int DCADM_STAT_STOPA

●DCADM_STAT_STOPB

説明

OpenTP1ノードは計画停止Bで終了処理中です。

宣言

【C#の場合】

public const int DCADM_STAT_STOPB

【Visual Basicの場合】

Public Const DCADM_STAT_STOPB As Integer

【J#の場合】

public static final int DCADM_STAT_STOPB

●DCADM_STAT_SWAP

説明

系切り替えが起こっています。

宣言

【C#の場合】

public const int DCADM_STAT_SWAP

【Visual Basicの場合】

Public Const DCADM_STAT_SWAP As Integer

【J#の場合】

public static final int DCADM_STAT_SWAP

●DCADM_STAT_TERM

説明

OpenTP1ノードが停止中です。または異常終了中です。

宣言

【C#の場合】

public const int DCADM_STAT_TERM

【Visual Basicの場合】

Public Const DCADM_STAT_TERM As Integer

【J#の場合】

public static final int DCADM_STAT_TERM

●DCTAM_STS_CLS

説明

TAMテーブルがクローズ状態であることを示します。

宣言

【C#の場合】

public const int DCTAM_STS_CLS

【Visual Basicの場合】

Public Const DCTAM_STS_CLS As Integer

【J#の場合】

public static final int DCTAM_STS_CLS

●DCTAM_STS_CMD

説明

tamloadコマンドを実行したときであることを示します。

宣言

【C#の場合】

public const int DCTAM_STS_CMD

【Visual Basicの場合】

Public Const DCTAM_STS_CMD As Integer

【J#の場合】

public static final int DCTAM_STS_CMD

●DCTAM_STS_HASH

説明

ハッシュ形式であることを示します。

宣言

【C#の場合】

public const int DCTAM_STS_HASH

【Visual Basicの場合】

Public Const DCTAM_STS_HASH As Integer

【J#の場合】

public static final int DCTAM_STS_HASH

●DCTAM_STS_LHLD

説明

TAMテーブルが論理閉塞状態であることを示します。

宣言

【C#の場合】

public const int DCTAM_STS_LHLD

【Visual Basicの場合】

Public Const DCTAM_STS_LHLD As Integer

【J#の場合】

public static final int DCTAM_STS_LHLD

●DCTAM_STS_LIB

説明

Tam.OpenメソッドでTAMテーブルをオープンしたときであることを示します。

宣言

【C#の場合】

public const int DCTAM_STS_LIB

【Visual Basicの場合】

Public Const DCTAM_STS_LIB As Integer

【J#の場合】

public static final int DCTAM_STS_LIB

●DCTAM_STS_NOSEC

説明

セキュリティの指定がないことを示します。

宣言

【C#の場合】

public const int DCTAM_STS_NOSEC

【Visual Basicの場合】

Public Const DCTAM_STS_NOSEC As Integer

【J#の場合】

public static final int DCTAM_STS_NOSEC

●DCTAM_STS_OHLD

説明

TAMテーブルが障害閉塞状態であることを示します。

宣言

【C#の場合】

public const int DCTAM_STS_OHLD

【Visual Basicの場合】

Public Const DCTAM_STS_OHLD As Integer

【J#の場合】

public static final int DCTAM_STS_OHLD

●DCTAM_STS_OPN

説明

TAMテーブルがオープン状態であることを示します。

宣言

【C#の場合】

public const int DCTAM_STS_OPN

【Visual Basicの場合】

Public Const DCTAM_STS_OPN As Integer

【J#の場合】

public static final int DCTAM_STS_OPN

●DCTAM_STS_READ

説明

参照型であることを示します。

宣言

【C#の場合】

public const int DCTAM_STS_READ

【Visual Basicの場合】

Public Const DCTAM_STS_READ As Integer

【J#の場合】

public static final int DCTAM_STS_READ

●DCTAM_STS_RECLCK

説明

テーブル排他を確保しない，追加・削除できる更新型であることを示します。

宣言

【C#の場合】

public const int DCTAM_STS_RECLCK

【Visual Basicの場合】

Public Const DCTAM_STS_RECLCK As Integer

【J#の場合】

public static final int DCTAM_STS_RECLCK

●DCTAM_STS_REWRITE

説明

追加・削除できない更新型であることを示します。

宣言

【C#の場合】

public const int DCTAM_STS_REWRITE

【Visual Basicの場合】

Public Const DCTAM_STS_REWRITE As Integer

【J#の場合】

public static final int DCTAM_STS_REWRITE

●DCTAM_STS_SEC

説明

セキュリティの指定があることを示します。

宣言

【C#の場合】

public const int DCTAM_STS_SEC

【Visual Basicの場合】

Public Const DCTAM_STS_SEC As Integer

【J#の場合】

public static final int DCTAM_STS_SEC

●DCTAM_STS_START

説明

TAMサービスの開始時であることを示します。

宣言

【C#の場合】

public const int DCTAM_STS_START

【Visual Basicの場合】

Public Const DCTAM_STS_START As Integer

【J#の場合】

public static final int DCTAM_STS_START

●DCTAM_STS_TREE

説明

ツリー形式であることを示します。

宣言

【C#の場合】

public const int DCTAM_STS_TREE

【Visual Basicの場合】

Public Const DCTAM_STS_TREE As Integer

【J#の場合】

public static final int DCTAM_STS_TREE

●DCTAM_STS_WRITE

説明

追加・削除できる更新型であることを示します。

宣言

【C#の場合】

public const int DCTAM_STS_WRITE

【Visual Basicの場合】

Public Const DCTAM_STS_WRITE As Integer

【J#の場合】

public static final int DCTAM_STS_WRITE

TP1UserException

TP1UserExceptionの概要

名前空間

Hitachi.OpenTP1

継承関係

System.Object
 +- System.Exception
   +- Hitachi.OpenTP1.TP1Exception
     +- Hitachi.OpenTP1.TP1UserException

実装インタフェース

System.Runtime.Serialization.ISerializable

説明

（ユーザアプリケーションプログラム例外）

TP1UserExceptionクラスは，SPP.NETのサービスメソッド内でユーザがスローする例外です。

サービス呼び出し元のSUP.NETおよびCUP.NETでは例外情報から復元してユーザにスローします。

コンストラクタの一覧

名称 | 説明
TP1UserException(System.Int32, System.String) | TP1UserExceptionクラスのコンストラクタです。
TP1UserException(System.Int32, System.String, System.String) | エラーコード，エラー情報，およびこの例外の原因を説明するメッセージを指定するコンストラクタです。

プロパティの一覧

名称 | 説明
Information | エラー情報の文字列を返します。

メソッドの一覧

名称 | 説明
ToString() | このExceptionクラスを表す文字列を返します。

コンストラクタの詳細

●TP1UserException

説明

TP1UserExceptionクラスのコンストラクタです。

宣言

【C#の場合】

public TP1UserException(
 int errCode,
 string argInfo
);

【Visual Basicの場合】

Public New( _
 ByVal errCode As Integer, _
 ByVal argInfo As String _
)

【J#の場合】

public TP1UserException(
 int errCode,
 System.String argInfo
);

パラメタ

errCode

エラーコード。

argInfo

エラー情報。

例外

なし

●TP1UserException

説明

エラーコード，エラー情報，およびこの例外の原因を説明するメッセージを指定するコンストラクタです。

宣言

【C#の場合】

public TP1UserException(
 int errCode,
 string argInfo,
 string message
);

【Visual Basicの場合】

Public New( _
 ByVal errCode As Integer, _
 ByVal argInfo As String, _
 ByVal message As String _
)

【J#の場合】

public TP1UserException(
 int errCode,
 System.String argInfo,
 System.String message
);

パラメタ

errCode

エラーコード。

argInfo

エラー情報。

message

例外の原因を説明するエラーメッセージ。

例外

なし

プロパティの詳細

●Information

説明

エラー情報の文字列を返します。

宣言

【C#の場合】

public string Information {get;}

【Visual Basicの場合】

Public ReadOnly Property Information As String

【J#の場合】

public System.String get_Information();

例外

なし

メソッドの詳細

●ToString

説明

このExceptionクラスを表す，次の形式の文字列を返します。

Exceptionクラスの名称: Messageプロパティの値

ErrorCode = ErrorCodeプロパティの値

Information = Informationプロパティの値

StackTraceプロパティの値

宣言

【C#の場合】

public virtual string ToString(
);

【Visual Basicの場合】

Public Overridable Function ToString( _
) As String

【J#の場合】

public System.String ToString(
);

パラメタ

なし

戻り値

このExceptionクラスを表す文字列。

例外

なし

TP1UserStruct

TP1UserStructの概要

名前空間

Hitachi.OpenTP1

継承関係

System.Object
 +- Hitachi.OpenTP1.TP1UserStruct

説明

TP1ユーザ構造体を利用するには，このクラスを継承する必要があります。

Trn

Trnの概要

名前空間

Hitachi.OpenTP1.Server

継承関係

System.Object
 +- Hitachi.OpenTP1.Server.Trn

説明

Trnクラスは，OpenTP1独自のトランザクション制御をするメソッドを提供します。

メソッドの一覧

名称 | 説明
Begin() | グローバルトランザクションを，このメソッドを呼び出したプロセスから開始します。
Commit() | グローバルトランザクションの正常終了（コミット）を，トランザクションを構成するトランザクションブランチ，トランザクションサービス，およびリソースマネジャに知らせます。
CommitChained() | トランザクションの同期点を取得します。グローバルトランザクションのルートトランザクションブランチとして，処理が正常に終了したこと（コミット）を，トランザクションを構成するトランザクションブランチのUAP，トランザクションサービス，およびリソースマネジャに知らせます。
GetInfo() | GetInfoメソッドを呼び出したUAPが，現在トランザクションとして起動しているかどうかを返します。
Rollback() | トランザクションをロールバックします。非連鎖モードでロールバックしたあとには，トランザクションは続けて開始しません。
RollbackChained() | トランザクションをロールバックします。RollbackChainedメソッドを呼び出したあとには，続けてトランザクションが開始します。

メソッドの詳細

●Begin

説明

グローバルトランザクションを，このメソッドを呼び出したプロセスから開始します。

Beginメソッドを呼び出したプロセスは，グローバルトランザクションのルートトランザクションブランチになります。

Beginメソッドを呼び出したUAPは，実行環境の設定でトランザクション属性を指定しておいてください。また，すでにBeginメソッドを呼び出しているグローバルトランザクションの中では，どのトランザクションブランチからも再びBeginメソッドを呼び出せません。一つのグローバルトランザクション中で重複して呼び出した場合は例外が発生します。

宣言

【C#の場合】

public static void Begin(
);

【Visual Basicの場合】

Public Shared Sub Begin( _
)

【J#の場合】

public static void Begin(
);

パラメタ

なし

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCTRNER_PROTO
Beginメソッドを不正なコンテキスト（例えば，すでにトランザクション内にいる）から呼び出しています。
RpcクラスのOpenメソッドを呼び出していません。

DCTRNER_RM
リソースマネジャ（RM）でエラーが発生しました。
トランザクションは開始できませんでした。

DCTRNER_TM
トランザクションサービスでエラーが起こったので，トランザクションは開始できませんでした。このエラーコードが戻った場合は，再びBeginメソッドを実行すると成功する可能性が高いので，再実行してください。

●Commit

説明

グローバルトランザクションの正常終了（コミット）を，トランザクションを構成するトランザクションブランチ，トランザクションサービス，およびリソースマネジャに知らせます。

Commitメソッドが正常に終了したあとで，新しいグローバルトランザクションは開始しません。

グローバルトランザクションが複数のトランザクションブランチから構成されるとき（メソッドを呼び出したUAPだけでないとき）は，それぞれのトランザクションブランチの処理結果がコミットとならないかぎり，コミットされません。

Commitメソッドを呼び出せるのは，ルートトランザクションブランチ（トランザクションを開始したUAP）だけです。それ以外のUAPから呼び出した場合は，例外が発生します。

Commitメソッドを呼び出すプロセスは，このクラスリファレンスの記述に従って正しく作成されたUAPを稼働させたものでなければなりません。

Commitメソッドは，同期点処理が完了したときに，正常に終了，またはエラーリターンのどちらかで返ります。Commitメソッドを呼び出すサービスが正常に終了するためには，UAPの実行環境を設定するときに，トランザクション属性を指定していることが前提となります。

宣言

【C#の場合】

public static void Commit(
);

【Visual Basicの場合】

Public Shared Sub Commit( _
)

【J#の場合】

public static void Commit(
);

パラメタ

なし

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCTRNER_HAZARD
グローバルトランザクションのトランザクションブランチがヒューリスティックに完了しました。しかし，障害のため，ヒューリスティックに完了したトランザクションブランチの同期点の結果がわかりません。
このエラーコードが返る原因になったUAP，リソースマネジャ，およびグローバルトランザクションの同期点の結果は，メッセージログファイルを参照してください。
このエラーコードが返ったあと，このプロセスはトランザクション下にはありません。プロセスはグローバルトランザクションの範囲外です。

DCTRNER_HEURISTIC
Commitメソッドを呼び出したグローバルトランザクションは，ヒューリスティック決定のため，あるトランザクションブランチはコミットし，あるトランザクションブランチはロールバックしました。
このエラーコードは，ヒューリスティック決定の結果が，グローバルトランザクションの同期点の結果と一致しなかった場合に返します。
このエラーコードが返る原因になったUAP，リソースマネジャ，およびグローバルトランザクションの同期点の結果は，メッセージログファイルを参照してください。
このエラーコードが返ったあと，このプロセスはトランザクション下にはありません。プロセスはグローバルトランザクションの範囲外です。

DCTRNER_PROTO
Commitメソッドを不正なコンテキスト（例えば，すでにトランザクション中にいない）で呼び出しています。
トランザクションモードに対する影響はありません。
RpcクラスのOpenメソッドを呼び出していません。

DCTRNER_ROLLBACK
現在のトランザクションは，コミットできないでロールバックしました。プロセスはトランザクションの範囲外です。

●CommitChained

説明

トランザクションの同期点を取得します。グローバルトランザクションのルートトランザクションブランチとして，処理が正常に終了したこと（コミット）を，トランザクションを構成するトランザクションブランチのUAP，トランザクションサービス，およびリソースマネジャに知らせます。

CommitChainedメソッドが正常に終了すると，新しいグローバルトランザクションが開始され，メソッドを呼び出したプロセスはこのトランザクションの範囲内になります。しかし，このことは，このメソッドを呼び出したUAP以外のトランザクションモードに対しての指定を意味しません。

グローバルトランザクションが複数のトランザクションブランチから構成されるとき（メソッドを呼び出したUAPだけでないとき）は，それぞれのトランザクションブランチの処理結果がコミットとならないかぎりコミットされません。

CommitChainedメソッドを呼び出せるのはルートトランザクションブランチ（Beginメソッドを呼び出したUAP）だけです。それ以外のUAPから呼び出した場合は，例外が発生します。

CommitChainedメソッドを呼び出すプロセスは，このクラスリファレンスの記述に従って正しく作成されたUAPを稼働させたものでなければなりません。

CommitChainedメソッドは，同期点処理が完了したときに正常に終了，または例外応答のどちらかで返ります。CommitChainedメソッドが正常に終了するためには，UAPの実行環境を設定するときに，トランザクション属性を指定していることが必要です。

宣言

【C#の場合】

public static void CommitChained(
);

【Visual Basicの場合】

Public Shared Sub CommitChained( _
)

【J#の場合】

public static void CommitChained(
);

パラメタ

なし

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCTRNER_HAZARD
グローバルトランザクションのトランザクションブランチがヒューリスティックに完了しました。しかし，障害のため，ヒューリスティックに完了したトランザクションブランチの同期点の結果がわかりません。
このエラーコードが返る原因になったUAP，リソースマネジャ，およびグローバルトランザクションの同期点の結果は，メッセージログファイルを参照してください。
このエラーコードが返ったあとも，このプロセスはトランザクション下にあって，グローバルトランザクションの範囲内です。

DCTRNER_HAZARD
グローバルトランザクションのトランザクションブランチがヒューリスティックに完了しました。しかし，障害のため，ヒューリスティックに完了したトランザクションブランチの同期点の結果がわかりません。
このエラーコードが返る原因になったUAP，リソースマネジャ，およびグローバルトランザクションの同期点の結果は，メッセージログファイルを参照してください。
このエラーコードが返ったあとも，このプロセスはトランザクション下にあって，グローバルトランザクションの範囲内です。

DCTRNER_HAZARD_NO_BEGIN
グローバルトランザクションのトランザクションブランチがヒューリスティックに完了しました。しかし，障害のため，ヒューリスティックに完了したトランザクションブランチの同期点の結果がわかりません。
このエラーコードが返される原因となったUAP，リソースマネジャ，およびグローバルトランザクションの同期点の結果は，メッセージログファイルの内容を参照してください。新しいトランザクションは開始できませんでした。このエラーコードが返ったあと，このプロセスはトランザクション下にはありません。

DCTRNER_HEURISTIC
CommitChainedメソッドを呼び出したグローバルトランザクションは，ヒューリスティック決定のため，あるトランザクションブランチはコミットし，あるトランザクションブランチはロールバックしました。
このエラーコードは，ヒューリスティック決定の結果が，グローバルトランザクションの同期点の結果と一致しなかった場合にリターンします。
このエラーコードが返る原因になったUAP，リソースマネジャ，およびグローバルトランザクションの同期点の結果は，メッセージログファイルを参照してください。
このエラーコードが返ったあとも，このプロセスはトランザクション下にあって，グローバルトランザクションの範囲内です。

DCTRNER_HEURISTIC_NO_BEGIN
CommitChainedメソッドを呼び出したグローバルトランザクションは，ヒューリスティック決定のため，あるトランザクションブランチはコミットし，あるトランザクションブランチはロールバックしました。
このエラーコードは，ヒューリスティック決定の結果が，グローバルトランザクションの同期点の結果と一致しなかった場合にリターンされます。
このエラーコードが返される原因となったUAP，リソースマネジャ，およびグローバルトランザクションの同期点の結果は，メッセージログファイルの内容を参照してください。新しいトランザクションは開始できませんでした。このエラーコードが返ったあと，このプロセスはトランザクション下にはありません。

DCTRNER_NO_BEGIN
コミット処理は正常に終了しましたが，新しいトランザクションは開始できませんでした。このエラーコードが返ったあと，このプロセスはトランザクション下にはありません。

DCTRNER_PROTO
CommitChainedメソッドを不正なコンテキスト（例えば，すでにトランザクション中にいない）で呼び出しています。
トランザクションモードに対する影響はありません。
RpcクラスのOpenメソッドを呼び出していません。

DCTRNER_ROLLBACK
現在のトランザクションは，コミットできないでロールバックしました。
このエラーコードが返ったあとも，このプロセスはトランザクション下にあって，グローバルトランザクションの範囲内です。

●GetInfo

説明

GetInfoメソッドを呼び出したUAPが，現在トランザクションとして起動しているかどうかを返します。

GetInfoメソッドを呼び出すプロセスは，このクラスリファレンスの記述に従って正しく作成されたUAPを稼働させたものでなければなりません。

GetInfoメソッドを呼び出すサービスが正常終了するためには，UAPの実行環境を設定するときに，トランザクション属性を指定していることが前提です。

宣言

【C#の場合】

public static int GetInfo(
);

【Visual Basicの場合】

Public Shared Function GetInfo( _
) As Integer

【J#の場合】

public static int GetInfo(
);

パラメタ

なし

戻り値

1
GetInfoメソッドを呼び出したプロセスは，トランザクションとして起動しています。

0
GetInfoメソッドを呼び出したプロセスは，トランザクションとして起動していません。

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード | 説明
DCTRNER_PROTO | RpcクラスのOpenメソッドを呼び出していません。

注意事項

このAPIはUAPトレースを取得していません。

●Rollback

説明

トランザクションをロールバックします。非連鎖モードでロールバックしたあとには，トランザクションは続けて開始しません。

Rollbackメソッドを呼び出すことで，トランザクションブランチ，トランザクションサービス，およびリソースマネジャにロールバックを知らせます。

Rollbackメソッドは，グローバルトランザクションのどのトランザクションブランチからでも呼び出せます。

ルートトランザクションブランチから呼び出した場合，Rollbackメソッドが正常終了したあとには，新しいトランザクションは開始しません。

ルートトランザクションブランチ以外から呼び出した場合は，そのトランザクションブランチをrollback_only状態にします。

この場合，ルートトランザクションブランチの同期点処理が完了するまで，Rollbackメソッドを呼び出したトランザクションブランチはトランザクションの範囲内です。

Rollbackメソッドを呼び出すプロセスは，このクラスリファレンスの記述に従って正しく作成されたUAPを稼働させたものでなければなりません。

Rollbackメソッドを呼び出すサービスが正常に終了するためには，UAPの実行環境を設定するときに，トランザクション属性を指定していることが前提です。

宣言

【C#の場合】

public static void Rollback(
);

【Visual Basicの場合】

Public Shared Sub Rollback( _
)

【J#の場合】

public static void Rollback(
);

パラメタ

なし

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCTRNER_HAZARD
グローバルトランザクションのトランザクションブランチがヒューリスティックに完了しました。しかし，障害のため，ヒューリスティックに完了したトランザクションブランチの同期点の結果がわかりません。
このエラーコードが返る原因になったUAP，リソースマネジャ，およびグローバルトランザクションの同期点の結果は，メッセージログファイルを参照してください。
このエラーコードが返ったあと，このプロセスはトランザクション下になく，グローバルトランザクションの範囲外です。

DCTRNER_HAZARD_NO_BEGIN
グローバルトランザクションのトランザクションブランチがヒューリスティックに完了しました。しかし，障害のため，ヒューリスティックに完了したトランザクションブランチの同期点の結果がわかりません。
このエラーコードが返される原因となったUAP，リソースマネジャ，およびグローバルトランザクションの同期点の結果は，メッセージログファイルの内容を参照してください。新しいトランザクションは開始できませんでした。このエラーコードが返ったあと，このプロセスはトランザクション下にはありません。

DCTRNER_HEURISTIC
Rollbackメソッドを呼び出したグローバルトランザクションは，ヒューリスティック決定のため，あるトランザクションブランチはコミットし，あるトランザクションブランチはロールバックしました。
このエラーコードは，ヒューリスティック決定の結果が，グローバルトランザクションの同期点の結果と一致しなかった場合に返します。
このエラーコードが返る原因になったUAP，リソースマネジャ，およびグローバルトランザクションの同期点の結果は，メッセージログファイルを参照してください。
このエラーコードが返ったあと，このプロセスはトランザクション下になく，グローバルトランザクションの範囲外です。

DCTRNER_HEURISTIC_NO_BEGIN
RollbackChainedメソッドを呼び出したグローバルトランザクションは，ヒューリスティック決定のため，あるトランザクションブランチはコミットし，あるトランザクションブランチはロールバックしました。
このエラーコードは，ヒューリスティック決定の結果が，グローバルトランザクションの同期点の結果と一致しなかった場合にリターンされます。
このエラーコードが返される原因となったUAP，リソースマネジャ，およびグローバルトランザクションの同期点の結果は，メッセージログファイルの内容を参照してください。新しいトランザクションは開始できませんでした。このエラーコードが返ったあと，このプロセスはトランザクション下にはありません。

DCTRNER_NO_BEGIN
ロールバック処理は正常終了しましたが，新しいトランザクションは開始できませんでした。このエラーコードが返ったあと，このプロセスはトランザクション下にはありません。

DCTRNER_PROTO
Rollbackメソッドを不正なコンテキスト（例えば，すでにトランザクション中にいない）で呼び出しています。
トランザクションモードに対する影響はありません。
RpcクラスのOpenメソッドを呼び出していません。

●RollbackChained

説明

トランザクションをロールバックします。RollbackChainedメソッドを呼び出したあとには，続けてトランザクションが開始します。

RollbackChainedメソッドを呼び出すことで，ルートトランザクションブランチから，トランザクションブランチ，トランザクションサービス，およびリソースマネジャにロールバックを知らせます。

RollbackChainedメソッドが正常に終了すると，メソッドを呼び出したプロセスはロールバックしてリターンします。

そのあとで新しいグローバルトランザクションが開始します。

メソッドを呼び出したプロセスはこのトランザクションの範囲内です。

ただし，このメソッドを呼び出したUAP以外のトランザクションモードに対しての指定を意味しません。

RollbackChainedメソッドを呼び出せるのは，ルートトランザクションブランチ（Beginメソッドを呼び出したUAP）からだけです。

それ以外のUAPから呼び出した場合は，例外が発生します。

RollbackChainedメソッドを呼び出すプロセスは，このクラスリファレンスの記述に従って正しく作成されたUAPを稼働させたものでなければなりません。

RollbackChainedメソッドは，同期点処理が完了したときに，正常終了，または例外応答のどちらかで返ります。

RollbackChainedメソッドを呼び出すサービスが正常終了するためには，UAPの実行環境を設定するときに，トランザクション属性を指定していることが前提です。

宣言

【C#の場合】

public static void RollbackChained(
);

【Visual Basicの場合】

Public Shared Sub RollbackChained( _
)

【J#の場合】

public static void RollbackChained(
);

パラメタ

なし

戻り値

なし

例外

Hitachi.OpenTP1.Server.TP1ServerException

次の情報が出力されます。

メッセージ
例外の内容が出力されます。
OpenTP1提供関数内でエラーが発生した場合は，次のように出力されます。
"OpenTP1提供関数実行時にエラーが発生しました。"
それ以外の場合は，各エラーに対応したメッセージが出力されます。

クラス名
例外が発生したクラス名が出力されます。

メソッド名
例外が発生したメソッド名が出力されます。

エラーコード
発生原因に応じ，次のエラーコードが出力されます。

エラーコード
説明

DCTRNER_HAZARD
グローバルトランザクションのトランザクションブランチがヒューリスティックに完了しました。しかし，障害のため，ヒューリスティックに完了したトランザクションブランチの同期点の結果がわかりません。
このエラーコードが返る原因になったUAP，リソースマネジャ，およびグローバルトランザクションの同期点の結果は，メッセージログファイルを参照してください。
このエラーコードが返ったあとも，このプロセスはトランザクション下にあって，グローバルトランザクションの範囲内です。

DCTRNER_HAZARD_NO_BEGIN
グローバルトランザクションのトランザクションブランチがヒューリスティックに完了しました。しかし，障害のため，ヒューリスティックに完了したトランザクションブランチの同期点の結果がわかりません。
このエラーコードが返される原因となったUAP，リソースマネジャ，およびグローバルトランザクションの同期点の結果は，メッセージログファイルの内容を参照してください。新しいトランザクションは開始できませんでした。このエラーコードが返ったあと，このプロセスはトランザクション下にはありません。

DCTRNER_HEURISTIC
RollbackChainedメソッドを呼び出したグローバルトランザクションは，ヒューリスティック決定のため，あるトランザクションブランチはコミットし，あるトランザクションブランチはロールバックしました。
このエラーコードは，ヒューリスティック決定の結果が，グローバルトランザクションの同期点の結果と一致しなかった場合にリターンします。
このエラーコードが返る原因になったUAP，リソースマネジャ，およびグローバルトランザクションの同期点の結果は，メッセージログファイルを参照してください。
このエラーコードが返ったあとも，このプロセスはトランザクション下にあって，グローバルトランザクションの範囲内です。

DCTRNER_HEURISTIC_NO_BEGIN
RollbackChainedメソッドを呼び出したグローバルトランザクションは，ヒューリスティック決定のため，あるトランザクションブランチはコミットし，あるトランザクションブランチはロールバックしました。
このエラーコードは，ヒューリスティック決定の結果が，グローバルトランザクションの同期点の結果と一致しなかった場合にリターンされます。
このエラーコードが返される原因となったUAP，リソースマネジャ，およびグローバルトランザクションの同期点の結果は，メッセージログファイルの内容を参照してください。新しいトランザクションは開始できませんでした。このエラーコードが返ったあと，このプロセスはトランザクション下にはありません。

DCTRNER_NO_BEGIN
ロールバック処理は正常に終了しましたが，新しいトランザクションは開始できませんでした。このエラーコードが返ったあと，このプロセスはトランザクション下にはありません。

DCTRNER_PROTO
RollbackChainedメソッドを不正なコンテキスト（例えば，すでにトランザクション中にいない）で呼び出しています。
トランザクションモードに対する影響はありません。
RpcクラスのOpenメソッドを呼び出していません。

UByteArrayHolder

UByteArrayHolderの概要

名前空間

Hitachi.OpenTP1

継承関係

System.Object
 +- Hitachi.OpenTP1.UByteArrayHolder

実装インタフェース

Hitachi.OpenTP1.Common.IHolder

説明

UByteArrayHolderクラスは，System.Byte配列を保持するホルダークラスです。

プロパティの一覧

名称 | 説明
Value | 保持している変数に対して値の設定および参照を行います。

プロパティの詳細

●Value

説明

保持している変数に対して値の設定および参照を行います。

宣言

【C#の場合】

public byte[] Value {get; set;}

【Visual Basicの場合】

Public Property Value As Byte()

【J#の場合】

public ubyte[] get_Value();
public void set_Value(ubyte[]);

例外

なし

UByteHolder

UByteHolderの概要

名前空間

Hitachi.OpenTP1

継承関係

System.Object
 +- Hitachi.OpenTP1.UByteHolder

実装インタフェース

Hitachi.OpenTP1.Common.IHolder

説明

UByteHolderクラスは，System.Byte値を保持するホルダークラスです。

プロパティの一覧

名称 | 説明
Value | 保持している変数に対して値の設定および参照を行います。

プロパティの詳細

●Value

説明

保持している変数に対して値の設定および参照を行います。

宣言

【C#の場合】

public byte Value {get; set;}

【Visual Basicの場合】

Public Property Value As Byte

【J#の場合】

public ubyte get_Value();
public void set_Value(ubyte);

例外

なし

8.　障害運用

この章では，TP1/Extension for .NET Framework（Extension .NET）で障害が発生した場合の対処方法を説明します。

＜この章の構成＞

8.1　障害の種類と対処方法

8.2　障害時に取得する情報

8.3　.NETエラーログファイル

8.1　障害の種類と対処方法

Extension .NETで発生するおそれがある障害の種類とユーザが取る処置を次の表に示します。

表8-1　障害の種類とユーザの取る処置

障害の種類
障害の内容
Extension .NETの処理
ユーザが取る処置

通信障害

サーバ障害

ネットワーク障害

など

障害発生時の情報をメッセージログファイルに出力します。

例外をUAPに通知します。

障害原因を調査して取り除くか，または障害回復を待ち，再度処理を実行してください。
必要に応じてOpenTP1の定義の内容を見直してください。

ユーザサーバ障害

ユーザサーバの起動失敗，または停止失敗

ユーザサーバダウン

障害発生時の情報をメッセージログファイルに出力します。

ユーザサーバを異常終了させます。

SPP.NETおよびSUP.NETの処理，または環境を見直してください。
必要に応じてSPP.NETおよびSUP.NETのユーザサービス定義，およびOpenTP1の定義の内容を見直してください。

サーバアプリケーション障害※1
SPP.NETでの例外発生（ユーザ例外）

障害発生時の詳細情報を.NETエラーログファイルに出力します。

TP1UserExceptionをクライアントUAPに通知します。

SPP.NETの処理，入力データなどを見直してください。

SPP.NETでの例外発生（ユーザ例外以外）

障害発生時の詳細情報を.NETエラーログファイルに出力します。

TP1RemoteExceptionをクライアントUAPに通知します。

SPP.NETの処理，実行環境などを見直してください。

データ変換障害

サーバスタブでのデータ変換エラー

クライアントスタブでのデータ変換エラー

障害発生時の詳細情報を.NETエラーログファイルに出力します。

TP1MarshalExceptionをクライアントUAPに通知します。

使用している.NETインタフェース定義の内容を見直してください。または，サービス定義およびデータ型定義の内容を見直してください。

マシン環境障害

ファイル障害

メモリ不足

など

障害発生時の情報をメッセージログファイルに出力します。※2

例外をUAPに通知します。

障害の要因を取り除いてください。

注※1

サーバアプリケーションが.NETインタフェース定義を使用したSPP.NETの場合にだけ発生します。それ以外の場合は通信障害として通知されます。

注※2

メッセージログファイルへの出力や.NETエラーログファイルへの出力で障害が発生した場合は，メッセージログファイルへの出力や.NETエラーログファイルへの出力のエラーを無視して処理を続行します。以降，ログは出力されません。

8.2　障害時に取得する情報

障害が発生した場合は，次に示す情報を取得してください。また，必要に応じて，取得した情報をシステム管理者に提供してください。

なお，以降の説明の「%DCDIR%」はOpenTP1インストールディレクトリを表しています。

＜この節の構成＞

(1)　例外が発生した場合

(2)　コマンドがエラーとなった場合

(3)　その他の障害の場合

(1)　例外が発生した場合

例外の情報をToStringメソッドで取得して，ファイルに出力するか画面に表示してください。必要に応じて%DCDIR%¥spoolディレクトリ下のファイルもあわせて取得してください。

(2)　コマンドがエラーとなった場合

コマンドが出力したエラーメッセージ，コマンドの入力形式，入力ファイルなどを保存してください。

(3)　その他の障害の場合

%DCDIR%¥spoolディレクトリ下のファイルを保存してください。

8.3　.NETエラーログファイル

.NETエラーログファイルには，SPP.NET，SUP.NETなどのサーバアプリケーションで障害，または例外が発生した場合に詳細情報が出力されます。特に例外が発生した場合は例外のスタックトレースが取得されるため，UAPの障害要因の特定に役立ちます。

.NETエラーログは次に示すファイルにテキスト形式で出力されます。

%DCDIR%¥spool¥njslog1

%DCDIR%¥spool¥njslog2

ファイルの最大サイズは1メガバイトです。

njslog1，njslog2が交代で使用されます。

なお，「%DCDIR%」はOpenTP1インストールディレクトリを表しています。

.NETエラーログの出力形式を次に示します。

Day Mon DD HH:MM:SS.UUU YYYY：障害の発生時刻をミリ秒単位で出力します。

UU...UU：障害が発生したユーザサーバ名を出力します。

GG...GG：障害が発生したサービスグループ名を出力します。

SS...SS：障害が発生したサービス名を出力します。

PPPPP：障害が発生したプロセスIDを出力します。

KFCAxxxxx-E：メッセージIDを示します。詳細については，マニュアル「OpenTP1　メッセージ」を参照してください。

<エラーメッセージ>：エラーメッセージの内容を示します。詳細については，マニュアル「OpenTP1　メッセージ」を参照してください。

<スタックトレース情報>：例外が発生した場合に出力されます。例外発生時のスタックトレース情報が出力されます。

.NETエラーログの出力例を次に示します。

9.　開発支援機能

この章では，Visual Studioを利用したUAP開発を支援する機能について説明します。

＜この章の構成＞

9.1　開発支援機能の概要

9.2　SPP.NETウィザード

9.3　SPP.NETデバッガ

9.4　SUP.NETウィザード

9.5　SUP.NETデバッガ

9.6　クライアントスタブの追加

9.7　TP1 Service Proxyの追加

9.1　開発支援機能の概要

Visual Studioを利用してUAPを開発する場合，次に示す開発支援機能を使用できます。

SPP.NETウィザード
SPP.NET実装クラスのひな形となるソースコードおよびプロジェクトを，SPP.NETウィザードから作成できます。

SPP.NETデバッガ
Visual Studioを利用して開発中のSPP.NETのデバッグを，SPP.NETデバッガで実行できます。

SUP.NETウィザード
SUP.NET実装クラスのひな形となるソースコードおよびプロジェクトを，SUP.NETウィザードから作成できます。

SUP.NETデバッガ
Visual Studioを利用して開発中のSUP.NETのデバッグを，SUP.NETデバッガで実行できます。

クライアントスタブの追加
SPP.NET，SUP.NET，およびCUP.NETのプロジェクトに，クライアントスタブの追加からクライアントスタブのソースコードを追加できます。

TP1 Service Proxyの追加
CUP.NETのプロジェクトに，TP1 Service Proxyの追加からTP1 Service Proxyのソースコードを追加できます。

この章では，これらの開発支援機能の使用方法を説明します。

なお，これらの開発支援機能は，Extension .NETのインストール時に表示されるSetupダイアログボックスで，［開発支援機能ツールをインストールする］を選択すると，Visual Studioに組み込まれます。

開発支援機能は，TP1/Server Base，TP1/LiNKのどちらの場合でも使用できます。インストールされているOpenTP1システムがTP1/Server BaseであるかTP1/LiNKであるかによって，自動的に各OpenTP1システムに合わせたコンポーネントがインストールされます。

＜この節の構成＞

9.1.1　開発支援機能を利用した開発およびデバッグ手順

9.1.2　マルチOpenTP1環境での運用

9.1.1　開発支援機能を利用した開発およびデバッグ手順

開発支援機能を利用した次のUAPの開発およびデバッグ手順について説明します。

SPP.NET

SUP.NET

CUP.NET

＜この項の構成＞

(1)　SPP.NETの開発およびデバッグ手順

(2)　SUP.NETの開発およびデバッグ手順

(3)　CUP.NETの開発手順

(4)　SPPおよびSPP.NETをXML Webサービスで公開する手順

(1)　SPP.NETの開発およびデバッグ手順

SPP.NETウィザードを利用して，SPP.NETのプロジェクトを作成します。

別のSPP.NETまたはSPPを利用する場合は，クライアントスタブの追加を利用して，1.で作成したSPP.NETのプロジェクトにクライアントスタブを追加します。

SPP.NET実装クラスのコーディングをします。

3.が終了したら，SPP.NETのデバッグを実行します。
SPP.NETデバッガを利用すると，SPP.NETを呼び出すデバッグ用のテストプログラム（SUP.NET）を作成することなく，SPP.NETだけでデバッグができます。

(2)　SUP.NETの開発およびデバッグ手順

SUP.NETウィザードを利用して，SUP.NETのプロジェクトを作成します。

SPP.NETまたはSPPを利用する場合は，クライアントスタブの追加を利用して，1.で作成したSUP.NETのプロジェクトにクライアントスタブを追加します。

SUP.NET実装クラスのコーディングをします。

3.が終了したら，SUP.NETのデバッグを実行します。
SUP.NETデバッガを利用すると，SUP.NETのデバッグが簡単にできます。

(3)　CUP.NETの開発手順

Visual Studioが提供しているテンプレートを利用して，Windowsアプリケーション，ASP.NET Webアプリケーションなど，CUP.NETのプロジェクトを作成します。

1.で作成したCUP.NETからSPP.NETまたはSPPを利用する場合は，クライアントスタブの追加を利用して，1.で作成したCUP.NETのプロジェクトにクライアントスタブを追加します。

TP1 Service ProxyからSPP.NETまたはSPPを利用する場合は，TP1 Service Proxyの追加を利用して，1.で作成したCUP.NETのプロジェクトにTP1 Service Proxyを追加します。

CUP.NET実装クラスのコーディングをします。

4.が終了したら，CUP.NETのデバッグを実行します。
CUP.NETのデバッグは，Visual Studioが提供しているデバッグ機能を利用してください。

注意

CUP.NETの開発には，Client .NETまたはConnector .NETが必要となります。

(4)　SPPおよびSPP.NETをXML Webサービスで公開する手順

Visual Studio 2005では，XML Webサービスウィザードをサポートしていません。SPPおよびSPP.NETをXML Webサービスで公開する場合は，次のどちらかの作業を実施してください。

(a)　Connector .NETのTSP自動生成機能を使用する場合

Connector .NETのTSP自動生成機能を使用する場合の手順を次に示します。

Visual Studioで，ASP.NET XML Webサービスのプロジェクトを作成します。

Connector .NETのTSP自動生成機能によって生成されたファイルをコピーして，プロジェクトに追加します。
TSP自動生成機能を使用したXML Webサービスの構築については，マニュアル「TP1/Connector for .NET Framework　使用の手引」のTSP自動生成機能を参照してください。

プロジェクトをビルドします。
プロジェクトをビルドするには，Client .NETおよびConnector .NETのライブラリを参照設定に追加する必要があります。

(b)　TP1 Service Proxyの追加を使用する場合

TP1 Service Proxyの追加を使用する場合の手順を次に示します。

Visual Studioで，ASP.NET XML Webサービスのプロジェクトを作成します。

TP1 Service Proxyの追加を使用して，TSP実装クラスをプロジェクトに追加します。
TP1 Service Proxyの追加については，「9.7　TP1 Service Proxyの追加」を参照してください。

プロジェクトをビルドします。
プロジェクトをビルドするには，Client .NETおよびConnector .NETのライブラリを参照設定に追加する必要があります。

TSP実装クラスを使用して，ASP.NET XML Webサービスクラスを実装します。
作成したTSP実装クラスの利用方法については，マニュアル「TP1/Connector for .NET Framework　使用の手引」のTSP自動生成機能を参照してください。

9.1.2　マルチOpenTP1環境での運用

マルチOpenTP1環境での開発支援機能の運用方法は，通常の運用方法と異なります。

マルチOpenTP1環境での開発支援機能の環境構築の手順は「2.11.3　マルチOpenTP1環境でのExtension .NETの環境設定」を参照してください。

マルチOpenTP1環境で開発支援機能を使用する場合，次の手順でVisual Studioを起動してください。

＜この項の構成＞

(1)　インストーラを使用してインストールしたOpenTP1を用いるとき

(2)　マルチOpenTP1を用いるとき

(1)　インストーラを使用してインストールしたOpenTP1を用いるとき

通常のVisual Studioの起動方法で開発支援機能を使用できます。

(2)　マルチOpenTP1を用いるとき

OpenTP1では特定のOpenTP1にコマンドを入力するためのコンソールを作成するコマンドを提供しています。マルチOpenTP1でのコマンド操作は，このコンソール内で行います。手順を次に示します。

コマンドプロンプトからdcmakeconコマンドを実行します。
インストール時に指定した識別子が「A」の場合，次のように入力します。

dcmakecon A

コマンド実行後に，指定した識別子のノードでコマンドプロンプトが起動します。

コマンドプロンプトからVisual Studioを起動します。
次のように入力します。

devenv

環境変数を設定することでも，開発支援機能を利用できます。手順を次に示します。

コマンドプロンプトから次の環境変数を設定します。

DCDIR

〈OpenTP1のインストールディレクトリ〉

DCCONFPATH

〈OpenTP1のインストールディレクトリ〉¥conf

使用するOpenTP1のインストールディレクトリがC:¥OpenTP1Aの場合，次のように入力します。

set DCDIR = C:¥OpenTP1A
set DCCONFPATH = C:¥OpenTP1A¥conf

OpenTP1ユーザサービス定義ファイルをDCCONFPATH環境変数で設定したファイルとは別のファイルに格納したい場合は，DCUAPCONFPATH環境変数を設定します。
次のようにディレクトリを完全パス名で入力します。

set DCUAPCONFPATH = C:¥TP1conf

マルチOpenTP1環境での環境変数の設定については，マニュアル「OpenTP1　運用と操作」を参照してください。

コマンドプロンプトからVisual Studioを起動します。
次のように入力します。

devenv

9.2　SPP.NETウィザード

この節では，SPP.NETウィザードを使用したSPP.NETの作成方法を説明します。

SPP.NETウィザード上で必要な情報を入力すると，次に示すSPP.NETを作成できます。

.NETインタフェース定義を使用したSPP.NET
あらかじめ作成されている.NETインタフェース定義を使用することも，SPP.NETウィザード上で新たに.NETインタフェース定義を作成することもできます。

.NETインタフェース定義を使用しないSPP.NET

SPP.NETウィザードでSPP.NETを作成できるプログラム言語を次に示します。

C#

J#

Visual Basic

＜この節の構成＞

9.2.1　SPP.NETウィザードを利用したSPP.NETの作成手順

9.2.2　SPP.NETウィザード使用時に設定するダイアログボックス

9.2.1　SPP.NETウィザードを利用したSPP.NETの作成手順

SPP.NETウィザードを利用してSPP.NETを作成する手順，および出力されるファイルとクラスについて説明します。

＜この項の構成＞

(1)　新規に.NETインタフェース定義を作成してSPP.NETを作成する場合

(2)　既存の.NETインタフェース定義を使用してSPP.NETを作成する場合

(3)　.NETインタフェース定義を使用しないSPP.NETを作成する場合

(4)　出力されるファイルとクラス

(5)　名前空間名またはクラス名を変更する場合の注意事項

(1)　新規に.NETインタフェース定義を作成してSPP.NETを作成する場合

SPP.NETウィザードを利用して，新規に.NETインタフェース定義を作成してSPP.NETを作成する場合の手順を次に示します。

［新しいプロジェクト］ダイアログボックスで，SPP.NETのプロジェクトを作成します。

SPP.NETウィザードを起動します。

開発言語を選択します。

.NETインタフェース定義のインタフェース名称を指定します。

SPP.NETを実装するクラス名称を指定します。

SPP.NETに実装するサービスメソッドを定義します。

SPP.NETウィザードを終了します。

(2)　既存の.NETインタフェース定義を使用してSPP.NETを作成する場合

SPP.NETウィザードを利用して，既存の.NETインタフェース定義を使用してSPP.NETを作成する場合の手順を次に示します。

［新しいプロジェクト］ダイアログボックスで，SPP.NETのプロジェクトを作成します。

SPP.NETウィザードを起動します。

開発言語を選択します。

.NETインタフェース定義のインタフェース名称を指定します。

.NETインタフェース定義ファイルを指定します。

SPP.NETを実装するクラス名称を指定します。

SPP.NETウィザードを終了します。

(3)　.NETインタフェース定義を使用しないSPP.NETを作成する場合

SPP.NETウィザードを利用して，.NETインタフェース定義を使用しないSPP.NETを作成する場合の手順を次に示します。

TP1/Serverを起動します。

［新しいプロジェクト］ダイアログボックスで，SPP.NETのプロジェクトを作成します。

SPP.NETウィザードを起動します。

開発言語を選択します。

SPP.NETを実装するクラス名称を指定します。

SPP.NETに実装するサービスメソッドを定義します。

SPP.NETウィザードを終了します。

(4)　出力されるファイルとクラス

SPP.NETウィザードを終了すると必要なソースコードが出力されます。出力されたSPP.NET実装クラスに，必要な業務処理をコーディングしてください。

SPP.NET実装クラスでクライアントスタブを利用する場合は，クライアントスタブの追加を利用して，クライアントスタブをSPP.NETのプロジェクトに追加することもできます。クライアントスタブの追加については，「9.6　クライアントスタブの追加」を参照してください。

SPP.NETウィザード終了後に出力されるファイルを次の表に示します。

表9-1　SPP.NETウィザード終了後に出力されるファイル

ファイル名 | 種類 | 説明
〈インタフェース名〉.〈拡張子〉 | ソースファイル | .NETインタフェース定義
〈インタフェース名〉Tie.〈拡張子〉 | ソースファイル | サーバスタブ
〈SPP.NET実装クラス名〉.〈拡張子〉 | ソースファイル | SPP.NET実装クラス

（凡例）

〈インタフェース名〉：SPP.NETウィザードで入力した.NETインタフェース定義のインタフェース名称

〈SPP.NET実装クラス名〉：SPP.NETウィザードで入力したSPP.NET実装クラス名称

〈拡張子〉：SPP.NETウィザードで選択した開発言語の，ソースファイルの拡張子

C#の場合はcs，J#の場合はjsl，Visual Basicの場合はvb

SPP.NETウィザード終了後に出力されるクラス（インタフェース）を次の表に示します。

表9-2　SPP.NETウィザード終了後に出力されるクラス（インタフェース）

クラス（インタフェース）名 | 宣言されるファイル | 説明
〈インタフェース名〉 | .NETインタフェース定義 | .NETインタフェース定義名称
〈インタフェース名〉Tie | サーバスタブ | サーバスタブクラス名称
〈SPP.NET実装クラス名〉 | SPP.NET実装クラス | SPP.NET実装クラス名称

（凡例）

〈インタフェース名〉：SPP.NETウィザードで入力した.NETインタフェース定義のインタフェース名称

〈SPP.NET実装クラス名〉：SPP.NETウィザードで入力したSPP.NET実装クラス名称

(5)　名前空間名またはクラス名を変更する場合の注意事項

SPP.NETウィザードで作成したプロジェクトに対して，Visual Studioのリファクタリング機能などで名前空間名またはクラス名を変更した場合，ビルド前イベントのコマンド引数も同様に変更する必要があります。

ビルド前イベントのコマンド引数の変更方法を次に示します。

(a)　開発言語がC#またはJ#の場合

Visual Studioのメニューから，［プロジェクト］－［〈プロジェクト名〉のプロパティ］を選択します。

［ビルドイベント］タブを選択し，コマンド引数を変更します。

(b)　開発言語がVisual Basicの場合

Visual Studio のメニューから，［プロジェクト］－［〈プロジェクト名〉のプロパティ］を選択します。

［コンパイル］タブを選択し，［ビルドイベント］ボタンをクリックします。

コマンド引数を変更します。

9.2.2　SPP.NETウィザード使用時に設定するダイアログボックス

＜この項の構成＞

(1)　［新しいプロジェクト］ダイアログボックス

(2)　［SPP.NETウィザード］ダイアログボックス

(3)　［サービスメソッド編集］ダイアログボックス（.NETインタフェース定義有りの場合）

(4)　［サービスメソッド編集］ダイアログボックス（.NETインタフェース定義無しの場合）

(1)　［新しいプロジェクト］ダイアログボックス

Visual Studioのメニューから，［ファイル］－［新規作成］－［プロジェクト］を選択して，［新しいプロジェクト］ダイアログボックスを表示し，SPP.NETのプロジェクトを作成します。

図9-1　［新しいプロジェクト］ダイアログボックス

設定方法を次に示します。

［プロジェクトの種類(P)］リストボックスから「OpenTP1プロジェクト」を選択します。

［テンプレート(T)］ウィンドウから「SPP.NET」を選択します。

［プロジェクト名(N)］にプロジェクトの名称を入力します。

［場所(L)］にプロジェクトの格納先のフォルダを指定します。［参照(B)...］ボタンをクリックすると，格納先のフォルダを選択できます。

［新しいソリューション名(S)］にソリューションの名称を入力します。

［OK］ボタンをクリックします。
［SPP.NETウィザード］ダイアログボックスが表示されます。

(2)　［SPP.NETウィザード］ダイアログボックス

(a)　ダイアログボックスの説明

新規に作成するSPP.NETの情報を，［SPP.NETウィザード］ダイアログボックスで設定して，SPP.NETのプロジェクトを作成します。

図9-2　［SPP.NETウィザード］ダイアログボックス

(b)　ダイアログボックスに設定する項目

［プロジェクト］欄

［開発言語(L)］
SPP.NETを開発するプログラム言語を選択します。
プログラム言語は，C#，J#，またはVisual Basicから選択できます。
なお，［.NETインタフェース定義］欄に［既存の定義を使用］が指定された状態で，［開発言語(L)］の設定を変更すると，次の項目がクリアされます。
・インタフェース名称
・定義ファイル名称
・サービスメソッド一覧

［.NETインタフェース定義］欄　　～＜［新規作成］｜［既存の定義を使用］｜［使用しない］＞

新規に作成するSPP.NETが.NETインタフェース定義を使用するかどうか，また使用する場合は.NETインタフェース定義を新規に作成するか既存の定義を使用するかを指定します。

［インタフェース名称(I)］　　～＜1～125文字の識別子とピリオド＞
［新規作成］，または［既存の定義を使用］を選択したときに，［インタフェース名称(I)］に.NETインタフェース定義のインタフェース名称を指定します。名前空間を含む完全限定名で指定してください。

［定義ファイル名称(F)］　　～＜1～128文字の識別子とピリオド＞
［既存の定義を使用］を選択したときに，既存の.NETインタフェース定義のファイルパスを指定します。［参照(R)..］ボタンをクリックすると表示されるダイアログボックスから対象のファイルを選択できます。
選択できるファイルは，［開発言語(L)］で選択したプログラム言語のソースファイルと同じ拡張子を持つファイル（例えば，C#の場合は「cs」の拡張子を持つファイル）です。

［SPP.NET実装クラス］欄

［クラス名称(S)］　　～＜1～128文字の識別子とピリオド＞
SPP.NETの実装クラス名称を指定します。名前空間を含む完全限定名で指定してください。

［サービスメソッド］欄

［サービスメソッド一覧］
リストボックスにSPP.NETが実装するサービスメソッドが表示されます。

(c)　ボタンの使い方

［完了(N)］ボタン

指定された情報を基にしてプロジェクトを作成し，必要なファイルをプロジェクトに登録します。

［キャンセル(C)］ボタン

すべての作業をキャンセルします。

［追加(A)...］ボタン（［サービスメソッド］欄）

サービスメソッドを追加する場合，このボタンをクリックします。

［.NETインタフェース定義］欄での指定によって，表示されるダイアログボックスが異なります。

［.NETインタフェース定義］欄で［新規作成］を指定している場合
［サービスメソッド編集］ダイアログボックス（.NETインタフェース定義有りの場合）が表示されます。

［.NETインタフェース定義］欄で［使用しない］を指定している場合
［サービスメソッド編集］ダイアログボックス（.NETインタフェース定義無しの場合）が表示されます。

なお，［.NETインタフェース定義］欄で［既存の定義を使用］を選択した場合はこのボタンはクリックできません。

［編集(E)...］ボタン（［サービスメソッド］欄）

サービスメソッドの修正をする場合，修正対象のサービスメソッドを［サービスメソッド一覧］から選択してこのボタンをクリックします。

［.NETインタフェース定義］欄での指定によって，表示されるダイアログボックスが異なります。

［.NETインタフェース定義］欄で［新規作成］を指定している場合
［サービスメソッド編集］ダイアログボックス（.NETインタフェース定義有りの場合）が表示されます。

［.NETインタフェース定義］欄で［使用しない］を指定している場合
［サービスメソッド編集］ダイアログボックス（.NETインタフェース定義無しの場合）が表示されます。

なお，［.NETインタフェース定義］欄で［既存の定義を使用］を選択した場合はこのボタンはクリックできません。

［削除(D)］ボタン（［サービスメソッド］欄）

サービスメソッドを削除する場合，削除対象のサービスメソッドを［サービスメソッド一覧］から選択してこのボタンをクリックします。

なお，［.NETインタフェース定義］欄で［既存の定義を使用］を選択した場合はこのボタンはクリックできません。

(3)　［サービスメソッド編集］ダイアログボックス（.NETインタフェース定義有りの場合）

(a)　ダイアログボックスの説明

.NETインタフェース定義を利用するSPP.NETが実装するサービスメソッドを編集します。

図9-3　［サービスメソッド編集］ダイアログボックス（.NETインタフェース定義有りの場合）

(b)　ダイアログボックスに設定する項目

［サービスメソッド情報］欄

［メソッド名称(M)］　　～＜1～31文字の識別子＞
サービスメソッドの名称を指定します。

［戻り値の型(R)］
サービスメソッドの戻り値のデータ型を選択します。
選択できるデータ型を次に示します。
・System.Void
・System.Int16
・System.Int16[]
・System.Int32
・System.Int32[]
・System.Int64
・System.Int64[]
・System.Byte
・System.Byte[]
・System.String
・System.String[]

［パラメタ情報］欄

［パラメタ一覧］
サービスメソッドのパラメタの一覧が表示されます。
一覧からパラメタを選択すると，選択されたパラメタの「属性」，「データ型」，および「名称」が［パラメタ編集］欄の各項目に表示されます。

［パラメタ編集］欄

パラメタの追加および登録をする場合は，この欄のすべての項目を必ず設定してください。

［属性(A)］
パラメタの属性を選択します。
SPP.NETを開発するプログラム言語がC#の場合，「」（空文字），「ref」，または「out」から選択できます。
SPP.NETを開発するプログラム言語がJ#の場合，パラメタの属性は選択できません。
SPP.NETを開発するプログラム言語がVisual Basicの場合，「ByVal」または「ByRef」から選択できます。

［データ型(T)］
パラメタのデータ型を選択します。
SPP.NETを開発するプログラム言語がC#またはVisual Basicの場合に選択できる項目を次に示します。
・System.Int16
・System.Int16[]
・System.Int32
・System.Int32[]
・System.Int64
・System.Int64[]
・System.Byte
・System.Byte[]
・System.String
・System.String[]
SPP.NETを開発するプログラム言語がJ#の場合，上に示した選択項目に加えて，次に示す項目を選択できます。
・ShortHolder
・ShortArrayHolder
・IntHolder
・IntArrayHolder
・LongHolder
・LongArrayHolder
・UByteHolder
・UByteArrayHolder
・StringHolder
・StringArrayHolder

［名称(P)］　　～＜1～128文字＞
パラメタの名称を指定します。

(c)　ボタンの使い方

［登録(S)］ボタン

ダイアログボックスに入力されている情報を基にして，サービスメソッドを［SPP.NETウィザード］ダイアログボックスの［サービスメソッド一覧］に登録します。

［キャンセル(C)］ボタン

ダイアログボックスで編集中の情報を破棄して，ダイアログボックスを閉じます。

［追加(N)］ボタン（［パラメタ編集］欄）

［パラメタ編集］で編集中のパラメタを，新規パラメタとして［パラメタ一覧］の末尾に追加します。

［編集(E)］ボタン（［パラメタ編集］欄）

［パラメタ一覧］で選択したパラメタを編集します。パラメタを選択し，［パラメタ編集］欄で［属性］，［データ型］，［名称］を変更してからこのボタンをクリックすると，［パラメタ一覧］の内容が更新されます。

［削除(D)］ボタン（［パラメタ編集］欄）

「パラメタ一覧」で選択しているパラメタを削除します。

(4)　［サービスメソッド編集］ダイアログボックス（.NETインタフェース定義無しの場合）

(a)　ダイアログボックスの説明

.NETインタフェース定義を利用しないSPP.NETが実装するサービスメソッドを編集します。

図9-4　［サービスメソッド編集］ダイアログボックス（.NETインタフェース定義無しの場合）

(b)　ダイアログボックスに設定する項目

［サービスメソッド情報］欄

［メソッド名称(M)］　　～＜1～31文字の識別子＞
サービスメソッドの名称を指定します。

(c)　ボタンの使い方

［登録(S)］ボタン

ダイアログボックスに入力されている情報を基にして，サービスメソッドを［SPP.NETウィザード］ダイアログボックスの［サービスメソッド一覧］に登録します。

［キャンセル(C)］ボタン

ダイアログボックスで編集中の情報を破棄して，ダイアログボックスを閉じます。

9.3　SPP.NETデバッガ

SPP.NETデバッガを利用すると，Visual Studioを利用して開発中のSPP.NETのデバッグができます。SPP.NETデバッガを利用するには，TP1/ServerおよびExtension .NETがVisual Studioと同じマシンにインストールされている必要があります。

なお，.NETインタフェース定義を使用したSPP.NETと使用しないSPP.NETとで，デバッグ前に必要な作業が異なります。

.NETインタフェース定義を使用したSPP.NETの場合

SPP.NETの登録情報からデバッグ対象となるSPP.NETを呼び出すデバッグ用のSUP.NETとサーバスタブを自動生成します。このため，SPP.NETを呼び出すデバッグ用のクライアントアプリケーションを作成する必要はありません。なお，.NETインタフェース定義を使用したSPP.NETの場合，SPP.NETデバッガを利用すると，デバッグの実行結果を保存できるため，リグレッションテストなどが容易になります。

.NETインタフェース定義を使用しないSPP.NETの場合

SPP.NETの登録情報からデバッグ対象となるSPP.NETを呼び出すデバッグ用のクライアントアプリケーションを作成する必要があります。なお，.NETインタフェース定義を使用しないSPP.NETの場合，ユーザサービス定義が自動生成され，デバッグ対象となるSPP.NETのプロセスにアタッチし，デバッグを実行します。

＜この節の構成＞

9.3.1　SPP.NETデバッガを利用したデバッグ手順

9.3.2　SPP.NETデバッガ使用時に設定するダイアログボックス

9.3.3　SPP.NETデバッガの出力画面例

9.3.4　SPP.NETデバッガ使用時の注意事項

9.3.1　SPP.NETデバッガを利用したデバッグ手順

.NETインタフェース定義を使用したSPP.NETと使用しないSPP.NETとで，デバッグの手順が異なります。それぞれの手順を次に示します。

＜この項の構成＞

(1)　.NETインタフェース定義を使用したSPP.NETの場合

(2)　.NETインタフェース定義を使用しないSPP.NETの場合

(1)　.NETインタフェース定義を使用したSPP.NETの場合

TP1/Serverを起動します。

Visual Studioを起動します。

［既存のプロジェクトを開く］リストの，デバッグしたいSPP.NETのプロジェクトをクリックします。

［OpenTP1］－［SPP.NETデバッガ］を選択します。
［テスト実行情報設定］ダイアログボックスが表示されます。

SPP.NETの登録情報を入力します。

SPP.NETをExtension .NETに登録します。
［テスト実行画面］ダイアログボックスが表示されます。

実行するサービスメソッドを選択します。

サービスメソッドのパラメタに設定する値を指定します。

サービスメソッドを実行します。

必要に応じて，Visual Studioでブレークポイントを設定してデバッグを実行します。

実行結果を確認します。

(2)　.NETインタフェース定義を使用しないSPP.NETの場合

TP1/Serverを起動します。

Visual Studioを起動します。

［既存のプロジェクトを開く］リストの，デバッグしたいSPP.NETのプロジェクトをクリックします。

［OpenTP1］－［SPP.NETデバッガ］を選択します。
［テスト実行情報設定］ダイアログボックスが表示されます。

SPP.NETの登録情報を入力します。

SPP.NETをExtension .NETに登録します。

SPP.NETを呼び出すデバッグ用のクライアントアプリケーションを実行します。

必要に応じて，Visual Studioでブレークポイントを設定してデバッグを実行します。

実行結果を確認します。

9.3.2　SPP.NETデバッガ使用時に設定するダイアログボックス

＜この項の構成＞

(1)　［テスト実行情報設定］ダイアログボックス

(2)　［テスト実行画面］ダイアログボックス

(3)　［結果表示設定］ダイアログボックス

(1)　［テスト実行情報設定］ダイアログボックス

［テスト実行情報設定］ダイアログボックスは，TP1/Server Baseの場合とTP1/LiNKの場合とで異なります。

(a)　ダイアログボックスの説明

指定したプロジェクトをExtension .NETに配置します。

図9-5　［テスト実行情報設定］ダイアログボックス【TP1/Server Base】

図9-6　［テスト実行情報設定］ダイアログボックス【TP1/LiNK】

(b)　ダイアログボックスに設定する項目

［プロジェクト］欄

［プロジェクト(P)］
SPP.NETとして配置するアセンブリのプロジェクトを選択します。

［アセンブリ情報］欄

［.NETインタフェース定義を使用する(D)］
デバッグ対象のSPP.NETが.NETインタフェース定義を使用している場合，チェックボックスをオンにします。.NETインタフェース定義を使用していない場合は，チェックボックスをオフにしてください。
.NETインタフェース定義を使用している場合，［テスト実行画面］ダイアログボックスで指定したサービスを指定した条件でデバッグします。
.NETインタフェース定義を使用していない場合は，ユーザサービス定義が自動生成され，任意のブレークポイントからデバッグできますが，SPP.NETを呼び出すデバッグ用のクライアントアプリケーションを作成する必要があります。

［.NETインタフェース定義(N)］
既存の.NETインタフェース定義のファイルパスを完全パスで指定します。［参照(R)］ボタンをクリックすると表示されるダイアログボックスからパスを指定することもできます。
［.NETインタフェース定義を使用する(D)］チェックボックスをオンにした場合は，必ず指定してください。

［インタフェース名称(I)］　　～＜1～125文字の識別子とピリオド＞
.NETインタフェース定義のインタフェース名称を指定します。名前空間を含む完全限定名で指定してください。
［.NETインタフェース定義を使用する(D)］チェックボックスをオンにした場合は，必ず指定してください。

［実装クラス名称(S)］　　～＜1～128文字の識別子とピリオド＞
SPP.NETの実装クラス名称を指定します。名前空間を含む完全限定名で指定してください。

［登録情報］欄

［サービスグループ名称(G)］　　～＜1～31文字の識別子＞
Extension .NETにSPP.NETを登録するためのサービスグループ名称を指定します。

［ユーザサーバ名称(U)］　　～＜1～8文字の識別子＞
Extension .NETにSPP.NETを登録するためのユーザサーバ名称を指定します。

［その他］欄

［RPCメッセージの最大長(L)］　　～＜符号なし整数＞((1～8))《1》（単位：メガバイト）
サービスメソッドが指定するRPCメッセージの最大長を指定します。
1～8以外を指定した場合は，エラーが発生します。なお，RPCメッセージの最大長を変更する場合，ここで指定する値以上の値を，あらかじめ［RPC詳細設定］ダイアログ（［その他］タブ）の［RPC送受信電文の最大長(M)］で指定してください。［RPC詳細設定］ダイアログについては，マニュアル「TP1/LiNK　使用の手引」を参照してください。

［メッセージ送受信機能を使用する(M)］
メッセージ送受信機能を使用するかどうかを指定します。
チェックボックスをオンにすると，メッセージ送受信機能が使用できます。チェックボックスがオフの場合，メッセージ送受信機能は使用できません。

［トランザクション制御用ライブラリ(T)］【TP1/Server Base】
使用するトランザクション制御用ライブラリを完全パスで指定します。［参照(L)］ボタンをクリックすると表示されるダイアログボックスからパスを指定することもできます。

［任意の定義(E)］【TP1/Server Base】
SPP.NETデバッガが自動的に出力するユーザサービス定義のオペランド以外に出力させたいユーザサービス定義のオペランドを指定します。SPP.NETデバッガが自動的に出力するオペランドと同じオペランドを指定した場合，動作の保証はしません。SPP.NETデバッガが自動的に出力するオペランドを次に示します。
・set atomic_update
・set auto_restart
・set balance_count
・set hold
・set hold_recovery
・set message_buflen
・set message_store_buflen
・set module
・set nice
・set njs_appbase_directory
・set njs_input_max_message_size
・set njs_output_max_message_size
・set njs_server_assembly
・set njs_server_implement_class
・set njs_server_stub_class
・set njs_use_interface
・set njs_use_mcf
・set njs_xa_connect
・set node_down_restart
・set parallel_count
・set polling_control_data
・set receive_from
・set rpc_rap_auto_connect
・set schedule_delay_abort
・set schedule_priority
・set service
・set service_group
・set type
オペランドを複数指定する場合は，一つのオペランドを1行で指定してください。ユーザサービス定義のオペランドの詳細については，3章の「ユーザサービス定義」およびマニュアル「OpenTP1　システム定義」を参照してください。

［リソースマネジャ拡張子(D)］【TP1/LiNK】
デバッグ対象のSPP.NETが利用するOracleのリソースマネジャ拡張子を指定します。利用するリソースマネジャがOracleでない，またはOpenもしくはClose文字列に対応するリソースマネジャ拡張子を設定していない場合は，省略してください。

(c)　ボタンの使い方

［XA接続(X)...］ボタン【TP1/LiNK】

［XA接続］ダイアログボックスが表示されます。DABroker for .NET Frameworkを使用してトランザクション連携をするSPP.NETをデバッグする場合にクリックします。［XA接続］ダイアログボックスについては，「5.2.4(1)　［XA接続］ダイアログボックス」を参照してください。

［登録(A)］ボタン

SPP.NETを，ダイアログボックスに入力されている情報でExtension .NETに登録します。

［.NETインタフェース定義を使用する(D)］チェックボックスをオンにした場合は，［テスト実行画面］ダイアログボックスが表示されます。

［キャンセル(C)］ボタン

ダイアログボックスで編集中の情報を破棄して，［テスト実行情報設定］ダイアログボックスを閉じます。

(2)　［テスト実行画面］ダイアログボックス

(a)　ダイアログボックスの説明

指定したサービスを指定した条件で実行します。

図9-7　［テスト実行画面］ダイアログボックス

(b)　ダイアログボックスに設定する項目

［SPP.NET］欄

［サービスグループ］
実行するサービスグループの名称が表示されます。編集はできません。

［サービスメソッド(M)］
実行するサービスメソッドを選択します。
ドロップダウンリストには，サービスグループに属するサービスメソッドが表示されます。
ただし，選択したサービスメソッドの戻り値またはパラメタに，TP1ユーザ構造体が含まれていて，かつTP1ユーザ構造体の階層が8階層を超える場合は，SPP.NETデバッガを実行できません。

［RPC種別(R)］
サービスメソッド実行時のRPC種別が「同期応答型」であることを表します。

［パラメタ］欄

選択したサービスのパラメタ一覧を表示します。

一覧からパラメタを選択してから，この欄の各項目を設定します。

［属性］
選択したパラメタの属性を表示します。SPP.NETを開発するプログラム言語がC#の場合，「」（空文字），「ref」，または「out」のどれかが表示されます。
SPP.NETを開発するプログラム言語がJ#の場合，「」（空文字）が表示されます。
SPP.NETを開発するプログラム言語がVisual Basicの場合，「ByVal」または「ByRef」のどちらかが表示されます。
編集はできません。

［データ型］
選択したパラメタおよびTP1ユーザ構造体のプロパティのデータ型を表示します。編集はできません。

［値(V)］
選択したパラメタおよびTP1ユーザ構造体型のプロパティに設定する値を入力します。すでに値が設定されている場合は設定値が表示されます。

［サイズ(S)］　　～＜符号なし整数＞((0～64))
配列のサイズを設定します。テキストボックスのパラメタ一覧で，配列型のパラメタおよびTP1ユーザ構造体型のプロパティを選択した場合にだけ設定できます。

［NULL(J)］
チェックボックスをオンにすると，［値(V)］に「NULL」が設定されます。パラメタの一覧で選択したパラメタおよびプロパティのデータ型が次の場合に活性化されます。

System.String型のパラメタ

配列型のパラメタ

TP1ユーザ構造体型のパラメタ

TP1ユーザ構造体配列型のパラメタ

TP1ユーザ構造体型のプロパティ

［実行結果］欄

サービス実行時にサービス名や実行前の各パラメタの値を，またサービス実行後に各パラメタの値および戻り値を表示します。また，サービス実行時にエラーが発生した場合はエラー情報を表示します。

(c)　ボタンの使い方

［実行(E)］ボタン

選択したサービスを，設定した情報で実行します。実行結果を［実行結果］に出力します。

サービスは何回でも繰り返し実行できます。

［終了(X)］ボタン

デバッグを終了して，ダイアログボックスを終了します。

［設定(N)］ボタン（［パラメタ］欄）

［値］および［サイズ］に設定した値を，パラメタ一覧から選択したパラメタおよびTP1ユーザ構造体型のプロパティに反映します。

［保存(O)...］ボタン（［パラメタ］欄）

その時点で設定されているすべてのパラメタをファイルに保存します。ボタンをクリックすると［名前を付けて保存］ダイアログボックスが表示されます。

［読込(L)...］ボタン（［パラメタ］欄）

ファイルに保存されているパラメタの情報をパラメタに反映します。ボタンをクリックすると［ファイルを開く］ダイアログボックスが表示されます。

［保存(R)...］ボタン（［実行結果］欄）

実行結果の内容をファイルに保存します。ボタンをクリックすると［名前を付けて保存］ダイアログボックスが表示されます。

［クリア(C)］ボタン（［実行結果］欄）

実行結果の内容をクリアします。

［表示設定(H)...］ボタン（［実行結果］欄）

ボタンをクリックすると，［結果表示設定］ダイアログボックスが表示されます。

［結果表示設定］ダイアログボックスでは，実行結果の表示内容に次の設定ができます。

配列の要素の最大表示数の指定

TP1ユーザ構造体の階層の最大表示数の指定

値を10進にするか16進にするかの選択

(3)　［結果表示設定］ダイアログボックス

(a)　ダイアログボックスの説明

［テスト実行画面］ダイアログボックスの［実行結果］欄の表示形式を設定します。

図9-8　［結果表示設定］ダイアログボックス

(b)　ダイアログボックスに設定する項目

［配列の表示設定］欄

［表示する最大要素数(M)］　　～＜符号なし整数＞((0～65535))
［実行結果］欄に表示する，配列型の要素の最大表示数を設定します。

［TP1ユーザ構造体の階層表示設定］欄

［表示する最大階層数(I)］　　～＜符号なし整数＞((1～8))
［実行結果］欄に表示する，TP1ユーザ構造体の階層の最大表示数を設定します。

［表示形式］欄

次に示す各データ型の項目について，［実行結果］欄の値を10進で表示させるか，または16進で表示させるかを選択します。

［System.Int16型(1)］

［System.Int32型(3)］

［System.Int64型(6)］

［System.Byte型(B)］

(c)　ボタンの使い方

［OK(N)］ボタン

ダイアログボックスに設定した内容でこのダイアログボックスを終了し，［テスト実行画面］ダイアログボックスに戻ります。

［キャンセル(C)］ボタン

ダイアログボックスに設定した内容を無視してダイアログボックスを終了し，［テスト実行画面］ダイアログボックスに戻ります。

9.3.3　SPP.NETデバッガの出力画面例

SPP.NETデバッガの出力画面例を次に示します。

＜この項の構成＞

(1)　パラメタのデータ型がTP1ユーザ構造体の場合

(2)　パラメタのデータ型がTP1ユーザ構造体，かつプロパティのデータ型がTP1ユーザ構造体でない場合

(3)　パラメタが2階層以上のTP1ユーザ構造体の場合

(4)　パラメタのデータ型がTP1ユーザ構造体配列の場合

(1)　パラメタのデータ型がTP1ユーザ構造体の場合

［パラメタ］欄には［サービスメソッド(M)］で選択したサービスメソッドのパラメタが表示されます。パラメタのデータ型がTP1ユーザ構造体の場合，［データ型］にはTP1ユーザ構造体のデータ型が表示されます。パラメタの初期値はNULLとなり，［NULL(J)］はチェックボックスがオンの状態になります。

(2)　パラメタのデータ型がTP1ユーザ構造体，かつプロパティのデータ型がTP1ユーザ構造体でない場合

パラメタのデータ型がTP1ユーザ構造体の場合，［NULL(J)］のチェックボックスをオフにすると，パラメタの子ノードにプロパティが表示されます。そのプロパティのデータ型がTP1ユーザ構造体でない場合，［値(V)］に入力できます。

(3)　パラメタが2階層以上のTP1ユーザ構造体の場合

パラメタのデータ型がTP1ユーザ構造体の場合，［NULL(J)］のチェックボックスをオフにすると，パラメタの子ノードにプロパティが表示されます。そのプロパティのデータ型がTP1ユーザ構造体の場合，［データ型］にはTP1ユーザ構造体のデータ型が表示されます。そのプロパティの［NULL(J)］のチェックボックスをオフにすると，プロパティの子ノードにさらにプロパティが表示されます。

(4)　パラメタのデータ型がTP1ユーザ構造体配列の場合

パラメタを選択すると，［データ型］にはTP1ユーザ構造体配列のデータ型が表示されます。そのあと，［NULL(J)］のチェックボックスをオフにすると［サイズ(S)］が活性化されるので，配列の要素数を入力します。［設定(N)］ボタンをクリックして，TP1ユーザ構造体の配列要素を決定します。

上の図のように［サイズ(S)］に3を設定した場合，パラメタの子ノードには要素を示す，[0]，[1]，および[2]が表示されます。なお，数値は0から始まります。

9.3.4　SPP.NETデバッガ使用時の注意事項

［テスト実行情報設定］ダイアログボックスの［登録情報］欄の［ユーザサーバ名称(U)］に，%DCDIR%¥confに格納されているファイル名と同じ名称を指定すると，%DCDIR%¥confに格納されているファイルが上書きされます。
なお，「%DCDIR%」はOpenTP1インストールディレクトリを表しています。

SPP.NETデバッガで使用するプロジェクトのサーバスタブのファイル名称は，「〈インタフェース名〉Tie.〈拡張子〉」である必要があります。

［テスト実行情報設定］ダイアログボックスの［登録情報］欄の［ユーザサーバ名称(U)］に指定したユーザサーバ名称は，すべて大文字として扱われます。

サービスメソッドの戻り値または文字列型のパラメタを返す場合，「U+0000」（ヌル文字）を含んだ文字列が指定されたとき，「U+0000」（ヌル文字）は「U+0000」（スペース）に置換されて表示されます。

SUP.NETのユーザサーバ名として，「NJSnnnnn」（nnnnnは数字）という名称がExtension .NETの内部で使用されます。したがって，NJSで始まるユーザサーバ名は使用しないでください。

SPP.NETデバッガでデバッグするSPP.NETのすべてのサービスメソッドが，TP1ユーザ構造体を使用していて，かつTP1ユーザ構造体の階層が9階層以上の場合，SPP.NETデバッガは起動しますが，デバッグはできません。TP1ユーザ構造体の階層数を減らしてから，再度SPP.NETデバッガを起動してください。

プロジェクト内のファイルを変更した場合，変更したファイルを一度保存してからSPP.NETデバッガを使用してください。

SPP.NETデバッガを使用する前に，TEMP環境変数およびTEMP環境変数が示すフォルダが存在することを確認してください。

.NETインタフェース定義を使用しないSPP.NETをデバッグする場合，VisualStudioで［デバッグの停止］を実行する前に，［テスト実行情報設定］ダイアログボックスで指定したユーザサーバ名称のSPP.NETを停止してください。

デバッグの終了時にKFCA01820-EのメッセージがOpenTP1のログに出力されますが，OpenTP1の処理には影響ありません。

［テスト実行情報設定］ダイアログボックスの［アセンブリ］欄の［.NETインタフェース定義を使用する(D)］チェックボックスをオンにしてSPP.NETデバッガを実行した場合，プロジェクトにサーバスタブが追加されます。したがって，.NETインタフェース定義を使用しないSPP.NETをデバッグする場合は，必ず［.NETインタフェース定義を使用する(D)］チェックボックスをオフにしてSPP.NETデバッガを実行してください。

［テスト実行情報設定］ダイアログボックスの［その他］欄の［RPCメッセージの最大長(L)］に値を指定してデバッグする場合は，あらかじめ，次の環境設定をする必要があります。環境設定をしていない場合，デバッグ実行時にエラーになることがあります。

【TP1/Server Base】

TP1/Server Baseのシステム共通定義のrpc_max_message_sizeオペランドで，送受信できるメッセージの最大長を指定します。

【TP1/LiNK】

［RPC詳細設定］ダイアログ（［その他］タブ）の［RPC送受信電文の最大長(M)］で，送受信できるメッセージの最大長を指定します。

詳細については，「2.3.6　RPC送受信メッセージの最大長拡張機能」を参照してください。

9.4　SUP.NETウィザード

この節では，SUP.NETウィザードを使用したSUP.NETの作成方法を説明します。

SUP.NETウィザードでSUP.NETを作成できるプログラム言語を次に示します。

C#

J#

Visual Basic

＜この節の構成＞

9.4.1　SUP.NETウィザードを利用したSUP.NETの作成手順

9.4.2　SUP.NETウィザード使用時に設定するダイアログボックス

9.4.1　SUP.NETウィザードを利用したSUP.NETの作成手順

SUP.NETウィザードを利用してSUP.NETを作成する手順，および出力されるファイルについて説明します。

＜この項の構成＞

(1)　SUP.NETの作成手順

(2)　出力されるファイル

(1)　SUP.NETの作成手順

［新しいプロジェクト］ダイアログボックスで，SUP.NETのプロジェクトを作成します。

SUP.NETウィザードを起動します。

開発言語を選択します。

SUP.NETを実装するクラス名称を指定します。

SUP.NETウィザードを終了します。

(2)　出力されるファイル

SUP.NETウィザードを終了すると必要なソースコードが出力されます。出力されたSUP.NET実装クラスに，必要な業務処理をコーディングしてください。

SUP.NET実装クラスでクライアントスタブを利用する場合は，クライアントスタブの追加を利用して，クライアントスタブをSUP.NETのプロジェクトに追加することもできます。クライアントスタブの追加については，「9.6　クライアントスタブの追加」を参照してください。

SUP.NETウィザード終了後に出力されるファイルを次の表に示します。

表9-3　SUP.NETウィザード終了後に出力されるファイル

ファイル名 | 種類 | 説明
AssemblyInfo.〈拡張子〉 | ソースファイル | AssemblyInfo
〈SUP.NET実装クラス名〉.〈拡張子〉 | ソースファイル | SUP.NET実装クラス

（凡例）

〈SUP.NET実装クラス名〉：SUP.NETウィザードで入力したSUP.NET実装クラス名称

〈拡張子〉：SUP.NETウィザードで選択した開発言語の，ソースファイルの拡張子

C#の場合はcs，J#の場合はjsl，Visual Basicの場合はvb

9.4.2　SUP.NETウィザード使用時に設定するダイアログボックス

＜この項の構成＞

(1)　［新しいプロジェクト］ダイアログボックス

(2)　［SUP.NETウィザード］ダイアログボックス

(1)　［新しいプロジェクト］ダイアログボックス

Visual Studioのメニューから，［ファイル］－［新規作成］－［プロジェクト］を選択して，［新しいプロジェクト］ダイアログボックスを表示し，SUP.NETのプロジェクトを作成します。

図9-9　［新しいプロジェクト］ダイアログボックス

設定方法を次に示します。

［プロジェクトの種類(P)］リストボックスから「OpenTP1プロジェクト」を選択します。

［テンプレート(T)］ウィンドウから「SUP.NET」を選択します。

［プロジェクト名(N)］にプロジェクトの名称を入力します。

［場所(L)］にプロジェクトの格納先のフォルダを指定します。［参照(B)...］ボタンをクリックすると，格納先のフォルダを選択できます。

［新しいソリューション名(S)］にソリューションの名称を入力します。

［OK］ボタンをクリックします。
［SUP.NETウィザード］ダイアログボックスが表示されます。

(2)　［SUP.NETウィザード］ダイアログボックス

(a)　ダイアログボックスの説明

新規に作成するSUP.NETの情報を，［SUP.NETウィザード］ダイアログボックスで設定して，SUP.NETのプロジェクトを作成します。

図9-10　［SUP.NETウィザード］ダイアログボックス

(b)　ダイアログボックスに設定する項目

［プロジェクト］欄

［開発言語(L)］
SUP.NETを開発するプログラム言語を選択します。
プログラム言語は，C#，J#，またはVisual Basicから選択できます。

［SUP.NET実装クラス］欄

［クラス名称(S)］　　～＜1～128文字の識別子とピリオド＞
SUP.NETの実装クラス名称を指定します。実装クラスはMainメソッドがあるクラスとなります。指定した文字列の最後のピリオド（.）より前の文字が名前空間名称となり，あとの文字がクラス名称となります。指定した文字列にピリオド（.）がない場合，名前空間名称はありません。なお，指定した文字列の最初と最後の文字は識別子にしてください。

(c)　ボタンの使い方

［完了(N)］ボタン

指定された情報を基にしてプロジェクトを作成し，必要なファイルをプロジェクトに登録します。

［キャンセル(C)］ボタン

すべての作業をキャンセルします。

9.5　SUP.NETデバッガ

SUP.NETデバッガを利用すると，Visual Studioを利用して開発中のSUP.NETのデバッグができます。

なお，SUP.NETデバッガを利用するには，TP1/ServerおよびExtension .NETがVisual Studioと同じマシンにインストールされている必要があります。

＜この節の構成＞

9.5.1　SUP.NETデバッガを利用したデバッグ手順

9.5.2　SUP.NETデバッガ使用時に設定するダイアログボックス

9.5.3　SUP.NETデバッガ使用時の注意事項

9.5.1　SUP.NETデバッガを利用したデバッグ手順

次に示す手順でデバッグをします。

TP1/Serverを起動します。

Visual Studioを起動します。

［既存のプロジェクトを開く］リストの，デバッグしたいSUP.NETのプロジェクトをクリックします。

必要に応じて，Visual Studioでブレークポイントを設定します。

［OpenTP1］－［SUP.NETデバッガ］を選択します。
［SUP.NETテスト実行情報設定］ダイアログボックスが表示されます。

SUP.NETの登録情報を入力します。

［登録(A)］ボタンをクリックします。
［SUP.NETテスト実行情報設定］ダイアログボックスの［プロジェクト(P)］で指定したプロジェクトが，Extension .NETに配置されます。

設定したブレークポイントで処理が止まるので，デバッグを実行します。

実行結果を確認します。

注意

RpcクラスのOpenメソッド以前の行に設定したブレークポイントでは，処理が停止しません。ブレークポイントは，RpcクラスのOpenメソッドよりあとの行に設定してください。

9.5.2　SUP.NETデバッガ使用時に設定するダイアログボックス

＜この項の構成＞

(1)　［SUP.NETテスト実行情報設定］ダイアログボックス

(1)　［SUP.NETテスト実行情報設定］ダイアログボックス

［SUP.NETテスト実行情報設定］ダイアログボックスは，TP1/Server Baseの場合とTP1/LiNKの場合とで異なります。

(a)　ダイアログボックスの説明

指定したプロジェクトをExtension .NETに配置し，SUP.NETのデバッグを実行できるようにします。

図9-11　［SUP.NETテスト実行情報設定］ダイアログボックス【TP1/Server Base】

図9-12　［SUP.NETテスト実行情報設定］ダイアログボックス【TP1/LiNK】

(b)　ダイアログボックスに設定する項目

［プロジェクト］欄

［プロジェクト(P)］
SUP.NETとして配置するアセンブリのプロジェクトを選択します。
ドロップダウンリストには，作成中のソリューションに含まれているプロジェクトの中から，コンソールアプリケーションを開発しているすべてのプロジェクト名称が表示されます。

［登録情報］欄

［ユーザサーバ名(U)］　　～＜1～8文字の識別子＞
SUP.NETデバッガを実行するSUP.NETのユーザサーバ名称を指定します。

［その他］欄

［トランザクション制御用ライブラリ(T)］【TP1/Server Base】
使用するトランザクション制御用ライブラリを完全パスで指定します。［参照(L)］ボタンをクリックすると表示されるダイアログボックスからパスを指定することもできます。

［任意の定義(E)］【TP1/Server Base】
SUP.NETデバッガが自動的に出力するユーザサービス定義のオペランド以外に出力させたいユーザサービス定義のオペランドを指定します。SUP.NETデバッガが自動的に出力するオペランドと同じオペランドを指定した場合，動作の保証はしません。SUP.NETデバッガが自動的に出力するオペランドを次に示します。
・set atomic_update
・set auto_restart
・set module
・set nice
・set njs_xa_connect
・set node_down_restart
・set receive_from
・set rpc_rap_auto_connect
オペランドを複数指定する場合は，一つのオペランドを1行で指定してください。ユーザサービス定義のオペランドの詳細については，3章の「ユーザサービス定義」およびマニュアル「OpenTP1　システム定義」を参照してください。

［リソースマネジャ拡張子(D)］【TP1/LiNK】
デバッグ対象のSUP.NETが利用するOracleのリソースマネジャ拡張子を指定します。利用するリソースマネジャがOracleでない，またはOpenもしくはClose文字列に対応するリソースマネジャ拡張子を設定していない場合は，省略してください。

(c)　ボタンの使い方

［XA接続(X)...］ボタン【TP1/LiNK】

［XA接続］ダイアログボックスが表示されます。DABroker for .NET Frameworkを使用してトランザクション連携をするSUP.NETをデバッグする場合にクリックします。［XA接続］ダイアログボックスについては，「5.2.4(1)　［XA接続］ダイアログボックス」を参照してください。

［登録(A)］ボタン

［プロジェクト(P)］で指定したプロジェクトを，Extension .NETに配置します。

［キャンセル(C)］ボタン

ダイアログボックスで編集中の情報を破棄して，［SUP.NETテスト実行情報設定］ダイアログボックスを閉じます。

9.5.3　SUP.NETデバッガ使用時の注意事項

［テスト実行情報設定］ダイアログボックスの［登録情報］欄の［ユーザサーバ名称(U)］に，%DCDIR%¥confに格納されているファイル名と同じ名称を指定すると，%DCDIR%¥confに格納されているファイルが上書きされます。
なお，「%DCDIR%」はOpenTP1インストールディレクトリを表しています。

［テスト実行情報設定］ダイアログボックスの［登録情報］欄の［ユーザサーバ名称(U)］に指定したユーザサーバ名称は，すべて大文字として扱われます。

プロジェクト内のファイルを変更した場合，変更したファイルを一度保存してからSUP.NETデバッガを使用してください。

SUP.NETデバッガを使用する前に，TEMP環境変数およびTEMP環境変数が示すフォルダが存在することを確認してください。

9.6　クライアントスタブの追加

クライアントスタブの追加を利用すると，SPP.NET，SUP.NET，およびCUP.NETのプロジェクトに，クライアントスタブのソースコードを追加できます。

追加するクライアントスタブは次の3種類から選択できます。

Extension .NET

Client .NET

Connector .NET

クライアントスタブを作成できるプログラム言語を次に示します。

C#

J#

Visual Basic

＜この節の構成＞

9.6.1　クライアントスタブの追加の使用時に設定するダイアログボックス

9.6.2　クライアントスタブの追加の使用時の注意事項

9.6.1　クライアントスタブの追加の使用時に設定するダイアログボックス

＜この項の構成＞

(1)　［クライアントスタブの追加］ダイアログボックス

(1)　［クライアントスタブの追加］ダイアログボックス

(a)　ダイアログボックスの説明

Visual Studioのメニューから，［OpenTP1］－［クライアントスタブの追加］を選択します。［Extension .NET］，［Client .NET］，または［Connector .NET］を選択して，［クライアントスタブの追加］ダイアログボックスを表示し，クライアントスタブのソースコードを追加します。

図9-13　［クライアントスタブの追加］ダイアログボックス

(b)　ダイアログボックスに設定する項目

［プロジェクト］欄

［プロジェクト(P)］
クライアントスタブを追加するプロジェクトを指定します。
ドロップダウンリストには，作成中のソリューションにあるすべてのプロジェクト名称が表示されます。
クライアントスタブを開発するプログラム言語は，指定したプロジェクトと同じプログラム言語となります。

［定義ファイルの選択］欄　　～＜［.NETインタフェース定義(D)］｜［サービス定義(S)］＞

クライアントスタブを作成するための定義ファイルを指定します。

SPP.NETのクライアントスタブを作成する場合は，［.NETインタフェース定義(D)］を選択します。SPPのクライアントスタブを作成する場合は，［サービス定義(S)］を選択します。

［.NETインタフェース定義(D)］を選択した場合，［.NETインタフェース定義］欄が活性化し，［サービス定義］欄は活性化しません。

［サービス定義(S)］を選択した場合，［サービス定義］欄が活性化し，［.NETインタフェース定義］欄は活性化しません。

［定義ファイル名称］
定義ファイルの絶対パスを指定します。［参照(R)...］ボタンをクリックすると，［ファイルを開く］ダイアログボックスが表示されます。［ファイルを開く］ダイアログボックスから定義ファイルを選択すると，自動的に絶対パスが指定されます。選択する定義ファイルのプログラム言語は，［開発言語(L)］で選択したプログラム言語と同じ必要はありません。

［.NETインタフェース定義］欄

［インタフェース名称(I)］
［定義ファイルの選択］欄で［.NETインタフェース定義(D)］を選択したときに，.NETインタフェース定義のインタフェース名称を指定します。
ドロップダウンリストから任意のインタフェース名称を選択できます。
なお，［定義ファイルの選択］欄の［定義ファイル名称］に定義ファイルの絶対パスを指定すると，ドロップダウンリストにインタフェース名称が追加されます。

［.NETインタフェース定義にTP1ユーザ構造体が定義されていた場合、TP1ユーザ構造体をプロジェクトに追加する(T)］
指定した.NETインタフェース定義にTP1ユーザ構造体が定義されていた場合，それぞれのTP1ユーザ構造体をプロジェクトに追加するかどうかを指定します。
チェックボックスをオンにすると，定義されているTP1ユーザ構造体をプロジェクトに追加します。
追加するTP1ユーザ構造体の完全限定名は，指定した.NETインタフェース定義に定義されているTP1ユーザ構造体の完全限定名と同じ名称です。そのため，複数のクライアントスタブで同じTP1ユーザ構造体を使用する場合は，チェックボックスをオフにしてください。

［サービス定義］欄

［文字列領域の未使用領域に埋める文字(U)］
［定義ファイルの選択］欄で［サービス定義(S)］を選択したときに，データ型定義で指定した文字列領域の余った領域に埋める文字を指定します。「半角スペース」または「ヌル文字」から選択できます。

［RPC要求データの文字列のエンコーディング(I)］
RPCで送信する要求データを，エンコードするときに従うエンコーディング方式のエンコーディング名を指定します。指定できるエンコーディング名については，.NET Frameworkのドキュメントを参照してください。
何も指定しなかった場合，プラットフォームのデフォルトエンコーディング名になります。
サポートされているエンコード方式は，プラットフォームによって異なります。代表的なエンコーディング名は次のとおりです。

エンコーディング名 | エンコード（Windows上の表示名）
euc-jp | 日本語（EUC）
iso-8859-1 | 西ヨーロッパ言語（ISO）
shift_jis | 日本語（シフト JIS）
unicodeFFFE | Unicode（Big-Endian）
us-ascii | US-ASCII
utf-8 | Unicode（UTF-8）
utf-16 | Unicode

［RPC応答データの文字列のエンコーディング(O)］
RPCで受信した応答データを，デコードするときに従うエンコーディング方式のエンコーディング名を指定します。指定できるエンコーディング名については，.NET Frameworkのドキュメントを参照してください。
何も指定しなかった場合，プラットフォームのデフォルトエンコーディング名になります。
サポートされているエンコード方式は，プラットフォームによって異なります。代表的なエンコーディング名は，［RPC要求データの文字列のエンコーディング(I)］の表を参照してください。

［RPC要求データのエンディアン(Q)］
［定義ファイルの選択］欄で［サービス定義(S)］を選択したときに指定します。
ドロップダウンリストから「ビッグエンディアン」または「リトルエンディアン」が選択できます。RPCで送信する要求データは，選択したエンディアンに変換されます。

［RPC応答データのエンディアン(A)］
［定義ファイルの選択］欄で［サービス定義(S)］を選択したときに指定します。
ドロップダウンリストから「ビッグエンディアン」または「リトルエンディアン」が選択できます。RPCで受信した応答データは，選択したエンディアンであると仮定されて変換されます。

［XMLマッピング機能］欄

［引数および戻り値がXmlDocumentクラスとなったサービスメソッドをクライアントスタブクラスに追加する(X)］
引数および戻り値がXmlDocumentクラスとなったサービスメソッドを，クライアントスタブクラスに追加するかどうかを指定します。
チェックボックスをオンにすると，引数および戻り値がXmlDocumentクラスとなったサービスメソッドを，クライアントスタブクラスに追加します。
なお，Connector .NET用のクライアントスタブを追加する場合だけ活性化されます。

［マッピングルール(M)］
入力データ用XMLスキーマおよび出力データ用XMLスキーマを，「XmlDocument」または「DataSet」のどちらに対応させるかを指定します。
なお，［引数および戻り値がXmlDocumentクラスとなったサービスメソッドをクライアントスタブクラスに追加する(X)］のチェックボックスをオンにした場合だけ活性化されます。

［その他］欄

［RPCメッセージの最大長(L)］　　～＜符号なし整数＞((1～8))《1》（単位：メガバイト）
サービスメソッドが指定するRPCメッセージの最大長を指定します。
1～8以外を指定した場合は，エラーが発生します。なお，RPCメッセージの最大長を変更する場合，ここで指定する値以上の値を，あらかじめ［RPC詳細設定］ダイアログ（［その他］タブ）の［RPC送受信電文の最大長(M)］で指定してください。［RPC詳細設定］ダイアログについては，マニュアル「TP1/LiNK　使用の手引」を参照してください。
なお，Extension .NET用の.NETインタフェース定義を使用したクライアントスタブを追加する場合だけ活性化されます。

(c)　ボタンの使い方

［完了(N)］ボタン

指定された情報を基に，指定されたプロジェクトに「ClientStubX」（X：数字）というフォルダを作成し，そのフォルダにクライアントスタブを追加します。

［キャンセル(C)］ボタン

すべての作業をキャンセルします。

9.6.2　クライアントスタブの追加の使用時の注意事項

C#およびVisual Basicで，参照渡しとして利用されるTP1ユーザ構造体を使用した.NETインタフェース定義を使用して，J#のクライアントスタブを追加する場合，Holderクラスも追加されます。Holderクラスの完全限定名は，「〈指定した.NETインタフェース定義で定義されているTP1ユーザ構造体の完全限定名〉Holder」となります。複数のクライアントスタブで同じHolderクラスを使用する場合は，必要に応じてHolderクラスを削除してください。

J#で記述された.NETインタフェース定義にHolderクラスが定義されている場合，J#のクライアントスタブを追加しても，プロジェクトにHolderクラスは追加されません。そのため，Holderクラスをプロジェクトに追加してください。

9.7　TP1 Service Proxyの追加

TP1 Service Proxy（TSP）とは，コネクションを意識しないでOpenTP1のサービスを利用できるプロキシクラスです。

TP1 Service Proxyの追加を利用すると，CUP.NETのプロジェクトにTP1 Service Proxyのソースコードを追加できます。

TP1 Service Proxyの詳細については，マニュアル「TP1/Connector for .NET Framework　使用の手引」のTSP自動生成機能を参照してください。

TP1 Service Proxyを作成できるプログラム言語を次に示します。

C#

J#

Visual Basic

TP1 Service Proxyは，Client .NETおよびConnector .NETを前提製品としています。前提製品がインストールされていなくても，TP1 Service Proxyの追加は利用できますが，TP1 Service Proxyを追加したプロジェクトをビルドするためには，Client .NETおよびConnector .NETが必要となります。

＜この節の構成＞

9.7.1　TP1 Service Proxyの追加の使用時に設定するダイアログボックス

9.7.2　TP1 Service Proxyの追加の使用時の注意事項

9.7.1　TP1 Service Proxyの追加の使用時に設定するダイアログボックス

＜この項の構成＞

(1)　［TP1 Service Proxyの追加］ダイアログボックス

(1)　［TP1 Service Proxyの追加］ダイアログボックス

(a)　ダイアログボックスの説明

Visual Studioのメニューから，［OpenTP1］－［TP1 Service Proxyの追加］を選択して，［TP1 Service Proxyの追加］ダイアログボックスを表示し，TP1 Service Proxyのソースコードを追加します。

図9-14　［TP1 Service Proxyの追加］ダイアログボックス

(b)　ダイアログボックスに設定する項目

［プロジェクト］欄

［プロジェクト(P)］
TP1 Service Proxyを追加するプロジェクトを指定します。
ドロップダウンリストには，作成中のソリューションにあるすべてのプロジェクト名称が表示されます。
TP1 Service Proxyを開発するプログラム言語は，指定したプロジェクトと同じプログラム言語となります。

［定義ファイルの選択］欄　　～＜［.NETインタフェース定義(D)］｜［サービス定義(S)］＞

TP1 Service Proxyを作成するための定義ファイルを指定します。

SPP.NETのTP1 Service Proxyを作成する場合は，［.NETインタフェース定義(D)］を選択します。SPPのTP1 Service Proxyを作成する場合は，［サービス定義(S)］を選択します。

［.NETインタフェース定義(D)］を選択した場合，［.NETインタフェース定義］欄が活性化し，［サービス定義］欄は活性化しません。

［サービス定義(S)］を選択した場合，［サービス定義］欄が活性化し，［.NETインタフェース定義］欄は活性化しません。

［定義ファイル名称］
定義ファイルの絶対パスを指定します。［参照(R)...］ボタンをクリックすると，［ファイルを開く］ダイアログボックスが表示されます。［ファイルを開く］ダイアログボックスから定義ファイルを選択すると，自動的に絶対パスが指定されます。選択する定義ファイルのプログラム言語は，［開発言語(L)］で選択したプログラム言語と同じ必要はありません。

［.NETインタフェース定義］欄

［インタフェース名称(I)］
［定義ファイルの選択］欄で［.NETインタフェース定義(D)］を選択したときに，.NETインタフェース定義のインタフェース名称を指定します。
ドロップダウンリストから任意のインタフェース名称を選択できます。
なお，［定義ファイルの選択］欄の［定義ファイル名称］に定義ファイルの絶対パスを指定すると，ドロップダウンリストにインタフェース名称が追加されます。

［.NETインタフェース定義にTP1ユーザ構造体が定義されていた場合、TP1ユーザ構造体をプロジェクトに追加する(T)］
指定した.NETインタフェース定義にTP1ユーザ構造体が定義されていた場合，それぞれのTP1ユーザ構造体をプロジェクトに追加するかどうかを指定します。
チェックボックスをオンにすると，定義されているTP1ユーザ構造体をプロジェクトに追加します。
追加するTP1ユーザ構造体の完全限定名は，指定した.NETインタフェース定義に定義されているTP1ユーザ構造体の完全限定名と同じ名称です。そのため，複数のTP1 Service Proxyで同じTP1ユーザ構造体を使用する場合は，チェックボックスをオフにしてください。

［サービス定義］欄

［文字列領域の未使用領域に埋める文字(U)］
［定義ファイルの選択］欄で［サービス定義(S)］を選択したときに，データ型定義で指定した文字列領域の余った領域に埋める文字を指定します。「半角スペース」または「ヌル文字」から選択できます。

［RPC要求データの文字列のエンコーディング(I)］
RPCで送信する要求データを，エンコードするときに従うエンコーディング方式のエンコーディング名を指定します。指定できるエンコーディング名については，.NET Frameworkのドキュメントを参照してください。
何も指定しなかった場合，プラットフォームのデフォルトエンコーディング名になります。
サポートされているエンコード方式は，プラットフォームによって異なります。代表的なエンコーディング名は次のとおりです。

エンコーディング名 | エンコード（Windows上の表示名）
euc-jp | 日本語（EUC）
iso-8859-1 | 西ヨーロッパ言語（ISO）
shift_jis | 日本語（シフト JIS）
unicodeFFFE | Unicode（Big-Endian）
us-ascii | US-ASCII
utf-8 | Unicode（UTF-8）
utf-16 | Unicode

［RPC応答データの文字列のエンコーディング(O)］
RPCで受信した応答データを，デコードするときに従うエンコーディング方式のエンコーディング名を指定します。指定できるエンコーディング名については，.NET Frameworkのドキュメントを参照してください。
何も指定しなかった場合，プラットフォームのデフォルトエンコーディング名になります。
サポートされているエンコード方式は，プラットフォームによって異なります。代表的なエンコーディング名は，［RPC要求データの文字列のエンコーディング(I)］の表を参照してください。

［RPC要求データのエンディアン(Q)］
［定義ファイルの選択］欄で［サービス定義(S)］を選択したときに指定します。
ドロップダウンリストから「ビッグエンディアン」または「リトルエンディアン」が選択できます。RPCで送信する要求データは，選択したエンディアンに変換されます。

［RPC応答データのエンディアン(A)］
［定義ファイルの選択］欄で［サービス定義(S)］を選択したときに指定します。
ドロップダウンリストから「ビッグエンディアン」または「リトルエンディアン」が選択できます。RPCで受信した応答データは，選択したエンディアンであると仮定されて変換されます。

［構成定義］欄

［プロファイルID(F)］
Connector .NETが利用する構成定義のプロファイルIDを指定します。
空文字を指定した場合，デフォルトプロファイルの情報を利用してConnector .NETを使用します。

［SPP.NET］欄

［サービスグループ名(G)］
呼び出したいSPP.NETまたはSPPのサービスグループ名を指定します。

(c)　ボタンの使い方

［完了(N)］ボタン

指定された情報を基に，指定されたプロジェクトに「TSPX」（X：数字）というフォルダを作成し，そのフォルダにTP1 Service Proxyを追加します。

［キャンセル(C)］ボタン

すべての作業をキャンセルします。

9.7.2　TP1 Service Proxyの追加の使用時の注意事項

C#およびVisual Basicで，参照渡しとして利用されるTP1ユーザ構造体を使用した.NETインタフェース定義を使用して，J#のTP1 Service Proxyを追加する場合，Holderクラスも追加されます。Holderクラスの完全限定名は，「〈指定した.NETインタフェース定義で定義されているTP1ユーザ構造体の完全限定名〉Holder」となります。複数のTP1 Service Proxyで同じHolderクラスを使用する場合は，必要に応じてHolderクラスを削除してください。

J#で記述された.NETインタフェース定義にHolderクラスが定義されている場合，J#のTP1 Service Proxyを追加しても，プロジェクトにHolderクラスは追加されません。そのため，Holderクラスをプロジェクトに追加してください。

付録

＜この付録の構成＞

付録A　クラス名およびメソッド名とC言語の関数名の対応

付録B　DCCM3と接続する場合の注意事項

付録C　用語解説

付録A　クラス名およびメソッド名とC言語の関数名の対応

SPP.NETおよびSUP.NETで利用できるクラス名およびメソッド名とC言語の関数名の対応を次の表に示します。

表A-1　SPP.NETおよびSUP.NETで利用できるクラス名およびメソッド名とC言語の関数名の対応

名前空間 | クラス名 | メソッド名 | 対応するC言語の関数名
Hitachi.OpenTP1.Server | Adm | CallCommand | dc_adm_call_command
Complete | dc_adm_complete
GetStatus | dc_adm_status
Jnl※1 | PutUJ | dc_jnl_ujput
Lck※1 | Get | dc_lck_get
ReleaseAll | dc_lck_release_all
ReleaseByName | dc_lck_release_byname
Log | Print | dc_logprint
Mcf | Send | dc_mcf_send
SendReceive | dc_mcf_sendrecv
Prf | GetTraceNum | dc_prf_get_trace_num
PutUTrace | dc_prf_utrace_put
Rap | Connect | dc_rap_connect
Disconnect | dc_rap_disconnect
Rpc | Call | dc_rpc_call
CallTo | dc_rpc_call_to
Close | dc_rpc_close
DiscardFurtherReplies | dc_rpc_discard_further_replies
DiscardSpecificReply | dc_rpc_discard_specific_reply
GetCallersAddress | dc_rpc_get_callers_address
GetErrorDescriptor | dc_rpc_get_error_descriptor
GetGatewayAddress | dc_rpc_get_gateway_address
GetServicePriolity | dc_rpc_get_service_prio
GetTimeout | dc_rpc_get_watch_time
Open | dc_rpc_open
PollAnyReplies | dc_rpc_poll_any_replies
SetBindTable | DCRPC_BINDTBL_SET
SetDirectSchedule | DCRPC_DIRECT_SCHEDULE
SetServicePriolity | dc_rpc_set_service_prio
SetServiceRetry | dc_rpc_service_retry
SetTimeout | dc_rpc_set_watch_time
RpcBindTable構造体 | － | DCRPC_BINDING_TBL
Rts | PutUTrace | dc_rts_utrace_put
Tam※1 | Close | dc_tam_close
Delete | dc_tam_delete
GetInfo | dc_tam_get_inf
GetStatus | dc_tam_status
Open | dc_tam_open
Read | dc_tam_read
ReadCancel | dc_tam_read_cancel
Rewrite | dc_tam_rewrite
Write | dc_tam_write
TamKeyTable構造体※1 | － | DC_TAMKEY
TamStatusTable構造体※1 | － | DC_TAMSTAT
TP1ServerException | － | TP1/Server系共通例外
TP1ServerFlags | － | TP1/Server系フラグ値定義
TP1ServerLimits | － | TP1/Server系制限値定義
TP1ServerValues | － | TP1/Server系ステータス値定義
Trn | Begin | dc_trn_begin
Commit | dc_trn_unchained_commit
CommitChained | dc_trn_chained_commit
GetInfo | dc_trn_info
Rollback | dc_trn_unchained_rollback
RollbackChained | dc_trn_chained_rollback
SPPBase | FinalizeSPP | －※2
InitializeSPP

（凡例）

－：該当しません。

注※1

TP1/Server Baseの場合だけ使用できます。TP1/LiNKの場合は使用できません。

注※2

SPP.NETではMain関数を記述しないためdc_rpc_mainloop関数に相当するメソッドはありません。代わりに，必要に応じてInitializeSPPメソッド，FinalizeSPPメソッドをオーバライドします。

付録B　DCCM3と接続する場合の注意事項

Extension .NETでは，RPCやメッセージ送受信機能を使用して，VOS3やVOS1上のDCCM3と接続できます。実際の通信は，Extension .NETの前提製品であるTP1/Server BaseまたはTP1/LiNK，メッセージ送受信機能使用時の前提製品であるTP1/NET/TCP/IPまたはTP1/Messagingが行います。通信時の前提条件などについては，次のマニュアルを参照してください。

「OpenTP1　解説」

「TP1/LiNK　使用の手引」

「OpenTP1　プロトコル　TP1/NET/TCP/IP編」

「TP1/Messaging　使用の手引」

Extension .NETを使用してDCCM3と接続する場合の注意事項を次に示します。

＜この節の構成＞

(1)　RPCを使用する場合

(2)　メッセージ送受信機能を使用する場合

(1)　RPCを使用する場合

連鎖RPCは使用できません。

.NETインタフェース定義を使用したRPCは使用できません。

サービス定義を使用したRPCは，次の条件をすべて満たしている場合だけ使用できます。

データ型定義によってデータの形式をメッセージの単位に定義できる。

文字列を含まないデータ，または.NET Frameworkがサポートしているエンコード方式でエンコードおよびデコードできる文字列のデータを送受信する。
なお，.NET Frameworkがサポートしているエンコード方式については，.NET Frameworkのドキュメントを参照してください。

トランザクション制御機能は使用できません。

文字列のデータを含むメッセージを送受信する場合，あらかじめメッセージ中の文字コードを通信先システムと決めた上で，必要に応じてUAPで文字コード変換を行ってください。.NET Framework上では，Unicode（リトルエンディアン）が文字列データのメモリ上の内部表現として使用されます。ただし，COBOL2002 for .NET Frameworkを使用した場合の文字列データのメモリ内部表現については，マニュアル「COBOL2002 for .NET Framework　ユーザーズガイド」を参照してください。

マニュアル「OpenTP1　解説」またはマニュアル「TP1/LiNK　使用の手引」の注意事項もあわせて参照してください。

(2)　メッセージ送受信機能を使用する場合

文字列のデータを含むメッセージを送受信する場合，あらかじめメッセージ中の文字コードを通信先システムと決めた上で，必要に応じてUAPで文字コード変換を行ってください。.NET Framework上では，Unicode（リトルエンディアン）が文字列データのメモリ上の内部表現として使用されます。ただし，COBOL2002 for .NET Frameworkを使用した場合の文字列データのメモリ内部表現については，マニュアル「COBOL2002 for .NET Framework　ユーザーズガイド」を参照してください。

マニュアル「OpenTP1　プロトコル　TP1/NET/TCP/IP編」またはマニュアル「TP1/Messaging　使用の手引」の注意事項もあわせて参照してください。

付録C　用語解説

Extension .NETに関する用語について説明します。その他の用語については，必要に応じて次のマニュアルおよびドキュメントを参照してください。

「OpenTP1　解説」

「TP1/LiNK　使用の手引」

.NET Frameworkのドキュメント

（記号）

.NETインタフェース定義

SPP.NETのRPCインタフェース情報を.NET Frameworkに対応したプログラム言語で定義したものです。

（英字）

ADO.NET

.NET Frameworkが提供するデータアクセスの技術セットです。

ASP.NET

.NET Frameworkが提供するWebアプリケーションやXML Webサービスを構築するための技術セットです。

CLR（Common Language Runtime）

→共通言語ランタイムの説明を参照してください。

CLS（Common Language Specification）

→共通言語仕様の説明を参照してください。

CTS（Common Type System）

→共通型システムの説明を参照してください。

CUP.NET（Client User Program for .NET Framework）

TP1/Client for .NET Frameworkを利用して，SPP.NETやSPPにサービスを要求するクライアントアプリケーションのことです。

さまざまなアプリケーション形態が可能であり，アプリケーション形態に応じたランタイムホストで実行されます。

GAC（Global Assembly Cache）

→グローバルアセンブリキャッシュの説明を参照してください。

SPP.NET（Service Providing Program for .NET Framework）

OpenTP1 for .NET FrameworkのUAPのうち，ファイルへのアクセスなどサーバの役割をするプログラムのことです。SPP.NETは，クライアントUAPから要求されたサービスを実行するサービスメソッドから構成されます。

OpenTP1 for .NET Frameworkが提供するランタイムホストで実行されます。

SPP.NET実行コンテナ

TP1/Extension for .NET Frameworkが提供するSPP.NET実行用のランタイムホストです。

SUP.NET（Service Using Program for .NET Framework）

OpenTP1 for .NET FrameworkのUAPのうち，SPP.NETまたはSPPに処理要求をするだけの，クライアントアプリケーションのことです。ほかのUAPにサービスを提供するためのメソッドは持ちません。

TSP（TP1 Service Proxy）

TSPは，コネクションを意識しないでOpenTP1のサービスを利用できるプロキシクラスです。

XML Webサービス

XML，HTTP，SOAPなどのインターネット標準技術を利用して，ネットワーク上に分散した異なるプラットフォーム上のアプリケーションを連携させる技術，または連携したアプリケーション（サービス）のことです。

（ア行）

アセンブリ

.NET Frameworkのアプリケーションの配置やバージョン管理などを行う場合の基本単位です。アセンブリは，リソースやファイルの論理的な集合として，一つの機能を構成します。

アプリケーションドメイン

共通言語ランタイムがアプリケーション間を分離するために使用する処理単位です。

同じアプリケーションの有効範囲内（アプリケーションスコープ）で作成されたオブジェクトの集合の境界を示します。

アプリケーションベースディレクトリ

アプリケーションドメインに読み込まれるDLLファイルまたはEXEファイルを格納するディレクトリのことです。

インデクスドレコード

Connector .NETでバイナリデータを使用した，RPCを発行する場合およびTCP/IP通信をする場合に使用するインタフェースのことです。

（カ行）

カスタムレコードクラス

データ型定義で定義したデータ型を.NET Frameworkのデータ型に対応づけて生成したデータ変換クラスのことです。

完全限定名

名前空間の名前から指定するオブジェクトの参照方法です。完全限定名を使用すると，使用するオブジェクトを特定できるため，名前の競合が発生しません。

共通型システム（CTS）

共通言語ランタイムでの型の宣言，使用，および管理方法を定義したものです。

共通言語仕様（CLS）

共通言語ランタイムによってサポートされる言語機能のサブセットです。

共通言語ランタイム（CLR）

.NET Frameworkに対応するプログラムが使用する共通の動作環境（ランタイム）です。

クライアントスタブ

→スタブの説明を参照してください。

グローバルアセンブリキャッシュ（GAC）

複数のアプリケーションで共有するアセンブリを格納するコードキャッシュのことです。

コネクション

Connector .NETは，Client .NETが提供するTP1Clientクラスのインスタンスにハンドルを関連づけて管理します。TP1Clientクラスのインスタンスに関連づけられたハンドルのことを，コネクションと呼びます。

コネクションプーリング機能

一度生成されたコネクションをプーリングする機能のことです。コネクションプーリング機能を使用すると，コネクションプール内のコネクションを再利用できるため，資源を効率的に使用できます。

コネクションプール

コネクションプーリング機能使用時に，生成されたコネクションをプーリングするための領域のことです。

（サ行）

サーバスタブ

→スタブの説明を参照してください。

サービス定義

SPP.NETやSPPのサービス名と入出力データの定義を対応づけて定義したものです。

サービス定義ファイルとデータ型定義ファイルから構成されます。

出力データ用XMLスキーマ

クライアントスタブのサービスメソッドの戻り値（出力データ）であるXML文書の構造が定義されたXMLスキーマのことです。

出力データ用XMLスキーマファイル

出力データ用XMLスキーマが記述されたファイルのことです。

スタブ

.NETインタフェース定義を使用するRPCや，サービス定義を使用するRPCの場合に，RPCで使用する入出力データの文字コード変換やエンディアンの識別などを自動的に行うプログラムのことです。

サーバで使用するスタブをサーバスタブ，クライアントで使用するスタブをクライアントスタブと呼びます。

スタブは運用コマンドで生成します。.NETインタフェース定義を使用するRPCの場合は，クライアントスタブとサーバスタブが生成されます。サービス定義を使用するRPCの場合は，クライアントスタブが生成されます。

（タ行）

データ型定義

RPCメッセージのユーザデータの形式をC言語の構造体のような形式で定義したものです。

（ナ行）

名前空間

名前を一意に識別するための概念です。名前空間と名前を組み合わせることによって，オブジェクトなどを特定できます。

また，名前空間によってクラスなどを論理的にグループ化できます。

入力データ用XMLスキーマ

クライアントスタブのサービスメソッドの引数（入力データ）であるXML文書の構造が定義されたXMLスキーマのことです。

入力データ用XMLスキーマファイル

入力データ用XMLスキーマが記述されたファイルのことです。

（ハ行）

バッファプーリング機能

RPC要求に使用するメッセージを格納するバッファ（バイト配列）をプーリングする機能です。

バッファプーリング機能でバッファをプーリングすると，バッファの生成や破棄が少なくなり性能が向上します。

バッファプール

バッファプーリング機能使用時に，生成されたバッファを同じバッファサイズのバッファごとに管理するプールのことです。

索引

[記号]
[Ａ][Ｂ][Ｃ][Ｄ][Ｅ][Ｆ][Ｇ][Ｈ][Ｉ][Ｊ][Ｋ][Ｌ][Ｍ][Ｎ][Ｏ][Ｐ][Ｒ][Ｓ][Ｔ][Ｕ][Ｖ][Ｗ][Ｘ]
[ア行][カ行][サ行][タ行][ナ行][ハ行][マ行][ヤ行][ラ行]

(記号)

.NETインタフェース定義

.NETインタフェース定義〔用語解説〕

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

.NETインタフェース定義を使用したRPC

.NETインタフェース定義を使用したSPP.NETの呼び出し方法

.NETエラーログファイル

［SPP.NETウィザード］ダイアログボックス

［SPP.NET環境設定］ダイアログボックス

［SPP.NET詳細設定］ダイアログボックス（［RPC］タブ）

［SPP.NET詳細設定］ダイアログボックス（［その他］タブ）

［SPP環境設定選択］ダイアログボックス

［SUP.NETウィザード］ダイアログボックス

［SUP.NETテスト実行情報設定］ダイアログボックス

［SUP環境設定］ダイアログボックス

［TP1/LiNKアプリケーション管理SPP］ウィンドウ

［TP1/LiNKアプリケーション管理SUP］ウィンドウ

［TP1 Service Proxyの追加］ダイアログボックス

［XA接続］ダイアログボックス

［新しいプロジェクト］ダイアログボックス〔SPP.NETウィザード〕

［新しいプロジェクト］ダイアログボックス〔SUP.NETウィザード〕

［アプリケーション環境SPP］ダイアログボックス

［アプリケーション環境SUP］ダイアログボックス

［アプリケーションベースディレクトリ設定］ダイアログボックス

［クライアントスタブの追加］ダイアログボックス

［結果表示設定］ダイアログボックス

［サービスメソッド編集］ダイアログボックス（.NETインタフェース定義有りの場合）

［サービスメソッド編集］ダイアログボックス（.NETインタフェース定義無しの場合）

［自動起動設定］ダイアログボックス

［テスト実行画面］ダイアログボックス

［テスト実行情報設定］ダイアログボックス

［プログラムのサーチパス選択］ダイアログボックス

%DCDIR%¥aplibディレクトリ

(英字)

(Ａ)

AccessType〔TamStatusTable構造体〕

Adm

ADO.NET〔用語解説〕

ASP.NET〔用語解説〕

(Ｂ)

Begin〔Trn〕

(Ｃ)

Call〔Rpc〕

CallCommand〔Adm〕

CallCommand〔Adm〕

CallTo〔Rpc〕

Close〔Rpc〕

Close〔Tam〕

CLR〔用語解説〕

CLS〔用語解説〕

COBOL2002 for .NET Frameworkを使用したUAPの開発および実行

CobolException.CobolRuntimeError

COBOL言語でのUAPの作成方法

Commit〔Trn〕

CommitChained〔Trn〕

Complete〔Adm〕

Connect〔Rap〕

CTS〔用語解説〕

CUP.NET

CUP.NET〔用語解説〕

(Ｄ)

DABroker for .NET Frameworkを使用したUAPの作成方法

DBMSとの連携

DCADM_DELAY〔TP1ServerFlags〕

DCADM_STAT_NOT_UP〔TP1ServerFlags〕

DCADM_STAT_NOT_UP〔TP1ServerValues〕

DCADM_STAT_ONLINE〔TP1ServerFlags〕

DCADM_STAT_ONLINE〔TP1ServerValues〕

DCADM_STAT_START_NORMAL〔TP1ServerFlags〕

DCADM_STAT_START_NORMAL〔TP1ServerValues〕

DCADM_STAT_START_RECOVER〔TP1ServerFlags〕

DCADM_STAT_START_RECOVER〔TP1ServerValues〕

DCADM_STAT_STOP〔TP1ServerFlags〕

DCADM_STAT_STOP〔TP1ServerValues〕

DCADM_STAT_STOPA〔TP1ServerFlags〕

DCADM_STAT_STOPA〔TP1ServerValues〕

DCADM_STAT_STOPB〔TP1ServerFlags〕

DCADM_STAT_STOPB〔TP1ServerValues〕

DCADM_STAT_SWAP〔TP1ServerFlags〕

DCADM_STAT_SWAP〔TP1ServerValues〕

DCADM_STAT_TERM〔TP1ServerFlags〕

DCADM_STAT_TERM〔TP1ServerValues〕

DCADMER_COMM〔TP1Error〕

DCADMER_DEF〔TP1Error〕

DCADMER_MEMORY〔TP1Error〕

DCADMER_MEMORY_ERR〔TP1Error〕

DCADMER_MEMORY_OUT〔TP1Error〕

DCADMER_MEMORY_OUTERR〔TP1Error〕

DCADMER_MULTI_DEF〔TP1Error〕

DCADMER_NO_MORE_ENTRY〔TP1Error〕

DCADMER_NODE_NOT_EXIST〔TP1Error〕

DCADMER_PARAM〔TP1Error〕

DCADMER_PROTO〔TP1Error〕

DCADMER_REMOTE〔TP1Error〕

DCADMER_STATNOTZERO〔TP1Error〕

DCADMER_STS_IO〔TP1Error〕

DCADMER_SUBAREA_NOT_EXIST〔TP1Error〕

DCADMER_SWAP〔TP1Error〕

DCADMER_SYSTEMCALL〔TP1Error〕

DCCM3と接続する場合の注意事項

DCJNL_FLUSH〔TP1ServerFlags〕

DCJNLER_LONG〔TP1Error〕

DCJNLER_MODE〔TP1Error〕

DCJNLER_PARAM〔TP1Error〕

DCJNLER_PROTO〔TP1Error〕

DCJNLER_SHORT〔TP1Error〕

DCLCK_EX〔TP1ServerFlags〕

DCLCK_PR〔TP1ServerFlags〕

DCLCK_TEST〔TP1ServerFlags〕

DCLCK_WAIT〔TP1ServerFlags〕

DCLCKER_DLOCK〔TP1Error〕

DCLCKER_MEMORY〔TP1Error〕

DCLCKER_NOTHING〔TP1Error〕

DCLCKER_OUTOFTRN〔TP1Error〕

DCLCKER_PARAM〔TP1Error〕

DCLCKER_TIMOUT〔TP1Error〕

DCLCKER_VERSION〔TP1Error〕

DCLCKER_WAIT〔TP1Error〕

DCLOGER_COMM〔TP1Error〕

DCLOGER_DEFFILE〔TP1Error〕

DCLOGER_HEADER〔TP1Error〕

DCLOGER_MEMORY〔TP1Error〕

DCLOGER_NOT_UP〔TP1Error〕

DCLOGER_PARAM_ARGS〔TP1Error〕

DCLOGER_PROTO〔TP1Error〕

DCLOGER_TIMEOUT〔TP1Error〕

DCMCFBUF1〔TP1ServerFlags〕

DCMCFBUF2〔TP1ServerFlags〕

DCMCFEMI〔TP1ServerFlags〕

DCMCFER_INVALID_ARGS〔TP1Error〕

DCMCFER_PROTO〔TP1Error〕

DCMCFNORM〔TP1ServerFlags〕

DCMCFNSEQ〔TP1ServerFlags〕

DCMCFPRIO〔TP1ServerFlags〕

DCMCFRTN_71002〔TP1Error〕

DCMCFRTN_71003〔TP1Error〕

DCMCFRTN_71004〔TP1Error〕

DCMCFRTN_71108〔TP1Error〕

DCMCFRTN_72000〔TP1Error〕

DCMCFRTN_72001〔TP1Error〕

DCMCFRTN_72012〔TP1Error〕

DCMCFRTN_72013〔TP1Error〕

DCMCFRTN_72016〔TP1Error〕

DCMCFRTN_72017〔TP1Error〕

DCMCFRTN_72026〔TP1Error〕

DCMCFRTN_72036〔TP1Error〕

DCMCFRTN_72041〔TP1Error〕

DCMCFRTN_72073〔TP1Error〕

DCMCFRTN_73001〔TP1Error〕

DCMCFRTN_73002〔TP1Error〕

DCMCFRTN_73003〔TP1Error〕

DCMCFRTN_73005〔TP1Error〕

DCMCFRTN_73010〔TP1Error〕

DCMCFRTN_73015〔TP1Error〕

DCMCFRTN_73018〔TP1Error〕

DCMCFRTN_73019〔TP1Error〕

DCMCFRTN_73020〔TP1Error〕

DCMCFSEQ〔TP1ServerFlags〕

DCNJS2ER_INTERNAL〔TP1Error〕

DCNJS2ER_INVALID_ARGS〔TP1Error〕

DCNJS2ER_INVALID_DATA〔TP1Error〕

DCNJS2ER_XML_ANALYSIS_ERR〔TP1Error〕

DCNJSER_SYSTEM〔TP1Error〕

DCNJSER_XALIB_INVALID〔TP1Error〕

DCNJSER_XALIB_LOAD〔TP1Error〕

DCNOFLAGS〔TP1ServerFlags〕

DCPRFER_PARAM〔TP1Error〕

DCRAPER_ALREADY_CONNECT〔TP1Error〕

DCRAPER_MAX_CONNECTION〔TP1Error〕

DCRAPER_MAX_CONNECTION_SV〔TP1Error〕

DCRAPER_NETDOWN〔TP1Error〕

DCRAPER_NOCONTINUE〔TP1Error〕

DCRAPER_NOHOSTNAME〔TP1Error〕

DCRAPER_NOMEMORY〔TP1Error〕

DCRAPER_NOMEMORY_SV〔TP1Error〕

DCRAPER_NOSERVICE〔TP1Error〕

DCRAPER_NOSOCKET〔TP1Error〕

DCRAPER_PANIC_SV〔TP1Error〕

DCRAPER_PARAM〔TP1Error〕

DCRAPER_PROTO〔TP1Error〕

DCRAPER_SHUTDOWN〔TP1Error〕

DCRAPER_SYSCALL〔TP1Error〕

DCRAPER_TIMEDOUT〔TP1Error〕

DCRAPER_TIMEOUT_SV〔TP1Error〕

DCRAPER_UNKNOWN_NODE〔TP1Error〕

DCRPC_CHAINED〔TP1ServerFlags〕

DCRPC_DOMAIN〔TP1ServerFlags〕

DCRPC_MAX_MESSAGE_SIZE〔TP1ServerLimits〕

DCRPC_NAMPORT〔TP1ServerFlags〕

DCRPC_NOREPLY〔TP1ServerFlags〕

DCRPC_NOWAIT〔TP1ServerFlags〕

DCRPC_SPECIFIC_MSG〔TP1ServerFlags〕

DCRPC_TPNOTRAN〔TP1ServerFlags〕

DCRPC_WAIT_MILLISEC〔TP1ServerFlags〕

DCRPCER_ALL_RECEIVED〔TP1Error〕

DCRPCER_FATAL〔TP1Error〕

DCRPCER_INVALID_ARGS〔TP1Error〕

DCRPCER_INVALID_DES〔TP1Error〕

DCRPCER_INVALID_REPLY〔TP1Error〕

DCRPCER_MESSAGE_TOO_BIG〔TP1Error〕

DCRPCER_NET_DOWN〔TP1Error〕

DCRPCER_NO_BUFS〔TP1Error〕

DCRPCER_NO_BUFS_AT_SERVER〔TP1Error〕

DCRPCER_NO_BUFS_RB〔TP1Error〕

DCRPCER_NO_PORT〔TP1Error〕

DCRPCER_NO_SUCH_DOMAIN〔TP1Error〕

DCRPCER_NO_SUCH_SERVICE〔TP1Error〕

DCRPCER_NO_SUCH_SERVICE_GROUP〔TP1Error〕

DCRPCER_NOT_TRN_EXTEND〔TP1Error〕

DCRPCER_OLTF_INITIALIZING〔TP1Error〕

DCRPCER_OLTF_NOT_UP〔TP1Error〕

DCRPCER_PROTO〔TP1Error〕

DCRPCER_REPLY_TOO_BIG〔TP1Error〕

DCRPCER_REPLY_TOO_BIG_RB〔TP1Error〕

DCRPCER_RETRY_COUNT_OVER〔TP1Error〕

DCRPCER_SEC_INIT〔TP1Error〕

DCRPCER_SECCHK〔TP1Error〕

DCRPCER_SERVER_BUSY〔TP1Error〕

DCRPCER_SERVICE_CLOSED〔TP1Error〕

DCRPCER_SERVICE_NOT_UP〔TP1Error〕

DCRPCER_SERVICE_TERMINATED〔TP1Error〕

DCRPCER_SERVICE_TERMINATING〔TP1Error〕

DCRPCER_STANDBY_END〔TP1Error〕

DCRPCER_SYSERR〔TP1Error〕

DCRPCER_SYSERR_AT_SERVER〔TP1Error〕

DCRPCER_SYSERR_AT_SERVER_RB〔TP1Error〕

DCRPCER_SYSERR_RB〔TP1Error〕

DCRPCER_TESTMODE〔TP1Error〕

DCRPCER_TIMED_OUT〔TP1Error〕

DCRPCER_TRNCHK〔TP1Error〕

DCRPCER_TRNCHK_EXTEND〔TP1Error〕

DCRTS_END〔TP1ServerFlags〕

DCRTS_START〔TP1ServerFlags〕

DCRTSER_ITEM_OVER〔TP1Error〕

DCRTSER_ITEM_OVER_SRV〔TP1Error〕

DCRTSER_ITEM_OVER_SVC〔TP1Error〕

DCRTSER_NOENTRY〔TP1Error〕

DCRTSER_NOMEM〔TP1Error〕

DCRTSER_PARAM〔TP1Error〕

DCRTSER_PROTO〔TP1Error〕

DCRTSER_RTS_NOT_START〔TP1Error〕

DCRTSER_VERSION〔TP1Error〕

DCTAM_ADD〔TP1ServerFlags〕

DCTAM_EQLSRC〔TP1ServerFlags〕

DCTAM_EXCLUSIVE〔TP1ServerFlags〕

DCTAM_FIRSTSRC〔TP1ServerFlags〕

DCTAM_GRTEQLSRC〔TP1ServerFlags〕

DCTAM_GRTSRC〔TP1ServerFlags〕

DCTAM_LSSEQLSRC〔TP1ServerFlags〕

DCTAM_LSSSRC〔TP1ServerFlags〕

DCTAM_MODIFY〔TP1ServerFlags〕

DCTAM_NEXTSRC〔TP1ServerFlags〕

DCTAM_NOEXCLUSIVE〔TP1ServerFlags〕

DCTAM_NOOUTREC〔TP1ServerFlags〕

DCTAM_NOWAIT〔TP1ServerFlags〕

DCTAM_OUTREC〔TP1ServerFlags〕

DCTAM_REC_EXCLUSIVE〔TP1ServerFlags〕

DCTAM_REFERENCE〔TP1ServerFlags〕

DCTAM_STS_CLS〔TP1ServerValues〕

DCTAM_STS_CMD〔TP1ServerValues〕

DCTAM_STS_HASH〔TP1ServerValues〕

DCTAM_STS_LHLD〔TP1ServerValues〕

DCTAM_STS_LIB〔TP1ServerValues〕

DCTAM_STS_NOSEC〔TP1ServerValues〕

DCTAM_STS_OHLD〔TP1ServerValues〕

DCTAM_STS_OPN〔TP1ServerValues〕

DCTAM_STS_READ〔TP1ServerValues〕

DCTAM_STS_RECLCK〔TP1ServerValues〕

DCTAM_STS_REWRITE〔TP1ServerValues〕

DCTAM_STS_SEC〔TP1ServerValues〕

DCTAM_STS_START〔TP1ServerValues〕

DCTAM_STS_TREE〔TP1ServerValues〕

DCTAM_STS_WRITE〔TP1ServerValues〕

DCTAM_TBL_EXCLUSIVE〔TP1ServerFlags〕

DCTAM_WAIT〔TP1ServerFlags〕

DCTAM_WRITE〔TP1ServerFlags〕

DCTAM_WRTADD〔TP1ServerFlags〕

DCTAMER_ACCESS〔TP1Error〕

DCTAMER_ACCESSF〔TP1Error〕

DCTAMER_ACCESSS〔TP1Error〕

DCTAMER_ACSATL〔TP1Error〕

DCTAMER_DLOCK〔TP1Error〕

DCTAMER_EXKEY〔TP1Error〕

DCTAMER_EXREWRT〔TP1Error〕

DCTAMER_EXWRITE〔TP1Error〕

DCTAMER_FLSVR〔TP1Error〕

DCTAMER_IDXTYP〔TP1Error〕

DCTAMER_IO〔TP1Error〕

DCTAMER_LOCK〔TP1Error〕

DCTAMER_LOGHLD〔TP1Error〕

DCTAMER_MEMORY〔TP1Error〕

DCTAMER_NO_ACL〔TP1Error〕

DCTAMER_NOAREA〔TP1Error〕

DCTAMER_NOLOAD〔TP1Error〕

DCTAMER_NOOPEN〔TP1Error〕

DCTAMER_NOREC〔TP1Error〕

DCTAMER_NOTTAM〔TP1Error〕

DCTAMER_OBSHLD〔TP1Error〕

DCTAMER_OPENED〔TP1Error〕

DCTAMER_OPENNUM〔TP1Error〕

DCTAMER_PARAM_BFA〔TP1Error〕

DCTAMER_PARAM_BFS〔TP1Error〕

DCTAMER_PARAM_DTA〔TP1Error〕

DCTAMER_PARAM_DTS〔TP1Error〕

DCTAMER_PARAM_FLG〔TP1Error〕

DCTAMER_PARAM_KEY〔TP1Error〕

DCTAMER_PARAM_KNO〔TP1Error〕

DCTAMER_PARAM_TBL〔TP1Error〕

DCTAMER_PARAM_TID〔TP1Error〕

DCTAMER_PROTO〔TP1Error〕

DCTAMER_RECOBS〔TP1Error〕

DCTAMER_RMTBL〔TP1Error〕

DCTAMER_SEQENCE〔TP1Error〕

DCTAMER_TAMEND〔TP1Error〕

DCTAMER_TAMVR〔TP1Error〕

DCTAMER_TBLVR〔TP1Error〕

DCTAMER_TMERR〔TP1Error〕

DCTAMER_TRNNUM〔TP1Error〕

DCTAMER_TRNOPN〔TP1Error〕

DCTAMER_UNDEF〔TP1Error〕

DCTRNER_HAZARD〔TP1Error〕

DCTRNER_HAZARD_NO_BEGIN〔TP1Error〕

DCTRNER_HEURISTIC〔TP1Error〕

DCTRNER_HEURISTIC_NO_BEGIN〔TP1Error〕

DCTRNER_NO_BEGIN〔TP1Error〕

DCTRNER_PROTO〔TP1Error〕

DCTRNER_RM〔TP1Error〕

DCTRNER_ROLLBACK〔TP1Error〕

DCTRNER_ROLLBACK_NO_BEGIN〔TP1Error〕

DCTRNER_TM〔TP1Error〕

Delete〔Tam〕

DiscardFurtherReplies〔Rpc〕

DiscardSpecificReply〔Rpc〕

Disconnect〔Rap〕

(Ｅ)

ErrorCode〔TP1Exception〕

ExceptionMessage〔TP1RemoteException〕

ExceptionName〔TP1RemoteException〕

Extension .NETが提供するP/Invoke指示ファイルのサンプル

Extension .NETで使用できるUAP

(Ｆ)

FileName〔TamStatusTable構造体〕

FinalizeSPP〔SPPBase〕

Flags〔RpcBindTable構造体〕

(Ｇ)

GAC〔用語解説〕

Get〔Lck〕

GetCallersAddress〔Rpc〕

GetErrorDescriptor〔Rpc〕

GetGatewayAddress〔Rpc〕

GetInfo〔Tam〕

GetInfo〔Trn〕

GetRecordName〔IRecordインタフェース〕

GetRecordShortDescription〔IRecordインタフェース〕

GetServicePriolity〔Rpc〕

GetStatus〔Adm〕

GetStatus〔Tam〕

GetTimeout〔Rpc〕

GetTraceNum〔Prf〕

(Ｈ)

HostName〔RpcBindTable構造体〕

(Ｉ)

if2cstub

if2sstub

if2tsdl

IndexType〔TamStatusTable構造体〕

Information〔TP1UserException〕

InitializeSPP〔SPPBase〕

IntArrayHolder

IntHolder

IRecordインタフェース

(Ｊ)

Jnl 【TP1/Server Base】

(Ｋ)

KeyLength〔TamStatusTable構造体〕

KeyName〔TamKeyTable構造体〕

KeyName2〔TamKeyTable構造体〕

KeyPosition〔TamStatusTable構造体〕

(Ｌ)

Lck 【TP1/Server Base】

LoadType〔TamStatusTable構造体〕

Log

LongArrayHolder

LongHolder

(Ｍ)

Mcf

module

(Ｎ)

NETCBL_SYSERR

NETCBL_SYSOUT

njs_appbase_directory

njs_appbase_directory

njs_appbase_directory

njs_input_max_message_size

njs_input_max_message_size

njs_output_max_message_size

njs_output_max_message_size

njs_server_assembly

njs_server_implement_class

njs_server_stub_class

njs_use_interface

njs_use_mcf

njs_xa_connect

njs_xa_dllname

NodeID〔RpcBindTable構造体〕

(Ｏ)

Open〔Rpc〕

Open〔Tam〕

OpenTP1 for .NET Frameworkとは

OpenTP1 for .NET Frameworkのアプリケーション

OpenTP1 for .NET Frameworkの構成

(Ｐ)

P/Invoke指示ファイル（.piv）

PollAnyReplies〔Rpc〕

PortNo〔RpcBindTable構造体〕

Prf

Print〔Log〕

PutUJ〔Jnl〕

PutUJ〔Jnl〕

PutUTrace〔Prf〕

PutUTrace〔Rts〕

(Ｒ)

Rap

rapクライアント

rapサーバ

rapリスナー

Read〔Tam〕

ReadCancel〔Tam〕

RecordLength〔TamStatusTable構造体〕

RecordMaxNumber〔TamStatusTable構造体〕

ReleaseAll〔Lck〕

ReleaseByName〔Lck〕

Rewrite〔Tam〕

Rollback〔Trn〕

RollbackChained〔Trn〕

Rpc

RpcBindTable構造体

RPCインタフェース

RPC応答メッセージの最大長

RPC応答メッセージの最大長

RPC送受信メッセージの最大長拡張機能

RPCの形態

RPCの形態によるRPCインタフェースの使用可否

RPCの種類

RPCの連鎖

RPC要求メッセージの最大長

RPC要求メッセージの最大長

Rts

(Ｓ)

Send〔Mcf〕

SendReceive〔Mcf〕

service

SetBindTable〔Rpc〕

SetDirectSchedule〔Rpc〕

SetRecordName〔IRecordインタフェース〕

SetRecordShortDescription〔IRecordインタフェース〕

SetServicePriolity〔Rpc〕

SetServiceRetry〔Rpc〕

SetTimeout〔Rpc〕

ShortArrayHolder

ShortHolder

SPP.NET

SPP.NET

SPP.NET〔用語解説〕

SPP.NETウィザード

SPP.NETが.NETインタフェース定義を使用

SPP.NET実行コンテナ

SPP.NET実行コンテナ〔用語解説〕

SPP.NETデバッガ

SPP.NETの作成手順

SPP.NETの作成方法

SPP.NETの実行環境

SPP.NETの実行環境の設定

spp2cstub

SPPBase

StringArrayHolder

StringHolder

SUP.NET

SUP.NET

SUP.NET〔用語解説〕

SUP.NETウィザード

SUP.NETデバッガ

SUP.NETの作成手順

SUP.NETの実行環境

SUP.NETの実行環境の設定

(Ｔ)

TableSecurity〔TamStatusTable構造体〕

TableStatus〔TamStatusTable構造体〕

Tam 【TP1/Server Base】

TamKeyTable構造体 【TP1/Server Base】

TamStatusTable構造体 【TP1/Server Base】

TAMファイルサービス（TP1/FS/Table Access）【TP1/Server Base】

ToString〔TP1Exception〕

ToString〔TP1RemoteException〕

ToString〔TP1UserException〕

TP1/Client for .NET Framework

TP1/Connector for .NET Framework

TP1/Extension for .NET Framework

TP1/Extension for .NET Framework使用時の前提条件

TP1/LiNKでの実行環境設定

TP1Error

TP1Exception

TP1Exception

TP1MarshalException

TP1RemoteException

TP1RemoteException

TP1RpcMethod

TP1RpcMethod〔TP1RpcMethod〕

TP1ServerException

TP1ServerException

TP1ServerFlags

TP1ServerLimits

TP1ServerValues

TP1 Service Description Language（TSDL）生成コマンド

TP1 Service Proxy〔用語解説〕

TP1 Service Proxyの追加

TP1UserException

TP1UserException

TP1UserException〔TP1UserException〕

TP1UserException〔TP1UserException〕

TP1UserStruct

TP1ユーザ構造体

Trn

TSP〔用語解説〕

(Ｕ)

UAPの作成手順

UByteArrayHolder

UByteHolder

UseRecordNumber〔TamStatusTable構造体〕

(Ｖ)

Value〔IntArrayHolder〕

Value〔IntHolder〕

Value〔LongArrayHolder〕

Value〔LongHolder〕

Value〔ShortArrayHolder〕

Value〔ShortHolder〕

Value〔StringArrayHolder〕

Value〔StringHolder〕

Value〔UByteArrayHolder〕

Value〔UByteHolder〕

Visual StudioでのSPP.NETのデバッグ方法

(Ｗ)

Write〔Tam〕

(Ｘ)

XA接続

XA接続の設定

XML Webサービス〔用語解説〕

(ア行)

(あ)

アクセス許可

アセンブリ〔用語解説〕

アプリケーションドメイン〔用語解説〕

アプリケーションの配置

アプリケーションプログラミングインタフェース（API）の種類

アプリケーションベースディレクトリ

アプリケーションベースディレクトリ

アプリケーションベースディレクトリ〔用語解説〕

(い)

インデクスドレコード〔用語解説〕

インデクスドレコードを使用したRPC

(う)

運用コマンド

運用コマンドの種類

(え)

エラーの判定

(お)

オブジェクト指向型SPP.NET

(カ行)

(か)

開発支援機能

開発支援機能を利用した開発およびデバッグ手順

カスタムレコードクラス〔用語解説〕

カスタムレコードクラスの生成

可変長構造体配列

環境設定

完全限定名〔用語解説〕

(き)

共通型システム〔用語解説〕

共通言語仕様〔用語解説〕

共通言語ランタイム〔用語解説〕

(く)

クライアントスタブ〔用語解説〕

クライアントスタブ生成コマンド（.NETインタフェース定義用）

クライアントスタブ生成コマンド（サービス定義用）

クライアントスタブの使用方法

クライアントスタブの使用方法

クライアントスタブの生成

クライアントスタブの生成

クライアントスタブの追加

グローバルアセンブリキャッシュ〔用語解説〕

グローバルトランザクション

(こ)

コネクション〔用語解説〕

コネクションプーリング機能〔用語解説〕

コネクションプール〔用語解説〕

コミット

コミット

(サ行)

(さ)

サーチパスの設定

サーバアプリケーション障害

サーバスタブ〔用語解説〕

サーバスタブクラス名称

サーバスタブ生成コマンド（.NETインタフェース定義用）

サービス定義

サービス定義

サービス定義〔用語解説〕

サービス定義ファイル

サービス定義を使用したRPC

サービス定義を使用したSPP.NETまたはSPPの呼び出し方法

サービス名=エントリポイント名

サンプルプログラムの使用方法

サンプルプログラムのディレクトリ構成

サンプルプログラムのビルド方法

(し)

資源の排他制御【TP1/Server Base】

システム共通定義

システム構成

システム定義【TP1/Server Base】

実行形式プログラム名

実装アセンブリ名称

実装クラス名称

自動起動の設定

出力データ用XMLスキーマ〔用語解説〕

出力データ用XMLスキーマファイル〔用語解説〕

障害時に取得する情報

障害の種類と対処方法

常設コネクション

(す)

スケジューラダイレクト機能

スタブ〔用語解説〕

(せ)

セキュリティポリシーの設定

(タ行)

(つ)

通信障害

(て)

データ型定義

データ型定義〔用語解説〕

データ型定義ファイル

データ変換障害

手続き型SPP.NET

デフォルトアプリケーションベースディレクトリ

(と)

同期応答型RPC

トランザクションシーケンス

トランザクション制御機能

トランザクション制御用ライブラリ

トランザクションの開始と同期点取得

トランザクションブランチ

(ナ行)

(な)

名前空間〔用語解説〕

(に)

入力データ用XMLスキーマ〔用語解説〕

入力データ用XMLスキーマファイル〔用語解説〕

(の)

ノード間負荷バランス機能

(ハ行)

(は)

排他制御

バイナリデータを使用したRPC

バイナリデータを使用したSPP.NETまたはSPPの呼び出し方法

バウンダリ調整

バッファプーリング機能〔用語解説〕

バッファプール〔用語解説〕

(ひ)

非応答型RPC

非同期応答型RPC

非連鎖モード

(マ行)

(ま)

マシン環境障害

マルチOpenTP1環境

マルチOpenTP1環境での運用

マルチOpenTP1環境での開発支援機能

(め)

メッセージ受信時の注意事項

メッセージ送受信機能

メッセージ送受信機能を使用

メッセージ送信時の注意事項

メッセージの一方送信

メッセージの出力先

メッセージの送受信

(ヤ行)

(ゆ)

ユーザサーバ障害

ユーザサーバの運用

ユーザサーバの環境設定（SPP.NET）

ユーザサーバの環境設定（SUP.NET）

ユーザサーバの定義

ユーザサービス定義

ユーザサービスデフォルト定義

ユーザジャーナル（UJ）

ユーザジャーナルの取得【TP1/Server Base】

(ラ行)

(り)

リアルタイム統計情報

リアルタイム統計情報の取得

リソースマネジャの接続

リモートAPI機能

リモートプロシジャコール（RPC）

(る)

ルートトランザクションブランチ

(れ)

例外の捕捉

連鎖RPC

連鎖モード

(ろ)

ロールバック

ロールバック

■ 商標類

ActiveXは，米国およびその他の国における米国Microsoft Corp.の商標です。
Microsoftは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
Microsoft SQL Serverは，米国Microsoft Corp.の商品名称です。
MSDNは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
ORACLEは，米国Oracle Corporation の登録商標です。
SOAP(Simple Object Access Protocol)は，分散ネットワーク環境においてXMLベースの情報を交換するための通信プロトコルの名称です。
Visual Basicは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
Visual Studioは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
Windowsは，米国およびその他の国における米国Microsoft Corp.の登録商標です。
Windows Serverは，米国およびその他の国における米国Microsoft Corp.の商標です。
X/Openは，X/Open Company Limited の英国ならびに他の国における登録商標です。

本書には，X/Openの許諾に基づき X/Open CAE Specification System Interfaces and Headers，Issue4，（C202 ISBN 1-872630-47-2）Copyright（C）July 1992， X/Open Company Limited の内容が含まれています;
なお，その一部は IEEE Std 1003.1-1990，（C）1990 Institute of Electrical and Electronics Engineers，Inc.及び IEEE std 1003.2/D12，（C）1992 Institute of Electrical and Electronics Engineers，Inc.を基にしています。

事前に著作権所有者の許諾を得ずに，本書の該当部分を複製，複写及び転記することは禁じられています。

本書には，X/Openの許諾に基づき X/Open X/Open Preliminary Specification Distributed Transaction Processing：The TxRPC Specification（P305 ISBN 1-85912-000-8）Copyright（C）July 1993， X/Open Company Limited の内容が含まれています;

事前に著作権所有者の許諾を得ずに，本書の該当部分を複製，複写及び転記することは禁じられています。

本書には，Open Software Foundation，Inc. が著作権を有する内容が含まれています。
This document and the software described herein are furnished under a license，and may be used and copied only in accordance with the terms of such license and with the inclusion of the above copyright notice. Title to and ownership of the document and software remain with OSF or its licensors.