Comments
Description
Transcript
iTP Active Transaction Pagesプログラマーズ・ガイド
iTP Active Transaction Pages (iTP ATP) プログラマーズ・ガイド 概要 このマニュアルでは、タンデム NonStop システム対応のサーバーサイド JavaScript 環境である iTP ATP(iTP Active Transaction Pages)の使用方 法について説明します。また、iTP ATP のインストール方法についても 説明します。さらに、ATP オブジェクトを使用して、既存の NonStop TS/MP、NonStop TUXEDO、NonStop SQL/MP、およびソケット・アプ リケーションに Web ベースのインターフェイスを追加する方法につい ても説明します。 製品バージョン iTP ATP 1.0 対象となるリリース このマニュアルは、新版で特記しない限り、D42、G02、およびそれ以 降のリリースを対象とします。 マニュアル番号 141215J 発行日 1999 年 10 月 コンパックコンピュータ株式会社 141215J -1 本書のプログラムを含むすべての内容は、著作権法上の保護を受けて おります。著者、発行者の許諾を得ず、無断で複写、複製をすること は禁じられております。 原 典 Part Number Product Version Published 141215 iTP ATP 1.0 October 1998 New editions incorporate any updates issued since the previous edition. A plus sign (+) after a release ID indicates that this manual describes function added to the base release, either by an interim product modification (IPM) or by a new product version on a .99 site update tape (SUT). Ordering Information For manual ordering information: domestic U.S. customers, call 1-800-243-6886; international customers, contact your local sales representative. Document Disclaimer Information contained in a manual is subject to change without notice. Please check with your authorized Tandem representative to make sure you have the most recent information. Export Statement Export of the information contained in this manual may require authorization from the U.S Department of Commerce. Examples Examples and sample programs are for illustration only and may not be suited for your particular purpose. Tandem does not warrant, guarantee, or make any representations regarding the use or the results of the use of any examples or sample program in any documentation. You should verify the applicability of any example or sample program before placing the software into productive use. U. S.Government Customers FOR U.S. GOVERNMENT CUSTOMERS REGARDING THIS DOCUMENTATION AND THE ASSOCIATED SOFTWARE: These notices shall be marked on any reproduction of this data, in whole or in part. NOTICE: Notwithstanding any other lease or license that may pertain to, or accompany the delivery of, this computer software, the rights of the Government regarding its use, reproduction and disclosure are as set forth in Section 52.227-19 of the FARS Computer Software—Restricted Rights clause. RESTRICTED RIGHTS NOTICE: Use, duplication or disclosure by the Government is subject to the restrictions as set forth in subparagraph(c)(1)(ii) of the Rights in Technical Data and Computer Software clause at DFARS 52.227-7013. RESTRICTED RIGHTS LEGEND: Use, duplication or disclosure by the Government is subject to the restrictions as set forth in paragraph(b)(3)(B) of the rights in Technical Data and Computer Software clause in DAR 7-104.9(a). This computer software is submitted with “restricted rights.” Use, duplication or disclosure is subject to the restrictions as set forth in NASA FAR SUP 18-52 227-79 (April 1985) “Commercial Computer Software— Restricted Rights (April 1985).” If the contract contains the Clause at 18-52 227-74 “Rights in Data General” then the “Alternate III” clause applies. U.S. Government Users Restricted Rights—Use, duplications or disclosure restricted by GSA ADP Schedule Contract. Unpublished—All rights reserved under the Copyright Laws of the United States. -2 141215J 目次 目次 新情報................................................................................................................................................... v このマニュアルについて ..................................................................................................................vii このマニュアルの構成 .............................................................................................................vii 表記規約 ...................................................................................................................................viii 第 1 章 はじめに NonStop システム対応のサーバーサイド JavaScript.....................................................................1-1 アーキテクチャ ................................................................................................................................1-2 ATP ツール .......................................................................................................................................1-4 NonStop SQL ツール ...............................................................................................................1-4 NonStop TS/MP(Pathway)ツール .......................................................................................1-4 NonStop TUXEDO ツール ......................................................................................................1-4 第 2 章 ATP のインストールと実行 必要なソフトウェア .........................................................................................................................2-1 インストール ....................................................................................................................................2-1 ATP のメイクファイル ...........................................................................................................2-1 ATP のディレクトリ構造........................................................................................................2-2 NonStop TUXEDO との接続性の選択 ...................................................................................2-3 NonStop SQL との接続性........................................................................................................2-3 構成のカスタマイズ ................................................................................................................2-3 httpd.config ファイル内の ATP .......................................................................................................2-3 ATP 構成ファイル ...................................................................................................................2-4 ATP TUXEDO 構成ファイル..................................................................................................2-6 ATP の環境変数 ...............................................................................................................................2-7 ATP の実行 .......................................................................................................................................2-8 141215J i 目 次 第 3 章 ATP の Web ページとスクリプトの構造 Web ページの構造 ........................................................................................................................... 3-1 Web ページの処理 ........................................................................................................................... 3-1 スクリプトと HTML ....................................................................................................................... 3-2 サーバーサイド・スクリプトの構造 ............................................................................................. 3-3 JavaScript からの NonStop SQL の使用 ................................................................................ 3-5 JavaScript からの Pathway サーバーの使用 .......................................................................... 3-5 JavaScript からの NonStop TUXEDO サーバーの使用 ........................................................ 3-7 JavaScript からの TCP/IP ソケットの使用 ............................................................................ 3-9 ATP のサンプルの索引 ................................................................................................................. 3-10 ATP のサンプル内の汎用関数 ...................................................................................................... 3-11 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド NonStop SQL オブジェクト ............................................................................................................ 4-1 atp.SQL オブジェクト ............................................................................................................ 4-2 atp.sqlvar オブジェクト .......................................................................................................... 4-8 NonStop TS/MP(Pathway)オブジェクト ................................................................................. 4-10 atp.dictionary オブジェクト .................................................................................................. 4-10 atp.field オブジェクト........................................................................................................... 4-12 atp.request オブジェクト ...................................................................................................... 4-17 atp.blob オブジェクト ........................................................................................................... 4-18 atp.buffer オブジェクト ........................................................................................................ 4-19 NonStop TM/MP(TMF)オブジェクト ..................................................................................... 4-22 atp.transaction オブジェクト ................................................................................................ 4-22 NonStop TUXEDO オブジェクト ................................................................................................. 4-23 atp.fml_field オブジェクト ................................................................................................... 4-24 atp.fml_table オブジェクト................................................................................................... 4-25 atp.fml_buffer オブジェクト................................................................................................. 4-27 ソケット・オブジェクト .............................................................................................................. 4-30 atp.socket オブジェクト ........................................................................................................ 4-30 グローバル関数.............................................................................................................................. 4-33 ii 141215J 目次 第 5 章 ATP アプリケーションの設計とデバッグ パフォーマンスを考慮した設計 ......................................................................................................5-1 セキュリティに関する留意点 .........................................................................................................5-2 堅牢なスクリプトの記述 .................................................................................................................5-3 ATP アプリケーションのデバッグ .................................................................................................5-3 一般的なガイドライン ............................................................................................................5-3 変数の表示 ...............................................................................................................................5-4 ブレークポイントの設定 ........................................................................................................5-4 SQL を使用するスクリプトのデバッグ .................................................................................5-5 Web ページからディスクへの出力の追跡 .............................................................................5-5 Korn シェルからのサーバーサイド JavaScript 環境の実行 ..................................................5-5 付録 A SQL Query Tool と SQL Catalog Explorer ツールのインストール ....................................................................................................................A-1 セキュリティ ...................................................................................................................................A-2 .atp_sql_query ファイル名拡張子 ..........................................................................................A-2 パスワード ..............................................................................................................................A-2 読み取り専用のアクセス .......................................................................................................A-3 NonStop SQL Catalog Explorer の使用 ..........................................................................................A-3 Catalog Explorer の実行..........................................................................................................A-3 カタログの選択 .......................................................................................................................A-3 詳細情報の表示 .......................................................................................................................A-4 クエリの生成 ..........................................................................................................................A-4 クエリの発行 ..........................................................................................................................A-5 NonStop SQL Query Tool の使用 ...................................................................................................A-5 Query Tool の実行 ..................................................................................................................A-5 クエリの入力 ..........................................................................................................................A-5 表示オプションの選択 ...........................................................................................................A-5 クエリの発行 ..........................................................................................................................A-6 使用法に関するヒント ....................................................................................................................A-6 141215J iii 目 次 付録 B DDL Dictionary Viewer(dview) dview のインストール .....................................................................................................................B-1 dview の実行 ....................................................................................................................................B-1 DDL ディクショナリの選択 ...........................................................................................................B-1 メッセージ・レイアウトの選択 .....................................................................................................B-2 メッセージ・レイアウトの調査 .....................................................................................................B-2 フィールド・オブジェクトのコンストラクタの使用...................................................................B-2 付録 C HTML Forms Generator Forms Generator のインストール ...................................................................................................C-1 Forms Generator の実行 ...................................................................................................................C-1 DDL ディクショナリの選択 ...........................................................................................................C-1 リクエストおよびリプライ・メッセージの選択 ..........................................................................C-2 生成されたページの仕上げ ............................................................................................................C-3 使用法に関する留意点 ....................................................................................................................C-4 付録 D JavaScript Utility Driver(jud) jud のインストール ........................................................................................................................ D-1 jud の実行 ........................................................................................................................................ D-1 環境の指定 ...................................................................................................................................... D-1 リクエスト・バッファの作成 ........................................................................................................ D-2 リプライ・メッセージの表示 ........................................................................................................ D-3 索引 図 図 1-1 ATP のアーキテクチャ .................................................................................................... 1-2 表 3-1 プログラミング・タスク別のサンプル ........................................................................ 3-10 表 3-2 ATP のサンプル内で定義されている関数 .................................................................... 3-12 表 4-1 atp.field オブジェクトが使用するデータ型 .................................................................. 4-14 表 iv 141215J 新情報 新情報 このマニュアルの新情報 概要 このマニュアルでは、タンデム NonStop システム対応のサーバーサイド JavaScript 環境である iTP ATP (iTP Active Transaction Pages)の使用方法について説明します。また、iTP ATP のインストール方法につ いても説明します。さらに、ATP オブジェクトを使用して、既存の NonStop TS/MP、NonStop TUXEDO、 NonStop SQL/MP、およびソケット・アプリケーションに Web ベースのインターフェイスを追加する方法 についても説明します。 製品バージョン iTP ATP 1.0 対象となるリリース このマニュアルは、新版で特記しない限り、D42、G02、およびそれ以降のリリースを対象とします。 マニュアル番号 141215J 発行日 1999 年 10 月 マニュアル履歴 マニュアル番号 製品バージョン 141215J iTP ATP 1.0 発行日 1999 年 10 月 新版には、旧版の更新内容がすべて反映されています。 このマニュアルでは、リリース ID の後ろのプラス記号(+)は、暫定版製品の更新(IPM)または .99 サイト更新テープ(SUT)に基づく新版製品によって、旧リリースに追加された機能を示します。 141215J v このマニュアルについて このマニュアルについて このマニュアルでは、iTP ATP(iTP Active Transaction Pages)について説明します。この製品は、サー バーサイド・スクリプトの開発を容易にするサーバーサイド JavaScript 環境と一連のツールから構成され ます。このマニュアルは主に、スクリプトを開発するプログラマを対象にしています。このマニュアルで は、ATP 用の環境変数とその他の構成オプションについても説明します。 このマニュアルと製品を最大限に活用できるように、次の情報を入手しておくことをお勧めします。 □ JavaScript プログラミング言語関連のドキュメント □『iTP Secure WebServer Administrator Guide』 ATP の主な利点は、既存の NonStop SQL/MP、NonStop TS/MP(Pathway)、NonStop TUXEDO、およ びソケット・アプリケーション用にブラウザベースのインターフェイスを開発できることです。既存のア プリケーション用のインターフェイスを開発するには、そのアプリケーションの基盤となるタンデム製品 に精通しておく必要があります。 最後に、ATP の CD に収録されているサンプル・ファイルにアクセスできる必要があります。 このマニュアルの構成 このマニュアルは、次の 5 つの章と 4 つの付録から構成されています。 「第 1 章 はじめに」では、ATP について紹介し、そのアーキテクチャについて説明します。 「第 2 章 ATP のインストールと実行」では、ATP ソフトウェアのインストール方法、構成のカスタマ イズ方法、ATP の実行方法、および ATP の主なツールへのアクセス方法について説明します。 「第 3 章 ATP の Web ページとスクリプトの構造」では、Web ページ上のサーバーサイド JavaScript を 区切るための構文について説明し、いくつかのサンプル・スクリプトの構造について説明します。 「第 4 章 ATP のオブジェクト、プロパティ、およびメソッド」では、NonStop SQL、NonStop TS/MP、 NonStop TUXEDO、およびソケットを使用するスクリプトの作成に使用するオブジェクトとメソッドにつ いて説明します。 「第 5 章 ATP アプリケーションの設計とデバッグ」では、レジリエントで効率的なスクリプトの作成、 パフォーマンスを考慮した ATP の構成、および ATP の各種インターフェイスを使用するスクリプトのデ バッグについてガイドラインを示します。 「付録 A SQL Query Tool と SQL Catalog Explorer」では、ATP スクリプト内で使用するクエリの生成 とテストに役立つ 2 つのツールの機能と使用方法について説明します。 「付録 B DDL Dictionary Viewer(dview)」では、ディクショナリ内のメッセージ・レイアウトの調査 と、メッセージ内のフィールドを表すオブジェクトのコンストラクタの生成に使用できるツールについて 説明します。 「付録 C HTML Forms Generator」では、NonStop TS/MP(Pathway)サーバー・クラスと通信する HTML フォームの生成に使用できるツールについて説明します。 「付録 D JavaScript Utility Driver(jud)」では、NonStop TUXEDO サービスと通信するアプリケーショ ンのプロトタイプ作成に使用できるツールについて説明します。 141215J vii このマニュアルについて 表記規約 構文の表記 ここでは、このマニュアルに示されている構文の表記規約について要約します。 大文字 キーワードと予約語を示します。このアイテムは表記どおりに正確に入力する必要があります。角かっ こで囲まれていないアイテムは必須です。例: MAXATTACH 非斜体の小文字 キーワードと予約語を示します。このアイテムは表記どおりに正確に入力する必要があります。例: gtacl 斜体の小文字 ユーザー指定の変数アイテムを示します。角かっこで囲まれていないアイテムは必須です。例: file-name [ ] 角括弧 任意の構文アイテムを囲みます。例: TERM [\system-name.]$terminal-name INT[ERRUPTS] 角括弧で囲んだアイテムのリストは、そのリストから 1 つのアイテムを選択するか、何も選択しないで もよいことを意味します。リスト内のアイテムについては、各アイテムを角括弧で囲んで垂直に並べるか、 リストを角括弧で囲んで各アイテムを縦線で区切って水平に並べています。例: LIGHTS [ ON ] [ OFF ] [ SMOOTH [ num ] ] K [ X | D ] address-1 { } 中括弧 中括弧で囲んだアイテムのリストは、選択できるアイテムのリストです。リスト内の 1 つのアイテムを 選択する必要があります。リスト内のアイテムについては、各アイテムを中括弧で囲んで垂直に並べるか、 リストを中括弧で囲んで各アイテムを縦線で区切って水平に並べています。例: LISTOPENS PROCESS { $appl-mgr-name } { $process-name } ALLOWSU { ON | OFF } viii 141215J このマニュアルについて | 縦線 角括弧または中括弧で囲んだリスト内で水平に並べたアイテムを区切ります。例: INSPECT { OFF | ON | SAVEABEND } ... 省略記号 角括弧または中括弧の直後の省略記号は、括弧内の構文アイテムの並びを任意の回数、繰り返すことが できることを示します。例: M address-1 [ , new-value ]... [ - ] {0|1|2|3|4|5|6|7|8|9}... 1 つの構文アイテムの直後の省略記号は、その構文アイテムを任意の回数、繰り返すことができること を示します。例: "s-char..." 区切り記号 括弧、コンマ、セミコロン、およびその他の区切り記号は表記どおりに入力する必要があります。例: error := NEXTFILENAME ( file-name ) ; LISTOPENS SU $process-name.#su-name 角括弧や中括弧のような記号を囲む引用符は、その記号を表記どおりに入力する必要があることを示し ます。例: "[" repetition-constant-list "]" アイテム間のスペース アイテムが括弧やコンマのような区切り記号でない場合、アイテム間に示しているスペースは必須です。 例: CALL STEPMOM ( process-id ) ; 2 つのアイテム間にスペースがない場合、スペースは許可されません。次の例では、ピリオドとその他 のアイテムとの間でスペースは許可されません。 $process-name.#su-name 行間の空行 コマンドの構文が長すぎて 1 行に収まらない場合、後続の各行は 3 つのスペースでインデントし、空行 で区切ります。この空行は、後続の行内のアイテムと、垂直に並んだ選択リスト内のアイテムとを区別し ます。例: ALTER [ / OUT file-spec / ] CONTROLLER [ , attribute-spec ]... 141215J ix このマニュアルについて !i および !o プロシージャ呼び出しで、入力パラメータ(呼び出し先のプロシージャにデータを渡す)の後ろには !i を表記しています。出力パラメータ(呼び出し元のプログラムにデータを返す)の後ろには !o を表記して います。例: CALL CHECKRESIZESEGMENT ( segment-id , error ) ; !i !o !i,o プロシージャ呼び出しで、入出力パラメータ(呼び出し先のプロシージャにデータを渡し、呼び出し元 のプログラムにデータを返す)の後ろには !i,o を表記しています。例: error := COMPRESSEDIT ( filenum ) ; !i,o !i:i 入力文字列パラメータに、文字列長をバイト単位で指定する対応のパラメータがある場合、プロシージャ 呼び出しで、その入力パラメータの後ろに !i:i を表記しています。例: error := FILENAME_COMPARE_ ( filename1:length , filename2:length ) ; !i:i !i:i !o:i 出力バッファ・パラメータに、出力バッファの最大長をバイト単位で指定する対応の入力パラメータが ある場合、プロシージャ呼び出しで、その出力パラメータの後ろに !o:i を表記しています。例: error := FILE_GETINFO_ ( filenum , [ filename:maxlen ] ) ; !i !o:i メッセージの表記 ここでは、このマニュアル内で示されているメッセージの表記規約について要約します。 太字のテキスト 例での太字のテキストは端末からのユーザー入力を示します。例: ENTER RUN CODE ?123 CODE RECEIVED: 123.00 ユーザーは入力後に Return キーを押す必要があります。 非斜体のテキスト 非斜体の文字、数字、および区切り記号は、そのテキストが表記どおりに表示されるか、返されること を示します。例: Backup Up. x 141215J このマニュアルについて 斜体の小文字 値が表示されるか返される変数アイテムを示します。例: p-register process-name [ ] 角括弧 状況によって表示されるが、常に表示されるとは限らないアイテムを囲みます。例: Event number = number [ Subject = first-subject-value ] 角括弧で囲んだアイテムのリストは、表示される可能性があるアイテムのリストです。リスト内の 1 つ アイテムが実際に表示されるか、どのアイテムも表示されない場合があります。リスト内のアイテムにつ いては、各アイテムを角括弧で囲んで垂直に並べるか、リストを角括弧で囲んで各アイテムを縦線で区切っ て水平に並べています。例: LDEV ldev [ CU %ccu | CU %... ] UP [ (cpu,chan,%ctlr,%unit) ] { } 中括弧 中括弧で囲んだアイテムのリストは、表示される可能性があるアイテムのリストです。リスト内の 1 つ のアイテムが実際に表示されます。リスト内のアイテムについては、各アイテムを中括弧で囲んで垂直に 並べるか、リストを中括弧で囲んで各アイテムを縦線で区切って水平に並べています。例: LBU { X | Y } POWER FAIL process-name State changed from old-objstate to objstate { Operator Request. } { Unknown. } | 縦線 角かっこまたは中かっこで囲んだリスト内で水平に並べたアイテムを区切ります。たとえば、次のよう に表記されます。 Transfer status: { OK | Failed } % パーセント記号 10 進数以外の数字の前に付けています。8 進数の前には % を表記し、2 進数の前には %B を表記し、16 進数の前には %H を表記しています。例: %005400 P=%p-register E=%e-register 141215J xi 第 1 章 はじめに 第1章 はじめに iTP ATP(iTP Active Transaction Pages)は NonStop システム対応のサーバーサイド JavaScript 環境です。 この章では、iTP ATP の機能とアーキテクチャについて要約します。 注意:便宜上、このマニュアルでは通常、iTP ATP を ATP と表記します。ATP(大文字表記)という表記はすべ て、正式製品名である iTP ATP(iTP Active Transaction Pages)を表すものとします。 NonStop システム対応のサーバーサイド JavaScript NonStop システム対応のサーバーサイド JavaScript では、広く普及している JavaScript スクリプト言語 と、容易に入手できる Web コンテンツ・オーサリング・ツールを使用するので、さまざまな方法で iTP Secure WebServer アプリケーションを開発できます。 ATP は Netscape JavaScript インタプリタと、タンデム製品へのインターフェイスを提供する拡張機能を 使用します。ここでのタンデム製品とは、NonStop SQL/MP、NonStop TS/MP(以前の Pathway)、NonStop TUXEDO などです。 ATP には次のような利点があります。 □ Pathway(NonStop TS/MP)サーバー・クラス、NonStop SQL データベース、NonStop TUXEDO サー バー、および TCP/IP ソケットを使用する Web ページ(フォームも含む)を開発できます。したがっ て、ATP を使用すれば、ブラウザから既存のアプリケーションへ容易にアクセスできます。 □ ワークステーションベースのツールを使用して独自の Web ページを開発できます。たとえば、Microsoft Frontpage のようなオーサリング・ツールまたは Windows のメモ帳や vi のようなテキスト・エディタ を使用できます。Web ページの開発に、タンデムや OSS の開発ツールは必要ありません。 □ コンパイルが必要なものはありません。Web ページが設計どおりに機能するまで編集およびテストす るだけです。 □ スクリプトの境界をマークアップする標準の HTML 表記を使用して、Web ページの内容およびレイア ウトとスクリプトとを区分できます。 □ ATP には多くの構成オプションは必要ありません。調整用に定義する構成オプションはありますが、そ れらのオプションを使用しなくても ATP の使用を開始できます。 □ Web ページから既存のアプリケーションやデータベースへのアクセスを実現するにあたって、そのア プリケーションやデータベースを修正する必要はありません。 □ NonStop TS/MP アプリケーションの広範なアーキテクチャと実装スタイルをサポートしています。た とえば、ATP は COBOL サーバーおよび C サーバーと互換性があり、複合アプリケーション・メッセー ジ構造体とデータ型を問題なく扱うことができます。 □ さまざまな NonStop TM/MP トランザクション・シナリオをサポートしています。たとえば、1 つのト ランザクションはサーバー・クラスへの複数の送信操作にまたがることができます。サーバー・クラス は、同じ PATHMON 環境で動作していても、異なる PATHMON 環境で実行していてもかまいません。 141215J 1-1 第 1 章 はじめに □ ATP は Netscape Navigator と Internet Explorer のどのバージョンとも互換性があります。ただし、ATP のいくつかのサンプル・スクリプト、特にこの章の「ATP ツール」に記述されているツールは、Netscape Navigator 3.1 以降または Internet Explorer 4.0 以降でだけ使用できる機能を利用します。 □ すべてのデータ通信は HTTP を使用します。プラグインまたはバック・チャネルは必要ありません。 アーキテクチャ 図 1-1 に、ATP と iTP Secure WebServer および NSK 環境内のレガシ・アプリケーションとの関係を示 します。 図 1-1 ATP のアーキテクチャ 1-2 141215J 第 1 章 はじめに ATP CGI サーバーは、iTP Secure WebServer 環境では atp という Pathway CGI サーバー・クラスです。 .atp の拡張子が付いたファイルへのリクエストをすべてこのサーバー・クラスに送るように、iTP Secure WebServer を構成します。この構成手順については、 「第 2 章 ATP のインストールと実行」を参照してく ださい。 ATP は .atp ページを解析し、埋め込みサーバーサイド・スクリプトをすべて実行します。これらのス クリプトは特殊な HTML タグによって識別されます。これらのタグは、Netscape 社が JavaScript 製品用に 採用しているタグと同じです。これらのタグについては、「第 3 章 ATP の Web ページとスクリプトの構 造」を参照してください。 atp サーバー・クラスには次の内部コンポーネントがあります。 □ JavaScript 言語インタプリタ(Netscape 社製)。 □ 埋め込みサーバーサイド・スクリプトを識別し、サーバーサイド・インクルードを展開する HTML パー サ。インクルード・ファイルによって、頻繁に使用するスクリプトを多くのページで共有できます。 注意:ATP は、『iTP Secure WebServer Administrator’s Guide』に記述されているサーバーサイド・インクルー ドの種類をすべてサポートするとは限りません。ATP がサポートするサーバーサイド・インクルードについ ては、「第 3 章 ATP の Web ページとスクリプトの構造」を参照してください。 □ NonStop SQL、NonStop TS/MP、NonStop TUXEDO、および NonStop TCP/IP ソケット・インターフェ イスとのインターフェイスをサポートする JavaScript 言語のオブジェクト。 Web ページから NonStop SQL データベースへの NonStop SQL インターフェイス・オブジェクトは、 インターフェイス・オブジェクト 直接のアクセスを可能にします。 NonStop TS/MP および Pathway インターフェイス・オブジェクトによって、次のことが可能になりま インターフェイス・オブジェクト す。 ● アプリケーション・メッセージの組み立てと分解。 ● JavaScript のデータ型と、C および COBOL のデータ型との間のデータ変換。 ● DDL(Data Definition Language)ディクショナリの使用。NonStop TS/MP のユーザーは通常、この ディクショナリを使用してアプリケーション・メッセージ・レイアウトを定義します。 ● NonStop TM/MP を使用してのトランザクション境界の定義。 ● Pathsend とアプリケーション・サーバーとの通信。 NonStop TUXEDO インターフェイス・オブジェクトによって、次のことが可能になります。 インターフェイス・オブジェクト ● NonStop TUXEDO FML フィールド・テーブルを使用しての FML および FML32 バッファの定義。 ● NonStop TUXEDO リクエスト / レスポンス・サーバー(ただし会話型サーバーではない)との通信。 ATP オブジェクトは FML バッファとビュー・バッファの両方をサポートします。 ソケット・インターフェイス・オブジェクトを使用すれば、Web ページを TCP/IP サーバー・アプリケー ソケット・インターフェイス・オブジェクト ションのソケット・クライアントとして実行できます。たとえば、Web ページから SMTP メッセージや HTTP リクエストを送信したり、Web ページを Telnet クライアントとして実行したりできます。 JavaScript スクリプトの開発者にとって、これらの機能を提供するオブジェクトは、JavaScript 言語に組 み込まれているように見えます。 141215J 1-3 第 1 章 はじめに ATP ツール ATP は、サーバーサイド・スクリプトの開発をより容易にするツール・セットに付属しています。これ らのツール自体がスクリプトで記述されているので、各ツールのソースを印刷または表示して、ATP のさ まざまなオブジェクトや関数の使用例を見ることができます。 NonStop SQL ツール 次のツールは、NonStop SQL アプリケーションを使用するスクリプトの開発に役立ちます。 □ SQL Catalog Explorer を使用すれば、SQL カタログの内容を参照したり、スクリプトへの貼り付けに 適したクエリを生成したりできます。チェック・ボックスとプルダウン・リストのような HTML の機 能を使用して、必要なクエリを記述します。Catalog Explorer は、対応する SQL 文を生成します。Catalog Explorer については、「付録 A SQL Query Tool と Catalog Explorer」を参照してください。 □ Query Tool を使用すれば、クエリをテストして、さまざまな形式で結果を表示できます。iqy ファイル を作成して、クエリ結果を Excel 97 で使用することもできます。Query Tool については、 「付録 A SQL Query Tool と Catalog Explorer」を参照してください。 NonStop TS/MP(Pathway)ツール 次のツールは、Pathway アプリケーションを使用するスクリプトの開発に役立ちます。 □ dview(DDL Dictionary Viewer)を使用すれば、ディクショナリ内で定義されたメッセージ・レイア ウトを表示したり、メッセージ内のフィールドを表すオブジェクトのコンストラクタを生成したりでき ます。これらのコンストラクタをクリップボードに切り取り、自作のスクリプトに貼り付けることがで 「付録 B DDL Dictionary Viewer(dview)」を参照してください。 きます。dview については、 □ HTML Forms Generator を使用するときは、DDL ディクショナリからリクエストおよびリプライ・ メッセージのレイアウトを選択します。これによって、Forms Generator が、NonStop TS/MP Pathsend ファシリティを使用してリクエストを送ってリプライを受け取る HTML フォームを生成します。生成 されたスクリプトに、エラー処理、セキュリティ機能、およびその他の最終修正を加えます。Forms Generator については、「付録 C HTML Forms Generator」を参照してください。 NonStop TUXEDO ツール jud(JavaScript Utility Driver)は、NonStop TUXEDO アプリケーションを使用するスクリプトの開発 に役立ちます。jud を使用するときは、NonStop TUXEDO フィールド・テーブルおよびビューからフィー ルドを指定します。これによって、jud が FML または FML32 バッファを NonStop TUXEDO サービスに 送ります。NonStop TUXEDO ud ユーティリティを実装するこのツールは、アプリケーションのプロトタ イプを作るのに特に役立ちます。JavaScript Utility Driver については、 「付録 D JavaScript Utility Driver (jud)」を参照してください。 1-4 141215J 第 2 章 ATP のインストールと実行 第2章 ATP のインストールと実行 この章では、ATP のインストール方法、最適のパフォーマンスを得るための ATP の構成方法、および ATP の実行方法について説明します。 必要なソフトウェア ATP のインストール前に、次のソフトウェアをインストールして構成する必要があります。 □ NonStop Kernel D42 以降または G02 以降 □ NonStop TUXEDO Release 2(NonStop TUXEDO へのアクセスに JavaScript オブジェクトを使用する場 合) □ OSS(オープン・システム・サービス) □ iTP WebServer または iTP Secure WebServer Release 2.2 以降 インストール ATP の readme ファイルおよび softdoc 内の指示に従って、配布メディアから ATP ソフトウェアをコピー します。その後、次の手順に従って製品ファイルとサンプル・ファイルをインストールします。 1. 次の OSS コマンドを使用して、インストールするディレクトリを指定します。 cd /usr/tandem/atp/install 2 2. 次のコマンドを使用して、メイクファイルを実行します。 make ATP のメイクファイル ATP のメイクファイルは次のような処理をします。 1. プロンプトを表示して、Guardian ボリュームとサブボリュームの名前を要求します。これらの名前は、 ATP のサンプル・プログラムによって使用されるさまざまなファイルの場所を示します。これらの名 前の前に $ または /G を付けないでください。 2. ATP プログラム(atp.pway)を SQL コンパイラを使用してコンパイルし、コンパイルのステータ スをレポートします。 3. ATP 構成ファイル(atp.config)を作成します。ATP を使用するには、このファイルを iTP Secure WebServer 構成ファイル(httpd.config)にインクルードしてください。 4. NonStop TUXEDO がある場合、NonStop TUXEDO のサポートを有効にし、ATP TUXEDO 構成ファイ ル(atp-tuxedo.config.sample)を作成します。TUXEDO に関連するオブジェクトを使用す るには、このファイルをカスタマイズし、iTP Secure WebServer 構成ファイル(httpd.config)に インクルードしてください。 141215J 2-1 第 2 章 ATP のインストールと実行 5. プロンプトを表示して、サンプル Pathway アプリケーション(employee、homebank、および file upload)をインストールするかどうか尋ねます。これらのアプリケーションのインストールには若干 の時間がかかります。これらのアプリケーションをすぐに必要としない場合は、次のコマンドで後でイ ンストールできます。 make examples サンプルをインストールし、それらのサンプルと共に作成された多くのデータ・ファイルを後で削除す る場合は、次のコマンドを使用します。 make examples -clean サンプル・アプリケーションをインストールした場合は、各アプリケーション用に構成ファイルが作成 されています。それらのファイルを iTP Secure WebServer 構成ファイル(httpd.config)にイン クルードしてください。 ATP のディレクトリ構造 ATP のインストール後、インストール先のディレクトリ /usr/tandem/atp の構造と内容は次のよ うになります。 □ bin ディレクトリには、atp サーバー・クラスのオブジェクト・コード・ファイルがあります。この ファイルには JavaScript インタプリタが含まれています。 □ include ディレクトリには、atp_api.h ヘッダー・ファイルがあります。 □ install ディレクトリには、ATP のメイクファイルと resetCache スクリプトがあります。 □ conf ディレクトリには、ATP 用の構成ファイル、NonStop TUXEDO 用の構成ファイル(NonStop TUXEDO が存在する場合)、およびサンプル・プログラム用の構成ファイル(サンプル・プログラムを インストールした場合)があります。 □ examples ディレクトリ内のサブディレクトリには、次のものがあります。 ● ホームページなどの HTML ファイルとそれらのページに使用されるイメージ・ファイル(ATP の ホームページは /examples/index.html にあります) 2-2 ● Pathway アプリケーション(homebank など) ● Pathway ツール(DDL Dictionary Viewer、Forms Generator など) ● ソケット・アプリケーション(HTTP 用のクラス・ライブラリなど) ● SQL アプリケーション(別バージョンの homebank など) ● SQL ツール(Query Tool、Catalog Explorer など) ● TUXEDO アプリケーション(bankapp など) ● TUXEDO ツール(jud(JavaScript Utility Driver)など) ● JavaScript の watch( ) メソッドを使用するデバッグ・ルーチン 141215J 第 2 章 ATP のインストールと実行 NonStop TUXEDO との接続性の選択 ATP のインストール手順で、NonStop TUXEDO が存在するかどうか検出され、存在する場合は、TUXEDO に必要な ATP オブジェクトがインストールされます。 ATP は /T または /WS クライアントとの接続性をサポートしています。インストール手順では、/T との 接続性が指定されます。/WS との接続性に切り替えるには、nld ツールを次の構文で使用します。 nld -change libname \$system.system.1tuxw2 /usr/tandem/atp/bin/atp.pway あとで /T 接続性に切り替えるには、次の構文を使用します。 nld -change libname \$system.system.1tuxt2 /usr/tandem/atp/bin/atp.pway バックスラッシュ(\)は必須です。 NonStop SQL との接続性 ATP のインストール手順で、最も効率的なオプションを使用して ATP が SQL コンパイラによってコン パイルされます。たとえば、NOREGISTER ON、CHECK INOPERABLE PLANS、RECOMPILE などが使 用されます。NonStop SQL はこれらのオプションを使用して、SQL の統計情報、インデックス、テーブル 編成、およびその他の類似のイベントでの変更に応じて、クエリのプランを自動的に再計算します。これ らのオプションを使用しないと、そのような変更によってキャッシュ内のクエリが無効になります。 SQL コンパイルのオプションを変更しない場合もあります。 構成のカスタマイズ ATP のインストール手順で、ATP ソフトウェアとサンプル・プログラムの実行に適した構成ファイルが 生成されます。構成をチューニングし、自作のアプリケーションをサポートするには、ATP 構成ファイル (atp.config)または ATP TUXEDO 構成ファイル(atp-tuxedo.config.sample)の修正が 必要になることがあります。自作のアプリケーション用に構成ファイルの作成が必要になることもありま す。これらの構成ファイルをすべて iTP Secure WebServer 構成ファイル(httpd.config)にインク ルードします。 自作のアプリケーションの要件に合わせての構成ファイルの修正については、この章の「httpd.config ファイル内の ATP」を参照してください。 構成の修正後、restarth スクリプトまたは対応する Administration Server コマンドを使用して、iTP Secure WebServer を再起動する必要があります。iTP Secure WebServer の再起動については、『iTP Secure WebServer System Administrator Guide』を参照してください。 httpd.config ファイル内の ATP ATP のインストール手順で、編集してから iTP Secure WebServer 環境用の httpd.config ファイル にインクルードできる構成ファイルが生成されます。make の実行後、/usr/tandem/atp/conf/ atp.config に ATP 構成 ファ イル が生 成さ れ、/usr/tandem/atp/conf/atp-tuxedo. config.sample に ATP TUXEDO 構成ファイルが生成されます。 このマニュアルでは、マニュアルの執筆時に最新であるバージョンの構成ファイルについて説明してい ます。したがって、それらのファイルは、CD に収録されたファイルと若干異なるかもしれません。必要に 応じて構成ファイルを修正する方法を理解するには、この後の説明をガイドとして参照してください。 141215J 2-3 第 2 章 ATP のインストールと実行 構成ファイルには、このマニュアルに記述されていないコメントが記述されています。逆に、このマニュ アルには、それらの構成ファイルに記述されていないコメントが記述されています。同様に、太字の見出 しはこのマニュアルに記述されていますが、構成ファイルには記述されていません。 ATP 構成ファイル 以下に説明する指示語は、atp.config というファイルに記述されています。 Filemap 指示語 atp.config ファイルは次のステートメントから始まります。Set 文は、ATP がインストールされ たディレクトリの名前と一致するように変数 ATP_ROOT を定義します。Filemap 指示語は、ATP のホー ムページを格納する ATP の examples ディレクトリの場所に、URL の構成要素 /atp をマップします。 set ATP_ROOT /usr/tandem/atp Filemap /atp $ATP_ROOT/examples MimeType および PathwayMimeMap 指示語 MimeType 指示語は、拡張子 .atp が付いたファイルが MIME タイプ application/x-httpdguardian であることを示します。対応する PathwayMimeMap 指示語は、拡張子 .atp が付いたファ イルが atp サーバー・クラスによって処理されることを示します。 MimeType application/x-httpd-guardian atp PathwayMimeMap atp atp セキュリティ上の理由から、複数のスクリプトが別々の PATHMON 環境内で処理されるようにする場 合があります。その場合、ATP 構成ファイルに次の行を追加します。次の例では、拡張子 .atp_sql_query が付いたファイルは、PATHMON プロセス /G/DJCP: 制御下のサーバー・クラス atp によって処理さ れます。 MimeType application/x-httpd-guardian atp_sql_query PathwayMimeMap atp_sql_query /G/DJCP:atp 別々の PATHMON 環境の使用の詳細については、付録 A の「.atp_sql_query ファイル名拡張子」を参照 してください。 Server 指示語 Server 指示語は atp サーバー・クラスを定義します。次の例では、atp.pway という atp サー バー・クラスを定義しています。複数の atp サーバー・クラスを定義することもできます。Server 指 示語のサブコマンドは、左中かっこの後に記述します。 Server /usr/tandem/atp/bin/atp.pway { 2-4 141215J 第 2 章 ATP のインストールと実行 環境変数 Sever 指示語の以下のサブコマンドは ATP の環境変数を指定します。ATP のこれらの環境変数とその 他の環境変数については、この章の「ATP の環境変数」を参照してください。 Env Env Env Env SQL_STATEMENT_CACHE_SIZE=50 ATP_PAGE_CACHE_SIZE=0 ATP_PAGE_CACHE_SIGNAL=16 TUXEDO_FTBL_CACHE_SIZE=0 マップ定義 Server 指示語の以下のサブコマンドは、サンプル・アプリケーションで使用されるプロセスおよび データベース・テーブルの場所を指定します。以下のリストを追加して、自作のアプリケーションで使用 するテーブルとビュー用のマップ定義、および追加の PATHMON 用のマップ定義を追加してください。 ATP は =TANDEM_PATHMON_NAME という暗黙の定義を作成します。この定義は、この atp サーバー・ クラスが定義される PATHMON 環境を参照し、TANDEM_PATHMON_NAME という iTP Secure WebServer の環境変数から取得されます。任意のアプリケーションに対して別々の PATHMON 環境を定義する場合 は、PATHMON プロセス名を指定するマップ定義とそのアプリケーション用のメイクファイルとが一貫し ている必要があります。 次のマップ定義は DDL ディクショナリの場所を指定します。ボリューム名とサブボリューム名はイン ストール中に指定したものです。 MapDefine =atp_EM_DDL /G/data02/ZATPEM/dictddf MapDefine =atp_FU_ddl /G/data02/ZATPFU/dictddf MapDefine =atp_HM_ddl /G/data02/ZATPHM/dictddf 次のマップ定義は SQL テーブルの場所を指定します。 MapDefine MapDefine MapDefine MapDefine MapDefine MapDefine MapDefine =cust /G/DATA02/ZATPHM/cust =tran /G/DATA02/ZATPHM/tran =account /G/DATA02/ZATPHM/account =access /G/DATA02/ZATPHM/access =userid /G/DATA02/ZATPHM/userid =acl /G/DATA02/ZATPHM/acl =bankapp-account /G/DATA02/ZATPHM/account 次のマップ定義は NonStop TUXEDO bankapp アプリケーション用のものです。NonStop TUXEDO を実 行している場合は、コメント文字(#)を削除してください。 #MapDefine =bankapp-account /G/YOUR_VOLUME/YOUR_SUBVOLUME/account Maxlinks、Maxservers、および Numstatic パラメータ 次のパラメータは、atp サーバー・クラス内のサーバーへの同時リンクの数(Maxlinks) 、クラス内 のサーバーの最大数(Maxservers)、およびクラス内のスタティック・サーバーの数(Numstatic) を指定します。各 atp プロセスはシングルスレッドとして動作するので、Maxlinks の値は 1 のままで変 更しないでください。運用環境では、Numstatic の値をここで示す値よりも大きくすると、パフォーマ ンスを改善できます。理想的なのは、Numstatic の値を atp サーバー・クラスへの同時リクエストの 平均数と等しくすることです。 141215J 2-5 第 2 章 ATP のインストールと実行 Maxlinks 1 Maxservers 20 Numstatic 4 } ソース・ステートメント atp.config ファイルは、NonStop TUXEDO とサンプル・アプリケーション用の構成ファイルが存 在するかどうかチェックします。構成ファイルが存在する場合、そのファイルは atp.config にインク ルードされます。 ATP TUXEDO 構成ファイル 以下に説明する指示語は、atp-tuxedo.config.samples というファイルに記述されています。 現在の NonStop TUXEDO の構成を反映させるには、このファイルを修正してください。次に、そのファ イルの名前を変更するか、そのファイルを /conf/atp-tuxedo.config にコピーします。 次の行は、ATP のすべてのサンプル・プログラムに適用される NonStop TUXEDO 変数を指定します。 Region 指示語は、拡張子 .atp が付いた tuxedo* ディレクトリとそのディレクトリ内のすべてのファ イルを指定します。これらの環境変数の定義については、NonStop Tuxedo のマニュアル・セットまたは TPINIT の man ページを参照してください。 注意:Guardian ファイル名を参照するときも、TUXCONFIG の環境変数は大文字小文字を区別します。 Region /atp/tuxedo*.atp { AddCGI TUXEDO_TPINIT_USRNAME AddCGI TUXEDO_TPINIT_CLTNAME AddCGI TUXEDO_TPINIT_PASSWD # AddCGI TUXEDO_TPINIT_GRPNAME AddCGI TUXEDO_TPINIT_DATA AddCGI TUXDIR /tuxedoD44 User Client Password BANKB1 Data 次の行は、サンプル・バンキング・アプリケーションに適用される NonStop TUXEDO 変数を指定しま す。これらの環境変数の定義については、NonStopTUXEDO のマニュアル・セットを参照してください。 現在の構成と一致するようにパス名を変更します。 AddCGI TUXCONFIG /G/DATA02/DJCBACF/TUXCFG AddCGI FLDTBLDIR /tuxedoD44/udataobj:/home/your_name/ bankapp AddCGI FIELDTBLS Usysflds,bank.flds 次の行は /WS との接続だけに適用されます。現在の構成に該当する場合は、コメント文字(#)を削除 し、環境変数の値を修正します。 # AddCGI WSNADDR=0x0002961882fc03de # AddCGI WSTYPE=NONSTOPKERNEL } 2-6 141215J 第 2 章 ATP のインストールと実行 ATP の環境変数 構成ファイル内で ATP の以下の環境変数を指定できます。 ATP_PAGE_CACHE_SIZE この変数は、atp.pway 内での Web ページのキャッシュを構成します。この変数を設定すること によって、Web ページがあまり頻繁に変更されない状況でのパフォーマンスを改善できます。Web ペー ジは、解析された形式でローカル・キャッシュ内に保持されます。この変数の値は、Web ページの数 (キャッシュ内に保持される .atp ページの数)を示します。ATP がページのディスク・バージョンを 調べるのは、キャッシュがいっぱいになるか、atp.pway プロセスが停止するか、そのプロセスが変 数 ATP_PAGE_CACHE_SIGNAL に よっ て定 義さ れた シグ ナル を受 け取 って から です。 ATP_PAGE_CACHE_SIZE の最小値は 0 です。最大値は使用可能なヒープ・スペースの容量です。 変数 ATP_COMPILE も指定する場合、ATP_PAGE_CACHE_SIZE の値を大きくすると、メモリ が不足することがあります。自分のニーズに最適の ATP_PAGE_CACHE_SIZE の値を見つけるには、 自作のアプリケーション内で頻繁に使用されるルート・ページの数より若干大きい値から始めます。 サーバーサイド・インクルードを計算に入れないで、インクルードを含むページだけを計算に入れます。 ATP_COMPILE Web ページのキャッシュを構成した場合、スクリプトの擬似コードをキャッシュ内に保持されるよ うに設定すると、パフォーマンスをさらに改善できます。この場合、ATP は Web ページの使用ごとに スクリプトをコンパイルする必要はありません。コンパイル済みの擬似コードを保持することによっ て、パフォーマンスに大きな違いが出ることがあります。 注意:このオプションを選択する場合は、反復起動に関するエラーの原因になり得るコンテキストを、Web ページ が保持しないことを確認します。たとえば、Web ページが自身の変数を初期化し、SQL カーソルを閉じ、ト ランザクションを適正にコミットまたはロールバックすることを確認します。 グローバルに環境変数 ATP_COMPILE を設定するには、atp.pway サーバー・クラス用に Env ATP_COMPILE=1 を指定します。複数のディレクトリ用に対してローカルに環境変数 ATP_COMPILE を設定するには、Region コマンドで AddGI ATP_COMPILE 1 を指定します。個々のページ・レベ ルでは、</head> タグの前のどこかで <meta compile="on"> を使用します。この変数に指定 できる値は 0 または 1、ON または OFF です。 ATP_PAGE_CACHE_SIGNAL この変数に値 16 または 17 を指定した場合、atp サーバー・クラスは、リクエストの処理を中断せ ずに続行しながら、キャッシュを使用可能な状態に戻します。ATP の install ディレクトリ内の resetCache スクリプトを使用して、複数の atp.pway プロセスに自動的にシグナルが送られるよ うにしてください。値 16 または 17 を使用するか、この変数を省略してください。 141215J 2-7 第 2 章 ATP のインストールと実行 TUXEDO_FTBL_CACHE_SIZE この変数を使用して、atp.pway 内での FML Field Table キャッシュを構成します。この変数を設 定することによって、NonStop TUXEDO サーバーへのアクセスに FML バッファを使用する Web ペー ジのパフォーマンスを改善できます。フィールド・テーブルは、セミコンパイルされた形式でローカ ル・キャッシュ内に保持されます。この変数の値は、キャッシュ内に保持されるフィールド・テーブル の数を示します。ATP がフィールド・テーブルのディスク・バージョンを調べるのは、キャッシュが い っ ぱ い に な る か、サ ー バ ー・ク ラ ス が 停 止 す る か、サ ー バ ー・プ ロ セ ス が ATP_PAGE_CACHE_SIGNAL によって定義されたシグナルを受け取ってからです。 ATP_SCRIPT_STACKSIZE スクリプト・インタプリタのスタックのチャンク・サイズを指定するには、Env 指示語にこの変数を 追加します。デフォルト値は 32000 です。自作のアプリケーションが使用できるメモリが不足する場合 だけ、この値を増やします。最大値は 96 メガバイトです。 ATP_SCRIPT_RUNTIME_SIZE スクリプト・インタプリタによって使用されるヒープのメモリ・サイズを指定するには、Env 指示語 にこの変数を追加します。デフォルト値は 1000000 です。自作のアプリケーションが使用できるメモ リが不足する場合だけ、この値を増やします。最大値は 96 メガバイトです。 SQL_STATEMENT_CACHE_SIZE NonStop SQL へのアクセスに JavaScript オブジェクトを使用する場合は、この環境変数を使用して SQL 文のキャッシュ・サイズを増やします。デフォルト値は 50 ステートメントです。最小値は 20 ス テートメントです。 SQL 文のキャッシュ・サイズを大きくすると、オープンした SQL テーブルの数が原因で、atp.pway プロセスが使用できる PFS スペースが不足することがあります。この場合、nld を使用して PFS スペー スのサイズを増やすことができます。 SQL 文のキャッシュ・サイズの設定は、次の数よりも若干大きい値を指定することをお勧めします。 ● 任意の 1 ページの Web ページ内の SQL 文の最大数 ● 最も頻繁に使用される Web ページ内の SQL 文の総数 ATP の実行 ATP のインストール後に iTP Secure WebServer を起動または再起動すると、atp.pway サーバー・ク ラスが自動的に起動されます。 ATP のサンプル・プログラムおよび開発ツールへのアクセスについては、/examples/index.html から ATP のホームページをロードしてください。 2-8 141215J 第 3 章 ATP の Web ページとスクリプトの構造 第3章 ATP の Web ページとスクリプトの構造 Web ページの構造 ATP は、Netscape LiveWire の規則に従うサーバーサイド HTML マークアップ・タグを認識します。し たがって、それらのタグをサポートする Web オーサリング・ツールを使用できます。 サーバーサイド JavaScript を含むページには、拡張子 .atp を付ける必要があります。サーバーサイド・ スクリプトの境界をマークアップするには、次のどれかのタグを使用します。 □ <server></server> □ ‘(バッククォーテーション) バッククォーテーションを使用すれば、別のタグ内にスクリプトを埋め込むことができます。たとえ ば、次のように使用します。 <ahref="‘bit of script‘"> タグ内で <server></server> 構文を使用することもできますが、バッククォーテーションを 使用したほうが読みやすくなります。 □ \Q(エスケープト・バッククォーテーション) □ <script language=atpScript></script> このタグを使用する場合は、Microsoft FrontPage のような Web オーサリング環境を使用できます。 ただし、このタグ以外のスクリプト境界宣言は認識されません。 サーバーサイド・インクルードも Netscape の規則に従います。たとえば、次のような記述になります。 * <!-- #include file="shared-script-functions.inc" --> メタ・タグ(<meta http-equiv="content-type" content=text/html> など)内や #include 文内にスクリプトは記述できません。それ以外の場所ならどこでもスクリプトを記述して、 ファイル拡張子の動的定義や、クライアントサイド・スクリプトの振る舞いの修正などを実行できます。 Web ページの処理 ATP は次のように Web ページを処理します。 1. メタ・タグを保存します。 2. サーバー・インクルードを展開します。 3. 能動的な内容(サーバーサイド・スクリプト)と受動的な内容(変更されずに Web ブラウザに渡され るもの)とを区別します。 4. サーバーサイド・スクリプトを実行します。スクリプトの出力は、元の .atp ページ内のスクリプト によって占有される場所に書き込まれます。スクリプトは効果的にスクリプトの出力に置き換えられま す。その出力は、アプリケーション・サーバーから出力された数行のデータから構成されることもあれ ば、そのようなデータを含まないこともあります。 141215J 3-1 第 3 章 ATP の Web ページとスクリプトの構造 ブラウザは、生成された HTML のストリームとテキスト(および、場合によってはクライアントサイド JavaScript)を解析して表示します。 注意:ATP には、スクリプトを使用して HTTP ヘッダーを動的に変更する手段はありません。ヘッダーを変更する には、HTML のメタ・タグを使用します。たとえば、書式なしのテキスト出力を生成するには、次のステー トメントを使用できます。 <META HTTP-EQUIV="content-Type" CONTENT="text/plain"> スクリプトと HTML 自作のアプリケーションに必要なスクリプトと HTML の比率に応じて、サーバーサイド・スクリプト内 に HTML を記述するか、HTML 内にサーバーサイド・スクリプトを記述できます。ATP は明らかな HTML はすべて受動的な内容とみなし、処理のために直接ブラウザに渡します。自作のスクリプトには、効率上 の理由から、HTML の行をブラウザに出力するためのステートメントを明示的に記述しないでください。 ATP は、複数行の HTML を単一の出力操作でブラウザに渡します。 次のコード抜粋は、サーバーサイド・スクリプトと明らかな HTML との組み合わせです。サーバーサイ ド JavaScript とスクリプトの区切り記号を強調表示しています。1 行または複数行の HTML が明示的に記 述されている場所では、たとえば、最初の <server> タグの前や、</server> タグと最初のバック クォーテーション(‘)の間では、ATP はそれらの行を単一の出力操作でブラウザへ渡します。この例で は、do 文と while 文との間のすべての HTML がループの実行ごとに毎回ブラウザに渡されます。ATP オブジェクトからテーブルのデータを返す関数を表す ‘account_id()‘ のような表現に対しては、ATP はその表現を評価し、その表現が HTML 内で出現した場所で、戻り値をブラウザへ渡します。 <table border=3 cellpadding=3 cellspacing=3> ... <!--HTML to print the column headings (omitted here)--> ... <server> do { </server> <tr> <!-- The from radio button...--> <td align=center> <input type=radio name=FromAccount value=‘account_id();‘”> </td> <!-- The data about the account...--> <td align=center> ‘last_name();‘ </td> <td align=center> ‘first_name();‘ </td> <td align=center> ‘account_id();‘ </td> <td align=center> ‘balance();‘ </td> <!-- The to radio button...--> <td align=center> <input type=radio name=ToAccount value=‘account_id();‘”> </td> </tr> 3-2 141215J 第 3 章 ATP の Web ページとスクリプトの構造 <server> } while (nextAcct() && rowCount++ <10); </server> ... </table> サーバーサイド・スクリプトの構造 ATP スクリプトの構造とプログラミング手法を理解する最もよい方法は、ATP の examples ディレク トリ内の多数のサンプル・スクリプトを研究することです。ここでは、ATP ページが通信できる次の種類 のアプリケーションごとに 1 つのサンプル・スクリプトを取り上げ、その構造について説明します。 □ NonStop SQL □ NonStop TS/MP(以前の Pathway) □ NonStop TUXEDO □ Sockets(TCP/IP) これらのサンプルの一部は、NonStop TM/MP(以前の TMF)を使用します。 特定のプログラミング・タスクを実例で示すサンプルの一覧については、3-10 ページの「表 3-1:プロ グラミング・タスク別のサンプル」を参照してください。コピーして自分のニーズに合わせることができ るサンプル関数の一覧については、3-12 ページの「表 3-2:ATP のサンプル内で定義されている関数」を 参照してください。 JavaScript からの NonStop SQL の使用 ATP の examples ディレクトリ内の sql と sql_tools というディレクトリには、SQL スクリプトの 構 造を 示す 多く のサ ンプ ルが あり ます。た とえ ば、/examples/sql/homebank/Webpages/ address.atp ファイルがあります。このファイルを印刷するか画面上に表示し、このあとのパラグラ フを読むときに参照してください。このスクリプトによって、ユーザーはホーム・バンキングの顧客の名 前と住所を変更できます。 NonStop/SQL へのアクセスに使用するオブジェクトとメソッドの詳細については、「第 4 章 ATP のオ ブジェクト、プロパティ、およびメソッド」を参照してください。 定義とインクルード スクリプト(/examples/sql/homebank/Webpages/address.atp)は、顧客の名前と住 所の入力検査をする関数の定義から始まります。これらの関数は、サーバー上で実行する必要性はないの で、クライアントサイド JavaScript に記述します。 スクリプトの本体は、必要な関数を定義するいくつかのファイルをインクルードすることから始まりま す。 <SERVER> タグは、サーバーサイド JavaScript の開始位置を示します。 141215J 3-3 第 3 章 ATP の Web ページとスクリプトの構造 どのスクリプトの実行もコンテキストには依存しないので、スクリプトはページのロードごとにセキュ リティをチェックします。ATP はセッションの概念を実装していません。 ブラウザからのリクエストの受け取り ブラウザから受け取ったリクエストの種類を識別するために、スクリプト(/examples/sql/ homebank/Webpages/address.atp)は atp.request オブジェクトを調べます。特にこのス クリプトは、atp.request オブジェクトのプロパティである環境変数 REQUEST_METHOD を調べま す。値 POST は、ユーザーがフォームを送信したことを示します。この場合の POST は、ユーザーがトラ ンザクションを要求したことを示します。特定のボタンが押されたことを検知することによって、トラン ザクションを認識するという方法もあります。 スクリプトの一般的な構造は、リクエスト方法によって異なります。 □ リクエスト方法が GET 操作である場合、現在のデータを取得して表示します。 □ リクエスト方法が POST 操作である場合、データベースを更新してから、現在の(更新された)データ を取得して表示します。 要求されたトランザクションの実行 S Q L 文を 実行 する ため に、スク リプ ト(/ e x a m p l e s / s q l / h o m e b a n k / W e b p a g e s / address.atp)は、まず atp.SQL オブジェクトのインスタンスを作成する必要があります。オブジェ クトの作成時、このスクリプトは SQL 文の種類を指定しますが、コンストラクタ(オブジェクトの作成時 に呼び出される)は SQL 文を暗黙的に実行することはありません。 execute メソッドを使用する前に、このスクリプトは atp.transaction オブジェクトを作成し、 データベースの更新内容が NonStop TM/MP によって保護されるようにします。atp.transaction オ ブジェクトは、SQL オブジェクトの前に作成することもできます。ただし atp.transaction オブジェ クトの作成は、スクリプトが execute メソッドを起動する前に行う必要があります。スクリプトが atp.transaction オブジェクトをパラメータとしてメソッド(ここでは execute メソッド)に渡 すまで、トランザクションは開始されません。 execute メソッドの呼び出し後、このスクリプトは atp.SQL オブジェクトの sqlcode プロパティ を使用して、SQL エラー・コードをチェックします。このスクリプトは、エラー・コードに従って、 atp.transaction オブジェクトの commit メソッドを使用してトランザクションをコミットするか、 rollback メソッドを使用してトランザクションをロールバックします。その後、ユーザーにメッセー ジを表示し、トランザクションの結果を示します。 ATP のサンプル・スクリプトは、読みやすいように画面の最上部にエラー・メッセージを表示します。 結果の表示 前回のトランザクションの結果を表示するために、スクリプト(/examples/sql/homebank/ Webpages/address.atp)はキャッシュからデータを読み取ります。リクエストからの新しいデー タをエコーするという方法もありますが、キャッシュからデータを読み取るほうがコードの記述が容易で す。また、更新が行われたことも確認できます。データを読み取るために、スクリプトは atp.SQL オブ ジェクトのインスタンスを別個に作成します。ここでは SQL の SELECT 文を使用します。 3-4 141215J 第 3 章 ATP の Web ページとスクリプトの構造 SELECT 文を実行するために、このスクリプトはまず execute メソッドを呼び出してカーソルを定義 します。次に、next メソッドを呼び出して行を読み取ります。SELECT 文の場合、execute メソッド は自動的に行を読み取らないためです。読み取り操作は安全に繰り返すことができるので、トランザクショ ン・オブジェクトは使用していません。 このスクリプトは、atp.SQL オブジェクトの sqlcode プロパティを使用して、エラー・コードを チェックし、適宜メッセージを表示します。 </SERVER> タグは、サーバーサイド JavaScript のブロックの終了位置を示します。スクリプト内には、 複数のブロックのサーバーサイド JavaScript を記述できます。各ブロックは <server></server> タ グで区切ります。スクリプト内には、バッククォーテーションで囲んでサーバーサイド JavaScript を記述 することもできます。フォームを表示するために、このスクリプトは、SELECT 文に対して作成された atp.SQL オブジェクトからのデータを使用します。atp.SQL オブジェクトの column_values プロ パティは、行の内容を表す値の配列です。 JavaScript からの Pathway サーバーの使用 ATP の examples ディレクトリ内の pathway と pathway_tools というディレクトリには、Pathway ス クリ プト の構 造を 示す 多く のサ ンプ ルが あり ます。/examples/pathway/homebank/ Webpages/address.atp ファイルは、前に説明した SQL のサンプルと機能的には同じですが、この サンプルとは異なるオブジェクトを使用してサーバー・クラスにリクエストを送ります。このファイルを 印刷するか画面上に表示し、この後の説明を読むときに参照してください。examples/pathway/ homebank/Webpages/send_to_server.inc ファイルも印刷または表示し、参照してください。 address.atp スクリプトは、このファイルをインクルード・ファイルとして使用します。 NonStop TS/MP へのアクセスに使用するオブジェクトとメソッドの詳細については、「第 4 章 ATP の オブジェクト、プロパティ、およびメソッド」を参照してください。 定義とインクルード このスクリプトは、顧客の名前と住所の入力検査をする関数の定義から始まります。これらの関数は、 サーバー上で実行する必要性はないので、クライアントサイド JavaScript に記述します。 スクリプトの本体は、必要な関数を定義するいくつかのファイルをインクルードすることから始まりま す。 <SERVER> タグは、サーバーサイド JavaScript の開始位置を示します。 どのスクリプトの実行でもコンテキストは保持されないので、スクリプトはページのロードごとにセ キュリティをチェックします。ATP はセッションの概念を実装していません。 ブラウザからのリクエストの受け取り ブラウザから受け取ったリクエストの種類を識別するために、スクリプト(/examples/pathway/ homebank/Webpages/address.atp)は atp.request オブジェクトを調べます。特にこのス クリプトは、atp.request オブジェクトのプロパティである環境変数 REQUEST_METHOD を調べま す。POST の値は、ユーザーがトランザクションを送信したことを示します。 ここまでは、このサンプルは SQL のサンプルに似ています。 141215J 3-5 第 3 章 ATP の Web ページとスクリプトの構造 要求されたトランザクションの実行 サーバー・クラスにリクエストを送るために、スクリプト(/examples/pathway/homebank/ Webpages/address.atp)は atp.dictionary オブジェクトのインスタンスを作成します。こ のオブジェクトは、サーバー・クラスが認識できるメッセージ・レイアウトを定義する DDL(Data Definition Language)ディクショナリを表します。スクリプトの開発者が dview ツールからの出力を使用するとい う方法もあります。dview は DDL ディクショナリの受動的な使用を可能にするツールです。 次に、リクエストを保持して後でリプライを保持するために、このスクリプトは atp.buffer オブ ジェクトを作成します。setData メソッドは、atp.request オブジェクトによって表されるリクエ ストからのデータを使用して、バッファにデータを格納します。複数のフィールドに値を格納するために、 このスクリプトはフィールドごとに 1 回、setData メソッドを呼び出す必要があります。たとえば、ス クリプトはループを使用してテーブルの行に値を格納します。 データベースを更新するために、このスクリプトは send_to_server 関数を呼び出します。この関 数は次のような処理をします。 1. データベースの更新内容を保護するために atp.transaction オブジェクトを作成します。 2. atp.buffer オブジェクトの send メソッドを使用して、この関数の呼び出しで指定されたサー バー・クラスにバッファを送ります。 3. atp.buffer オブジェクトの error プロパティに格納されている Pathsend エラー・コードをチェッ クします。 4. atp.transaction オブジェクトのメソッドを使用して、トランザクションをコミットするかロー ルバックします。 リクエストへのリプライは atp.buffer オブジェクトの reply プロパティ内にあります。reply プロパティはそれ自体がバッファ・オブジェクトです。このサンプルでは replyBuf がバッファ・オブ ジェクトです。リプライからフィールドを抽出するために、send_to_server 関数は、メッセージの 形式を定義する atp.dictionary オブジェクトと、atp.buffer オブジェクト replyBuf に適用 される getData メソッドを使用します。 send_to_server から処理が戻ると、このスクリプトはリプライ・バッファ内にメッセージがある かどうかチェックし、メッセージがある場合はそのメッセージを表示します。 結果の表示 NonStop SQL のサンプルの場合と同様、前回のトランザクションの結果を表示するために、スクリプト (/examples/pathway/homebank/Webpages/address.atp)は読み取り操作を実行します。 この場合、このスクリプトは atp.dictionary および atp.buffer オブジェクトを新規作成し、 send_to_server 関数を呼び出して新しいバッファを送ります。send_to_server から処理が戻 ると、このスクリプトはリプライ・バッファ内にメッセージがあるかどうかチェックし、メッセージがあ る場合はそのメッセージを表示します。 結果を含むフォームを表示するために、このスクリプトはリプライ・バッファ・オブジェクトに適用さ れる getData メソッドを使用します。リプライ・バッファ・オブジェクトは、リクエスト・バッファ・ オブジェクトの reply プロパティです。 3-6 141215J 第 3 章 ATP の Web ページとスクリプトの構造 JavaScript からの NonStop TUXEDO サーバーの使用 ATP の examples ディレクトリ内の tuxedo と tuxedo_tools というディレクトリには、TUXEDO ス ク リ プ ト の 構 造 を 示 す 多 く の サ ン プ ル が あ り ま す。/ e x a m p l e s / t u x e d o / b a n k a p p / transfer.atp ファイルは、同じ Web ページから使用される 2 つの外部データ・ソースを示します。 □ SQL オブジェクトは、NonStop SQL データベースにアクセスして、bankapp の ACCOUNT テーブル から先頭の少数の預金口座を表すフォームを表示します。bankapp は NonStop TUXEDO に標準添付 のサンプル・アプリケーションです。 □ NonStop TUXEDO オブジェクトは、選択された 2 つの預金口座間で現金の振り替えを行います。 このファイルを印刷または表示し、この後の説明を読むときに参照してください。 NonStop TUXEDO へのアクセスに使用するオブジェクトとメソッドの詳細については、「第 4 章 ATP のオブジェクト、プロパティ、およびメソッド」を参照してください。 定義とインクルード このスクリプトでは、まず、顧客の預金口座に関する情報の入力検査をする関数を定義します。これら の関数は、サーバー上で実行する理由はないので、クライアントサイド JavaScript に記述します。 スクリプトの本体では、まず、必要な関数を定義するいくつかのファイルをインクルードします。 <SERVER> タグは、サーバーサイド JavaScript の開始位置を示します。 サーバーサイド関数 このサンプル(/examples/tuxedo/bankapp/transfer.atp)は、NonStop TUXEDO 環境 と通信するために doTransfer という関数を定義します。これは、Pathway のサンプルが Pathway サー バーと通信するために send_to_server 関数を定義するのと同様です。ただし、Pathway のサンプル がインクルード・ファイルを使用するのに対して、このサンプルは doTransfer 関数を Web ページに含んで います。この関数を Web ページで定義するかインクルード・ファイルで定義するかは、プログラミング・ スタイルの問題です。一般に、インクルード・ファイルを複数のアプリケーションに組み込むほうが容易 であり、関数のカプセル化もできます。このスタイルでは、Web ページの設計者は関数の実装方法に注意 を向ける必要がなく、関数の呼び出し方法の検討に専念できます。ただし、Web ページ上での関数の定義 にも利点があり、操作フローの検討がより容易です。 doTransfer の詳細については、この章の「要求されたトランザクションの実行」を参照してください。 ブラウザからのリクエストの受け取り ブラウザから受け取ったリクエストの種類を識別するために、スクリプト(/examples/tuxedo/ bankapp/transfer.atp)は atp.request オブジェクトを調べます。特にこのスクリプトは、 atp.request オブジェクトのプロパティである環境変数 REQUEST_METHOD を調べます。POST の 値は、ユーザーがトランザクションを送信したことを示します。 要求されたトランザクションの実行 ト ラ ン ザ ク シ ョ ン を 実 行 す る た め に、ス ク リ プ ト(/ e x a m p l e s / t u x e d o / b a n k a p p / transfer.atp)は doTransfer 関数を使用します。この関数は次の処理を行います。 141215J 3-7 第 3 章 ATP の Web ページとスクリプトの構造 1. フィールド・テーブルを表す atp.fml_table オブジェクトを新規作成します。パラメータは、テー ブルを含むファイルを指定します。 2. NonStop TUXEDO サーバーに送るメッセージを表す atp.fml_buffer オブジェクトを新規作成し ます。 3. atp.fml_buffer オブジェクトの setData メソッドを使用して、この関数の呼び出し元が渡し たデータをバッファに格納します。このデータは、この関数の呼び出し部分を見るとわかるように、 atp.request オブジェクト内のフィールドから取得されます。複数のフィールドに値を格納するた めに、このスクリプトはフィールドごとに 1 回、setData メソッドを呼び出す必要があります。 4. トランザクションを保護するために、atp.transaction オブジェクトを新規作成します。トラン ザクション・オブジェクトは FML テーブルおよびバッファ・オブジェクトの前に作成することもでき ます。 5. 必要な TUXEDO サービスとトランザクション・オブジェクトを指定して、バッファ・オブジェクトの tpcall メソッドを呼び出します。この時点でトランザクションが開始します。 6. 障害が発生した場合は、トランザクションをロールバックし、エラーを返します。バッファ・オブジェ NonStop TUXEDO の呼び出しからのエラーを識別します。error_text クトのerror プロパティは、 プロパティはエラーについて記述します。STATLIN は NonStop TUXEDO によって定義された標準の エラー・メッセージです。 7. リクエストが成功した場合、トランザクションをコミットし、結果として預金残高を返します。このス クリプトは getData メソッドを使用して、atp.fml_buffer オブジェクトの reply プロパティ から新しい 2 つの預金残高を抽出します。reply プロパティはそれ自体、tpcall メソッドによって 自動的に作成された atp.fml_buffer オブジェクトです。getData に渡されたパラメータは、 atp.fml_table オブジェクトからのフィールドと任意の添字を識別します。 doTransfer 関数から処理が戻ると、その関数がエラーを返した場合はこのスクリプトはメッセージ を表示します。 結果の表示 結果 を表 示す るた めに、スク リプ ト(/examples/tuxedo/bankapp/transfer.atp)は atp.SQL オブジェクトとそのオブジェクトのメソッドを使用して、キャッシュから新しいデータを読み 取ります。このスクリプトはグローバル関数 atp.formatMoney を使用して、預金残高を表示用書式 に変換します。 次のスクリプトは、テーブルのデータを表示するループを含むサーバーサイド JavaScript を使用して、 HTML フォーム上に新しいデータを表示します。 <server> do { </server> <tr> ... ... ... </tr> <server> } 3-8 141215J 第 3 章 ATP の Web ページとスクリプトの構造 while (nextAcct() ...; </server> JavaScript からの TCP/IP ソケットの使用 ATP の examples ディレクトリ内の sockets というディレクトリには、ソケット・スクリプトの構造 を示すいくつかのサンプルがあります。/examples/sockets/sendmail.atp ファイルは、ATP のソケット・インターフェイスと SMTP(Simple Mail Transfer Protocol)を使用して、email メッセージを 送信する方法を示しています。このファイルを印刷または表示し、この後の説明を読むときに参照してく ださい。 このサンプル・スクリプト内に記述されている HTML は、ブラウザからこのスクリプトの呼び出しを可 能にする HTML だけです。OSS シェル環境内でのスクリプトの実行に HTML は必要ありません。 このスクリプトは、このあと出てくる sendmail という関数の呼び出しから構成されます。呼び出さ れた sendmail は、スクリプト内で既に定義されている他の関数を呼び出します。この関数は次の処理 をしますが、処理の順序はソケット・アプリケーションに固有です。 1. sendmail は TCP/IP 接続を表す atp.socket オブジェクトを作成します。コンストラクタは暗黙 的にソケットを開きます。 2. sendmail はソケット・エラーをチェックします。handleErrors 関数は、ソケット・オブジェ クトの error プロパティをチェックします。エラーが発生した場合、handleErrors はグローバ ル関数 atp.print を使用してエラーを表示し、ソケット・オブジェクトの close メソッドを使用 して接続を閉じ、グローバル関数 atp.quit を使用してスクリプトの実行を停止します。 3. sendmail は、ソケット・オブジェクトの write メソッドの一連の呼び出しを使用して、ソケット にメッセージを書き込みます。 4. ソケットへの書き込みが終わるごとに、sendmail はソケット・エラーをチェックし(handleErrors を使用)、次に SMTP エラーをチェックします(handleReply を使用)。handleReply は、 setSoTimeout メソッドを使用してタイムアウトを設定し、タイムアウトになるよりも短いタイミ ングで、1 度に 1 バイトずつリプライ・メッセージを読み取ることによって、エラーをチェックします。 エラーが発生した場合、handleReply はグローバル関数 atp.print を使用してエラーを表示し、 ソケット・オブジェクトの close メソッドを使用して接続を閉じ、グローバル関数 atp.quit を使 用してスクリプトの実行を停止します。 リプライを読み取るこの方法は、メッセージの先頭にメッセージの長さを示す SMTP プロトコルに固 有のものです。他のソケット・プロトコルは別の方法を使用することがあります。 5. メッセージ全体の送信後、sendmail は close メソッドを使用してソケットを閉じ、グローバル関 数 atp.print を使用してメッセージが送られたことをレポートします。 141215J 3-9 第 3 章 ATP の Web ページとスクリプトの構造 ATP のサンプルの索引 表 3-1 に、ATP の CD に収録されたいくつかのサンプル・スクリプトの一覧を示します。1 列目に、ATP の共通のプログラミング・タスクを示します。2 列目に、各タスクを実例で示すサンプル・アプリケーショ ンまたはスクリプトの名前を示します。パス名は /usr/tandem/atp への相対パスです。 注意:ATP のサンプル・プログラムは、運用環境での使用に対して完成または適応したものではありません。 表 3-1 プログラミング・タスク別のサンプル(1/2 ページ) ATP のプログラミング・タスク 3-10 サンプル・アプリケーションまたはスクリプト ページから Web サイトへのアクセスとそのサ イトからページへのコンテキストの書き込み examples/sockets/classlib.atp、nested.atp ブラウザとバージョンのチェック examples/sql_tools/explorer/ibcheck.atp クラスの宣言と使用 examples/sockets/iurlclass 同じページ上のクライアントサイドおよびサー バーサイド JavaScript examples/pathway/homebank/Webpages/address.atp、 examples/sql/homebank/Webpages/address.atp クライアントサイドおよびサーバーサイド・ス クリプトの生成 examples/pathway_tools/form_generator クライアントサイドでの入力検査 examples/pathway/homebank/Webpages/address.atp、 examples/sql/homebank/Webpages/address.atp JavaScript の watch( ) メソッドを使用した デバッグ examples/debugging/watchlib.inc 環境変数のエコー examples/sockets/echo.atp ファイルのアップロード(blob オブジェクト) examples/file_upload(ディクショナリ) フォームベースのアプリケーション examples/pathway/homebank、 examples/sql/homebank DDL ディクショナリ内の情報からのフォーム の動的作成 examples/pathway_tools/form_generator、 examples/pathway_tools/ddl_viewer SQL カタログ内の情報からのフォームの動的 作成(sqlvar オブジェクトの使用) examples/sql_tools/explorer 複数のフレーム examples/pathway/homebank、 examples/sql/homebank SQL データベースからの情報に基づく HTML の生成 examples/sql/acct_list メッセージ・レイアウトの再帰的なループ examples/pathway_tools/ddl_viewer 141215J 第 3 章 ATP の Web ページとスクリプトの構造 表 3-1 プログラミング・タスク別のサンプル(2/2 ページ) ATP のプログラミング・タスク サンプル・アプリケーションまたはスクリプト Pathway サーバーへの送信(共有ラッパー・ ルーチン) examples/pathway/employee レコードの管理、表示、更新 examples/pathway/homebank/Webpages/address.atp レコードの管理、挿入、更新 examples/pathway/homebank/Webpages/address.atp セキュリティ:ログオン、セッションの作成、 タイムアウト、特定の機能を実行するユーザー への対応 examples/pathway/homebank/Webpages/ access_check.inc、examples/pathway/homebank/ Webpages/logon.atp、examples/sql/homebank/ Webpages/access_check.inc スクリプトからの SMTP メッセージの送信 examples/sockets/sendmail.atp SQL のカーソル examples/sql/homebank SQL の SELECT examples/sql/acct_list、 examples/sql_tools/explorer/expquery.atp SQL の UPDATE および DELETE examples/sql/homebank 同じスクリプト内の Tuxedo と SQL examples/tuxedo/bankapp/transfer.atp Tuxedo fml および fml_buffer オブジェクト examples/tuxedo_tools/javascript_ud ATP のサンプル内の汎用関数 表 3-2 に、ATP の CD に収録されたサンプル・スクリプト内で定義されている関数の一覧を示します。 この一覧内の関数は一部の関数にすぎませんが、広範なアプリケーションに適用できる関数です。これら の関数をコピーして修正し、自作のスクリプト内で使用できます。 注意:ATP のサンプル・プログラムは、運用環境での使用に対して完成または適応したものではありません。 これらの関数のなかには、サンプル内で定義されている特定のオブジェクトに関連するものがあります。 これらのオブジェクトは、標準の ATP インターフェイスには含まれませんが、スクリプトを自作するとき のヒントになるように、この製品 CD に収録されています。 ファイルの場所は、/usr/tandem/atp ディレクトリへの相対パスで示しています。 141215J 3-11 第 3 章 ATP の Web ページとスクリプトの構造 表 3-2 ATP のサンプル内で定義されている関数(1/3 ページ) 関数名 機能 収録場所 SQLQuery オブジェクト 用に定義された関数 3-12 doSQLClose SQL オブジェクトおよび関連する トランザクション・オブジェクト が存在する場合はそれらを閉じる。 適宜 SQL エラーをレポートする。 examples/sql_tools/explorer/isql.inc doSQLColumnValue (col) SQL オブジェクトの配列 column_value からの値を返す。 examples/sql_tools/explorer/isql.inc doSQLError () SQL エラーをレポートするメッ セージを表示する。 examples/sql_tools/explorer/isql.inc doSQLGetSQLcode () SQL エラー・コードを返す。 examples/sql_tools/explorer/isql.inc doSQLNext () SQL テーブルを読み取る。処理す る行がなくなるかエラーが発生す ると、停止する。 examples/sql_tools/explorer/isql.inc doSQLPrintColumnValue (col) SQL オブジェクトの配列 column_values からの値を表示す る。 examples/sql_tools/explorer/isql.inc doTMFcommit () トランザクションをコミットする。 適宜エラーをレポートする。 examples/sql_tools/explorer/isql.inc doTMFrollback () トランザクションをロールバック する。適宜エラーをレポートする。 examples/sql_tools/explorer/isql.inc SQLBuildExecute (query) リクエストからのパラメータを使 用して、SQL クエリを生成して実 行する。任意にトランザクション を指定する。 examples/sql_tools/explorer/isql.inc SQLError (stmt) SQL エラーを表示する。 examples/sql/acct_list/acct_list.atp SQLQuery (query, tmf, maxrows, skiprows) SQL オブジェクトを作成し、任意 にトランザクション・オブジェク トを作成し、クエリを実行する。 examples/sql_tools/explorer/isql.inc SQLQueryCreate (query) SQL オブジェクトを作成し、任意 にトランザクション・オブジェク トを作成するが、クエリは実行し ない。 examples/sql_tools/explorer/isql.inc 141215J 第 3 章 ATP の Web ページとスクリプトの構造 表 3-2 ATP のサンプル内で定義されている関数(2/3 ページ) 関数名 機能 収録場所 URL オブジェクト用に 定義された関数 doSocketErrors (comment) ソケット・エラーをレポートす るメッセージを書式変換し、ス クリプトの実行を停止する。 examples/sockets/iurlclass.inc doURLClose URL を閉じる。 examples/sockets/iurlclass.inc doURLOpen URL を開き、名前 / 値ペアを送 る。 examples/sockets/iurlclass.inc doURLPrint URL の内容を取得して表示す る。 examples/sockets/iurlclass.inc doURLPrintHeaders HTTP ヘッダーを表示する。 examples/sockets/iurlclass.inc doURLRead URL データを読み取り、ヘッ ダーを解析する。 examples/sockets/iurlclass.inc URL (protocol, host, port, file) URL オブジェクトを作成する。 examples/sockets/iurlclass.inc doAddVariable (name, value) 変数配列に変数名を格納し、対 応する値をその変数名のプロパ ティに格納する。 sockets/iurlclass.inc variablesObject () 名前 / 値ペアの配列を作成する。 sockets/iurlclass.inc 変数オブジェクト用に定 義された関数 どのオブジェクト定義に も含まれない関数 141215J accessCheck (accessNumber, serviceName) ログオン ID をチェックしてア プリケーションへのアクセス権 をユーザーに与える。 examples/pathway/homebank/WebPages/ access_check.inc isDigit (s) 渡された値が数字(0 ∼ 9)で ある場合に true を返す。それ以 外の場合は false を返す。 examples/pathway/homebank/Webpages/ util_client.inc 3-13 第 3 章 ATP の Web ページとスクリプトの構造 表 3-2 ATP のサンプル内で定義されている関数(3/3 ページ) 関数名 3-14 機能 収録場所 isMoney (s) 渡された値が dollars-and-cents 形式である場合は true を返す。 それ以外の場合は false を返す。 examples/pathway/homebank/Webpages/ util_client.inc isPositiveInteger (s) 渡された値が正の整数である場 合は true を返す。それ以外の場 合は false を返す。 examples/pathway/homebank/Webpages/ util_client.inc RemoveSpaces 文字列からスペースを削除す る。 examples/pathway/homebank/Webpages/ util_client.inc sendMail (smtphost, from, fromHost, to toHost, subject, message) SMTP(Simple Mail Transfer Protocol)を使用してメール・ メッセージを送信する。 examples/sockets/sendmail.atp sendToServer (application, serverClass, dictionary, requestBuf) NonStop TS/MP の Pathsend ファシリティを使用してサー バー・クラスにリクエスト・ メッセージを送信する。 examples/pathway/employee/ employee_list.atp 141215J 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド 第4章 ATP のオブジェクト、プロパティ、およびメソッド この章では、ATP の次のオブジェクトについて説明します。 □ NonStop SQL オブジェクト ● atp.SQL ● atp.sqlvar □ NonStop TS/MP(Pathway)オブジェクト ● atp.dictionary ● atp.field ● atp.request ● atp.blob ● atp.buffer □ NonStop TM/MP(TMF)オブジェクト ● atp.transaction ● atp.fml_field ● atp.fml_table ● atp.fml_buffer □ ソケット・オブジェクト ● atp.socket この章では、ATP のグローバル関数についても説明します。 NonStop SQL オブジェクト NonStop SQL オブジェクトによって、NonStop SQL データベースを使用するスクリプトを開発できま す。これらのオブジェクトの使用方法と使用例については、第 3 章の「JavaScript からの NonStop SQL の 使用」を参照してください。 141215J 4-1 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド atp.SQL オブジェクト atp.SQL オブジェクトは NonStop SQL 文を表します。たとえば、カーソル、結果データ、およびエ ラー情報を表します。トランザクションの保護のために、atp.SQL オブジェクトと共に atp.transaction オブジェクトを使用できます。 コンストラクタ new atp.SQL (statement) statement このパラメータの値は、動的な NonStop SQL がサポートする任意のステートメントです。この値と しては、埋め込み SQL または動的な SQL の基本的な実装に関係するいくつかのステートメントを除い てすべて使用できます。 atp.SQL オブジェクトを使用して SQL 文をキャッシュに格納するようにして、パフォーマンスを 改善できます。NonStop SQL 文がパラメータとして atp.SQL に渡され、変数データが atp.SQL の execute() メソッドの呼び出しで渡される場合、キャッシュは非常に効果的です。 後の「atp.SQL オブジェクトの使用法に関する留意点」を参照してください。 プロパティ statement(読み取り専用) このプロパティは、コンストラクタ内で指定されたステートメントを格納します。 column_name(読み取り専用) この配列は、SELECT 文によって返される各列の名前を格納します。COUNT(*) のようなサマリ列 の配列要素 column_name は長さ 0 です。添字は数値であり、その範囲は 0 からクエリ内の列の数ま でです。 column_value(読み取り専用) この配列は、SELECT 文によって返される各列の値を文字列として格納します。atp.SQL の next() メソッドは、一度に 1 行ずつをこのプロパティに格納します。SQL のヌル値は JavaScript の 値 null によって表現されます。フォーム tablename.colname 内の添字は数値または小文字の テキストです(たとえば stmt.column_value["cust.first_name"])。JavaScript の他の 実装と同様、未定義の配列要素(スペルミスのある列名など)への参照はエラーとしてレポートされま せん。そのような値は JavaScript の未定義の値として返されます。 row_print_format このプロパティは、設定された場合、テーブルの行の表示用書式を記述した文字列を格納します。こ のプロパティを使用する場合、next() メソッドは、配列 column_value に値を格納せずに、行を 取得して表示します。この場合、自作のスクリプトで表示処理をする関数を明示的に呼び出す必要はあ りません。このプロパティを使用すれば、CPU とメモリの消費量を減らすことができ、したがってパ フォーマンスを大幅に改善できます。特に、自作のスクリプトが多くの行のデータ(たとえば 5000 行 を超えるデータ)を取得して表示する場合は効果的です。 4-2 141215J 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド このプロパティに指定する文字列は C 言語の printf の規則に従うので、文字列としてテキストと HTML との組み合わせを使用できます。表記 %s を使用して、テーブル内の列のデータ型に関係なく、 任意の書式で各列の位置を表現します。たとえば、次のようの記述になります。 s1.row_print_format="<tr><td>%s</td><td>%s</td><td>%s</td></tr>" 出力に記号 % を含むようにするには、表記 %% を使用します。 variables(読み取り専用) この配列は SQL クエリ内の各変数の名前(「?」で指定)を格納します。添字は数値です。 cursor_name(読み取り専用) ame.atp.SQL オブジェクトが SELECT 文を表す場合、このプロパティはカーソル名を格納しま す。atp.SQL の execute() メソッドを使用してカーソル名を定義します。返される行または処理 対象の行が 1 行であっても、すべての SELECT 文にはカーソルが必要です。このプロパティは SELECT 文以外の SQL 文には重要ではありません。 sqlcode(読み取り専用) このエラー・コードは atp.SQL のコンストラクタ、そして execute()、next()、および close() メソッドによって設定されます。正の数は警告です(たとえば 100 は「No More Rows」)。 負の数はエラーです。0 は成功を示します。エラーの説明については、NonStop SQL/MP のマニュア ル・セットを参照してください。 filesystem_error(読み取り専用) このプロパティはオペレーティング・システムのエラー・コードを格納します。この値は atp.SQL next()、および close() メソッドによって設定されます。 のコンストラクタ、および execute()、 sqlca(読み取り専用) SQLCA 構造体のこのテキスト表現は、atp.SQL のコンストラクタ、execute()、next()、お よび close() メソッドによって設定されます。この構造体は、テキスト・エラー・メッセージなど 人間が読解できる診断情報を格納しています。SQLCA 構造体の詳細については、NonStop SQL/MP の マニュアル・セットを参照してください。 statement_type(読み取り専用) このプロパティは、atp.SQL オブジェクトによって表現される SQL 文の種類を示すコードを格納 します(SELECT は 1、INSERT は 2、UPDATE は 3、DELETE は 4、DDL は 5、CONTROL は 6、 DCL は 7、GET は 8 です)。この値は SQLSA 構造体から取得されます。この構造体は、クエリやテー ブルに関して人間が読解できる統計情報を格納しています。SQLSA 構造体の詳細については、NonStop SQL/MP のマニュアル・セットを参照してください。 141215J 4-3 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド records_accessed(読み取り専用) このプロパティは、atp.SQL オブジェクトに関する累積統計情報を格納します。この値は、クエ リが使用したテーブルの総数です。この値は、あらゆる SQL 操作に関して SQLSA から集計されます。 records_used(読み取り専用) このプロパティは、atp.SQL オブジェクトに関する累積統計情報を格納します。この値は、クエ リが使用したテーブルの総数です。この値は、あらゆる SQL 操作に関して SQLSA から集計されます。 メソッド execute(value1, ...., transaction) SELECT 文の場合、execute() メソッドはカーソルを宣言して開きます。その他のステートメン トの場合、execute() メソッドはそのステートメント自体を実行します。このメソッドは SQL の OPEN cursor と同じ操作をします。 パラメータ値(value1 など)は SQL 文内のプレースホルダと順番に置き換えられます(この後の 「atp.SQL オブジェクトの使用法に関する留意点」を参照)。プレースホルダごとに 1 つのパラメータが 必要です。ただし、デフォルト値は定義されません。プレースホルダごとに 1 つのパラメータを指定し なかった場合、ATP はエラー・メッセージを表示します。すべての値を文字列として指定します。SQL のヌル値は JavaScript の値 null によって表現されます。 注意:ATP は、隣接したデータ(たとえば隣接した列)が壊れていないか確認するため以外は、アプリケーション・ データの入力検査をしません。自作のアプリケーションでは、型と範囲の両方について入力データを検査す る必要があります。無効なデータは予測できない結果になります。 SQL 文によって実行されたトランザクションを保護するために、トランザクション・オブジェクト を使用できます。トランザクションを指定するタイミングに関する規則は、NonStop SQL/MP の場合と 同じです。 このメソッドは、SQL エラーがある場合は値 false を返し、SQL エラーがない場合は値 true を 返します。 next(transaction) こ のメ ソッ ドは、S Q L 文 の種 類が S E L E C T であ る場 合だ け意 味が あり、プ ロパ ティ 配列 column_value から 1 行をフェッチします。このメソッドは SQL の FETCH と同じ操作をします。 トランザクションを保護するためにトランザクション・オブジェクトを使用できます。トランザク ションを指定するタイミングに関する規則は、NonStop SQL/MP の場合と同じです。 このメソッドは、SQL エラーがあるか処理する行がなくなった場合(sqlcode=100)は値 false を 返します。それ以外の場合は値 true を返します。 close(transaction) SELECT 文の場合、close() メソッドはカーソルを閉じます。このメソッドは SQL の CLOSE cursor と同じ操作をします。 トランザクションを保護するためにトランザクション・オブジェクトを使用することもできます。ト ランザクションを指定するタイミングに関する規則は、NonStop SQL/MP の場合と同じです。 4-4 141215J 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド このメソッドは SQL エラーがある場合は値 false を返し、SQL エラーがない場合は値 true を返 します。 ATP が atp.SQL オブジェクトに対してガーベッジ・コレクションを実行すると、開かれたカーソ ルは自動的に閉じられます。ただし、TMF トランザクションを考慮して、close() メソッドによっ て適切なタイミングでカーソルを閉じることもできます。 atp.SQL オブジェクトの使用法に関する留意点 「第 3 章 ATP の Web ページとスクリプトの構造」では、atp.SQL オブジェクトの重要な設計法と使 用法についてサンプルを使用して説明しました。ここでは、atp.SQL オブジェクトの使用について特殊 な規則とガイドラインをいくつか示します。 SELECT 文 SQL の SELECT 文には常に、次の 3 つの呼び出しが必要です。 1. SELECT 文を準備するための atp.SQL コンストラクタ 2. カーソルを宣言および開くための execute() メソッド 3. 結果行をフェッチするための next() メソッド たとえば、次のような記述になります。 s1 = new atp.SQL ("select * from =account"); s1.execute(); while (s1.next()) { atp.print (s1.column_value["account.account_type"]); } マップ・クラス定義 SQL 文内のテーブル、ビュー、およびその他のファイルの名前は、マップ・クラス定義または物理的な ファイルの名前です。ATP 構成ファイル(atp.config)内で atp.pway サーバー・クラスを定義す るときに、MapDefine コマンドを使用してマップ・クラス定義を記述します。たとえば、次の指示語はファ イル・システム内の特定の場所に cust という名前をマップします。 MapDefine=cust/G/data02/djcanta3/cust) その他の例については、第 2 章の「httpd.config ファイル内の ATP」を参照してください。 SQL 文内のパラメータ キャッシュの効率とスクリプトのパフォーマンスを最大限に上げるには、SQL 文をパラメータとして atp.SQL オブジェクトに渡します。 次の例では、コンストラクタは first というパラメータを使用して SQL 文を指定しています。さら に、execute() メソッドの呼び出しで値 Roger を渡しています。 141215J 4-5 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド s=new atp.SQL("select * from =cust where first_name = ?first browse access"); s.execute("Roger"); s.next(); 次の例は、前の例と機能的には同じですが効率的には異なります。 name = "Roger"; s=new atp.SQL("select * from =cust where first_name = " + name + " browse access"); s.execute(); s.next(); 更新可能なカーソル cursor_name プロパティを使用して、SQL DML(Data Management Language)文内の更新可能な カーソルを参照できます。たとえば、次のような記述になります。 tran = new atp.transaction(); var s1 = new atp.SQL ("select * from =cust"); s1.execute (tran); while (s1.next(tran)) { var s2 = new atp.SQL ("update =cust set last_name = ?last where current of " + s1.cursor_name); s2.execute ("Smith", tran); } tran.commit(); SQL のヌル値の使用 サーバーサイド JavaScript では、キーワード null(文字列の「null」ではない)がヌル値を示します。 次の例では、列に SQL のヌル値を設定するために update 文内で使用する構文を示しています。 execute() メソッドは 2 つの変数を 1 つの変数とみなします。 tran = new atp.transaction(); var s1 = new atp.SQL ("update =table set mycolumn = ?x indicator ?y for stable access"); s1.execute (null, tran); tran.commit(); 複数の列に SQL のヌル値を設定するには、列ごとに異なる標識変数を使用します。たとえば、次のよう な記述になります。 update =table set col1= ?x1 indicator ?ind1 set col2= ?x2 indicator ?ind2 s1.execute(gCol1_val, gCol2_val, tran); 4-6 141215J 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド SQL 文内の日付と時刻 SQL 文内で日付と時刻をリテラルとして表現する場合、日付と時刻のデータ型(たとえば「year to day」) も SQL 文内に明示的に記述する必要があります。ただし、SQL 文内で日付と時刻を変数として表現する場 合は、日付と時刻のデータ型を明示的に記述する必要はありません。次のコード断片では、このような規 則を実例で示しています。 atp.print (‘*******************************************\n‘); tran = new atp.transaction(); //Date time value as a literal s1 = new atp.SQL( "select tran.accountid,tran.tran_date,tran.tran_amount," +"tran.tran_origin" +"from \\ATX.$DATA02.DJCANTA3.TRAN tran" +"where tran.tran_date > datetime ’1995-07-31’ year to day" +"for stable access" ); SQLError (s1,tran); s1.execute(tran); SQLError (s1,tran); while (s1.next(tran)) { atp.print (s1.column_value,’\n’); } SQLError (s1,tran); atp.print (‘*******************************************\n‘); //Date time value as a variable s2 = new atp.SQL( "select tran.accountid,tran.tran_date,tran.tran_amount," +"tran.tran_origin" +"from \\ATX.$DATA02.DJCANTA3.TRAN tran" +"where tran.tran_date > ?START_DATE" +"for stable access" ); SQLError (s2,tran); s2.execute(’1995-07-31’, tran); SQLError (s2,tran); while (s2.next(tran)) { atp.print (s2.column_value,’\n’); } SQLError (s2,tran); tran.commit(); 141215J 4-7 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド atp.sqlvar オブジェクト atp.sqlvar オブジェクトは、NonStop SQL クエリからの 1 つの列または変数の詳細な記述を表しま す。ほとんどのアプリケーションはこのオブジェクトを必要とします。このオブジェクトが役立つのは、 ユーザーが直接入力した SQL クエリに基づいて HTML ページの書式(および内容)を動的に生成するア プリケーションに対してです。そのようなアプリケーションは、意思決定支援アプリケーション、テスト・ ツール、データベース管理ツールなどです。 コンストラクタ new atp.sqlvar (atp.SQL_object, column/variable_index, input/output_flag) atp.SQL_object このパラメータは、既にインスタンスを作成されたオブジェクトであり、NonStop SQL 文を表しま す。そのような SQL 文は通常、SELECT や INSERT のような DML スタイルのステートメントです。 NonStop SQL 文は列を返し、入力として変数を取ることができます(クエリ内の変数は「?」で指定)。 column/variable_index このパラメータは、クエリ内の列または変数のインデックスです(次のパラメータ input/ output_flag はどちらのインデックスであるか示します)。列の場合、この値は atp.SQL オブジェ クトの配列 column_name のインデックスです。変数の場合、この値は atp.SQL オブジェクトの 配列 variables のインデックスです。 このオブジェクトを使用して atp.SQL オブジェクトの配列 column_name をループし、各イン デックスの atp.sqlvar オブジェクトのインスタンスを作成し、atp.sqlvar プロパティに基づ いて HTML を動的に作成できます。たとえばデータ型を使用して、HTML テーブル内のデータを整列 したり、クエリ変数の入力用のフォームをレイアウトしたりできます。atp.sqlvar オブジェクトは オブジェクトのデータ型を示すので、HTML テーブルまたはフォームのレイアウトに効果があります。 input/output_flag このパラメータは、オブジェクトが入力データを表すか出力データを表すかを示します。使用できる 値は 0 と 1 です。出力アイテム(一般に列)に関する情報の場合は、0 を使用します。入力アイテム (変数)に関する情報の場合は、1 を使用します。デフォルトでは、この値は 0(ゼロ)です。 プロパティ このオブジェクトのプロパティは SQLDA 構造体から取得されます。これらのプロパティの詳細につい ては、『NonStop SQL/MP Programming Manual for C』を参照してください。各プロパティの値の範囲と SQLDA 構造体内の値の範囲は同じです。 data_type_code(読み取り専用) このプロパティは、列または変数のデータ型を示す数値コードです。 4-8 141215J 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド length(読み取り専用) このプロパティは列または変数の内部ストレージの長さを返します。たとえば、short 型整数の場合、 この値は 2 バイトです。 numeric_scale(読み取り専用) このプロパティは 2 進数および 10 進数の小数点桁数を返します。 numeric_precision(読み取り専用) このプロパティは 2 進数の精度を返します。 date_time_interval_range(読み取り専用) このプロパティは日付 / 時刻または間隔を示すアイテムの範囲を表す数値コードです。たとえば、値 9 は「year to day」を表します。このプロパティとその値の説明については、NonStop SQL のマニュア ル・セットを参照してください。 date_time_interval_leading_precision(読み取り専用) このプロパティの説明については、NonStop SQL のマニュアル・セットを参照してください。 date_time_interval_fraction_precision(読み取り専用) このプロパティの説明については、NonStop SQL のマニュアル・セットを参照してください。 character_set_id:(読み取り専用) 文字アイテムの場合、このプロパティは文字セットを識別します。たとえば、0 は不明、103 は ISO88593 を示します。詳細については、NonStop SQL のマニュアル・セットを参照してください。 null_permitted(読み取り専用) このプロパティは、SQL のヌル値が列に対して許可されるかどうか示すブール値です。 141215J 4-9 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド NonStop TS/MP(Pathway)オブジェクト NonStop TS/MP(Pathway)オブジェクトによって、Pathway アプリケーションと DDL(Data Definition Language)ディクショナリを使用するスクリプトを開発できます。これらのオブジェクトの使用方法と使 用例については、第 3 章の「JavaScript からの Pathway サーバーの使用」を参照してください。 atp.dictionary オブジェクト ディクショナリ・オブジェクトは、DDL ディクショナリからのアプリケーション・メッセージ・レイア ウトの定義を表します。このオブジェクトは、 バッファ・オブジェクトの getData() および setData() メソッドと共に使用できます。 コンストラクタ new atp.dictionary (name, element, element, ...) name このパラメータは、DDL ディクショナリのサブボリュームへの OSS シンボリック・リンク名か、 DDL ディクショナリの dictddf ファイル用のマップ・クラス定義です。DDL ディクショナリはアプ リケーション・メッセージ・レイアウトの定義を格納しています。 シンボリック・リンク名は現在のスクリプトのディレクトリへの相対パスであり、ドット(.)や右 上がりスラッシュ(/)で始まってはいけません。ln コマンドを使用してシンボリック・リンクを作成 します。 たとえば、次のような記述になります。 ln-s/G/data/subvolmydict.ddldict マップ・クラス定義(たとえば =paydict) は DDL ディクショナリ・サブボリューム内の DDL の dictddf ファイルを参照します。MapDefine 構成指示語を使用して、iTP Secure WebServer の httpd.config ファイルにマップ・クラス定義を記述します。 たとえば、次のような記述になります。 MapDefine=paydict/G/data02/payroll/dictddf element このパラメータはアプリケーション・メッセージの DDL DEF を指定します。element が指定されな い場合、このオブジェクトの新しいインスタンスは DDL ディクショナリからのすべての DEF を表しま す。最高のパフォーマンスを得るには、アプリケーションが使用する DEF を明示的に指定します。 プロパティ name(読み取り専用) このプロパティはコンストラクタに渡される値を格納します。 4-10 141215J 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド element(読み取り専用) この配列は、atp.dictionary オブジェクトが表す DDL DEF ごとに 1 つの atp.field オブ ジェクトを格納します。 element.DEF プロパティ(読み取り専用): element プロパティの動的に作成されたこれらのプロパティは atp.field オブジェクトであり、各プ ロパティは atp.dictionary オブジェクトが表す 1 つの DDL DEF を表します。つまり DEF ごとに、 ワード element、その後ろのピリオド、およびその後ろの DEF 名から構成される名前が付いたプロパティ があります。 atp.dictionary オブジェクトの使用法に関する留意点 atp.dictionary オブジェクトのコンストラクタは DDL ディクショナリを使用して atp.field オブジェクトの階層を構築します。この操作はディスク動作(ディスク・キャッシュ操作)を伴うので、 アプリケーションのパフォーマンスに影響することがあります。アプリケーションが atp.field オブ ジェクトを直接生成することもできます。ただし、atp.field オブジェクトのコンストラクタの定義は 複雑なので、エラーの原因になりがちです。 「付録 B DDL Dictionary Viewer(dview)」で説明している dview サンプル・アプリケーション・プ ログラムを使用して atp.field オブジェクトのコンストラクタを作成し、自作のアプリケーションにコ ピーすると便利です。生成された static コンストラクタには、JavaScript アプリケーション内で使用される DDL メッセージの定義が記述されています。 dview を使用してコンストラクタを作成した場合、DDL ディクショナリへの更新内容は自作のアプリ atp.dictionary オブジェクトは連続的に DDL ケーションに自動的に反映されません。これに対して、 atp.field オブジェクトの static コンストラクタの主な利点は、DDL ディクショナリにアクセスします。 ディクショナリ関連のディスク動作が減り、パフォーマンスが向上することです。 atp.field オブジェクトの static コンストラクタを使用するには、それらのコンストラクタをコピー し、JavaScript アプリケーションに貼り付けます。DDL ディクショナリの変更時の更新処理を容易にする ために、サーバーサイド・インクルード・ファイルを使用できます。 atp.field オブジェクトのコンストラクタに加えて、dview ツールは、フィールド間の関係を記述 し たそ の他 の構 造体 を生 成し ます。a t p. b uf f e r の s et D at a () 、g e tD a ta ( ) 、およ び setBinary() メソッドを呼び出すときは、atp.field オブジェクトの実際のコンストラクタ(new atp.field(....))だけを使用すると効率的です。 たとえば、次のような記述になります。 myvar=mybuffer.getData(new atp.field(’reply_code’,2, ’Binary 16 unsigned’,3,0,2,0,0,0,new Array(0,0,0,0,0,0,0),1)); 141215J 4-11 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド atp.field オブジェクト このフィールド・オブジェクトはアプリケーション・メッセージ内のデータ・フィールドを表します。 データ・フィールドは基本フィールドまたはグループ(構造化)フィールドとして使用でき、最高 49 レベ ルのネストが可能です。 コンストラクタ new atp.field (name, level, type, structure, offset, length, decimals, bit_offset, bit_length, subscript_multipliers, occurs_max) atp.dictionary オブジェクトは自動的に atp.field オブジェクトを生成します。明示的に atp.field オブジェクトを作成することもできます。たとえば、次のステートメントを使用します。 new atp.field(’total_salary’,1,’Binary 32 unsigned’,5,98,4,2,0,0, new Array(0,0,0,0,0,0,0),1) atp.field オブジェクトを明示的に作成するよりも、atp.dictionary オブジェクトを使用して atp.field オブジェクトを生成させるほうが容易であり、エラーが発生する可能性が少なくなります。 dview サンプル・アプリケーション・プログラムを使用して atp.field オブジェクトを作成すること もできます(この章の「atp.dictionary オブジェクトの使用法に関する留意点」を参照)。 プロパティ name(読み取り専用) このプロパティはフィールドの名前を返します。 level(読み取り専用) このプロパティは、アプリケーション・メッセージ構造体内でのフィールドのレベルを示します。レ ベルの範囲は 0 ∼ 48 です。 type(読み取り専用) このプロパティは、アプリケーション・メッセージ・バッファ内のフィールドのデータ表現を識別す るテキストを格納します。データ型別のテキストについては、この章の表 4-1 の「テキスト」の列を参 照してください。 structure(読み取り専用) このプロパティは、アプリケーション・メッセージ・バッファ内のフィールドのデータ表現を識別す る数字を格納します。この数字は、DDL ディクショナリの dictobl ファイル内で使用される数字と 同じです。サポートされているデータ型の一覧については、この章の表 4-1 を参照してください。 offset(読み取り専用) このプロパティは、アプリケーション・メッセージ・バッファ内でのフィールドのバイト・オフセッ トを表す数字を格納します。添字付きのアイテムの場合、この値は先頭の要素のオフセットです。先頭 のフィールドのオフセットは 0 です。 4-12 141215J 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド length(読み取り専用) このプロパティは、アプリケーション・メッセージ・バッファ内のフィールドの長さ(バイト単位) を返します。 decimals(読み取り専用) このプロパティは暗黙の小数点桁数を返します(COBOL の「V」ピクチャ・オプション) 。この値は 位取り数に対しては負の数字です(COBOL の「P」ピクチャ・オプション) 。 bit_offset(読み取り専用) このプロパティは DDL ビット・データ型のビット・オフセット(0 ∼ 15)を返します。 bit_length(読み取り専用): このプロパティは DDL ビット・データ型のビット長(1 ∼ 15)を返します。 subscript_multipliers(読み取り専用): このプロパティは、添字付きのフィールド内の繰り返しフィールドの総サイズ(バイト単位)を格納 する配列です。最高 7 つの添字がサポートされています。 occurs_max(読み取り専用) このプロパティはフィールドの最大出現回数を返します。繰り返されないフィールドの場合、この値 は 1 です。繰り返しフィールドに下位フィールドがある場合、その繰り返しフィールドの occurs_max の値は 1 以外の値になります。ただし、下位フィールドが繰り返しフィールドとして指定されない場合 は、occurs_max の値は 1 になり、ネスト構造のテーブルを示します。 fields(読み取り専用) このプロパティは、現在のフィールド・オブジェクトが所有するフィールド・オブジェクトの配列で す。フィールドは、アプリケーション・メッセージ構造体内の自身のレベル番号より大きいレベル番号 が宣言されたフィールドを所有します。フィールドが別のフィールドを格納する場合、格納される側の フィールドには格納する側のフィールドよりも大きいレベル番号が宣言されます。C 言語では、この概 念は自身の要素を所有する構造体に相当します。COBOL では、自身の要素を所有するグループ・デー タ・アイテムに相当します。 field(読み取り専用) このプロパティの値は、現在のフィールド・オブジェクトが所有するフィールド・オブジェクトの名 前です。フィールドの名前を使用するか、配列 fields へのインデックスを使用することによって、 フィールド・オブジェクト内のフィールドを参照できます。 141215J 4-13 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド 表 4-1 atp.field オブジェクトが使用するデータ型(1/3 ページ) 構造体番号 4-14 テキスト 0 英数字文字列 1 数値文字列、符号なし 2 2 進数、16 ビット、符号あり 3 2 進数、16 ビット、符号なし 4 2 進数、32 ビット、符号あり 5 2 進数、32 ビット、符号なし 6 2 進数、64 ビット,符号あり 8 単精度実数、32 ビット 9 複素数、32 ビット *2(現在サポートされていない) 10 単精度実数、64 ビット 12 数値文字列、埋め込み符号を前置 13 数値文字列、区切り符号を前置 14 数値文字列、埋め込み符号を後置 15 数値文字列、区切り符号を後置 17 論理値 *1 19 論理値 *2 21 論理値 *4 22 2 進数、8 ビット、符号あり 23 2 進数、8 ビット、符号なし 24 可変長文字 25 列挙 26 ビット、符号あり 27 ビット、符号なし 28 各国語対応文字列 32 日付時刻(年) 33 日付時刻(月) 34 日付時刻(年、月) 35 日付時刻(日) 141215J 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド 表 4-1 atp.field オブジェクトが使用するデータ型(2/3 ページ) 構造体番号 141215J テキスト 36 日付時刻(月、日) 37 日付時刻(年、月、日) 38 日付時刻(時) 39 日付時刻(日、時) 40 日付時刻(月、日、時) 41 日付時刻(年、月、日、時) 42 日付時刻(分) 43 日付時刻(時、分) 44 日付時刻(日、時、分) 45 日付時刻(月、日、時、分) 46 日付時刻(年、月、日、時、分) 47 日付時刻(秒) 48 日付時刻(分、秒) 49 日付時刻(時、分、秒) 50 日付時刻(日、時、分、秒) 51 日付時刻(月、日、時、分、秒) 52 日付時刻(年、月、日、時、分、秒) 53 日付時刻(1/x 秒) 54 日付時刻(秒、1/x 秒) 55 日付時刻(分、秒、1/x 秒) 56 日付時刻(時、分、秒、1/x 秒) 57 日付時刻(日、時、分、秒、1/x 秒) 58 日付時刻(月、日、時、分、秒、1/x 秒) 59 日付時刻(年、月、日、時、分、秒、1/x 秒) 60 間隔(年) 61 間隔(月) 62 間隔(年、月) 63 間隔(日) 4-15 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド 表 4-1 atp.field オブジェクトが使用するデータ型(3/3 ページ) 構造体番号 テキスト 64 間隔(時) 65 間隔(日、時) 66 間隔(分) 67 間隔(時、分) 68 間隔(日、時、分) 69 間隔(秒) 70 間隔(分、秒) 71 間隔(時、分、秒) 72 間隔(日、時、分、秒) 73 間隔(1/x 秒) 74 間隔(秒、1/x 秒) 75 間隔(分、秒、1/x 秒) 76 間隔(時、分、秒、1/x 秒) 77 間隔(日、時、分、秒、1/x 秒) 注意:SQL のヌル値が許可されるオプションはほとんどのデータ型でサポートされています。 4-16 141215J 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド atp.request オブジェクト このリクエスト・オブジェクトは Web ブラウザからのリクエストに関連する情報を格納します。 コンストラクタ private コンストラクタです。 このオブジェクトは、iTP Secure WebServer から受け取った各リクエストから生成されます。 プロパティ variables(読み取り専用) この変数配列は、リクエスト内で渡された各環境変数のエントリを格納します。これらの環境変数 (たとえば REMOTE_ADDR、SERVER_SOFTWARE)は Web ブラウザと Web サーバーに関する情報 を格納します。この配列は、Web ブラウザからフォームまたはクエリ URL で渡された各名前のエント リも格納します。この配列は ATP 構成変数用のエントリを格納しません。それらの変数がリクエスト・ メッセージで渡されないからです。 変数値をループするには、次の手法を試してください。 for (i=0; i<atp.request.variables.length;i++) { atp.print (atp.request.variables[i] + ’=’ + atp.request[atp.request.variables[i]] + ’\n’); } この手法を使用できるのは、JavaScript ではオブジェクトのプロパティの参照に配列の添字表記を使 用できるからです。 環境変数が重複する場合(たとえばフォーム上の同じ名前のフィールドが原因 )、最後に参照された 値だけが格納されます。重複した値を取得するには、GET メソッドを使用し、QUERY_STRING から データを解析します(ただしプログラミングは困難です)。または次のように、サフィックス・フィー 、重複した値を取得します。 ルド名と数値インデックスを使用し(PartField_01、PartField_02 など) for (i=0; i<atp.request.variables.length;i++) { if ((atp.request.variables[i]).indexOf(’PartField_’)==0) { atp.print (atp.request.variables[i] + ’=’ + atp.request[atp.request.variables[i]] + ’\n’); } } variable プロパティ(読み取り専用) 変数配列内の変数ごとに、atp.request オブジェクトにはその変数名と同じ名前のプロパティが あります。このプロパティの値は、プロパティと同じ名前の環境変数の値です。フォームベースのファ イルのアップロード用に RFC1867 の multipart/form-data を使用するとき以外、値はすべて文字列です。 multipart/form-data を使用するときは、変数の型は file であり、値は atp.blob オブジェクトです。 141215J 4-17 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド atp.blob オブジェクト blob オブジェクトはバイナリ・データの格納場所として使用します。atp.blob オブジェクトは、フォー ムベースのファイルのアップロード(RFC1867 の multipart/form-data を使用)用に、atp.request オ ブジェクトのプロパティとして作成されます。atp.blob オブジェクトを atp.buffer オブジェクト に移動するには、atp.buffer オブジェクトの setBinary メソッドを使用します。 コンストラクタ new atp.blob (string_name, string_filename, string_type, string_data) string_name このパラメータは記述的なデータを格納します。フォームベースのファイルのアップロード用に作成 された atp.blob オブジェクトの場合、この値は入力フィールド名です。 string_filename このパラメータは記述的なデータを格納します。フォームベースのファイルのアップロード用に作成 された atp.blob オブジェクトの場合、この値はアップロードされるファイルの名前です。 string_type このパラメータは記述的なデータを格納します。フォームベースのファイルのアップロード用に作成 された atp.blob オブジェクトの場合、この値はアップロードされるファイルの content-type です。 string_data このパラメータは blob のデータを格納します。フォームベースのファイルのアップロード用に作成 された atp.blob オブジェクトの場合、この値はアップロードされるファイルの内容から構成されま す(ファイルの最大サイズは 200,000 バイトです) 。ファイルの内容はバイナリ・データです。 プロパティ atp.blob オブジェクトには、コンストラクタ内に記述された各パラメータに対応するプロパティが あります。 4-18 141215J 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド atp.buffer オブジェクト このバッファ・オブジェクトにアプリケーション・メッセージ・データを格納し、Pathsend ファシリティ による Pathway(NonStop TS/MP)サーバー・クラスとの通信にそのオブジェクトを使用します。 コンストラクタ new atp.buffer(string_type) string_type string_type は、アプリケーション・メッセージに文字列を格納するためにアプリケーションが 使用する規則を示します。この値は、文字列「c」 (ヌル値を後続)または文字列「cobol」 (スペースを 後続)です。デフォルトは「c」です。 プロパティ data_length このプロパティは、send メソッドの次の呼び出しで送るデータのバイト数か、リプライ・バッファ で受け取るデータのバイト数です。どちらの場合も、data_length はアプリケーション・メッセー ジ構造体に格納される適切なデータの長さです。このプロパティは、setData および setBinary メソッド(アプリケーション・メッセージ構造体へのデータの格納に使用)によって自動的に調節され ます。構造体内の先行のフィールドが空の場合でも、このプロパティは、バッファに最後に格納された データの(構造体の先頭からの)バイト・オフセットを反映します。 このプロパティの範囲は 1 ∼ 31,000 バイトです。 reply バッファの reply プロパティは send メソッドによって設定されます。送信操作が成功した場合、 reply プロパティは自動的に作成されたバッファ・オブジェクトです。このオブジェクトを使用して、ア プリケーションのリプライ・データに対してアクセスしたり処理したりします。この値の長さはサー バーからのリプライの長さです。 string_type このプロパティの値はコンストラクタに渡されます。 error(読み取り専用) error プロパティは send メソッドによって設定されます。このプロパティは Pathsend のエラー・ コードです。値 0 は、アプリケーション・サーバーとの通信が成功したことを示します。 error_detail(読み取り専用) error プロパティが 0 でない場合、このプロパティは関連するファイル・システムのエラー・コー ドです(対応するエラー・コードがある場合)。 141215J 4-19 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド pathsend_error_text(読み取り専用) error プロパティが 0 でない場合、このプロパティは Pathsend エラーについて記述するテキス トです。 pathsend_timeout このプロパティは、send メソッドが使用するタイムアウト(1/100 秒単位)を格納します。このプ ロパティの範囲は、NonStop TS/MP プログラミング環境内で serverclass_send_ を呼び出す場 合と同じです。詳細については、NonStop TS/MP のマニュアル・セットを参照してください。デフォ ルト値は 60 秒です。 メソッド send (pathmon, server_class, transaction) pathmon このパラメータは、必要なアプリケーションの PATHMON プロセスを参照するマップ・クラス定義 の名前(たとえば =payroll)を格納します。MapDefine コマンドを使用して atp.config ファ イルにマップ・クラス定義を記述します。たとえば、次のような記述になります。 MapDefine =payroll /G/payr 定義済みの値 =loopback を指定すると、リプライには、サーバーに送られたバッファとまったく 同じ内容が書き込まれます。 定義済みの値 =TANDEM_PATHMON_NAME もデフォルト値です。この値は、atp.config ファ イルをインクルードする httpd.config ファイルによって定義された PATHMON 環境を表します。 server_class このパラメータは、アプリケーション・メッセージの送信先の Pathway サーバー・クラスの名前を 格納します。そのメッセージは、まず setData() メソッドを使用してバッファ・オブジェクトで生 成される必要があります。 transaction(任意) このパラメータは atp.transaction オブジェクトであり、このオブジェクトの TMF トランザク ション下で、現在の送信操作が開始する必要があります。 setData (data, field, subscript1, subscript2, ...) data このパラメータはアプリケーション・メッセージ・バッファに格納されるデータです。データ型に関 係なく、そのデータを文字列(たとえば浮動小数点数)として表現します。値を文字列に変換するに は、JavaScript の toString() メソッドを使用します。 注意:ATP は、隣接したデータ(たとえば隣接した列)が壊れていないか確認するため以外では、アプリケーショ ン・データの入力検査をしません。自作のアプリケーションでは、型と範囲の両方について入力データを検 査する必要があります。無効なデータは予測できない結果になります。 4-20 141215J 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド field このパラメータは atp.field オブジェクトです(このオブジェクトは atp.dictionary オブ ジェクトのプロパティであり通常、階層化されます。このパラメータは、データ・アイテムの変換と格 納に必要なデータ型、アプリケーション・メッセージ・バッファ内でのオフセット、およびその他の情 報を示します。 subscript1, ... 最高 7 つの数値添字がサポートされています。各添字は配列の次元を表します。どの添字の値も 0 (ゼロ)から始まります。添字の使用は任意です。 setBinary (data, field, subscript1, subscript2, ...) data このパラメータは、アプリケーション・メッセージ・バッファに格納されるデータを格納します。そ のデータは DDL の表現と一貫するように変換されません。さらに、そのデータによってフィールドが オーバフローすることがあります。この機能は、可変長のメッセージへの自動対応を可能にします。特 に有用なのは、フォームベースのファイルのアップロード用に作成された atp.blob オブジェクトと 共に使用するときです。誤ってフィールドがオーバフローしないように注意してください。 field このパラメータは atp.field オブジェクトです。このオブジェクトは atp.dictionary オブ ジェクトのプロパティであり通常、階層化されます。このパラメータは、データ・アイテムの変換と格 納に必要なデータ型、アプリケーション・メッセージ・バッファ内でのオフセット、およびその他の情 報を示します。 subscript1, ... 最高 7 つの数値添字がサポートされています。各添字は配列の次元を表します。どの添字の値も 0 (ゼロ)から始まります。 return = getData (field, subscript1, subscript2, ...) return アプリケーション・メッセージからのデータ・アイテムの値は、アプリケーション・データの型に関 係なく、文字列形式で返されます。この値を使用して計算を実行する必要がある場合は、JavaScript の parseInt() 関数を使用します。 field このパラメータは atp.field オブジェクトです。このオブジェクトは atp.dictionary オブ ジェクトのプロパティであり通常、階層化されます。このパラメータは、データ・アイテムの変換と格 納に必要なデータ型、アプリケーション・メッセージ・バッファ内でのオフセット、およびその他の情 報を示します。 141215J 4-21 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド subscript1, ... 最高 7 つの数値添字がサポートされています。各添字は配列の次元を表します。どの添字の値も 0 (ゼロ)から始まります。 NonStop TM/MP(TMF)オブジェクト NonStop TM/MP(TMF)オブジェクトによって、トランザクションの保護を組み込んだスクリプトを開 発できます。このオブジェクトの使用方法と使用例については、第 3 章の「JavaScript からの Pathway サー バーの使用」を参照してください。 atp.transaction オブジェクト このトランザクション・オブジェクトは TMF トランザクションを表します。TMF トランザクションが 開始するのは、atp.buffer オブジェクトの send メソッドの呼び出し時、または atp.SQL オブジェ クトのexecute()またはnext()メソッドの呼び出し時に、アプリケーションがatp.transaction オブジェクトを参照するときです。最高 32 個の atp.transaction オブジェクトを 1 つのスクリプト に記述できます。 コンストラクタ new atp.transaction() 新しい TMF トランザクションが必要になるたびに、このオブジェクトのインスタンスを作成します。 プロパティ error(読み取り専用) このプロパティは NonStop Kernel のエラー・コードであり、メソッドの暗黙的および明示的な呼び 出しによって設定されます。アプリケーションが atp.transaction オブジェクトを初回参照する と、TMF トランザクションを開始するためのメソッドが暗黙的に呼び出されます。値ゼロ(0)は、エ ラーが発生しなかったことを示します。 status(読み取り専用) このプロパティはテキストとして表現されたトランザクション・ステータス(たとえばコミットまた はハングアップ)です。定義済みの値の一覧と説明については、NonStop TM/MP のマニュアル・セッ トを参照してください。 transid(読み取り専用) このプロパティはテキストとして表現された TMF の transid です。 4-22 141215J 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド メソッド commit() このメソッドは、atp.transaction オブジェクトが表す TMF トランザクションをコミットし ます。エラー状態があるかどうか error プロパティをチェックします。 rollback() このメソッドは、atp.transaction オブジェクトが表す TMF トランザクションをロールバッ クします。エラー状態があるかどうか error プロパティをチェックします。 NonStop TUXEDO オブジェクト NonStop TUXEDO オブジェクトによって、NonStop TUXEDO(リリース 2)アプリケーションを使用 するスクリプトを開発できます。これらのオブジェクトの使用方法と使用例については、第 3 章の 「JavaScript からの NonStop TUXEDO サーバーの使用」を参照してください。 141215J 4-23 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド atp.fml_field オブジェクト fml_field オブジェクトは、NonStop TUXEDO FML フィールド・テーブルからの FML フィールド を表します。 コンストラクタ new atp.fml_field (name, type, type_text, base, field_id) アプリケーションが atp.fml_table オブジェクトのインスタンスを作成するとき、そのオブジェク トのインスタンスは通常、FML フィールド・テーブルから自動的に作成されます。 プロパティ name このプロパティは FML フィールドの名前です。 type このプロパティは、フィールドのデータ型を表す数値コードを格納します。このコードは TUXEDO に標準です。 0=short int(short 型整数) 1=long int(long 型整数) 2=character(文字) 3=single-precision float(単精度浮動小数点) 4=double-precision float(倍精度浮動小数点) 5=string - terminated(文字列 - 末尾はヌル値) 6=character array(文字配列) type_text このプロパティはテキストとして表現されるデータ型です(テキストは上記の type のコード一覧の ものと同じです)。 base このプロパティはフィールド・テーブルからのフィールドの基数を指定します。TUXEDO フィール ドのフィールド ID の計算に使用される基数については、NonStop TUXEDO のマニュアル・セットを参 照してください。 field_id このプロパティはフィールド・テーブルからの FML フィールドのフィールド ID です。この値を基 数に追加して、絶対フィールド ID を取得します。TUXEDO では、絶対フィールド ID と数値データ型 を結合して、実行時のフィールドIDを取得します。JavaScript環境では、この計算がatp.fml_buffer オブジェクトのメソッドによって自動的に実行されます。 4-24 141215J 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド atp.fml_table オブジェクト fml_table オブジェクトはフィールド・テーブルを表します。このオブジェクトは主に atp.fml_buffer の setData() および getData() メソッドと共に使用します。 コンストラクタ new atp.fml_table(field_table[,field_name] [,field_name]...) field_table このパラメータは、FML フィールド・テーブルを含む OSS ファイルの名前を格納します。ファイル 名は、参照先のスクリプトを含むページのディレクトリへの相対パスです。ファイル名にディレクトリ を含めない場合、FLDTBLDIR32 および FLDTBLDIR パスで FML フィールド・テーブルが検索されま す。iTP Secure WebServer の AddCGI 構成コマンドを使用して、このパスを設定します。 注意:ページ関連のファイル名にディレクトリを含めない場合、パスの検索が行われるので、より多くの実行時リ ソースが使用されます。 field_name デフォルトでは、テーブルからのフィールドはすべて、atp.fml_table オブジェクトのインス タンスによって表現されます。コンストラクタ内でフィールド名を使用すると、指定されたフィールド に対してだけ atp.fml_table オブジェクトのインスタンスが作成されます。大きなフィールド・ テーブルの使用時、テーブル内のフィールドを制限することによって、パフォーマンスを改善できます。 プロパティ name(読み出し専用) このプロパティはフィールド・テーブルのファイル名です。 fields(読み出し専用) この配列は、FML フィールド・テーブルから取得される各 atp.fml_field オブジェクトの要素 を格納します。 field プロパティ(読み出し専用) FML フィールド・テーブル内の各フィールドもプロパティであり、FML フィールドと同じ名前が付 けられます。 atp.fml_table オブジェクトのサンプル 次の NonStop TUXEDO フィールド・テーブルは、コンストラクタ内で次のオブジェクトを生成します。 ftbl=new atp.fml_table("emp.tbl") 141215J 4-25 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド *base 100 # name MESSAGE_TEXT # DEPTNUM EMPLOYEE_NUMBER JOBCODE FIRST_NAME LAST_NAME SALARY number 1 type string 100 101 102 103 104 105 short short short string string long flags comments - - 作成されるオブジェクト: ftbl(atp.fml_table) ftbl.MESSAGE_TEXT(atp.fml_field) ftbl.DEPTNUM(atp.fml_field) ftbl.EMPLOYEE_NUMBER(atp.fml_field) ftbl.JOBCODE(atp.fml_field) ftbl.FIRST_NAME(atp.fml_field) ftbl.LAST_NAME(atp.fml_field) ftbl.SALARY(atp.fml_field) ftbl.fields[0] ∼ ftbl.fields[6](複数の atp.fml_field オブジェクト) 次のスクリプトは、atp.fml_table オブジェクトの atp.fml_field プロパティをすべて表示 します。 ftbl = new atp.fml_table ("emp.tbl"); for (i=0; i<ftbl.fields.length; i++) { fld = ftbl.fields[i]; atp.print (fld.name + ’: type=’ + fld.type_text + ’\n’); } 次のコンストラクタは、一部のフィールドを使用して atp.fml_table オブジェクトを作成します。 ftbl = new atp.fml_table ("emp.tbl", "FIRST_NAME", "LAST_NAME"); Using the fml_table object - a bankapp Transaction... var ftbl = new atp.fml_table(’bank.flds’); var fbfr = new atp.fml_buffer(’fml’); fbfr.setData ("10040", fbfr.setData ("10041", fbfr.setData ("200.99", ftbl.ACCOUNT_ID, 0); ftbl.ACCOUNT_ID, 1); ftbl.SAMOUNT); var tran = new atp.transaction (); if (!fbfr.tpcall(’TRANSFER’, tran)) { tran.rollback(); if (fbfr.error != 0) return (’tpcall TRANSFER failed: ’ + fbfr.error_text); return (fbfr.reply.getData(ftbl.STATLIN)); } tran.commit (); atp.print (’Debit Account Balance: ’ + fbfr.reply.getData(ftbl.SBALANCE) + ’ ; Credit Account Balance: ’ + fbfr.reply.getData(ftbl.SBALANCE, 1); 4-26 141215J 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド atp.fml_buffer オブジェクト fml_buffer オブジェクトは FML または FML32 バッファを表します。tpcall メソッドは NonStop TUXEDO サービスにバッファを送ります。 コンストラクタ new atp.fml_buffer(fml_type [,buffer_size]) fml_type このパラメータは、FML または FML32 バッファを必要とするかどうか指定します。バッファの送 り先の NonStop TUXEDO サービスの要件に応じて、文字列「fml」または「fml32」を指定します。 buffer_size このパラメータはバッファのサイズを指定します。デフォルトのバッファ・サイズは 8192 バイトで す。ATP は必要に応じてバッファのサイズを自動的に増やします。ただし、オブジェクトの作成時に、 スクリプトに十分な大きさのバッファを割り当てるほうが効率的です。 プロパティ fml_type(読み取り専用) このプロパティは TUXEDO バッファの種類が「fml」か「fml32」であるか識別します。バッファが リクエストを表す場合、この種類はコンストラクタに渡される値に常に一致します。バッファがリプラ イを表す場合、この種類はリプライを作成したサービスが決定します。 reply(読み取り専用) このプロパティは tpcall メソッドが設定します。リクエストが成功した場合、このプロパティは自動 的に作成された fml_buffer オブジェクトを格納します。そのオブジェクトは、アプリケーションのリプ ライ・データに対するアクセスと処理に使用します。 view アプリケーションは、このプロパティに TUXEDO ビュー名を設定して、ビュー・バッファだけを許 可する TUXEDO サービスと通信します。ATP は、TUXEDO FML ビュー・インターフェイスを使用し て、fml_buffer オブジェクト内のデータをビューに変換します。リプライがビューである場合、そのリ プライも変換されます。このような変換手順では、関連の TUXEDO フィールド・テーブルとビュー・ ファイルが完全であること、さらに、必要な TUXEDO 環境変数が iTP Secure WebServer の AddCGI コ マ ンド で指 定さ れる こと が必 要で す。この 操作 に必 要な 変数 は、FIELDTBLS 、FLDTBLDIR 、 FIELDTBLS32、FLDTBLDIR32、VIEWFILES、および VIEWDIR です。tpcall メソッドから処理 が戻ると、view プロパティには TUXEDO サービスが返したビューの名前が格納されています。この サービスは FML バッファを返すこともできます。 141215J 4-27 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド user_return_code(読み取り専用) このプロパティは TUXEDO サービスが返した tpurcode であり、tpcall メソッドによって設 定されます。 error(読み取り専用) このプロパティは、メソッドの呼び出しが失敗した場合に設定されたエラー・コードです。NonStop TUXEDO の tperrno または Ferror を反映します。どちらを反映するかはメソッドに依存します。 error_text(読み取り専用) このプロパティはエラー・メッセージ・テキストの文字列を格納します。NonStop TUXEDO の tpstrerror または Fstrerror を反映します。どちらを反映するかはメソッドに依存します。 メソッド tpcall (service [,transaction]) このメソッドは、指定された TUXEDO サービス(たとえば「TRANSFER」 )に fml_buffer オブジェ クトのデータを送ります。TM/MP(TMF)による保護が必要な場合は、atp.transaction オブ ジェクトへの参照を渡します。このメソッドが値 false を返すのは、次のどれかの場合です。 ● TUXEDO の tpcall が失敗した。 ● TMF の問題が発生した。 ● TUXEDO アプリケーションが結合できない(tpinit() の使用時)。 どの種類のエラーが発生したか調べるには、atp.transaction オブジェクトと atp.fml_buffer オブジェクトの error プロパティをチェックします。 atp サーバー・プロセスの場合、tpcall メソッドの初回呼び出しにアプリケーションへの暗黙の結 合があります。次の 1 つ以上の環境変数が、iTP Secure WebServer の AddCGI コマンドを使用して構成 されないか、フォームまたはクエリ URL によってリクエストに渡されない場合、TUXEDO の tpinit() の暗黙の呼び出しで、パラメータのデフォルト値を使用します。 TUXEDO_TPINIT_USRNAME TUXEDO_TPINIT_CLTNAME TUXEDO_TPINIT_GRPNAME TUXEDO_TPINIT_PASSWD TUXEDO_TPINIT_DATA 定義済みのサービス =loopback は、受け取ったバッファと同じバッファをリプライとして返しま す。 setData(data, fml_field [,subscript]) このメソッドは、data パラメータからのデータをバッファに格納します。fml_field オブジェクト はそのデータを識別します。NonStop TUXEDO の定義に従って添字を渡すことができます。添字の制 限については、NonStop TUXEDO の man ページを参照してください。バッファからフィールドを削除 するには、JavaScript のキーワード null を data パラメータの値として使用します。操作が成功した 場合、このメソッドは値 true を返します。操作が失敗した場合、このメソッドは値 false を返し、 error プロパティを設定します。 4-28 141215J 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド データ型に関係なく、データは文字列として表現します(たとえば、データは浮動小数点数を表しま す)。値を文字列に変換するには、JavaScript の toString() メソッドを使用します。 注意:ATP は、隣接したデータ(たとえば隣接した列)が壊れていないか確認するため以外は、アプリケーション・ データの入力検査をしません。自作のアプリケーションでは、型と範囲の両方について入力データを検査す る必要があります。無効なデータは予測できない結果になります。 getData(fml_field [,subscript]) このメソッドは、fml_field オブジェクトと任意の添字によって識別されたデータを文字列として返しま す。操作が成功した場合、このメソッドは値 true を返します。操作が失敗した場合、このメソッドは値 false を返し、error プロパティを設定します。 データの値は、アプリケーション・データの型に関係なく、文字列形式で返されます。その値を使用し て計算を実行する必要がある場合は、JavaScript の parseInt() 関数を使用します。 getOccurs(fml_field) このメソッドは、fml_field オブジェクトによって識別されるフィールドがバッファ内で出現する回数を 整数として返します。値ゼロ(0)は、バッファ内にフィールドがないことを示します。 getMap(fml_table [,fml_table] [,fml_table] ...) このメソッドはバッファ内を検索し、バッファ内のフィールドごとに 1 つの要素を持つ fml_field オブ ジェクトの配列を返します(フィールドの出現ごとに 1 つの要素ではない)。fml_table オブジェクトのパ ラメータは、一致する fml_field オブジェクトを見つけるために、指定された順で使用されます。 たとえば、次のスクリプトはバッファ(fbfr)内のフィールドの名前と値を表示します。添字付きの フィールドが見つかるたびに、そのフィールドの名前と値が表示されます。 var emptbl=new atp.fml_table ("emp.tbl"); var systbl=new atp.fml_table ("Usysflds"); mapArray = fbfr.getMap (emptbl, systbl); for (i=0; i < mapArray.length; i++) { atp.print (mapArray[i].name+’\n’); fldocc = fbfr.getOccurs(mapArray[i]); for (j=0; j < fldocc; j++) atp.print (fbfr.getData (mapArray[i], j) + ’\n’); } 141215J 4-29 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド ソケット・オブジェクト ソケット・オブジェクトによって、NonStop TCP/IP アプリケーションを使用するスクリプトを開発でき ます。これらのオブジェクトの使用方法と使用例については、第 3 章の「JavaScript からの TCP/IP ソケッ トの使用」を参照してください。 atp.socket オブジェクト ソケット・オブジェクトは TCP/IP 接続を表します。ソケット・オブジェクトによって、JavaScript スク リプトを TCP/IP ソケット・クライアントとして実行できます。このオブジェクトは基本的なソケット・ク ライアント機能を提供します。一部のプロトコル・オプションはサポートされていません。 注意:ATP の製品 CD に収録されているサンプルは、HTTP プロトコルの一部をサポートする JavaScript のクラ ス・ライブラリをインクルードします。詳細については、iurlclass サーバーサイド・インクルード・ファイ ルを参照してください。 コンストラクタ new atp.socket(remote_host, remote_port) new atp.socket(remote_host, remote_port, tcp/ip_process) new atp.socket(remote_host, remote_port, tcp/ip_process, local_IP_address) new atp.socket(remote_host, remote_port, tcp/ip_process, local_IP_address, local_port) remote_host このパラメータは接続の確立先のホストを指定します。この値は数値形式の文字列(たとえば 「130.252.3.44」)またはアルファベット形式の文字列(たとえば「www.tandem.com」 )です。 remote_port このパラメータはポート番号(たとえば 8080)を指定します。 tcp/ip_process このパラメータは、NonStop TCP/IP プロセス名を文字列(たとえば「$ztc4」 )として指定します。 キーワード null(引用符なし)を使用してデフォルト値を設定します。システム構成が tcpip^ process^name の定義を含んでいる場合、そのプロセス名がデフォルト値です。それ以外の場合は、 システムのデフォルト値を使用します。 local_IP_address このパラメータは、ローカル・アドレスを数値形式で指定する文字列(たとえば「12.13.14.15」)で す。キーワード null(引用符なし)を使用して、デフォルト値を tcp/ip_process の値に関連付 けられたローカル・アドレスに設定します。 4-30 141215J 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド local_port このパラメータはローカル・ポートを数字(たとえば 20000)として指定します。次の使用可能な ポートを選択するには、0(ゼロ)を使用します。 プロパティ error(読み取り専用) このプロパティは、呼び出し先のソケット・メソッドからのエラー・コードを格納します。エラーが 発生しなかった場合、この値はゼロ(0)です。エラーが発生した場合、この値は Sockets API から返 されたエラーです。エラーの説明については、『Tandem NonStop TCP/IP and IPX/SPX Programming Manual』を参照してください。 error_text(読み取り専用) このプロパティは最新のエラーのテキスト記述を格納します。 timeout(読み取り専用) このプロパティは、TCP/IP の関数に使用されるタイムアウト(1/100 秒単位)を示します。この値 は、setSoTimeout メソッドを使用して設定します。デフォルト値は 3000(30 秒)です。 メソッド read([readcount]) このメソッドは、ソケットから readcount バイト(デフォルト値 15000、最大値 15000)のデー タを読み取り、文字列として返します。このメソッドは、読み取るデータがなくなると、値 null (JavaScript の予約語)を返します。したがってこのメソッドは通常、最低 2 回は呼び出されます。たと えば、次のような記述になります。 var str; for (str=s.read(); str != null; str=s.read()) atp.print (str); write(string) このメソッドは指定された文字列をソケットに書き込みます。 close() このメソッドはソケットを閉じます。このメソッドを明示的に呼び出さない場合、ATP はスクリプトの 最後でソケットを自動的に閉じます。 setSoTimeout(timeout) このメソッドは、後続のソケット・メソッドのタイムアウト(1/100 秒単位)を設定します。 141215J 4-31 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド setSoKeepAlive() このメソッドは、ソケット接続がタイムアウトにならないようにする TCP/IP keep-alive メッセージを設 定します。 setTcpNoDelay() このメソッドは、TCP/IP 内の送信(書き込み)データのバッファリングが最小限に行われるように設定 します。詳細については、 『Tandem NonStop TCP/IP and IPX/SPX Programming Manual』でソケット・オプ ションの説明を参照してください。 4-32 141215J 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド グローバル関数 次の関数はさまざまなスクリプトに役立ちます。 atp.print(JavaScript_expression) この関数は、サーバーサイド・スクリプトから結果を出力するために使用します。サーバーサイド・ スクリプトからの出力は、.atp ページの処理時にそのページ内のスクリプトと論理的に置き換えられ ます。Web ブラウザには、スクリプト自体ではなくサーバーサイド・スクリプトの出力だけが表示さ れます。 自作のスクリプトで HTML を明示的に記述できます。ただし、ブラウザに HTML を送るための atp.print() 文をスクリプトに記述しないでください。ATP は HTML を自動的にブラウザに送り ます。ATP のこの操作は、自作のスクリプトで atp.print を使用して実現する同じ操作よりも効率 的です。 atp.quit(integer) この関数は、現在の .atp ページの処理を停止し、すべての出力を Web ブラウザにフラッシュします。 パラメータがゼロ(0)の場合、障害が発生したことを示し、JavaScript の警告メッセージも表示されま す。パラメータがゼロ以外の場合、警告メッセージが表示されないことを示します。パラメータのデ フォルト値はゼロ(0)です。 return = atp.escape (string) この関数は、各特殊文字を対応する表記 %xx の 16 進数に置き換えることによって文字列を修正し、 クエリ URL での文字列の使用を可能にします。 次の関数(ATP の一部ではない)はこれとは逆の操作をし、16 進数を対応する特殊文字に置き換え ます。 <server> function unescape (s) { var i; var str_out; str_out = ’’; for (i=0; i<s.length; i++) { var c; c = s.substring(i,i+1); if (c.indexOf(’%’) == 0 str_out += ’\\x’; else str_out += c; } str_out = eval (’"’+str_out+’"’); return str_out; } 141215J 4-33 第 4 章 ATP のオブジェクト、プロパティ、およびメソッド atp.print (unescape(`add%20define%20%3demployee%20class%20%20map%3b’)); </server> atp.freeMemory() この関数を使用して ATP にメモリを強制的に解放させます。解放されるメモリは、アプリケーショ ン・スクリプトによって作成されたオブジェクト用に確保されたが、もはや参照できないメモリです。 参照できなくなったのは、たとえば、変数名が再使用されたのが原因です。ほとんどのアプリケーショ ンはこの関数を必要としません。atp.freeMemory() を使用するのは、メモリの問題が発生する 場合だけです。 return = atp.formatMoney(format, amount) この関数は現地の通貨書式に数字を変換します。format パラメータは、C 言語ライブラリの strfmon() ルーチンが使用する書式に従います。 ATP 1.0 では format パラメータは無視されます。結果の書式は小数点第 2 位までを含みます。コ ンマは含みません。たとえば、amount として 2345 を渡した場合、この関数は値 2345.00 を返します。 4-34 141215J 第 5 章 ATP アプリケーションの設計とデバック 第5章 ATP アプリケーションの設計とデバック この章では、ATP アプリケーションの設計とデバッグのためのガイドラインを示します。 パフォーマンスを考慮した設計 アプリケーションの設計と実現に次のような点を考慮して取り組むことによって、自作のアプリケー ションから最高のパフォーマンスを引き出すことができます。 □ キャッシュの定義 第 2 章の「ATP の環境変数」で説明されているように、ページ、SQL 文、および TUXEDO フィー ルド・テーブルのキャッシュを定義する環境変数を設定します。 □ ディクショナリの使用の制限 atp.dictionary オブジェクトのインスタンスの作成時に、必要なメッセージ名を指定します。 メッセージ名を指定しない場合、ディクショナリ全体が読み取られ、JavaScript のオブジェクトに変換 されます。または、実行時に DDL ディクショナリを読み取って大きなオブジェクト・ツリーを構築す る部分を、dview サンプル・プログラムによって生成されたコードから削除します。これらの方法と それぞれの利点の詳細については、第 4 章の「atp.dictionary オブジェクトの使用法に関する留意点」を 参照してください。 □ FML フィールドの指定 大きな FML テーブル(50 アイテムを超える FML テーブル)の atp.fml_table オブジェクト のインスタンスを作成するとき、atp.fml_table のコンストラクタ内で必要なフィールドを指定 します。デフォルトでは、FML テーブル全体が JavaScript のオブジェクトに変換されます。または、複 数の小さなフィールド・テーブルへの分割を考慮します。詳細については、第 4 章の「atp.fml_table オ ブジェクト」を参照してください。 □ eval 演算子の使用の回避 JavaScript の eval 演算子の使用を最小限にとどめます。できる限り、parseInt、parseFloat、 object[property] という表記を使用します。配列の添字表記を使用することによって、オブジェ クトのプロパティを参照できます。たとえば、obj.prop は obj[prop] と同じです。 □ 表示前の文字列の連結 表示前に文字列を連結することによって、atp.print の使用を最小限にとどめます。たとえば、 次のような記述になります。 -str = ’some value’; str + ’more’; ... atp.print(str); 141215J 5-1 第 5 章 ATP アプリケーションの設計とデバック 文字列のサイズが大きい場合に非常に効率的なのが、表示処理をするステートメント内でプラス記号 (+)の代わりにコンマ(,)を使用することです。プラス記号を使用すると ATP は中間文字列を生成し ますが、コンマを使用すると、表示処理をする関数は内部でフィールドをループします。 □ ATP によるブラウザへの HTML の出力 HTML をブラウザに出力するためのステートメントを自作のスクリプトに明示的に記述しないでく ださい。自作のスクリプトに HTML を明示的に記述するだけで、ATP が自動的かつ効率的にブラウザ に HTML を出力します。 □ 複数のページへの複雑なスクリプトの分割 スクリプトが長い場合は、そのスクリプトを複数の Web ページに分割します。使用するページが増 えても、各ページのスクリプトのサイズが小さくなるので、パフォーマンスを改善できます。 □ C 関数の使用 あらゆるトランザクションに必要な操作(たとえばセキュリティのチェック)については、その操作 を実行する関数を C プログラミング言語で書くことを考慮してください。たとえば、サーバー・クラ スが実行可能な関数を作成できます。この手法によってパフォーマンスが改善するかどうかは、トラン ザクションに必要な操作の複雑さやその他の特徴によって決まります。 □ 長いループ中のメモリの管理 自作のスクリプトが、オブジェクトの明示的または暗黙的なコンストラクタ内で長いループ(5000 回を超えるループ)を使用する場合、JavaScript の delete 演算子と atp.freeMemory() 関数を 使用して、ヒープの増大を回避することを検討してください。たとえば、次のような記述になります。 s1 = new atp.SQL("select * from =table for browse access "); s1.execute(); for (limit=0; limit < 10000 && s1.next(); limit++) { atp.print (s1.column_value, ’<br>\n’); for (j=0;j<s1.column_value.length; j++) { s1.column_value[i] = null; delete s1.column_value[i]; } if (limit % 100 == 0) atp.freeMemory(); } セキュリティに関する留意点 ATP では、スクリプトの通信先のサービスが提供するセキュリティ機能が使用されます。たとえば、ス クリプトはソケットを開き、SMTP メッセージを送信できます。 スクリプトがセキュリティをチェックする場合、そのチェックはページのロードごとに行う必要があり ます(ATP の CD に収録されているいくつかのサンプル・アプリケーションを参照) 。ATP はセッション の概念を実装していません。 5-2 141215J 第 5 章 ATP アプリケーションの設計とデバック 堅牢なスクリプトの記述 コード作成に関する次の慣習に従うことによって、異なる特徴を持つ複数の JavaScript 環境でも、自作 のスクリプトを実行できます。 □ 各関数の最後に return 文を明示的に記述します。 □ 各ステートメントの最後にセミコロン(;)を記述します。 □ 各プロシージャまたは関数は宣言してから呼び出します。 □ if 文内で中かっこを使用します。 ATP アプリケーションのデバッグ Tandem NonStop Kernel システムには JavaScript 環境専用のデバッガはありません。その代わりに、 JavaScript の標準メソッドを使用して、アプリケーションをデバッグする必要があります。 ここでは、いくつかのデバッグ手法について説明します。 一般的なガイドライン ここでは、ATP アプリケーションのデバッグに関する一般的なガイドラインを示します。 □ ブラウザの表示用メニューを使用してページのソースを表示し、ATP がブラウザに実際に送ったもの が何であるか調べます。 □ テーブルが表示されないか正しく表示されない場合、一時的に <table> タグを削除します。エラーが テーブルの生成中に発生した場合、ブラウザは </table> タグを検出するまで出力を表示しません。 <table> タグの削除によってテーブル・データを参照できます。 □ 同じページにクライアントサイドとサーバーサイドの JavaScript を記述する場合、 タグをチェックして、 これら 2 種類の JavaScript が正しく識別されることを確認します。さらに、それらの JavaScript が適用 される環境で使用される変数の宣言と初期化に誤りがないか確認します。 □ iTP Secure WebServer のエラー・ログをチェックして、解決しようとしている問題の原因が WebServer のエラーであるか調べます。 □ イベント・ログをチェックして、基盤となるサービス(NonStop TS/MP、NonStop TM/MP、NonStop TUXEDO、NonStop TCP/IP など)が原因のエラーがあるか調べます。 □ SQL および TMF 関連の各処理の後ろにエラー処理ロジックを記述します。transid とトランザクショ ン・ステータスを取得して表示するようにします(両方とも atp.transaction オブジェクトのプロパティ です)。 変数の表示 次の手法のどれかを使用して変数の値を表示します。 □ atp.print() 文をページに追加します。 141215J 5-3 第 5 章 ATP アプリケーションの設計とデバック □ HTML の終了タグをブラウザに送るためのステートメントを明示的に記述して、データが強制的に表 示されるようにします。ブラウザは通常、HTML の終了タグを検出するまでデータを出力しません。 atp.print(’</td></tr></table>’ + my_variable) を試してみてください。<head> セクション内に記述する場合は、atp.print(’</head>’ + my_variable) を試してみてく ださい。 □ 次の形式のステートメントを使用して、配列の内容を表示します。 formatp.print (my_array) □ 次の形式のステートメントを使用して、変数のデータ型を表示します。 atp.print (typeof my_var); □ 次の形式のステートメントを使用して、関数の定義を表示します。 atp.print (my_func); □ 次の形式のステートメントを使用して、オブジェクトのプロパティを列挙して表示します。ここで、 prop はオブジェクト x のプロパティです。 for (prop in x) { atp.print ("x contains " + prop + " whose value x[prop]) } is " + □ Javascript の watch() メソッドを使用して、変数値の変更のログを採取します。ATP の CD に収録さ れている /examples/debugging/watchlib.inc ファイルは、watchlogObject という デバッグ・オブジェクトの実装によって、このメソッドを実際に使用しています。このオブジェクト は、変数値の変更とその変更を行った関数の名前のログをとります。そのオブジェクトの定義済みのプ ロパティとメソッドを使用して、追跡情報をバッファに蓄積し、後でその情報を現在のウィンドウまた は新しいウィンドウに表示できます。 □ ページの開発またはデバッグでは、リクエスト変数の値を表示する関数を記述します。たとえば、次の ような関数を記述します。 function doDump() { for (i=0; i<atp.request.variables.length; i++) { print("+ atp.request.variables[i]"+’:’+ atp.request[atp.request.variables[i]]+’<br>’); } atp.quit(1); } if (secureAction &&atp.request.Action =="Find") { //doDump (); set_gvals_find (); gFormName =’PCL’; } ブレークポイントの設定 次のどちらかの方法で、自作のスクリプトの実行を任意の位置で停止します。 □ atp.quit() を使用します。ブラウザがまず出力を表示するように、実行の中止前に atp.print を呼び出します。 5-4 141215J 第 5 章 ATP アプリケーションの設計とデバック atp.print(’</td></tr></table>’); □ 実行を停止する位置に </server> タグを移動します。ブラウザは後続のコードをテキストとして表 示します。 SQL を使用するスクリプトのデバッグ ここでは、NonStop SQL を使用するアプリケーションのデバッグに関するガイドラインを示します。 □ atp.SQL オブジェクトのインスタンスを作成するか、このオブジェクトのメソッドを呼び出した後に、 sqlcode をチェックします。 □ atp.transaction オブジェクトの error プロパティをチェックします。 □ SELECT 文に対して atp.SQL の execute() メソッドを使用した後、アプリケーションが SQL テー ブルの 1 行目の取得に失敗する場合は、execute() メソッドの呼び出しの後ろに next() メソッド の呼び出しを挿入します。SELECT 文に対しては、execute() メソッドは第 1 列を自動的に取得し ません。 □ アプリケーションが目的の atp.SQL オブジェクトのメソッドを呼び出すことを確認します。スクリプト 内でコードをコピーして貼り付けると、タイプミスは減りますが、関係のない部分もコピーしてしまう 可能性があります。 □ トランザクション・オブジェクトの使用時は、変更内容を明示的にコミットします。トランザクション のロールバックはデフォルトで実行されます。 □ 上記のどの手法でも、またその他の手法でも SQL の問題を特定できない場合は、atp.SQL オブジェク トの dumpSQL メソッドを呼び出します。このメソッドはキャッシュをダンプします。ダンプには、ス テートメントの数、キャッシュがいっぱいかどうかの情報、およびサポート・スタッフが必要とするそ の他の情報が書き込まれます。 Web ページからディスクへの出力の追跡 Web ページからディスクへの出力を追跡するには、atp.config ファイル内で Env コマンドを使用 して、環境変数 ATP_TRACE を設定します。この環境変数の値は、ログの書き込み先の OSS ファイルの 名前です。次のように、PATHCOM を使用してこの変数を動的に構成することもできます。 gtacl -p pathcom "\$zweb;alter atp, (env ATP_TRACE=ztracefile)" gtacl -p pathcom "\$zweb;alter atp, delete env ATP_TRACE" Korn シェルからのサーバーサイド JavaScript 環境の実行 状況によっては(たとえばエラーが「document has no data」である場合) 、ブラウザと Web サーバーを 経由せずにページの出力を表示するのが便利です。 そのような場合、ATP を OSS シェル・プロンプトから次のように実行できます。 141215J 5-5 第 5 章 ATP アプリケーションの設計とデバック export VARIABLE1_NEEDED_BY_PAGE=value export VARIABLE2_NEEDED_BY_PAGE=value export ATP_GENERIC=mypage.atp ./atp.pway 同じスクリプト(mypage)を、指定した回数(value)だけ実行するには、次の構文を使用します。 export ATP_GENERIC_COUNT=value export ATP_GENERIC=mypage.atp ./atp.pway 複数のスクリプト(mypage と mypage1)を、指定した回数(value)だけ実行するには、次の構 文を使用します。 cat>ztemp<<EOF mypage.atp mypage1.atp EOF export ATP_GENERIC_COUNT=value export ATP_GENERIC=stdin ./atp.pway<ztemp c a t コ マン ドは、フ ァイ ルの 最後 まで の後 続行 を z t e m p フ ァイ ルに 出力 しま す。変数 ATP_GENERIC_COUNT に実行回数を指定します。変数 ATP_GENERIC には、実行するスクリプトを 標準入力として指定します。/atp.pway<ztemp という行は、ztemp を入力ファイルとして指定して います。 5-6 141215J 付録 A SQL Query Tool と SQL Catalog Explorer 付録 A SQL Query Tool と SQL Catalog Explorer NonStop SQL Query Tool および Catalog Explorer が生成するクエリは、切り取って自作の ATP スクリプ トに貼り付けることができるので、必要なクエリを容易に作成できます。さらに、これらのツールのソー スを参照すれば、ATP を使用して Web ページから NonStop SQL に直接アクセスするための優れた方法が わかります。 ブラウザから Catalog Explorer を対話式に使用して、指定した SQL カタログの内容と構造を表示したり、 Catalog Explorer テーブルまたはビューに対する SQL クエリを生成したりできます。Query Tool を使用して、 で入力または生成したクエリをテストできます。これらのツールの実行には、Netscape Navigator 3.01(以 降)または Internet Explorer 4.0 以降が必要です。漢字、カタカナ、またはハングル文字を表示できるよう にブラウザを構成している場合、Query Tool と Catalog Explorer はこれらのフォントのデータと列見出し を許可および表示できます Query Tool と Catalog Explorer では、atp.SQL オブジェクト(クエリの宣言および実行と統計情報の 収集用)と atp.sqlvar オブジェクト(クエリのコンパイル結果に基づいた出力の書式設定用)が使用 されます。これらのツールは、/examples/sql_tools/explorer というディレクトリにあります。 ツールのインストール ATP のインストール手順では、iTP Secure WebServer と同じ PATHMON 環境で実行できるように、Query Tool と Catalog Explorer が自動的に構成されます。または、別々の PATHMON 環境でツールを実行するこ ともできます。この付録の「セキュリティ」で説明するように、そのような構成はセキュリティ上の利点 があります。 iTP Secure WebServer と同じ PATHMON 環境で Query Tool と Catalog Explorer を実行する場合、これら のツールのインストールに必要な手順は、WebServer が動作していることの確認だけです。別々の PATHMON 環境を使用する場合は、次の手順に従ってください。 注意:ATP の readme ファイルまたは softdoc 内の情報がここでの説明と矛盾する場合は、readme ファイルまた は softdoc 内の指示に従ってください。これらのドキュメントのほうがこのマニュアルよりも新しい情報を 提供します。 1. 「第 2 章 ATP のインストールと実行」で説明されているように ATP をインストールします。 2. SQL ツールの構成ファイルとメイクファイルをカスタマイズします。メイクファイルを編集して、現 在の iTP WebServer の PATHMON 名と、SQL ツールの PATHMON 環境の PATHMON 名を指定します。 3. 次のコマンドを使用して別々の PATHMON 環境を起動します。 make pathcold 4. この付録の「.atp_sql_query ファイル名拡張子」で説明されているように、別々の PATHMON 環境を指 「第 2 章 ATP のイン 定するように atp.config ファイルを修正します。PathwayMimeMap 文は、 ストールと実行」で説明している ATP 構成ファイル内に記述されています。この付録の「パスワード」 で説明するように、Region 指示語を使用してパスワードの保護を追加します。 141215J 付録 A-1 付録 A SQL Query Tool と SQL Catalog Explorer 5. restarth オプションを使用して iTP Secure WebServer 環境を再起動します。 この時点で、NonStop SQL Query Tool と NonStop SQL Catalog Explorer が使用可能になります。 セキュリティ デフォルト構成では、ATP アプリケーションを実行するには、iTP SecureWebServer と同じ NonStop Kernel ユーザー ID が要求されます。このセキュリティが一般に適用されるのは、Pathway サーバーや NonStop SQL データベースのようなタンデム・リソースへのアクセスが、Web ページ上で定義されている アプリケーションです。iTP Secure WebServer 環境では、適切なアクセス権を持つユーザーだけが Web ペー ジを格納および構成できます。これはちょうど、特定のユーザーだけが運用環境にプログラムをインストー ルできることに似ています。 ブラウザのユーザーが NonStop SQL 文を入力できるツールでは、セキュリティに対してより細心の注意 が必要です。デフォルトでは、ブラウザのユーザーが持つ NonStop SQL へのアクセス権は、iTP WebServer の実行用のユーザー ID を持つユーザーのものと同じです。 .atp_sql_query ファイル名拡張子 環境の柔軟性と安全性を高めるには、.atp 以外のファイル名拡張子を定義して、NonSop SQL Query Tool および Catalog Explorer で使用します。たとえば、拡張子 .atp_sql_query を使用できます。こ の差別化によって、SQL ツールのリクエストを別の PATHMON 環境(別のユーザー ID)下で処理できます。 ファイルの拡張子別に特定の PATHMON 環境にリクエストをルーティングするには、それらのルーティ ングを atp.config ファイル内で PathwayMimeMap 指示語を使用して指定します。次の例では、拡 張 子 .atp が 付い たペ ージ のリ クエ スト が送 られ るの は、atp.config をイ ンク ル ード する httpd.config ファイルによって定義された iTP Secure WebServer PATHMON 環境内の atp サーバー・ クラスです。拡張子 .atp_sql_query が付いたページのリクエストが送られるのは、PATHMON プロ セス $DJCP の環境内の atp サーバー・クラスです。このような構成を実現するには、atp.config ファ イルに、PathwayMimeMap 指示語で使用する PATHMON 名のマップ定義も記述する必要があります。 # Requests for ’standard’ Server-JavaScript pages... MimeType application/x-httpd-guardian atp PathwayMimeMap atp atp # Requests for SQL query pages... MimeType application/x-httpd-guardian atp_sql_query PathwayMimeMap atp_sql_query /G/DJCP:atp パスワード NonStop SQL Query Tool および Catalog Explorer の使用前にパスワードを要求するには、Region 指示 語内で RequirePassword コマンドを使用します。次の例では、拡張子 .atp_sql_query が付い たすべてのファイルへのアクセスに対してパスワードを要求します。 Region /*.atp_sql_query { RequirePassword "SQL Query access" -userfile /home/davidc/webm/conf/userfile } 付録 A-2 141215J 付録 A SQL Query Tool と SQL Catalog Explorer 読み取り専用のアクセス NonStop SQL Query Tool および Catalog Explorer は 1 つの追加のセキュリティ機能をサポートしていま す。環境変数 DO_SQL_SELECT_ONLY は、設定された場合、使用できる SQL 文を SELECT 文だけに制 限します。したがって、ユーザーは読み取り専用アクセスだけに制限されます。次のように、この環境変 数を構成ファイルに記述します。 Region /*.atp_sql_query { AddCGI DO_SQL_SELECT_ONLY 1 } NonStop SQL Catalog Explorer の使用 NonStop SQL Catalog Explorer を使用すれば、システム上のすべてのカタログのリストから、次のよう なカタログの内容を選択して表示できます。 □ テーブル □ ビュー □ ファイル □ インデックス □ キー □ パーティション □ ビュー・テキスト SQL 文の種類およびその他の特徴を指定することによって、Catalog Explorer を使用して NonStop SQL クエリを生成し、その後 NonStop SQL Query Tool を使用してクエリを実行できます。 SQL Catalog Explorer を使用すると、必要な SQL 構文がすべて生成されるわけではありませんが、入力 の手間と入力エラーが大幅に減ります。 Catalog Explorer の実行 Catalog Explorer を実行するには、ATP のホームページ(/examples/index.html)から Query Tool を選択するか、Query Tool から[SQL Catalog ExplorerWindow]を 選択するか、/examples/ sql_tools/expsql という URL を入力します。 カタログの選択 Catalog Explorer を実行すると、最初に開くウィンドウに、システム上のすべてのカタログのリストと [Set Catalog]ボタンが表示されます。カタログのリストから必要なカタログを選択します。 カタログのリストが表示されない場合は、リストの生成に使用されるシステム・カタログにアクセスで きていません。この場合、URL 中の疑問符(?)の後ろの文字列で、アプリケーション・カタログの名前 を指定できます。構文は次のようになります。 141215J 付録 A-3 付録 A SQL Query Tool と SQL Catalog Explorer http://domain.name/expsql?SQAC=application-catalog&SQSC=catalog-node 文字列には大文字を使用する必要があります。application-catalog は、Guardian 形式の完全修 飾ファイル名です。catalog-node は Guardian ノード名です。 カタログの選択後、カタログ内で定義されたすべてのテーブルとビューのリストが表示されます。1 つ または複数のテーブルまたはビューを選択し、次のことを行うかどうか指定できます。 □ 選択したテーブルまたはビューの表示とクエリの生成 □ テーブルの行ごとの表示 □ テーブルのスキーマの調査 詳細情報の表示 テーブルとビューを選択すると、クエリ生成用のフォームが表示されます。フォーム上の各行は SQL テーブル内の列を表します。フォーム上の各列はクエリ内の句を表します。 テーブルに関する詳細情報を見るには、 [Query Generation Form]に表示されているテーブル名(左側の フレーム内に表示されているテーブル名ではない)をクリックします。次に、必要な情報に関連する見出 しをクリックすると、それらの詳細情報が表示されます。たとえば、 [Indexes]をクリックするとインデッ クスが表示されます。 クエリの生成 [SQL Statement Generator]ウィンドウには次の 3 つの部分があります。 最上部には、SQL 文のオプションのリストが表示されます。ステートメントの種類を選択するには、そ のステートメントの左のラジオ・ボタンをクリックします。ブラウズ・アクセス、排他モードなどのその 他のオプションを選択するには、対応するチェック・ボックスまたはボックスをクリックします。SQL の ステートメントとオプションの説明については、NonStop SQL のマニュアル・セットを参照してください。 中央部には、選択したテーブルまたはビュー別に列のリストが表示されます。列とそれらの列に適用す るテスト、およびそれらの列のソート順序を指定できます。 最下部には、複数のテーブルまたはビューを選択した場合に結合を指定できるリスト・ボックスがあり ます。 [Snap]チェック・ボックスをオンにして類似の名前の列を結合するか、結合する列を明示的に指定 します。一番上のボックスで列を選択すると、一番下のボックスは一致するように自動的にスナップされ ます。一番下のボックスで列を選択しても、一番上のボックスは一致するようにスナップされることはあ りません)。インナー結合、左結合、または右結合を指定できます。 where 句の情報を指定するときは、その値を未指定にしておき、実行時に列値の入力を要求するように できます。実行時に渡される値は、クエリ内で疑問符(?)によって表現されます。 次のどれかのボタンをクリックして、目的の形式のクエリを生成できます。 □[Generate SQL]ボタンをクリックして、SQL 文を生成します。画面の最下部にクエリが表示されます。 □[Script]ボタンをクリックして、対応する ATP スクリプトを生成します。このスクリプトは切り取っ て自作のスクリプトに貼り付けて使用できます。 □[URL]ボタンをクリックして、URL 中の疑問符(?)に続くクエリ文字列としてクエリを表現します。 付録 A-4 141215J 付録 A SQL Query Tool と SQL Catalog Explorer □[Explain]ボタンをクリックして、SQLCI の Explain 関数と互換性がある形式でクエリを生成します。 そのほか、画面の別の部分へ移動するボタン、すべての列を同時に選択するボタン、設定をすべてクリ アするボタン、NonStop SQL Query Tool にクエリを発行するボタンがあります。 ブラウザの切り取りおよび貼り付け機能を使用して、生成されたクエリを切り取り、自作のスクリプト に貼り付けることができます。しかしその前に、Query Tool を使用してそのクエリを容易にテストできま す。 クエリの発行 クエリを指定したら、デフォルトの表示オプションを使用してクエリを発行するか、ラジオ・ボタンを 使用して表示オプションのリストを表示させます。これらの表示オプションを使用して、クエリを生成す るかどうか選択できます。また、結果を現在のフレーム、新しいウィンドウ、またはブラウザの新しいイ ンスタンスのどれに表示するも選択できます。 クエリを発行すると、NonStop SQL Query Tool が暗黙的に起動されます。 NonStop SQL Query Tool の使用 NonStop SQL Query Tool を使用すれば、SQL クエリを入力するか、Catalog Explorer によって生成され たクエリを使用できます。 Query Tool の実行 Query Tool を実行するには、ATP のホーム・ページ(/examples/index.html)から Query Tool に移動するか、Catalog Explorer からクエリを発行するか、前回のセッションでブックマークを付けたクエ リを取得します。 クエリの入力 クエリを入力するには、Catalog Explorer からクエリを入力するか、ブックマークからクエリを取得する か、または Catalog Explorer からクエリを貼り付けるか発行します。クエリがパラメータ(クエリ内の疑問 符によって表現)を必要とする場合、Query Tool はフォームを表示して、各パラメータの入力を要求します。 表示オプションの選択 ラジオ・ボタンを使用して、TMF を使用するかどうか選択し、次のどれかの出力スタイルを選択します。 □ テーブル形式(データを列表示) □ フォーム形式(各行を別々のテーブルとして表示) □ コンマ区切り形式(この形式の値は Microsoft Excel などのアプリケーションにダウンロードおよびイ ンポート可能) テキスト・ボックスを使用して、表示開始行と最大表示行数を指定します。 141215J 付録 A-5 付録 A SQL Query Tool と SQL Catalog Explorer ブラウザでクエリにブックマークを付けるには、テキスト・ボックスにブックマークのラベルを入力し、 [Prepare to Bookmark]ボタンをクリックします。すべてのクエリ・オプションがクエリと共に保存されま す。 クエリの発行 クエリを発行するには、 [Submit]ボタンをクリックします。現在の[Query]ウィンドウをクリアする には、[Reset]ボタンをクリックします。新しい[Query]ウィンドウを開くには、[New Query]ボタン をクリックします。 Query Tool を使用すれば、ブラウザではなく Excel から参照できる形式でクエリ結果を保存したファイ ルを生成することもできます。そのような形式のファイルの作成の説明を参照するには、 [Excel97 iqy File] をクリックしてください。 使用法に関するヒント □ ブックマークを使用すれば、現在の NonStop SQL Query および現在の NonStop SQL Catalog を保存で きます。適切なボックスでブックマークのラベルを入力し、 [Prepare to Bookmark]ボタンをクリック します。 □ クエリ内で変数値は、妥当であれば未指定のままにします。クエリを発行すると、ユーザーに変数値の 入力を要求するフォームが Query Tool によって自動的に生成されます。変数値を未指定にすることに よって、クエリの汎用性が増し、SQL 文のキャッシュの有効性が非常に高くなります。 付録 A-6 141215J 付録 B DDL Dictionary Viewer (dview) 付録 B DDL Dictionary Viewer (dview) DDL dview(Data Definition Language Dictionary Viewer)はサンプル ATP アプリケーションであり、 有用な ATP スクリプト開発ツールです。DDL とは、NonStop TS/MP を使用するアプリケーション用のメッ セージ・レイアウトを定義するためのタンデム製品です。 dview を使用するときは、DDL ディクショナリの名前を指定し、メッセージ・レイアウトを選択しま す。これによって、メッセージ・レイアウトに関する情報が表示され、atp.field オブジェクトのコン ストラクタが生成されます。このコンストラクタは自作のスクリプトに貼り付けることができます。 dview は、atp.dictionary、atp.field、および atp.request オブジェクト、そして ATP のいくつかのグローバル関数(atp.print、atp.quit など)を実際に使用して、サンプル・アプリ ケーションとして作成されています。 dview のインストール ATP のインストール・スクリプトを実行すると、dview アプリケーションとサンプル・ディクショナ リが自動的にインストールされます。使用するその他のディクショナリは自分で作成して読み込む必要が あります。 dview の実行 dview を実行するには、ATP のホームページ /examples/index.html から DDL Dictionary Viewer に移動します。 DDL ディクショナリの選択 dview を使用するには、まず自作のアプリケーション用のメッセージ・レイアウトを定義する DDL ディクショナリの名前を入力します。テキスト入力フィールドで、次のどちらかを入力します。 □ 使用する DDL ディクショナリのサブボリュームへの OSS シンボリック・リンク名:OSS の ln コマン ドを使用してシンボリック・リンクを作成します。この名前は、現在のスクリプトのディレクトリ (dview がインストールされたディレクトリ)の相対パスであり、ピリオド(.)またはスラッシュ(/) で始まってはいけません。 □ 使用する DDL ディクショナリのサブボリューム内の dictddf ファイルを参照する Map Class Define の名前:httpd 構成ファイル内で MapDefine コマンドを使用してマップ定義を記述します。このマッ プ定義の例については、ATP 構成ファイル内の該当する箇所を参照してください。 DDL ディクショナリの名前の入力後、[Set Dictionary]ボタンをクリックします。 別の DDL ディクショナリを指定できるようにテキスト入力フィールドをクリアするには、 [Reset]ボタ ンをクリックします。 141215J 付録 B-1 付録 B DDL Dictionary Viewer (dview) メッセージ・レイアウトの選択 DDL ディクショナリの選択後、画面が開き、指定したディクショナリ名が再度表示され、次に、その ディクショナリ内で定義されたすべてのメッセージ・レイアウトのリストが表示されます。自作のスクリ プト内で作成するメッセージのレイアウトの名前をクリックします。 メッセージ・レイアウトの調査 [Message Layout Details]画面には、選択したメッセージ内のすべてのフィールドと構造体のリストが 表示されます。メッセージのコンポーネントごとにネスト・レベルが表示されます。ネスト・レベルの考 え方は COBOL で一般的なもので、レベル番号が大きい方のコンポーネントが小さい方のコンポーネント にネストされます。ネスト・レベルの後ろに、フィールドまたは構造体の名前、データ型、COBOL 形式 のコード、オフセット、長さ、メッセージ内での出現回数、および小数点桁位置が表示されます。 この画面には、メッセージのコンポーネントに対応するフィールド・オブジェクトのコンストラクタも 表示されます。 フィールド・オブジェクトのコンストラクタの使用 Dview はフィールド・オブジェクトのコンストラクタを 2 つ生成します。 def_message-layout という形式の名前が付いた関数は、メッセージとその各コンポーネントを 表す新しい atp.field オブジェクトを階層化します。message-layout は指定したレイアウトの名 前です。これらの一連のオブジェクトを作成するために、def_message-layout 関数を切り取り、自 作のスクリプトに貼り付けることができます。または、atp.buffer setData、getData、および setBinary メソッドに、引数としてフィールド・オブジェクトのコンストラクタを個々に渡して、フィー ルドの情報を設定したり、フィールドから情報を取得したりできます。 注意: DDL ディクショナリに動的にアクセスし、ディクショナリ内の変更内容に応じてメッセージの構造を変更す る atp.dictionary オブジェクトと異なり、dview が生成するコンストラクタは static コンストラクタです。そ のため、DDL ディクショナリが変更されても、メッセージの構造は変更されません。static コンストラクタ を使用すれば、DDL ディクショナリ・ファイルからの読み取り回数が減り、自作のスクリプトのパフォーマ ンスを改善できます。メンテナンスを容易にするために、static コンストラクタをサーバーサイド・インク ルード・ファイルに記述できます。 defarray_message-layout という形式の名前が付いた関数は、メッセージ・レイアウトを表す atp.field オブジェクトのフィールド配列を読み込みます(message-layout は指定したレイアウ トの名前です)。スクリプトでは、メッセージのフィールドに関する操作でフィールド配列を使用しませ ん。フィールド配列は主に、メッセージの構造に関する情報を取得および表示するディクショナリ・ブラ ウザやその他のツールで使用されます。 付録 B-2 141215J 付録 C HTML Forms Generator 付録 C HTML Forms Generator HTML Forms Generator はサンプル ATP アプリケーションであり、有用な ATP スクリプト開発ツールで す。Forms Generator を使用するときは、DDL ディクショナリの名前を指定し、リクエスト・メッセージ とリプライ・メッセージのレイアウトを選択します。リプライ・コードごとに、またはリプライ・コード の範囲ごとに、リプライ・メッセージのレイアウトを選択することもできます。これによって、NonStop TS/MP アプリケーションにリクエストを送ってリプライを取得する HTML フォームが生成されます。 生成されたフォームは、本番のスクリプトとしてではなく、ひな形のスクリプトとして使用します。自 作のアプリケーションには、データの入力検査をする関数と適切なセキュリティ・ロジックを追加します。 Forms Generator は、ATP の多くのオブジェクト(atp.dictionary、atp.field、atp.buffer、 atp.transaction、atp.request オブジェクトなど)、および ATP のいくつかのグローバル関数 (atp.print、atp.quit など)を実際に使用して、サンプル・アプリケーションとして作成されてい ます。 Forms Generator のインストール ATP のインストール・スクリプトを実行すると、HTML Forms Generator とサンプル・ディクショナリ が自動的にインストールされます。使用するその他のディクショナリは自分で作成して読み込む必要があ ります。 Forms Generator の実行 HTML Forms Generator を実行するには、ATP のホームページ /examples/index.html から HTML Forms Generator に移動します。 DDL ディクショナリの選択 HTML Forms Generator を使用するには、まず自作のアプリケーション用のメッセージ・レイアウトを定 義する DDL ディクショナリの名前を入力します。テキスト入力フィールドで、次のどちらかを入力します。 □ 使用する DDL ディクショナリのサブボリュームへの OSS シンボリック・リンク名:OSS の ln コマン ドを使用してシンボリック・リンクを作成します。この名前は、現在のスクリプトのディレクトリ (dview がインストールされたディレクトリ)の相対パスであり、ピリオド(.)またはスラッシュ(/) で始まってはいけません。 □ 使用する DDL ディクショナリのサブボリューム内の dictddf ファイルを参照する Map Class Define の名前:httpd 構成ファイル内で MapDefine コマンドを使用してマップ定義を記述します。このマッ プ定義の例については、ATP 構成ファイル内の該当する箇所を参照してください。 DDL ディクショナリの名前の入力後、[Set Dictionary]ボタンをクリックします。 141215J 付録 C-1 付録 C HTML Forms Generator 別の DDL ディクショナリを指定できるようにテキスト入力フィールドをクリアするには、 [Reset]ボタ ンをクリックします。 注意: DDL ディクショナリ内を検索してメッセージ・レイアウトのリストを取得するには、ディクショナリのサイ ズによって、多少時間がかかることがあります。Forms Generator の次回以降の使用でこの操作を繰り返さ ないようにするには、ブラウザの[Save As]機能を使用して、このリストを HTML ファイルに保存します。 後で、メッセージ・レイアウトのリストを表示するには、ブラウザでこの HTML ファイルを開きます。HTML ファイルを編集して、実際に使用するメッセージ・レイアウトだけが表示されるようにします。この手法に よって、リスト全体ではなく、実際に使用するメッセージ・レイアウトだけを保存できます。 リクエストおよびリプライ・メッセージの選択 DDL ディクショナリの選択後、画面が開き、前の画面で登録したディクショナリ名が再度表示され、次 に、その DDL ディクショナリ内で定義されたすべてのメッセージ・レイアウトのリストが表示されます。 自作の ATP スクリプト内で作成するメッセージのレイアウトの名前をクリックします。 注意:メッセージ・レイアウトの選択時の参考にするために DDL ディクショナリを参照するために、DDL dview (DDL Dictionary Viewe)を使用できます( 「付録 B DDL Dictionary Viewer(dview) 」を参照)。 [Request]列のラジオ・ボタンを使用して、サーバー・クラスに送られるリクエスト・メッセージのレ イアウトを選択します。選択対象にできるリクエスト・メッセージは 1 つだけです。 [Reply]列のチェック・ボックスを使用して、サーバー・クラスが返すことができる各種リプライ・メッ セージのレイアウトを選択します。 [Reply Code]列には、各種リプライ・メッセージが返される条件を示 す表現を入力します。変数 rc は、Pathway(NonStop TS/MP)サーバーからのリプライ・メッセージの先 頭 2 バイトを占有するリプライ・コードを表します。C 表現の演算子である ==、!=、<、<=>、>=、!、||、 および &&、そしてキーワード(true)および(false)を使用して、必要な条件を表現します。 [Pathmon Process]テキスト入力ボックスに、ターゲット・サーバー・クラスをモニタする PATHMON プロセスの名前を示す Map Class Define の名前を入力します。Map Class Define は、httpd.config ファイルに記述する必要があります。 [Pathway Server Class]テキスト入力ボックスに、サーバー・クラスが動作する環境用の PATHCOM 構 成ファイル内で定義されているサーバー・クラスの名前を入力します。 ラジオ・ボタンを使用して、サーバー・クラスが C で書かれているか、COBOL で書かれているか指定 します。 [TMF Options]下のチェック・ボックスを使用して、トランザクションが TMF によって保護されるか どうか、つまり、atp.transaction オブジェクトのインスタンスが作成されるかどうか指定します。 テキスト入力ボックスに、トランザクションがコミットされる条件を入力します。この条件は、リプライ・ コードの値に基づく必要があります。また、メッセージ・レイアウト・テーブル内の[Reply Code]列と 同じ構文を使用します。 [Message Layouts]下のラジオ・ボタンを使用して、次の 3 つのオプションのどれかを選択します。 □[Use dictionary at runtime] :このオプションを選択した場合、スクリプトは、DDL ディクショナリの変 更を連続的にモニタする atp.dictionary オブジェクトを作成します。また、メッセージ・レイア ウトはアプリケーションの実行時点の最新の内容に常に保持されます。しかし、DDL ディクショナリ を読み取るためにディスク・アクセスの回数が多くなる可能性があります。 付録 C-2 141215J 付録 C HTML Forms Generator □[Imbedded definitions] :このオプションを選択した場合、Forms Generator はディクショナリを 1 回だ け読み取り、Web ページ上の JavaScript 内に正しいメッセージ構造体を作成します。DDL ディクショ ナリが変更された場合、スクリプトを再生成しないと、メッセージ構造体は以前の内容のままです。も ちろん、DDL ディクショナリが変更された後に、生成されたスクリプトを手作業で修正することもで きます。 constructors]:このオプションを選択した場合、Forms Generator は各メッセージの atp.field オブジェクトとそれを構成するフィールドを作成します(dview と同じ操作です)。DDL □[atp.field ディクショナリが変更された場合、スクリプトを再生成しないと、メッセージ構造体は以前の内容のま まです。新しいコンストラクタを作成し、それらのコンストラクタを自作のスクリプトに貼り付けるこ ともできます。しかし、この方法は面倒なので、エラーの原因になりがちです。このオプションを選択 したほうが、他の 2 つのオプションを選択するよりも高いパフォーマンスを得られます。しかし、メン テナンスの労力の点では、ほとんどのアプリケーションに対して[Imbedded definitions]を選択するほ うが効率的です。 [Appearance Accessories]下のチェック・ボックスを使用して、メッセージの構造の見取り図やフォー ムの定義への HTML リンクを、生成されたページに表示するかどうか指定します。画面の上右隅に表示さ れる見取り図によって、長く複雑なメッセージの構造が明確になり、メッセージのコンポーネント間を迅 速に移動できます。見取り図内のコンポーネントをクリックすると、メッセージ・レイアウト内の対応す るコンポーネントに移動します。フォームの定義への HTML リンクをクリックすると、フォームの作成用 に入力した情報がエンコードされた形式で表示されます。 [Generate HTML Form]ボタンをクリックして、指定したサーバー・クラスと通信する HTML ページを 生成します。現在のフォーム上のすべての設定をクリアするには、[Reset]ボタンをクリックします。 この時点で、Forms Generator によって生成されたページが表示されます。Internet Explorer の場合は、 ページを単に表示するだけではなく、HTML の解析を試みることがあります。その結果、HTML の解析後 のページが表示されます。この場合、ブラウザの[View Source]オプションを使用してそのページのソー スを表示し、ソースをコピーして貼り付けます。または、ブラウザの[Save As]オプションを使用してそ のページを保存します。 生成されたページの仕上げ 生成されたページを運用環境で使用できるようにするには、次の作業を行う必要があります。 □ ページをブラウザで開いてテストします。 □ フィールドの入力検査ロジックとデフォルト値を追加します。 □ 自作のアプリケーションがセキュリティ・ロジックを必要とする場合は追加します。 □ エラーの処理ロジックとメッセージを追加します。 □ COBOL の再定義と C の共用体をサポートするコードを追加します。最後の作業は任意ですが、この作 業によってページの表示結果を改善できます。 141215J 付録 C-3 付録 C HTML Forms Generator 使用法に関する留意点 □ ブックマークを使用してメッセージ・レイアウトとパラメータ設定の現在のリストを保存し、これらの レイアウトと設定を後で使用できます。適切なボックスにブックマークのラベルを入力し、 [Prepare to Bookmark]ボタンをクリックします。次に、ブラウザの機能を使用してブックマークを保存します。 後でブックマークを取得すると、暗黙的に Forms Generator が起動されます。 □ メッセージ・レイアウトが複雑な場合、生成されるページのサイズが非常に大きくなり、ATP の解析 に時間がかかります。その結果、ページのロード時間が長くなります。サイズが大きいページに対して は、第 2 章の「ATP の環境変数」で説明している環境変数 ATP_PAGE_CACHE_SIZE を使用して、 キャッシュを割り当てます。キャッシュの使用によって、同じページの 2 回目以降のロード時間が非常 に短くなります。 付録 C-4 141215J 付録 D JavaScript Utility Driver (jud) 付録 D JavaScript Utility Driver (jud) NonStop TUXEDO サーバー対応の jud(JavaScript Utility Driver)は、NonStop TUXEDO の ud ユー ティリティを実装する ATP スクリプトです。jud のソースを参照すれば、ATP を使用して NonStop TUXEDO サーバーと通信する方法がわかります。jud は、アプリケーションのプロトタイプ作成とテス ト用のツールとしても有用です。 jud を使用するときは、NonStop TUXEDO のフィールド・テーブルとビューの名前を指定し、NonStop TUXEDO サーバーに送られるフィールドを選択します。これによって jud が、トランザクション・メッ セージを生成し、NonStop TUXEDO アプリケーションにリクエストを送り、リプライを取得します。 jud は、atp.fml_field、atp.fml_table、atp.fml_buffer、および atp.transaction オブジェクトを実際に使用して作成されています。 jud のインストール ATP のインストール・スクリプトを実行すると、jud ユーティリティが自動的にインストールされま す。デフォルトでは、jud は TUXEDO に標準の bankapp アプリケーションを使用します。使用するそ の他のフィールド・テーブルやアプリケーションは自分で作成して読み込む必要があります。 jud の実行 jud を実行するには、ATP のホームページ /examples/index.html から JavaScript Utility Driver に移動します。 環境の指定 jud が表示する HTML フォームで、次の情報を入力します。 □[Service name] :このスクロール・リストから必要な TUXEDO のサービスの名前を選択します。必要 なサービスがリストにない場合は、そのサービスの名前を入力します。このアイテムは必須です。 □[Client name] :このテキスト入力フィールドに、NonStop TUXEDO の構成で指定されているクライア ント名を入力します。このアイテムは任意です。 □[TUXEDO directory] :このテキスト入力フィールドに、TUXEDO のディレクトリの絶対パス名を入力 します。第 2 章の「httpd.config ファイル内の ATP」で説明されているように httpd.config ファ イルで値を指定した場合、jud はこのフィールドのデフォルト値としてその値を表示します。このア イテムは必須です。 □[User name] :このテキスト入力フィールドに、NonStop TUXEDO の構成で指定されているユーザー名 を入力します。このアイテムは任意です。 141215J 付録 D-1 付録 D JavaScript Utility Driver (jud) □[TUXEDO configuration file] :このテキスト入力フィールドに、TUXEDO 構成ファイルの絶対パス名 を入力します。第 2 章の「httpd.config ファイル内の ATP」で説明されているように httpd.config ファイルで値を指定した場合、jud はこのフィールドのデフォルト値としてその値を表示します。こ のアイテムは必須です。 □[TMF]または[no TMF]:これらのラジオ・ボタンを使用して、トランザクションの保護を必要とす るかどうか指定します。 □[FML] または[FML32] :これらのラジオ・ボタンを使用して、 必要な FML バッファの種類を指定します。 □[FML View] :このテキスト入力フィールドに、ビューの名前を入力します。 □[Password] :アプリケーションがパスワードを要求する場合は、このテキスト入力フィールドにパス ワードを入力します。 □[Data] :NonStop TUXEDO の TPINIT 構造体からの初期化データが表示されます。 このフォームの下には、NonStop TUXEDO の各種環境変数の現行値のリストが表示されます。 リクエスト・バッファの作成 次に、使用するフィールド・テーブルまたは関連するビューの名前を入力します(ビューについては、 NonStop TUXEDO マニュアル・セットを参照)。テキスト入力ボックスには 2 つのアイテムを入力できま す。通常、一方はアプリケーション・メッセージ内のフィールドを定義するフィールド・テーブルであり、 [Another]オプションには、 もう一方はリプライ内のステータス・レポートを用意する Usysflds です。 使用するその他のフィールド・テーブルまたはビューを指定できます。指定できる数に制限はありません。 フィールド・テーブル名の入力後、フォームの最上部にある[Redraw for Field Selection]ボタンをク リックします。これによって、各フィールド・テーブルで定義されたすべてのフィールドのマトリックス が表示されます。各フィールドがリクエスト・バッファに格納されるようにするには、 [Keep]チェック・ ボックスをオンにします。 次に、 [Redraw Showing Selected Fields]をクリックします。フィールドごとにフィールドの数(つまり フィールドの出現回数)を入力し、データ入力エリアに値を入力します。 注意:jud で指定したフィールドと値の組み合わせで作成されたバッファが、NonStop TUXEDO サーバーにとって 必ずしも有効であるとは限りません。jud を使用するには、サーバーが許可するフィールドとフィールドの値 の範囲(およびデータ型)を知っておく必要があります。 フォームの最上部近くのボタンを使用して、次のどれかの機能を任意のタイミングで実行します。 □[Redraw showing all fields] :各フィールド・テーブルのマトリックスを再描画し、定義されたフィール ドをすべて表示します。このオプションを選択するのは、下位フィールドだけで構成されるマトリック スを前回再描画した場合です。 □[Redraw showing selected fields] :各フィールド・テーブルのマトリックスを再描画し、チェック・ボッ クスがオンになっているフィールドだけを表示します。 □[Redraw for field selection only] :フィールドの選択を許可しデータの入力を禁止して、マトリックスを 再描画します。 付録 D-2 141215J 付録 D JavaScript Utility Driver (jud) □[Do NonStop TUXEDO tpcall]:NonStop TUXEDO サーバーにバッファを送ります。 □[Reset] :フォームをクリアします。 リプライ・メッセージの表示 [Do NonStop TUXEDO tpcall]ボタンをクリックすると、jud はサーバーにバッファを送り、リプライを 待ち、2 とおりの形式でリプライを表示します。 1 番目の形式では、リプライ・バッファ内でのフィールドの出現順にリプライのフィールドのリストを 表示します。 2 番目の形式では、フィールドの出現回数別にリプライのフィールドのリストを表示します。このリス トはスプレッドシートに似ています。 141215J 付録 D-3 索引 索引 (英数字) A accessCheck メソッド 3-13 AddCGI コマンド 2-6 Administration Server 2-3 Appearance Accessories C-3 ATP NonStop TS/MP インターフェイス 1-3, 3-5 Pathway インターフェイス 1-3, 3-5 SQL インターフェイス 1-3, 3-3 TCP/IP インターフェイス 1-3, 3-9 TUXEDO インターフェイス 1-3, 3-7 アーキテクチャ 1-2 インストール 2-1 環境変数 2-7 正式製品名 1-1 ソケット・インターフェイス 1-3, 3-9 ツールの概要 1-4 ディレクトリ構造 2-2 ページの処理 3-1 ホームページ 2-2, 2-8 メイクファイル 2-1 atp サーバー・クラス 1-3, A-2 定義 2-4 ファイル拡張子 1-3, 3-1 atp.blob オブジェクト 4-18 atp.buffer オブジェクト 3-6, 4-19 atp.dictionary オブジェクト 3-6, 4-10 使用法に関する留意点 4-11 パフォーマンス関連のトピック 5-1 atp.escape 関数 4-33 atp.field オブジェクト 4-12, 4-21, B-2 dview による作成 4-11, B-1 データ型 4-14 atp.field のコンストラクタ C-3 atp.fml_buffer オブジェクト 3-8, 4-27 atp.fml_field オブジェクト 4-24 atp.fml_table オブジェクト 3-8, 4-25 使用法に関する留意点 4-25 パフォーマンス関連のトピック 5-1 atp.formatMoney 関数 4-34 atp.freeMemory 関数 4-34, 5-2 141215J 索 引 -1 索 引 atp.print 関数 4-33 最小限の使用 5-1 パフォーマンス関連のトピック 5-2 変数の表示 5-3 atp.quit 関数 4-33, 5-4 atp.request オブジェクト 4-17 デバッグを目的とした変数の表示 5-4 atp.socket オブジェクト 3-9, 4-30 atp.sqlvar オブジェクト 4-8 Query Tool と Catalog Explorer による使用 A-1 atp.SQL_object パラメータ atp.sqlvar のコンストラクタ 4-8 atp.SQL オブジェクト 3-4, 4-2 Query Tool と Catalog Explorer による使用 A-1 使用法に関する留意点 4-5 atp.transaction オブジェクト 3-4, 3-6, 3-8, 4-22, 5-3 ATP の構成 2-3 B bin ディレクトリ 2-2 bit_length プロパティ 4-13 bit_offset プロパティ 4-13 blob オブジェクト 3-10, 4-18 buffer_size パラメータ 4-27 C Catalog Explorer 1-4, A-1 機能 A-3 実行 A-3 CGI 1-3 character_set_id プロパティ 4-9 Client name D-1 close メソッド 4-4 ソケット・オブジェクト 4-31 COBOL C-3 column/variable_index パラメータ 4-8 column_name プロパティ 4-2 commit メソッド 4-23 Common Gateway Interface(CGI) 1-3 conf ディレクトリ 2-2 cursor_name プロパティ 4-3 C 関数 必要なとき 5-2 索 引 -2 141215J 索引 D Data Definition Language(DDL) 1-3, 3-6, 4-10 Data Management Language(DML) 4-6 data_length プロパティ 4-19 data_type_code プロパティ 4-8 data パラメータ 4-20 date_time_interval_fraction_precision プロパティ 4-9 date_time_interval_leading_precision プロパティ 4-9 date_time_interval_range プロパティ 4-9 DDL Dictionary Viewer(dview) 1-4, 3-6, 5-1, B-1 インストール B-1 DDL 1-3, 3-6, 4-10 Dictionary Viewer(dview) 4-11 ディクショナリ、MapDefine 2-5 decimals プロパティ 4-13 delete 演算子 5-2 dictddf ファイル 4-10, B-1, C-1 DML 4-6 Do NonStop TUXEDO tpcall D-3 doAddVariable メソッド 3-13 doDump メソッド 5-4 doSocketError メソッド 3-13 doSQLClose メソッド 3-12 doSQLColumnValue メソッド 3-12 doSQLError メソッド 3-12 doSQLGetSQLcode メソッド 3-12 doSQLNext メソッド 3-12 doSQLPrintColumnValue メソッド 3-12 doTMFcommit メソッド 3-12 doTMFrollback メソッド 3-12 doURLClose メソッド 3-13 doURLOpen メソッド 3-13 doURLPrintHeaders メソッド 3-13 doURLPrint メソッド 3-13 doURLRead メソッド 3-13 dumpSQL メソッド 5-5 dview 1-4, 3-6, 4-11, 5-1, B-1 インストール B-1 E element atp.dictionary オブジェクトの element プロパティ 4-11 atp.dictionary のコンストラクタの element パラメータ 4-10 element.DEF プロパティ 4-11 Env コマンド 2-5 141215J 索 引 -3 索 引 error_detail プロパティ 4-19 error_text プロパティ atp.fml_buffer オブジェクト 4-28 ソケット・オブジェクト 4-31 eval 演算子、最小限の使用 5-1 Excel A-6 execute メソッド 4-4 atp.SQL オブジェクト 5-5 explorer ディレクトリ A-1 F fields プロパティ atp.field オブジェクト 4-13 atp.fml_table オブジェクト 4-25 field_id プロパティ 4-24 field_name パラメータ 4-25 field_table パラメータ 4-25 field パラメータ 4-21 Filemap 指示語 2-4 filesystem_error プロパティ 4-3 FML 1-3, 4-24, 4-27, D-2 テーブル 3-11, 4-24, 4-25 FML32 4-27 fml_type パラメータ 4-27 プロパティ 4-27 Fstrerror 4-28 G getData メソッド 3-8 atp.buffer オブジェクト 4-21 atp.fml_buffer オブジェクト 4-29 getMap メソッド 4-29 getOccurs メソッド 4-29 H HTML Forms Generator 1-4, C-1 SQL データベースからの生成 3-10 サーバーサイド・スクリプト内の HTML 3-2 タグ 1-3, 3-1 パーサ 1-3 明示的な記述 3-2, 4-33 索 引 -4 141215J 索引 HTTP 1-2, 1-3 クラス・ライブラリ 4-30 ヘッダー 3-2 httpd.config ファイル 2-3, A-2 I if 文内の中かっこ 5-3 Imbedded Definitions C-3 include ディレクトリ 2-2 install ディレクトリ 2-2 Internet Explorer 1-1, C-3 IP アドレス 4-30 iqy ファイル A-6 isDigit メソッド 3-13 isMoney メソッド 3-14 isPositiveInteger メソッド 3-14 iTP Secure Webserver 2-1 J JavaScript Utility Driver(jud) 1-4 JavaScript 1-1 Utility Driver(jud) 1-4, D-1 インタプリタ 1-3 オブジェクト 1-3 クライアントサイド 3-7, 3-10 コード作成に関するガイドライン 5-3 サーバーサイド 3-10 Javascript_expression パラメータ 4-33 jud 1-4, D-1 インストール D-1 実行 D-1 K Korn シェル 5-5 L length プロパティ 4-9 atp.field オブジェクト 4-13 level プロパティ 4-12 ln コマンド 4-10, B-1, C-1 local_IP_address パラメータ 4-30 local_port パラメータ 4-31 141215J 索 引 -5 索 引 loopback サーバー・クラス 4-20 M MapDefine コマンド 2-5, 4-5, B-1, C-1 Maxlinks 2-5 Maxservers 2-5 Microsoft Excel A-6 Internet Explorer 1-1 Mimetype 指示語 2-4 N name パラメータ atp.dictionary のコンストラクタの name パラメータ 4-10 プロパティ atp.dictionary オブジェクト 4-10 atp.field オブジェクト 4-12 atp.fml_field オブジェクト 4-24 atp.fml_table オブジェクト 4-25 Netscape 1-1 Navigator 1-2 next メソッド 4-4 nld ユーティリティ 2-8 NonStop Kernel 2-1 NonStop SQL 1-1 ATP インターフェイス 1-3, 3-3 コンパイル・オプション 2-3 テーブル テーブル用の MapDefine 2-5 NonStop TM/MP 1-3 NonStop TS/MP 1-1 ATP インターフェイス 1-3, 3-5 サーバーへの送信 3-11, 4-19 フォームの自動生成 C-1 NonStop TUXEDO 1-1 ATP インターフェイス 1-3, 3-7 T クライアントとの接続性 2-3 WS クライアントとの接続性 2-3 同じスクリプト内の NonStop TUXEDO と SQL 3-11 環境変数 2-6 必要なバージョン 2-1 null 4-6 null_permitted プロパティ 4-9 索 引 -6 141215J 索引 numeric_precision プロパティ 4-9 numeric_scale プロパティ 4-9 Numstatic パラメータ 2-5 O occurs_max プロパティ 4-13 offset プロパティ 4-12 Open System Services(OSS) 2-1 OSS シェルからの ATP の実行 5-5 OSS シェルからのスクリプトの実行 3-9 OSS 2-1 OSS シェルからのスクリプトの実行 3-9 P PATHMON 別々の PATHMON 環境内での Query Tool と Catalog Explorer の実行 A-2 pathmon パラメータ 4-20 Pathsend 1-3, 3-6, 3-14, 4-19 エラー・コード 4-19 pathsend_error_text プロパティ 4-20 pathsend_timeout プロパティ 4-20 Pathway 1-1 ATP インターフェイス 1-3, 3-5 サーバーへの送信 3-11 フォームの自動生成 C-1 PathwayMimeMap 指示語 2-4, A-2 pathway_tools ディレクトリ 3-5 pathway ディレクトリ 3-5 PFS スペース 2-8 Q Query Tool 1-4, A-1 実行 A-5 R readcount パラメータ 4-31 read メソッド 4-31 records_accessed プロパティ 4-4 records_used プロパティ 4-4 Redraw for Field Selection D-2 Redraw Showing All Fields D-2 Redraw Showing Selected Fields D-2 141215J 索 引 -7 索 引 Region 指示語 2-6, A-2 remote_host パラメータ 4-30 remote_port パラメータ 4-30 RemoveSpaces メソッド 3-14 reply プロパティ 4-19 atp.fml_buffer オブジェクト 4-27 RequirePassword コマンド A-2 resetCache スクリプト 2-7 return getData の結果 4-21 return 文 5-3 rollback メソッド 4-23 row_print_format プロパティ 4-2 S SELECT 文 4-5, 5-5, A-3 sendmail 3-9 sendMail メソッド 3-14 sendToServer メソッド 3-14 send_to_server 3-5, 3-6 send メソッド 4-20 Server 指示語 2-4 serverclass_send の呼び出し 4-20 server_class パラメータ 4-20 Service name D-1 setBinary メソッド 4-21 setData メソッド 3-6, 3-8 atp.buffer オブジェクト 4-20 atp.fml_buffer オブジェクト 4-28 setSoKeepAlive メソッド 4-32 setSoTimeout メソッド 4-31 setTcpNoDelay メソッド 4-32 SMTP 1-3, 3-9, 3-14 スクリプトからの SMTP メッセージの送信 3-11 SQL Catalog Explorer 1-4, A-1 SQL 1-1 Catalog Explorer の機能 1-4, A-3 Query Tool 1-4, A-1 エラー・コード 3-4 エラー処理 5-3 同じスクリプト内の SQL と TUXEDO 3-11 カーソル 3-11 キャッシュ・サイズ 2-8 更新と削除 3-11 コンパイル 2-3 索 引 -8 141215J 索引 選択 3-11 デバッグ手法 5-5 テーブル テーブル用の MapDefine 2-5 ヌル 4-6 SQLBuildExecute メソッド 3-12 sqlca プロパティ 4-3 sqlcode プロパティ 4-3, 5-5 SQLDA 構造体 4-8 SQLError メソッド 3-12 SQLQueryCreate メソッド 3-12 SQLQuery オブジェクト 3-12 sql_tools ディレクトリ examples SQL 3-3 sql ディレクトリ 3-3 SQL での日付と時刻の表現 4-7 SQL 文内のパラメータ 4-5 statement atp.SQL のコンストラクタの statement パラメータ 4-2 プロパティ atp.SQL オブジェクト 4-2 statement_type プロパティ 4-3 STATLIN 3-8 status プロパティ atp.transaction オブジェクト 4-22 string_data パラメータ 4-18 string_filename パラメータ 4-18 string_name パラメータ 4-18 string_type パラメータ 4-18 atp.buffer のコンストラクタ 4-19 string_type プロパティ 4-19 structure プロパティ 4-12 subscript1 パラメータ 4-21, 4-22 subscript_multipliers プロパティ 4-13 symlink 4-10, B-1, C-1 T TANDEM_PATHMON_NAME 2-5 TCP/IP 1-1 ATP インターフェイス 1-3, 3-9 接続 4-30 tcp/ip_process パラメータ 4-30 Telnet 1-3 timeout パラメータ 4-31 141215J 索 引 -9 索 引 プロパティ ソケット・オブジェクト 4-31 TMF 1-3 TUXEDO との使用 D-1 エラー処理 5-3 tpcall メソッド 3-8, D-3 TPINIT の man ページ 2-6 tpstrerror 4-28 tpurcode 4-28 transid プロパティ 4-22, 5-3 TUXEDO 1-1, 4-24 JavaScript での ud の実装 D-1 T クライアントとの接続性 2-3 WS クライアントとの接続性 2-3 環境変数 2-6 構成ファイル D-1 ディレクトリ D-1 フィールドのデータ型 4-24 メッセージの送信 4-28 tuxedo_tools ディレクトリ 3-7 tuxedo ディレクトリ 3-7 type_text プロパティ 4-24 type プロパティ 4-12, 4-24 U unescape 関数 4-33 URL オブジェクト 3-13 Use dictionary at runtime C-2 User name D-1 user_return_code プロパティ 4-28 Usysflds D-2 V variablesObject オブジェクト 3-13 variable プロパティ atp.request オブジェクト 4-17 view D-2 プロパティ 4-27 W watchlogObject オブジェクト 5-4 watch メソッド 3-10 WebServer、iTP 2-1 索 引 -10 141215J 索引 エラー・ログ 5-3 WebServer の再起動 2-3 Web ページからの出力の追跡 5-5 write メソッド 4-31 (五十音順) ア アーキテクチャ ATP 1-2 アプリケーションの設計 5-1 イ イベント・ログ 5-3 インクルード・ファイル 1-3, 3-1 利点と欠点 3-7 インストール ATP 2-1 Catalog Explorer と Query Tool A-1 dview B-1 Forms Generator C-1 jud D-1 インタプリタ JavaScript 1-3 インデックス 列または変数 4-8 エ エラー error プロパティ atp.buffer オブジェクト 4-19 atp.fml_buffer オブジェクト 4-28 atp.transaction オブジェクト 4-22, 5-5 ソケット・オブジェクト 4-31 処理 5-3 ログ、WebServer 5-3 オ オーサリング・ツール 1-1 オブジェクト ATP 1-3 atp.blob 4-18 141215J 索 引 -11 索 引 atp.buffer 4-19 atp.dictionary 4-10 使用法に関する留意点 4-11 パフォーマンス 5-1 atp.field 4-12, B-2 dview による作成 4-11 データ型 4-14 atp.fml_buffer 4-27 atp.fml_field 4-24 atp.fml_table 4-25 使用法に関する留意点 4-25 パフォーマンス関連のトピック 5-1 atp.request 4-17 atp.socket 4-30 atp.SQL 4-2 Query Tool と Catalog Explorer による使用 A-1 使用法に関する留意点 4-5 atp.sqlvar Query Tool と Catalog Explorer にる使用 A-1 atp.transaction 4-22, 5-3 NonStop SQL 4-1 NonStop TM/MP(TMF) 4-22 NonStop TS/MP(Pathway) 4-10 NonStop TUXEDO 4-23 SQLQuery 3-12 sqlvar 4-8 TCP/IP ソケット 4-30 URL 3-13 variablesObject 3-13 watchlogObject 5-4 カ 拡張子 .atp 1-3, 3-1 サーバー・クラスへのマップ 2-4 別々の PATHMON 環境内でツールを実行する際の拡張子の使用 A-2 カスタマイズ ATP の構成 2-3 カーソル、更新可能 4-6 カタログ 選択 A-3 内容の表示 A-1 環境変数 2-5, 2-6, 2-7 atp.request オブジェクトでの表現 4-17 ATP_COMPILE 2-7 ATP_GENERIC 5-6 索 引 -12 141215J 索引 ATP_GENERIC_COUNT 5-6 ATP_PAGE_CACHE_SIGNAL 2-7 ATP_PAGE_CACHE_SIZE 2-7, C-4 ATP_SCRIPT_RUNTIME_SIZE 2-8 ATP_SCRIPT_STACKSIZE 2-8 ATP_TRACE 5-5 DO_SQL_SELECT_ONLY A-3 SQL_STATEMENT_CACHE_SIZE 2-8 TANDEM_PATHMON_NAME 2-5 TUXEDO 4-27 TUXEDO_FTBL_CACHE_SIZE 2-8 エコー 3-10 ループ 4-17 関数 atp.escape 4-33 atp.freeMemory 4-34 atp.freeMemory() 5-2 atp.print 4-33 最小限の使用 5-1 パフォーマンス関連のトピック 5-2 変数の表示 5-3 atp.quit 4-33, 5-4 formatMoney 4-34 unescape 4-33 グローバル 4-33 定義の表示 5-4 特殊文字の変換 4-33 汎用 3-11 キ 基数の指定 4-24 キャッシュ C-4 SQL 文 2-8 ダンプ 5-5 中間コード 2-7 パフォーマンス関連の利点 5-1 フィールド・テーブル 2-8 ページ 2-8 行 1 行目の取得 5-5 ク クエリ 結果表示用のオプション A-5 141215J 索 引 -13 索 引 生成 1-4, A-1, A-4 入力 A-5 発行 A-5, A-6 クエリのテスト A-1 クライアントサイド JavaScript 3-7, 3-10 サーバーサイド JavaScript との区別 5-3 クラス、宣言と使用 3-10 繰り返されないフィールド 4-13 クローズ ソケット 4-31 タグ、データの強制的な表示 5-4 グローバル関数 4-33 ケ 堅牢なスクリプト 5-3 コ コンストラクタ内でのループ 5-2 サ 再帰的 3-10 サーバー・クラス atp A-2 サーバー・クラスへのリンク 2-5 サーバーサイド JavaScript 1-1, 3-10 HTML 内での記述 3-2 クライアントサイド JavaScript との区別 5-3 インクルード 1-3, 3-1, B-2 スクリプトの構造 3-3 サンプル NonStop TS/MP 3-5 Pathway 3-5 TCP/IP ソケット 3-9 TUXEDO 3-7 索引 オブジェクトおよび関数名別 3-11 プログラミング・タスク別 3-10 シ シェル、ATP の実行 5-5 シグナル 2-7 索 引 -14 141215J 索引 実行 ATP 2-8 Catalog Explorer A-3 Forms Generator C-1 jud D-1 Query Tool A-5 同じスクリプトの反復実行 5-6 受動的な内容 3-1 シンボリック・リンク 4-10, B-1, C-1 ス スクリプト 構造 3-3 出力場所 3-1 スクリプトからの生成 3-10 スクリプトの出力 3-1 スクリプトの停止 4-33, 5-4 スクリプトの反復実行 5-6 スタック・サイズ 2-8 ステートメントの最後のセミコロン 5-3 セ 生成 クエリ A-4 スクリプト 3-10 セキュリティ 3-4, 5-2 Query Tool と Catalog Explorer での留意点 A-2 サンプル・スクリプト 3-11 セッションへの非対応 5-2 接続 接続を表すオブジェクト 4-30 ソ ソケット 1-1 ATP インターフェイス 1-3, 3-9 ディレクトリ 3-9 ソケットからの読み取り 4-31 ソケットへの書き込み 4-31 ソフトウェア ATP の要件 2-1 141215J 索 引 -15 索 引 タ タグ HTML 1-3, 3-1 明示的ステートメントでのタグ出力によるデータ強制表示 5-4 ツ ツール 概要 1-4 テ ディクショナリ 4-10 参照 1-4 選択 B-1, C-1 ディクショナリへの動的なアクセス B-2 ディレクトリ構造 2-2 データ型 atp.field オブジェクト 4-14 デバッグを目的とした表示 5-4 データの入力検査 4-4 デバッグ SQL 5-5 watch メソッド 3-10, 5-4 アプリケーション 5-1 一般的なガイドライン 5-3 テーブルの表示 5-3 テーブル 1 行目の取得 5-5 デバッグ関連のトピック 5-3 添字 4-13, 4-21, 5-1 TUXEDO での制限 4-28 オブジェクト・プロパティへのアクセスでの使用 4-17 ト 動的な内容 3-1 ドキュメント document has no data 5-5 ソース、表示 5-3 特殊文字を変換する関数 4-33 トランザクション 境界 1-3 ステータス 4-22, 5-3 デフォルトでのロールバック 5-5 索 引 -16 141215J 索引 パラメータ 4-20 保護 4-22 ニ 入出力フラグ 4-8 入力検査 アプリケーション・データ 4-4 クライアントサイド 3-10 ネ ネスト・レベル 4-12, 4-13 ハ バイナリ・データ、格納先のオブジェクト 4-18 配列 内容の表示 5-4 配列 column_value 4-2 使用例 3-12 パーサ HTML 1-3 パスワード D-2 要求 A-2 パフォーマンス DDL ディクショナリの使用 4-11 FML テーブルの制限による改善 4-25 Forms Generator C-2 SQL 4-5 最高のパフォーマンスを得るためのスクリプト設計 5-1 ヒ ヒープ・サイズ 2-8, 5-2 表示処理をするステートメント内のコンマ 5-2 表示処理をするステートメント内のプラス記号 5-2 フ ファイルのアップロード 3-10, 4-17, 4-21 ファイル名拡張子 atp_sql_query A-2 フィールド dview によって作成されるフィールド・オブジェクトのコンストラクタ B-2 field パラメータ 4-21 141215J 索 引 -17 索 引 TUXEDO でのデータ型 4-24 テーブル 1-3, 4-24, 4-25 キャッシュ 2-7 パスの検索 4-25 フィールド・オブジェクトの static コンストラクタ B-2 フィールドの出現回数 4-13 FML バッファ内 4-29 フォーム Forms Generator 1-4, C-1 インストール C-1 実行 C-1 パフォーマンス関連のトピック C-3 動的な作成 DDL ディクショナリからの作成 3-10 SQL カタログからの作成 3-10 フォームベースのアプリケーション 3-10 ブックマークの付加 クエリ A-6 メッセージ・レイアウト C-4 ブラウザ Catalog Explorer の要件 A-1 バージョンのチェック 3-10 ブレークポイント 5-4 フレーム 3-10 プロシージャと関数の宣言 5-3 プロパティ atp.blob オブジェクト 4-18 atp.buffer オブジェクト 4-19 atp.field オブジェクト 4-12 atp.fml_buffer オブジェクト 4-27 atp.fml_table オブジェクト 4-25 atp.sqlvar オブジェクト 4-8 atp.SQL オブジェクト 4-2 atp.transaction オブジェクト 4-22 参照用の構文 5-1 ソケット・オブジェクト 4-31 配列の添字表記 4-17 表示 5-4 ヘ ページからの Web サイトへのアクセス 3-10 ヘッダー メタ・タグを使用しての変更 3-2 変更内容の明示的なコミット 5-5 変数 クライアントサイドまたはサーバーサイドの環境での初期化 5-3 索 引 -18 141215J 索引 表示 5-3 プロパティ 4-3 atp.request オブジェクト 4-17, 5-4 ログへの変更内容の書き込み 5-4 変数 ATP_PAGE_CACHE_SIZE 2-7 変数 ATP_SCRIPT_RUNTIME_SIZE 2-8 変数 ATP_SCRIPT_STACKSIZE 2-8 変数 SQL_STATEMENT_CACHE_SIZE 2-8 変数 TUXEDO_FTBL_CACHE_SIZE 2-8 ホ ホームページ 2-2, 2-8 マ マップ・クラス定義 4-5, B-1, C-1 メ メイクファイル 2-1 明示的に記述された HTML 3-2, 4-33 メソッド accessCheck 3-13 close 4-4, 4-31 commit 4-23 doAddVariable 3-13 doDump 5-4 doSocketError 3-13 doSQLClose 3-12 doSQLColumnValue 3-12 doSQLError 3-12 doSQLGetSQLcode 3-12 doSQLNext 3-12 doSQLPrintColumnValue 3-12 doTMFcommit 3-12 doTMFrollback 3-12 doURLClose 3-13 doURLOpen 3-13 doURLPrint 3-13 doURLPrintHeaders 3-13 doURLRead 3-13 dumpSQL 5-5 execute 4-4 getData atp.buffer オブジェクト 4-21 141215J 索 引 -19 索 引 atp.fml_buffer オブジェクト 4-29 getMap 4-29 getOccurs 4-29 isDigit 3-13 isMoney 3-14 isPositiveInteger 3-14 next 4-4 read 4-31 RemoveSpaces 3-14 rollback 4-23 send 4-20 sendMail 3-14 sendToServer 3-14 setBinary 4-21 setData atp.buffer オブジェクト 4-20 atp.fml_buffer オブジェクト 4-28 setSoKeepAlive 4-32 setSoTimeout 4-31 setTcpNoDelay 4-32 SQLBuildExecute 3-12 SQLError 3-12 SQLQueryCreate 3-12 write 4-31 メタ・タグ 3-2 ATP による保存 3-1 許可されないスクリプト 3-1 メッセージ Pathway サーバー用のメッセージ・バッファ 4-19 名前、メッセージ名の指定 5-1 メッセージ内のフィールド 4-12 レイアウト DDL ファイル内の定義 4-10, B-1 詳細情報 B-2 選択 B-2 レイアウトのループ 3-11 メモリの管理 4-34, 5-2 モ 文字列 表示前の連結 5-1 ヨ 読み取り専用のアクセス A-3 索 引 -20 141215J 索引 リ リクエスト Forms Generator での指定 C-2 TUXEDO D-2 リクエストを表すオブジェクト 4-17 リクエスト / レスポンス・サーバー 1-3 レ レコードの管理 3-11 141215J 索 引 -21