Comments
Description
Transcript
プログラミングガイド - NTTデータイントラマート
プログラミングガイド スクリプト開発モデル編 Ver 6.0 第 1章 イントロダクション 1 intra-martの起 動 と終 了 1.1 intra-martへのログイン 1.2 intra-martからのログアウト 2 intra-martのメニュー構 成 2.1 メニューの表 示 2.2 intra-martのホーム画 面 3 サンプルプログラムの実 行 2 2 3 4 4 5 6 3.1 ソースリストと実 行 画 面 を見 るには 6 3.2 本 書 のサンプルを実 際 に作 成 してみるには 6 4 APIリストの見 方 7 4.1 APIリストの格 納 場 所 7 4.2 APIの操 作 7 5 2つのWebアプリケーションモデル 8 5.1 スクリプト開 発 モデル 8 5.2 J2EE開 発 モデル 8 5.3 2つの開 発 モデルで構 築 したアプリケーションを混 在 可 能 8 5.4 各 ファイルの保 存 場 所 9 5.4.2 intra-mart WebPlatform(JBoss)およびintra-mart AppFrameworkの場 合 9 6.1 スクリプト開 発 モデルによるアプリケーション開 発 10 10 6.1.1 プレゼンテーション・ページ 10 6.1.2 ファンクション・コンテナ 11 7 スクリプト開 発 モデルでの開 発 第 2章 スクリプト開 発 モデルのプログラミングの基 礎 1 Hello Worldを作 ろう 2 9 5.4.1 intra-mart WebPlatform(Resin)の場 合 6 intra-martのアプリケーション開 発 概 要 12 13 14 1.1 ベースとなるプレゼンテーション・ページ(.html)の作 成 14 1.2 ファンクション・コンテナ(.js)の作 成 15 1.3 アプリケーション・プログラムの実 行 16 ページ間 にまたがるデータの共 有 17 2.1 ベースとなるプレゼンテーション・ページ(.html)の作 成 17 2.1.1 送 信 側 のHTMLファイルの準 備 (input.html) 17 2.1.2 表 示 側 のHTMLファイルの準 備 (hello.html) 18 2.2 ファンクション・コンテナ(.js)の作 成 2.2.1 受 取 側 のJavaScriptファイルの作 成 (input.js) 2.2.2 保 存 しておいたデータを呼 び出 すJavaScriptファイルの作 成 (hello.js) 2.3 アプリケーション・プログラムの実 行 3 データベースからデータを取 得 する 19 19 19 19 22 3.1 ベースとなるプレゼンテーション・ページ(.html)の作 成 23 3.2 ファンクション・コンテナ(.js)の作 成 24 3.3 アプリケーションの実 行 25 4 取 得 したデータの一 覧 表 示 ii 1 26 4.1 ベースとなるプレゼンテーション・ページ(.html)への追 加 26 4.2 ファンクション・コンテナ(.js)の作 成 26 4.3 アプリケーションの実 行 27 4.4 項 目 の拡 張 27 5 データの登 録 ・更 新 ・削 除 28 5.1 ベースとなるプレゼンテーション・ページ(.html)の作 成 28 5.2 ファンクション・コンテナ(.js)の作 成 29 5.3 アプリケーションの実 行 30 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 1 Storage Serviceの利 用 方 法 33 34 1.1 ファイル・アップロード 34 1.2 ファイルリストの表 示 36 1.3 ファイル・ダウンロード 38 1.4 ファイルの削 除 40 2 メール送 信 43 2.1 メール送 信 フォームの作 成 43 2.2 添 付 ファイル付 きメールの送 信 45 3 拡 張 <IMART>タグ機 能 の使 用 例 48 3.1 タグの定 義 と登 録 48 3.2 拡 張 <IMART>タグの利 用 49 4 ユーザ定 義 関 数 の登 録 と利 用 4.1 グローバル関 数 としての登 録 ・呼 び出 し 5 JavaClassとの連 携 5.1 標 準 JavaClassとの連 携 方 法 50 50 52 52 5.1.1 標 準 JavaClasss連 携 時 の問 題 点 54 5.1.2 自 作 JavaClassとの連 携 方 法 54 5.1.3 intra-mart起 動 時 の設 定 方 法 54 5.1.4 自 作 JavaClass側 の記 述 方 法 54 5.1.5 サーバサイドJavaScript側 の記 述 方 法 55 6 EJBとの連 携 57 6.1 EJBコンポーネントの作 成 57 6.2 JavaScriptからの呼 び出 し 57 7 外 部 プロセスの呼 び出 し 58 8 XML形 式 のデータを扱 う 59 8.1 XMLパーサーとデータの取 得 59 8.2 XML形 式 データの受 信 方 法 59 8.2.1 Requestオブジェクトを使 用 したXML形 式 データの受 信 方 法 8.2.2 XMLParserオブジェクトを使 用 したXML形 式 データの受 信 方 法 8.3 XML形 式 データの送 信 方 法 60 60 61 8.3.1 <IMART type="Content-Type">タグを使 用 したXML形 式 データの送 信 方 法 62 8.3.2 HTTPResponseオブジェクトを使 用 したXML形 式 データの送 信 方 法 63 9 デバッグ手 順 64 9.1 デバッグ例 64 9.2 デバッグAPIの利 用 方 法 65 10 JavaScriptコンパイラ機 能 について 67 10.1 実 行 時 のファンクションコンテナ検 索 手 順 69 10.2 仕 様 詳 細 70 10.3 コンパイラとは直 接 関 係 ない部 分 の仕 様 71 10.4 制 約 71 10.5 プログラムの書 き方 による制 約 71 11 im-J2EE Frameworkとの連 携 73 12 サンプル・アプリケーション 74 12.1 データベースへのサンプルデータの登 録 74 12.2 「勤 怠 管 理 」アプリケーションの操 作 74 12.2.1 勤 怠 登 録 74 12.2.2 勤 怠 修 正 76 12.3 ワークフロー・モジュールとの連 携 77 12.3.2 申 請 画 面 78 12.3.3 フロー情 報 画 面 78 12.3.4 承 認 画 面 79 13 モジュールの組 み込 みと操 作 13.1 ユーザインターフェース層 80 81 13.1.1 画 面 共 通 モジュール 81 13.1.2 グラフ描 画 モジュール(プレゼンテーション・ページ) 82 13.2 ビジネスロジック層 84 13.2.1 アプリケーション共 通 モジュール 84 13.2.2 メール連 携 モジュール(ファンクション・コンテナ) 84 13.2.3 外 部 ソフトウェア接 続 モジュール 86 13.2.4 ERP連 携 モジュール 87 13.3 業 務 基 盤 ツール 87 13.3.1 アクセスセキュリティモジュール 87 13.3.2 ワークフロー・モジュール 88 13.3.3 ビジネスプロセスワークフローモジュール 88 13.3.4 バッチ管 理 モジュール 89 13.3.5 ポータルモジュール 89 13.3.6 ViewCreator 90 14 ユニットの組 み込 みと操 作 92 14.1 アプリケーション共 通 マスタunit 92 14.2 カレンダーunit 92 14.2.1 呼 び出 し方 法 93 14.2.2 カレンダーデータの受 け取 り方 法 93 14.2.3 高 度 なカレンダー画 面 のカスタマイズ 94 14.3 ファイルダウンロードunit 94 14.3.1 ダウンロードの方 法 94 14.3.2 ファイル拡 張 子 とMIMEタイプ 95 14.4 ファイルアップロードunit 95 14.4.1 プレゼンテーションページとの連 携 95 14.4.2 情 報 の取 得 方 法 95 14.5 ツリー表 示 unit 96 14.6 i-mode unit 96 14.6.1 ページ管 理 マスタメンテナンスでのi-modeの設 定 96 14.6.2 i-modeのアドレスとパスワードの設 定 97 14.6.3 i-mode用 外 出 設 定 98 15 エクステンション・モジュールの組 み込 みと操 作 99 15.1 帳 票 印 刷 モジュール拡 張 99 15.1.1 IM-PDFデザイナー 99 15.1.2 IM-X Server 15.2 アクセスセキュリティ・モジュール拡 張 iv 77 12.3.1 ワークフロー連 携 概 要 101 102 15.2.1 IM-SecureSignOn(セキュア・サイン・オン) 102 15.2.2 IM-SecureBlocker 104 15.3 ワークフロー・モジュール拡 張 105 15.3.1 IM-ワークフローデザイナー 105 15.3.2 IM-FormatCreator 105 15.3.3 IM-EX申 請 システム 105 15.3.4 IM-SonicESB 106 15.4 外 部 ソフトウェア連 携 ソリューション 15.4.1 統 合 検 索 ソリューション 15.4.2 マルチデバイスソリューション 16 その他 の機 能 107 107 107 108 16.1 ライブラリ 108 16.2 検 索 ストリーミング機 能 108 16.3 ソースセキュリティ機 能 108 16.4 アプリケーション・ロック機 能 108 16.5 一 意 情 報 の取 得 機 能 109 16.6 データベースのストアドプロシジャーの呼 び出 し 109 16.7 ファイル操 作 109 16.8 データベース操 作 110 16.9 LDAPとの連 携 110 16.10 国 際 化 対 応 110 16.11 標 準 画 面 の作 り方 (共 通 画 面 デザイン) 111 16.12 ポータル画 面 の利 用 111 Appendix 113 1 メッセージ設 定 114 2 予約語一覧 115 3 制限事項 116 3.1 ファイル名 称 116 3.2 ID、コード 116 3.3 JS関 数 116 vi 1 intra-martの起 動 と終 了 第1章 イントロダクション 第 1章 イントロダクション 1 intra-martの起動と終了 Webベースの開 発 ツールであるintra-martは、通 常 のコンピュータソフトとは起 動 と終 了 の方 法 が異 な ります。Webベースのアプリケーションでは、ブラウザ上 から本 システムへ「ログイン」で使 用 できるように なり、終 了 時 は「ログアウト」で終 了 させます。 1.1 intra-martへのログイン intra-martへのログインは、システム管 理 者 、ログイングループ管 理 者 、一 般 ユーザによってURLが異 な ります。以 下 、一 般 ユーザのログインの手 順 を説 明 します。なお、システム管 理 者 、ログイングループ管 理 者 のログインに関 しては、「アドミニストレータガイド」を参 照 してください。 1 ブラウザを起 動 し、intra-martのURLを入 力 します。 画 面 上 には、intra-martのログイン画 面 が表 示 されます。 intra-mart WebPlatform (スタンドアロン) :http://マシンアドレス/imart/(ログイングループ名).portal (分散システム) :Webサーバコネクタの登録内容に合わせたURL intra-mart AppFramework :Webアプリケーションサーバに対するintra-martの登録内容に合わせたURL intra-mart WebPlatformをスタンドアロン形 態 で運 用 する場 合 、アクセスするURLのポート番 号 (Webサーバ としてのポート)は、インストール時 に指 定 することができます。 URLは、ブラウザのブックマークに登 録 しておくと便 利 です。 この他 に、「ログイン画 面 なしで自 動 認 証 する方 法 」(→P. 3 Column参 照 )が用 意 されています。 2 ログイン画 面 で、ユーザコードと、パスワードを入 力 し、[ログイン]ボタンをクリックします。 <intra-martのログイン画 面 > ログイン画 面 及 びログイン初 期 画 面 のソースは、以 下 の場 所 に用 意 されています。 %ResourceService%/pages/platform/src/system/securityフォルダ 2 intra-mart WebPlatform/AppFramework 1 intra-martの起 動 と終 了 <intra-martの初 期 画 面 > 初 期 画 面 のメインページ(右 フレーム内 )は、ポータル画 面 となっています。新 しくポートレットを作 成 してポー タル機 能 に登 録 することにより、様 々な情 報 を初 期 表 示 することができます。 1.2 intra-martからのログアウト ログイン画 面 に戻 るとログアウトしたことになり、intra-martを終 了 できます。ログイン画 面 に戻 るには、画 面 左 のメニュー上 部 に用 意 されている[LOGOUT]ボタンをクリックします。 メニューの[LOGOUT]ボタンをクリックせずにブラウザを終 了 した場 合 や、他 のページに移 動 してintra-mart の画 面 から離 れてしまった場 合 、intra-martサーバ内 ではセッションがタイムアウトするまでログイン状 態 を継 続 しているものとみなされます。必 ずメニューの[LOGOUT]ボタンをクリックしてください。 ログイン画面なしで自動認証する方法 intra-martにログインする際 のURLに、次 のようにユーザコードとパスワードを含 めると、ログイン画 面 な しで自 動 認 証 されます。 ■システム管 理 者 http://intramart/imart/system.admin?im_user=ユーザコード&im_password=パスワード ■ログイングループ管 理 者 http://intramart/imart/ログイングループ名 .manager?im_user=ユーザコード&im_password=パスワード ■一 般 ユーザ http://intramart/imart/ログイングループ名 .portal?im_user=ユーザコード&im_password=パスワード 第 1章 イントロダクション 2 intra-martのメニュー構成 intra-martのメニュー表 示 形 式 は、「フォルダ」という大 分 類 と「ページ」から構 成 されていて、ページを 選 択 すると該 当 する画 面 が表 示 されます。フォルダはどの階 層 にでも登 録 することができ、その配 下 の ページをまとめるために利 用 します。 フォルダおよびページは、ログイン(起 動 )したユーザのアクセス権 に応 じたものだけが表 示 されるので、 本 マニュアル上 の画 面 と実 際 の画 面 が異 なることがあります。 <フォルダとページの関 係 > 2.1 メニューの表示 intra-martのメニュー表 示 では、画 面 左 フレームにツリー構 造 のメニューが表 示 されます。大 項 目 であ る「フォルダ」をクリックすると、そこに属 する「ページ」がツリーに表 示 されます。ここで、「ページ」を選 択 す ると、これに該 当 する画 面 内 容 が表 示 されます。 <メニュー表 示 画 面 の例 > 4 intra-mart WebPlatform/AppFramework 2 intra-martのメニュー構 成 2.2 intra-martのホーム画面 ホーム画 面 は、intra-martログイン時 に表 示 される初 期 画 面 です。メニューを選 択 して、各 種 画 面 が表 示 されている場 合 には、画 面 右 の[HOME]ボタンをクリックするとホーム画 面 が表 示 されます。 この画 面 からintra-martのポータル画 面 への切 り替 えが行 えます。画 面 の切 り替 えは、右 画 面 の左 上 のタブで切 り替 えることができます。 [HOME]ボタン ホーム画 面 に戻 ります。ホーム画 面 はintra-martログイン時 に表 示 され る 画 面 で、ポ ー タル 画 面 が 設 定 さ れ てい る とき に は 、 こ の画 面 で 切 り 替 えることができます。 [LOGOUT]ボタン intra-martを終 了 して、ログイン画 面 に戻 ります。 [MENU ON/OFF]ボタン 左 側 のメニューをOn/Offします。メニューをOffにすると、画 面 が広 くな り作 業 が容 易 になります。な お、[属 性 設 定 ]メニューで、ログイン直 後 のメニューのOn/Off状 態 を変 更 することもできます。 [ポータル切 り替 え]タブ 設 定 されているポータル画 面 を切 り替 えることができます。ポータル画 面 の詳 細 は、アドミニストレータガイド第 2章 「9 ポータルの設 定 と操 作 」と同 じく第 3章 「4 ポータルの利 用 」を参 照 してください。 マイメニュー よく利 用 するメニューを「マイメニュー」として登 録 できます。メニュー は、画 面 上 部 または左 メニュー最 上 部 の2箇 所 を切 り替 えることがで きます。 第 1章 イントロダクション 3 サンプルプログラムの実行 本 書 の以 降 の章 では、intra-mart WebPlatform/AppFrameworkに付 属 しているサンプルプログラム に対 応 して、プログラミングの基 礎 を体 験 していただけるように構 成 されています。本 書 を読 みながらソ ースプログラムを表 示 し、実 行 してみることができるようになっています。また、ユーザが一 からサンプル を作 成 して実 行 できる環 境 も用 意 されています。 スクリプト開発モデル サンプルプログラム : [サンプル]-[スクリプト開発モデル]-[チュートリアル]-[初級] ソースファイル %Storage Service%/sample/tutorial/beginner/source/ : 3.1 ソースリストと実行画面を見るには [初 級 ]というページの「ソース」というリンクを選 択 すると、各 節 で説 明 しているソースリストを画 面 に表 示 することができます。また、「実 行 画 面 」というリンクを選 択 すると、実 際 に実 行 した画 面 を見 ることが できます。 3.2 本書のサンプルを実際に作成してみるには intra-martをインストールすると、「sample」というフォルダができています。この中 に、「スクリプト開 発 モ デル」および「J2EE開 発 モデル」用 のフォルダが用 意 されており、以 降 の章 のすべてのサンプルと同 じ 名 前 テンプレートファイルが入 っています。このファイルを利 用 してサンプルを作 成 すると、[初 級 ]ページ 下 部 のリンクを選 択 するだけで実 際 に実 行 することができるようになっています。 ま た 、 「 tutorial/beginner/example 」 と い う フ ォ ル ダ に は 、 完 成 し た サ ン プ ル が 入 っ て い ま す の で 、 「tutorial/beginner/training」フォルダに全 ファイルをコピーして実 行 することもできます。 <チュートリアル[初 級 編 ]の画 面 例 > ここで紹 介 したサンプルのほかにも、メニューの[サンプル]フォルダにはプログラミングの参 考 になる勤 怠 管 理 などのサンプルプログラムが用 意 されています。こちらも合 わせてご利 用 ください。 6 intra-mart WebPlatform/AppFramework 4 APIリストの見 方 4 APIリストの見方 APIリストには、intra-mart WebPlatform/AppFrameworkで提 供 される各 機 能 やAPIの仕 様 について 記 載 されています。開 発 の際 には、参 考 資 料 としてご活 用 ください。このAPIリストは、HTML形 式 および Windowsの標 準 Help形 式 のファイルとなっており、左 側 のカテゴリメニューから表 示 するほか、Windows 版 では、[検 索 ]タブで全 文 検 索 が行 えます。 4.1 APIリストの格納場所 APIリストは、インストールCDの次 の場 所 に格 納 されていますのでご利 用 ください。 インストールCDの iwp_afw/document/development/apilist_v60.zip 「API」リストを表 示 させると、次 のようなメニューが表 示 されます。 <APIリスト> 4.2 APIの操作 左 側 の[目 次 ]タブから、各 カテゴリーのモジュール名 をクリックすることで、各 モジュール内 容 が表 示 さ れます。[検 索 ]タブを利 用 すると、目 的 語 で検 索 することができます。 [キーワード]タブに関 しては、現 在 使 用 していません。 第 1章 イントロダクション 5 2つのWebアプリケーションモデル intra-martには「スクリプト開 発 モデル」と「J2EE開 発 モデル」の2つの開 発 モデルが用 意 されています。 これらの開 発 モデルは、それぞれ特 徴 を持 ち、用 途 に応 じて使 い分 けることができます。また、2つのモデ ルで開 発 したWebアプリケーションを同 一 のシステム内 に混 在 させて実 行 することもできます。どちらの 開 発 モデルもアクセスセキュリティモジュール、ワークフローモジュールなど、intra-martが標 準 で用 意 して いるフレームワークを利 用 することができますので、高 い生 産 性 を誇 ります。 5.1 スクリプト開発モデル ColdFusionやMicrosoft ActiveServerPageに代 表 されるようなスクリプトを主 体 にした開 発 モデルで す。intra-martでは、普 段 ホームページの作 成 に利 用 しているHTMLと(サーバサイド)JavaScriptを利 用 してデータベースと連 動 したWebシステムの開 発 が可 能 となっています。そのため、初 心 者 でも始 めら れる簡 易 性 をもち、要 員 のシステム教 育 コストを大 きく削 減 することができます。これまで簡 単 なホーム ページしか作 成 したことがなかった方 でも約 2週 間 ~1ヶ月 ほどでマスターしWeb業 務 画 面 を作 成 する ことができます。また、ホームページの作 成 更 新 と同 様 に簡 易 に開 発 ができますので、頻 繁 に更 新 する ような複 雑 なWebシステムにも柔 軟 に対 応 することができます。 さらにJavaScriptからは、開 発 者 のテクニカルスキルにあわせて、Java(Class、EJB)、C++、ストアドプロ シージャなどが簡 単 に呼 び出 すことができます。 スクリプト開 発 モデルに関 しては、本 書 で解 説 しています。 5.2 J2EE開発モデル J2EE(Java2 EnterpriseEdition)とは米 サンマイクロシステムズが1999年 9月 に発 表 したプラットフォー ムです。Servlet、JSP(JavaServerPages)、EJB(EnterpriseJavaBeans)などから構 成 され、MVCモデル (Model-View-Controller)でシステム構 築 をおこなっていきます。特 に高 トランザクションが集 中 する処 理 に適 しています。 J2EE開 発 モデルに関 しては、「プログラミング・ガイド J2EE開 発 モデル」を参 照 してください。 5.3 2つの開発モデルで構築したアプリケーションを混在可能 intra-mart WebPlatform/AppFrameworkでは、これら2つのWebアプリケーションモデルで構築したアプリケ ーションを同一システム内で混在させることもできます。そのため、開発予算が限られ短期間開発の必要な Webシステムはスクリプト開発モデルを主体に開発を進め、その中でトランザクションの集中する部分のみを 切り出してJ2EE開発モデルで開発するといった現実的かつ柔軟な開発スタイルをとることができます。この 方式により、J2EE開発モデルでの問題(クラス設計などの高度なスキルの必要性やJava技術者の確保など の面から敷居が高く開発費用が増大する)とスクリプト開発モデルの問題(大規模なトランザクション処理に 対するレスポンス的な限界)を同時に解決することが可能となります。 プログラム開 発 にあたっては、プログラミングガイド(スクリプト開 発 モデル編 およびJ2EE開 発 モデル編 )をお 読 みいただくと同 時 に、アドミニストレータ・ガイドもお読 みください。そ の 他 、 「im-J2EE Framework仕 様 書 」 もインストールCDに用 意 されています。合 わせてご活 用 ください。 インストールCDの iwp_afw/document/specification/im-j2ee_framework-spec_v60.pdf 8 intra-mart WebPlatform/AppFramework 5 2つのWebアプリケーションモデル 5.4 各ファイルの保存場所 intra-mart WebPlatform/AppFrameworkの各 ファイルの保 存 場 所 を示 します。 5.4.1 intra-mart WebPlatform(Resin)の場合 静 的 コンテンツ(HTMLファイルや画 像 ファイルなど) Webサーバコネクタのインストールディレクトリ以 下 (スタンドアロン型 の場 合 はサーバモジュールのインストールディレクトリ直 下 doc/ディレクトリ以 下 ) スクリプト開 発 モデルのプログラム (プレゼンテーション・ページ(.html), ファンクション・コンテナ(.js)) ソースディレクトリ以 下 (通 常 は、%ResourceService%/pages/src/) J2EE開 発 モデルのプログラム(JSP)(JSP ファイル(.jsp, .xtp)) %Application Runtime%(スタンドアロンの場 合 はサーバモジュール)/doc/ディレクトリ以 下 J2EE開 発 モデルのプログラム(Servlet)(JAVAクラスファイル(.class)) %Application Runtime%(スタンドアロンの場 合 はサーバモジュール)/doc/ディレクトリ以 下 の該 当 ディレ クトリ内 WEB-INF/classes/以 下 (または、クラスパスに設 定 されているディレクトリ内 ) Storage Serviceにより一 元 管 理 されるファイル群 %Storage Service%/storage/ディレクトリ内 5.4.2 intra-mart WebPlatform(JBoss)およびintra-mart AppFrameworkの場 合 静 的 コンテンツ(HTMLファイルや画 像 ファイルなど) フレームワークサーバのインストールディレクトリ直 下 doc/ディレクトリ以 下 スクリプト開 発 モデルのプログラム (プレゼンテーション・ページ(.html), ファンクション・コンテナ(.js)) ソースディレクトリ以 下 (通 常 は、%ResourceService%/pages/src/) J2EE開 発 モデルのプログラム(JSP)(JSP ファイル(.jsp)) %Application Runtime%(スタンドアロンの場 合 はサーバモジュール)/ doc/ディレクトリ以 下 J2EE開 発 モデルのプログラム(Servlet)(JAVAクラスファイル(.class)) %Application Runtime%(スタンドアロンの場 合 はサーバモジュール)/doc/ディレクトリ以 下 の該 当 ディレ クトリ内 WEB-INF/classes/以 下 (または、クラスパスに設 定 されているディレクトリ内 ) Storage Serviceにより一 元 管 理 されるファイル群 %Storage Service%/ storage/ディレクトリ内 第 1章 イントロダクション 6 intra-martのアプリケーション開発概要 (スクリプト開発モデルの場合) intra-mart WebPlatformやintra-mart AppFrameworkを使 ったアプリケーションの開 発 において、開 発 者 はブラウザ上 に表 示 されたユーザインタフェースと、Webサーバ上 で動 作 するビジネスロジックを作 成 す ることになります。スクリプト開 発 モデルではプレゼンテーション・ページ(HTMLファイル)とファンクション・ コンテナ(サーバサイドJavaScriptファイル)の2つのファイルを作 成 します。この際 、フレームワークで用 意 されているモジュール群 を活 用 することでさらに生 産 性 を向 上 させることができます。 6.1 スクリプト開発モデルによるアプリケーション開発 「ファンクション・コンテナ」中 には、intra-mart WebPlatform/AppFrameworkを利 用 したビジネスロジッ クがJavaスクリプトで記 述 されており、「プレゼンテーション・ページ」から呼 び出 され実 行 されます。その 橋 渡 しの機 能 をintra-mart WebPlatformやintra-mart AppFrameworkが実 現 しています。 6.1.1 プレゼンテーション・ページ プレゼンテーション・ページは、ユーザインタフェース部 分 に相 当 し、拡 張 子 は「.html」で固 定 となります。 開 発 者 またはエンドユーザは、“intra-mart eBuilder”を利 用 して、Webベースのプレゼンテーション・ペ ージを作 成 していきます。また、ブラウザベースのユーザインタフェースには、動 画 像 やサウンドなどを盛 り 込 んだマルチメディアリッチな画 面 を構 築 していくことができます。さらに、プレゼンテーション・ページは HTMLファイルであるため、Webシステムの開 発 において、ユーザインタフェース部 分 のみを切 り出 してホ ームページデザイナに作 業 を依 頼 することもできます。ホームページ作 成 ツールから生 成 されるHTMLフ ァイルに<IMART>タグを追 加 していくことで、ファンクションコンテナにあるJavaスクリプトを関 連 付 けて 呼 び出 すことが可 能 になります。ユーザ定 義 関 数 を呼 び出 す<IMART>拡 張 タグも追 加 できます。完 成 したHTMLファイルは、ページ登 録 をするだけですぐにデータベースと連 動 して高 速 動 作 します。 <HTML> ・・・・ <TR> <TD> <IMART name> </TD> ・・・・ <TD> <IMART name> </TD> <TD> <IMART name> </TD> </TR> ① 10 intra-mart WebPlatform/AppFramework 画面共通モ ジュー ル 帳票印刷 ワークフロ ー アクセスセ キュリ ティ グラフ描画 メール連帯 SQL文 ② 6 intra-martのアプリケーション開 発 概 要 ① ② 市 販 のホームページ作 成 ツール(Microsoft FrontPage や Netscape Composer 等 )や intra-mart 「eBuilder」を利 用 してユーザインタフェースとなるプレゼンテーション・ページのひな型 を作 成 します。 ホームページ作 成 ツールから自 動 生 成 された HTML ソースに、ファンクション・コンテナ中 の JavaScript 関 数 や intra-mart WebPlatform のオブジェクトと連 携 する<IMART>タグを intra-mart「eBuilder」や テキストエディタを使 い挿 入 (記 述 )します。 プレゼンテーション・ページのサンプル例 を示 します。 intra-martの独 自 拡 張 タグ<IMART>を利 用 して、各 種 モジュールを呼 び出 していきます。 intra-mart の 独 自 拡 張 タ グ <IMART> を 利 用 して、 各 種 モジ ュール を 呼 び出 していきます。 6.1.2 ファンクション・コンテナ 多 階 層 アーキテクチャのうちのAPサーバ上 で稼 動 するビジネスロジック部 分 に相 当 します。拡 張 子 は 「.js」で固 定 となります。ファンクション・コンテナとプレゼンテーション・ページはワンセットとなっているため、 ファイルラベル名 は同 一 のものを使 用 します。開 発 者 は、プレゼンテーション・ページから呼 び出 される Java ス ク リ プ ト を 、 フ ァ ン ク シ ョ ン ・ コ ン テ ナ の 中 に 記 述 し 作 成 し て い き ま す 。 具 体 的 に は 、 intra-mart WebPlatform で 用 意 さ れ て い る フ レ ー ム ワ ー ク か ら 必 要 な オ ブ ジ ェ ク ト や 関 数 群 を 選 び 出 し 、 “intra-mart eBuilder”で、それらオブジェクトや関 数 群 を利 用 したサーバサイドで稼 動 するビジネスロジ ックをJavaスクリプトで記 述 し作 成 していきます。データベースへのSQL文 もファンクション・コンテナの中 に 記 述 し て い き ま す 。 実 際 の RDB と の 接 続 や SQL 発 行 は 、 intra-mart WebPlatform や intra-mart AppFrameworkから実 行 されるため、細 かなセッション管 理 やトランザクション管 理 を開 発 者 は意 識 す る必 要 はありません。作 成 されたビジネスロジックは、プレゼンテーション・ページの<IMART>タグから呼 び出 され実 行 されることになります。intra-mart WebPlatformやintra-mart AppFrameworkで用 意 さ れているフレームワークの詳 細 は、「intra-mart APIリスト」に一 覧 記 述 されています。これらスクリプトの 記 述 はJavaスクリプトで行 えるため、習 得 が難 しいといわれるJavaやActiveXを用 いることなく、これま でのホームページ作 成 の延 長 で、データベースと連 動 した本 格 的 なWebシステムの開 発 が可 能 になり ます。 第 1章 イントロダクション 7 スクリプト開発モデルでの開発 本 書 第 2章 以 降 には、次 のような内 容 を記 述 しています。スクリプト開 発 モデルで開 発 するにあたり、ご 利 用 ください。 第 2章 スクリプト開 発 モデルのプログラミングの基 礎 1 Hello Worldを作 ろう 2 ページ間 にまたがるデータの共 有 (セッション管 理 ) 3 データベースからデータを取 得 する 4 取 得 したデータの一 覧 表 示 5 データの登 録 ・更 新 ・削 除 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 1 Storage Serviceの利 用 方 法 2 メール送 信 3 拡 張 <IMART>タグ機 能 の使 用 例 4 ユーザ定 義 関 数 の登 録 と利 用 5 JavaClassとの連 携 6 EJBとの連 携 7 外 部 プロセスの呼 び出 し 8 XML形 式 のデータを扱 う 9 デバッグ手 順 10 JavaScriptコンパイラ機 能 について 11 im-J2EE Frameworkとの連 携 12 サンプル・アプリケーション 13 モジュールの組 み込 みと操 作 14 ユニットの組 み込 みと操 作 15 エクステンション・モジュールの組 み込 みと操 作 16 その他 の機 能 Appendix 1 メッセージ設 定 2 予約語一覧 3 制限事項 12 intra-mart WebPlatform/AppFramework 7 スクリプト開 発 モデルでの開 発 第2章 スクリプト開発モデルのプログラミングの基礎 第 2章 スクリプト開 発 モデルのプログラミングの基 礎 1 Hello Worldを作ろう ここでは、intra-martのスクリプト開 発 モデルを用 い簡 単 なアプリケーションを作 成 する作 業 を通 して、 プレゼンテーション・ページやファンクション・コンテナの作 成 の実 際 について理 解 を深 めましょう。 本 章 で紹 介 するサンプル事 例 は、すべてintra-martの[サンプル]-[スクリプト開 発 モデル]-[チュートリアル] メニュー内 に登 録 されています。本 書 の以 下 の節 は、それぞれ次 のチュートリアルに対 応 した解 説 になってい ます。 第 2章 「1 Hellow Worldを作 ろう」~「5 データの登 録 ・更 新 ・削 除 」 → 初 級 ページ 第 3章 「1 Storage Serviceの利 用 方 法 」 → ファイル操 作 ページ 第 3章 「2 メール送 信 」 → メール送 信 ページ ここでは、簡 単 な例 としてブラウザからサーバ上 に作 成 したプレゼンテーション・ページであるhello.html を 起 動 さ せ た と き 、 サ ー バ サ イ ド の intra-mart WebPlatform と 連 携 し て 「 こ ん に ち は 、 イ ン ト ラ マ ー ト で す。」とブラウザ上 に表 示 させるアプリケーションを作 ります。 1.1 ベースとなるプレゼンテーション・ページ(.html)の作成 ブラウザ上 に表 示 させるためのプレゼンテーション・ページを、HTML形 式 で作 成 します。 HTMLは、intra-martの「eBuilder」や市 販 のホームページ作 成 ツール、エディタを利 用 して作 成 します。 ここでは、下 記 のように画 面 上 に文 字 列 を表 示 するだけのシンプルな静 的 HTMLを最 初 に作 成 します。 ファイル名 はhello.htmlとし、imartフォルダ下 のSampleフォルダに保 存 します。 <作成したhello.htmlファイル > 1: <HTML> 2: <BODY> 3: こんにちは、intra-martです。 4: </BODY> 5: </HTML> <hello.htmlの実 行 画 面 > 14 intra-mart WebPlatform/AppFramework 1 Hello Worldを作 ろう 作 成 したHTMLファイル上 で、ファンクション・コンテナと連 携 させたい部 分 に<IMART>タグを埋 め込 み、 プレゼンテーション・ページを完 成 させます。ここでは、「intra-mart」の部 分 を<IMART>タグにし、ファンク ション・コンテナで指 定 した文 字 列 (nameValueの値 )に置 き換 えるように設 定 します。 <IMARTタグを埋め込んで修正したhello.htmlファイル> 1: <HTML> 2: <BODY> 3: こんにちは、<IMART type="string" value=nameValue></IMART>です。 4: </BODY> 5: </HTML> <IMART type="string"> ここでは、<IMART>タグのtype句 に「string」を指 定 しています。「string」は、value句 に指 定 された変 数 をファンクション・コンテナ中 の値 に置 き換 えるための属 性 です。 type句 に指 定 できる属 性 には 他 にも「link」、「repeat」、「form」、「input」、「select」など、プレゼンテーション・ページとファンクション・ コ ン テ ナ を 連 携 さ せ る た め の も の が 、 intra-mart WebPlatform に よ り 多 数 用 意 さ れ て い ま す 。 intra-martで提 供 している<IMART>タグの詳 細 は、intra-mart WebPlatformに付 属 している「APIリ スト」を参 照 してください。 1.2 ファンクション・コンテナ(.js)の作成 作 成 したプレゼンテーション・ページに対 応 するファンクション・コンテナを作 成 します。ファンクション・コン テナには、初 期 化 関 数 であるinit関 数 を作 成 します。ここでは、文 字 列 「イントラマート」を「nameValue」 という名 前 のプロパティに設 定 します。hello.htmlと連 携 させるため、ファイル名 はhello.jsとし、プレゼンテ ーション・ページと同 じフォルダに置 きます。 <作成したファンクション・コンテナ(hello.js)> 1: // HTMLへ渡す値の宣言 2: var nameValue; 3: 4: // init関数の定義 5: function init() 6: { 7: 8: nameValue = "イントラマート"; // HTMLへ渡す値を設定します } ファンクション・コンテナの中 の関 数 init()は、intra-mart WebPlatformが自 動 的 に初 期 解 釈 する固 定 関 数 です。 第 2章 スクリプト開 発 モデルのプログラミングの基 礎 1.3 アプリケーション・プログラムの実行 作 成 したプレゼンテーション・ページとファンクション・コンテナからなるアプリケーションを実 行 すると、最 初 に示 したように「こんにちは、イントラマートです。」と表 示 されます。 <実 行 時 の結 果 画 面 > 任 意 のディレクトリに作 成 したアプリケーションを実 行 するには、ログイングループ管 理 者 でログインし、[ログイ ングループ管 理 ]-[メニュー管 理 ]-[メニュー設 定 ]でページの登 録 をする必 要 があります。アプリケーションの 登 録 は、アドミニストレータ・ガイドの第 2章 「7 アプリケーションの登 録 」を参 照 してください。 16 intra-mart WebPlatform/AppFramework 2 ページ間 にまたがるデータの共 有 2 ページ間にまたがるデータの共有 (セッション管 理 ) intra-martを利 用 すると、複 数 ページ間 でのデータ共 有 (セッション管 理 )が簡 単 に行 えます。 ここでは、プレゼンテーション・ページからデータを入 力 し、ファンクション・コンテナを通 してサーバ側 でデ ータを保 存 、別 のページにデータを表 示 するというアプリケーションを作 ってみます。 ここでは、名 前 を入 力 するページ(input.html)を新 しく作 成 して、そこで取 得 したデータを、前 節 で作 成 したhello.htmlに表 示 させます。 2.1 ベースとなるプレゼンテーション・ページ(.html)の作成 基 本 となるプレゼンテーションページを作 成 します。拡 張 子 は、.htmlに限 定 されています。 2.1.1 送信側のHTMLファイルの準 備(input.html) 一 般 的 なWebページと同 じように<FORM>タグを使 って、データ入 力 をするHTMLページを最 初 に作 成 します。ファイル名 はinput.htmlです。 <送信フォームinput.html> 1: <HTML> 2: <BODY> 3: 名前を入力してください。<BR> 4: <FORM method="POST"> 5: 6: <INPUT type="text" name="yourname"><BR> <INPUT type="submit" value="送信"> 7: </FORM> 8: </BODY> 9: </HTML> <input.html実 行 時 の画 面 > 第 2章 スクリプト開 発 モデルのプログラミングの基 礎 フォームの送 信 ボタンが押 されたときに、ファンクション・コンテナ上 で指 定 した関 数 を呼 び出 すようにし て、フォームで入 力 された値 をファンクション・コンテナ側 で参 照 できるようにします。 そ の た め に 、 フ ァ ン ク シ ョ ン ・ コ ン テ ナ で 連 携 さ せ る 必 要 の あ る <FORM> タ グ お よ び 、 <INPUT> タ グ を <IMART>タグに置 き換 えます。 完 成 したinput.htmlファイルを保 存 します。 <ファンクション・コンテナとの連携用送信フォームHTML> 1: <HTML> 2: <BODY> 3: 名前を入力してください。<BR> 4: <IMART type="form" method="POST" action="inputName" page="sample/user1/hello"> 5: 6: <IMART type="input" style="text" name="yourname"></IMART><BR> <IMART type="submit" value="送信"></IMART> 7: </IMART> 8: </BODY> 9: </HTML> 2.1.2 表示側のHTMLファイルの準 備(hello.html) 作 成 したHTMLソースは直 接 ブラウザでも表 示 できますが、ここでは、前 章 で作 成 したhello.htmlからリ ンクをしてinput.htmlを表 示 するようにしてみます。 hello.htmlに次 の行 を追 加 してください。 <hello.htmlに追加> <IMART type="link" page="保存フォルダ名/input">名前の入力</IMART> <IMART type="link"> このタグを利 用 する事 で intra-mart のセッションを維 持 しながらプログラムを動 作 させることができ ます。詳 細 は、「APIリスト」を参 照 してください。 目的の HTML ソースへのパス intra-mart WebPlatformのResource Service の管 理 しているソースディレクトリ( 標 準 では、 %Resource Service%/pages/src/ ) からの相 対 パスとなります。また、拡 張 子 は指 定 しません。 "./input" や "保 存 フォルダ/input.html"という記 述 をするとエラーになります。 18 intra-mart WebPlatform/AppFramework 2 ページ間 にまたがるデータの共 有 2.2 ファンクション・コンテナ(.js)の作成 次 に、JavaScriptでファンクションコンテナファイルを作 成 します。 2.2.1 受取側のJavaScriptファイルの作成 (input.js) <データ受け取り保存するJavaスクリプト> 1: // inputName関数の定義 2: function inputName(request) 3: { // 受け取った値をClientオブジェクトに保存する 4: 5: 6: Client.set( "nameValue", request.yourname ); } 2.2.2 保存しておいたデータを呼び出すJavaScriptファイルの作成(hello.js) 入 力 した値 を参 照 するように、前 節 で作 成 したhello.jsの9行 目 を次 のように書 き換 えてみてください。 <保存しておいたデータを取り出す例> 9: nameValue = "イントラマート"; // HTMLへ渡す値を設定 ↓ 9: nameValue = Client.get( "nameValue" ); // HTMLへ渡す値を設定 2.3 アプリケーション・プログラムの実行 作 成 したプレゼンテーション・ページとファンクション・コンテナからなるアプリケーションを実 行 すると、送 信 側 input.htmlで入 力 して送 信 したデータ「ユーザ1」が、受 信 側 hello.htmlに表 示 されます。 <送 信 側 input.html> <受 信 側 hello.html> 第 2章 スクリプト開 発 モデルのプログラミングの基 礎 <IMART type="form"> input.htmlの4行 目 で使 っている<IMART type="form">について、もう少 し詳 しく説 明 します。 <IMART type="form" method="POST" action="inputName"page="sample/user1/hello"> この<IMART type="form">は、intra-martファンクション・コンテナにデータを引 き渡 すための<FORM> タグを提 供 する指 定 方 法 です。 action属 性 には、フォームのデータがサーバに送 信 されたときに呼 び出 される、ユーザ定 義 関 数 名 を 指 定 します。input.jsを見 ると、サーバサイドのファンクション・コンテナ上 に同 じ名 前 の関 数 が定 義 さ れています。 page属 性 は、フォームデータの送 信 とサーバ側 での処 理 が完 了 した後 に表 示 したいページを指 定 で きます。省 略 した場 合 は現 在 のページを再 描 画 します。 ここでも、リンク先 の指 定 方 法 は、Resource Serviceの管 理 しているソースディレクトリ(標 準 では % Resource Service%/pages/src)からの相 対 パスになりますので注 意 してください。 request オブジェクト データを受 信 したファンクション・コンテナでは、requestオブジェクトを利 用 してプレゼンテーション・ペ ージのデータを参 照 できます。requestオブジェクトは、intra-mart WebPlatform/AppFrameworkか ら自 動 的 に呼 び出 される関 数 (init()や<IMART>タグのaction属 性 への指 定 関 数 )の引 数 として受 け取 ることができます。 Client.set( "nameValue", request.yourname ); プレゼンテーション・ページからデータが送 られると、input.jsのinputName関 数 が呼 び出 されます。ファ ンクション・コンテナ側 では、requestオブジェクトのプロパティ名 としてyourname(input.htmlでは、テ キスト入 力 フィールドにyournameという名 前 を付 けていました)を指 定 するだけで、簡 単 に送 信 され てきたデータを取 り出 すことができます。 20 intra-mart WebPlatform/AppFramework 2 ページ間 にまたがるデータの共 有 Client オブジェクトによるセッション管理 別 のページへ移 動 した後 もサーバ側 でデータを保 存 しておくために、Clientオブジェクトのsetメソッド を使 っています。 Client.setメソッドは、クライアントのWebブラウザがintra-martで作 成 したサーバアプリケーションに接 続 している間 、データを保 持 するように指 示 するメソッドです。保 有 するデータには名 称 を付 けること ができ、複 数 保 存 することも可 能 です。 この例 では、nameValueという名 前 を付 けて保 存 しています。 intra-mart WebPlatform/AppFrameworkが提 供 するオブジェクトには、他 にも便 利 なメソッドやオブ ジェクトが多 数 定 義 されています。アプリケーションの開 発 者 は、これらのメソッドやモジュールを利 用 することで、短 い開 発 期 間 で品 質 の優 れたアプリケーションを構 築 することが可 能 になります。 各クライアント情報の保持時間の制限 (セッションタイムアウト値) intra-martでは、ここで述 べたセッション管 理 情 報 やアクセスセキュリティ情 報 など各 クライアントごと の情 報 を一 定 時 間 Application Runtime上 のメモリ(HttpSession)に保 持 しています。 デフォルト時 間 の設 定 は10分 となっており、10分 以 上 クライアントからのアクセスがない場 合 には、再 度 ログインし直 す必 要 があります。このデフォルトの時 間 設 定 は、conf/http.xml(基 本 設 定 ファイル) で変 更 することができます。conf/http.xmlの編 集 に関 しては、設 定 ガイドを参 照 してください。 第 2章 スクリプト開 発 モデルのプログラミングの基 礎 3 データベースからデータを取得する ここでは、intra-martが用 意 しているオブジェクトやメソッドの中 から、データベースアクセスの為 のオブジ ェクトおよびメソッドを利 用 して実 際 のデータベースからデータを取 得 します。 前 章 の手 順 に従 って、サーバ側 で動 的 に生 成 されるページを作 成 していきます。 社 員 マスタ(m_sample_stf) 列名 staff_cd 内容 属性 データ型 サイズ(bytes) 社 員 コード 主 キー テキスト型 20 stf_name_kanji 社 員 (漢 字) テキスト型 50 stf_name_kana 社 員 (カナ) テキスト型 50 stf_name_eng 社 員 (英 字) テキスト型 50 <利 用 するデータベース> ここでサンプルとして利 用 する社 員 マスタ(m_sample_stf)は、intra-mart WebPlatformをインストールした 後 、システム管 理 者 画 面 の[ライセンス]で作 成 できます。 22 intra-mart WebPlatform/AppFramework 3 データベースからデータを取 得 する 3.1 ベースとなるプレゼンテーション・ページ(.html)の作成 次 のHTMLファイルは、社 員 コードと社 員 名 を表 示 するための通 常 のHTMLソースの例 です。 Netscape Composer、Microsoft Frontpage、intra-mart「eBuilder」などHTML作 成 用 のビジュアルツ ールを利 用 すると表 の作 成 などが簡 単 にできますので、プレゼンテーション・ページの最 初 のひな型 作 成 には、これらのツールを利 用 すると便 利 です。 <社員コードと社員名を表示するstaff.html> 1: <HTML> 2: <BODY> 3: <TABLE border="1"> 4: <TR> 5: <TD>社員コード</TD> 6: <TD>社員名</TD> 7: </TR> 8: <TR> 9: <TD></TD> 10: <TD></TD> 11: </TR> 12: </TABLE> 13: </BODY> 14: </HTML> <staff.htmlファイルの実 行 結 果 > ファンクション・コンテナからのデータを反 映 するために修 正 したstaff.htmlを次 に示 します。 <社員マスタからのデータ取得用staff.html> 1: <HTML> 2: <BODY> 3: <TABLE border="1"> 4: <TR> 5: <TD>社員コード</TD> 6: <TD>社員名</TD> 7: </TR> 8: <TR> 9: <TD><IMART type="string" value=staff_code></IMART></TD> 10: <TD><IMART type="string" value=staff_name></IMART></TD> 11: </TR> 12: </TABLE> 13: </BODY> 14: </HTML> 第 2章 スクリプト開 発 モデルのプログラミングの基 礎 3.2 ファンクション・コンテナ(.js)の作成 ファンクション・コンテナのinit関 数 を作 成 します。ファイル名 はstaff.jsとします。 このstaff.jsでは、次 の2つのことを実 現 します。 ① データベース上の社員マスタファイルからデータを取得します。 ② 取得したデータをHTMLへ引き渡します。 <社員マスタからのデータ取得用staff.js> 1: // HTMLへ渡す値を宣言します 2: var staff_code; 3: var staff_name; 4: 5: // init関数の定義 6: function init(request) 7: { 8: var objData = false; // データベースから取得したデータ格納用 9: 10: // データベースから社員データを全て取得します 11: objData = DatabaseManager.select("SELECT * FROM m_sample_stf"); 12: 13: // 1件目のレコードからHTMLへ渡す値を設定します 14: staff_code = objData.data[0].staff_cd; 15: staff_name = objData.data[0].stf_name_kanji; 16: 17: } staff_cd、stf_name_kanjiはデータベースの列 名 です。 DatabaseManager オブジェクト- 1 データベースへのアクセスはDatabaseManagerオブジェクトを通 して簡 単 に行 えます。 この例 では、DatabaseManagerオブジェクトの「select」メソッドを呼 び出 しています。このようにパラメ タにSQL形 式 のSELECT文 を記 述 してデータベースからデータを取 得 することができます。 取 得 したデータはオブジェクトとして返 されます。データベースから取 得 したレコードは、selectメソッド が返 すオブジェクトのもつ配 列 プロパティとして保 存 されています。名 称 は「data」です。selectメソッド が返 すオブジェクトには他 にも、取 得 できたレコード数 を保 有 する「countRow」などがあります。 intra-mart WebPlatformが提 供 するオブジェクトとメソッドの詳 細 は、intra-mart WebPlatformに付 属 する「APIリスト」を参 照 してください。 24 intra-mart WebPlatform/AppFramework 3 データベースからデータを取 得 する 3.3 アプリケーションの実行 このアプリケーションを実 行 した結 果 を次 に示 します。 <実 行 結 果 > 作 成 したstaff.jsファイルの10、11行 目 のdate[0]をdate[1]、data[2]に変 更 してみてください。2件 目 、3件 目 のレコードが表 示 されるようになります。 第 2章 スクリプト開 発 モデルのプログラミングの基 礎 4 取得したデータの一覧表示 前 節 で作 成 した社 員 名 表 示 ページ(staff)を改 良 して、社 員 名 一 覧 を表 示 するようにソースを修 正 し ます。 4.1 ベースとなるプレゼンテーション・ページ(.html)への追加 一 覧 の表 示 は、<IMART type="repeat">タグを利 用 します。repeatは、タグで囲 まれた範 囲 を指 定 回 数 だけ繰 り返 し実 行 してHTMLへ展 開 します。 さらに、Javaスクリプト側 で作 成 した配 列 と連 動 して、 配 列 内 のデータを順 次 表 示 することもできます。 <社員マスタからのデータ取得用HTML(一覧表示用)> 1: <HTML> 2: <BODY> 3: <TABLE border="1"> 4: <TR> 5: <TD>社員コード</TD> 6: 7: <TD>社員名</TD> </TR> 8: <IMART type="repeat" list=staffList 9: <TR> 10: <TD><IMART type="string" value=record.staff_cd></IMART></TD> 11: <TD><IMART type="string" value=record.stf_name_kanji></IMART></TD> 12: </TR> 13: </IMART> 14: item="record"> </TABLE> 15: </BODY> 16: </HTML> 4.2 ファンクション・コンテナ(.js)の作成 次 にJavaScriptファイルを示 します。 <社員マスタからのデータ取得用Javaスクリプト(一覧表示用)> 1: //HTMLへ渡す値を宣言します 2: var staffList; 3: 4: // init関数の定義 5: function init() 6: { 7: var objData = false; // データベースから取得したデータ格納用 8: 9: // データベースから社員データを全て取得します 10: objData = DatabaseManager.select( "SELECT * FROM m_sample_stf" ); 11: 12: // HTMLへ渡すデータのリストを設定します 13: staffList = objData.data; 14: 15: 26 } intra-mart WebPlatform/AppFramework m_sample_stf は 、 社 員 マスタファイル の名 称 です。 4 取 得 したデータの一 覧 表 示 4.3 アプリケーションの実行 次 にアプリケーションを実 行 した結 果 を示 します。 <実 行 結 果 > 4.4 項目の拡張 完 成 したアプリケーションに、「社 員 名 (カナ)」の項 目 を追 加 してみましょう。変 更 するのはプレゼンテー ション・ページ(staff.html)だけで、ファンクション・コンテナは変 更 の必 要 はありません。下 記 のリストでは、 ←の行 を変 更 しました。 <社員マスタからのデータ取得用HTML(一覧表示用)-項目を拡張> 1: <HTML> 2: <BODY> 3: <TABLE border="1"> 4: <TR> 5: <TD>社員コード</TD> 6: <TD>社員名</TD> 7: <TD>社員名(カナ)</TD> 8: </TR> 9: <IMART type="repeat" list=staffList item="record"> 10: <TR> 11: <TD><IMART type="string" value=record.staff_cd></IMART></TD> 12: <TD><IMART type="string" value=record.stf_name_kanji></IMART></TD> 13: <TD><IMART type="string" value=record.stf_name_kana></IMART></TD> 14: </TR> 15: </IMART> 16: </TABLE> 17: </BODY> 18: </HTML> <実 行 結 果 > ← 変更した行 ← 変更した行 第 2章 スクリプト開 発 モデルのプログラミングの基 礎 5 データの登録・更新・削除 データの参 照 ができるようになりましたので、データを追 加 登 録 するページを作 成 します。 ページの名 称 はstaffinsとし、前 節 で作 成 したstaff.htmlから<IMART type="link">を使 ってリンクを張 ってください。 5.1 ベースとなるプレゼンテーション・ページ(.html)の作成 まず、社 員 データ登 録 用 の一 般 的 なHTMLを記 述 します。データ送 信 を行 うので、<FORM>タグを使 い ます。 次 のリストを参 考 にして、ブラウザ上 に正 しく表 示 されるのを確 認 してください。 <データ更新フォーム表示用HTML> 1: <HTML> 2: <BODY> 3: データを入力して登録ボタンを押してください。<BR> 4: <FORM method="POST"> 5: 社員コード 6: <INPUT type="text" name="staff_code"><BR> 7: 社員名 8: <INPUT type="text" name="staff_name"><BR> 9: <BR> 10: <INPUT type="submit" value="登録"> 11: </FORM> 12: <BR> 13: <IMART type="link" page="sample/user1/staff">戻る</IMART> 14: </BODY> 15: </HTML> ブラウザ上 に正 しく表 示 されるのを確 認 後 、intra-martのファンクション・コンテナにデータを送 るために、 いくつかのタグを<IMART>タグに変 更 します。 <ファンクション・コンテナとの連携用staffins.html> 28 1: <HTML> 2: <BODY> 3: データを入力して登録ボタンを押してください。<BR> 4: <IMART type="form" method="POST" action="insertStaffName"> 5: 社員コード 6: <IMART type="input" style="text" name="staff_code"></IMART><BR> 7: 社員名 8: <IMART type="input" style="text" name="staff_name"></IMART><BR> intra-mart WebPlatform/AppFramework 5 データの登 録 ・更 新 ・削 除 9: <BR> 10: <IMART type="submit" value="登録"></IMART> 11: </IMART> 12: <BR> 13: <IMART type="link" page="sample/user1/staff">戻る</IMART> 14: </BODY> 15: </HTML> 5.2 ファンクション・コンテナ(.js)の作成 クライアント上 のブラウザから送 られてきたデータを、サーバ上 のファンクション・コンテナ上 でデータベー スに反 映 するためのJavaスクリプトを記 述 します。ファイル名 はstaffins.jsです。 ここでは、次 の2つのことを行 います。 ① クライアントからのリクエストデータの参照 ② データベースへの追加 データベースへのレコード追 加 は、DatabaseManagerオブジェクトに定 義 されている次 の3つのメソッドを 呼 び出 すことにより実 現 します。 beginTransactionメソッド トランザクション開始 の宣 言 insertメソッド データの挿 入 commit/rollbackメソッド 挿 入 したデータのコミット/ロールバック <データベースへのデータ登録用Javaスクリプト> 1: function insertStaffName(request) 2: { 3: var objRecord = new Object(); 4: var result; // レコード登録用オブジェクトを生成 // DBアクセスの結果 5: 6: // レコードの作成 7: objRecord.staff_cd 8: objRecord.stf_name_kanji = request.staff_name; 9: objRecord.stf_name_kana = request.staff_name_kana; 10: objRecord.stf_name_eng = request.staff_name_eng; = request.staff_code; 11: 12: // DB処理の開始 13: DatabaseManager.beginTransaction(); 14: 15: // レコードの挿入 16: result = DatabaseManager.insert("m_sample_stf", objRecord); 17: 18: // エラーチェック 19: if (! result.error) 20: { 21: DatabaseManager.commit(); 22: } 23: else 24: { 25: DatabaseManager.rollback(); 26: 27: } } // 成功なのでコミットします // 失敗なのでロールバックします 第 2章 スクリプト開 発 モデルのプログラミングの基 礎 5.3 アプリケーションの実行 次 に実 行 結 果 を示 します。 <staffins.html実 行 画 面 > <実 行 結 果 > 初 期 表 示 されているstaffins.htmlは、intra-mart WebPlatformでタグ解 釈 されて送 付 された通 常 のHTML ファイルです。 30 intra-mart WebPlatform/AppFramework 5 データの登 録 ・更 新 ・削 除 DatabaseManager オブジェクト- 2 ここで利 用 されている、insertメソッドの他 に、更 新 ・削 除 用 に次 の2つのメソッドが用 意 されています。 パラメタに指 定 する「WHERE句 の条 件 」には、SQL文 で指 定 するWHERE句 に与 える条 件 式 を記 述 します。 例 えば、「社 員 コードがstf0001の社 員 を削 除 」したい場 合 は、 DatabaseManager.remove( "m_sample_stf", "staff_cd = 'stf0001'" ); のように指 定 します。実 際 には、プレゼンテーションページで指 定 した社 員 コードを参 照 する場 合 がほ とんどですので、 var strWhere = "staff_cd = '" + request.staff_code + "'"; DatabaseManager.remove( "m_sample_stf", strWhere ); となります。 また、本 オブジェクトでは、同 時 に複 数 のデータベースへのアクセスできるオプションも用 意 されていま す。詳 細 は、「APIリスト」の本 オブジェクトの項 を参 照 してください。 第 2章 スクリプト開 発 モデルのプログラミングの基 礎 32 intra-mart WebPlatform/AppFramework 5 データの登 録 ・更 新 ・削 除 第3章 さまざまなコンポーネント群 (im-BizAPI)の利用 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 1 Storage Serviceの利用方法 intra-martではStorage Serviceを利 用 することにより、分 散 システム構 築 時 においても、容 易 にファイ ルの共 有 が可 能 となります。ここでは、ブラウザからアップロードされたファイルをStorage Serviceに保 存 したり、またStorage Serviceに保 存 されているファイルをダウンロードしたりする画 面 を作 ってみます。 1.1 ファイル・アップロード まずは、ファイルをアップロードしてStorage Serviceに保 存 するためのフォームを作 成 します。 <送信用フォーム「filer.html」> 1: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 //EN"> 2: 3: <HTML> 4: <HEAD> 5: <TITLE>File Center</TITLE> 6: </HEAD> 7: <BODY bgcolor="WhiteSmoke"> 8: <H2>Upload</H2> 9: <IMART type="form" action="action_upload" method="POST" enctype="multipart/fo rm-data"> 10: <INPUT type="file" name="local_file"> 11: <INPUT type="submit" value=" send "> 12: </IMART> 13: </BODY> 14: </HTML> 15: 16: <!-- End of File --> 受 信 したファイルデータをStorage Serviceに保 存 するためのファンクションコンテナを記 述 します。 ファンクションコンテナでは、ファイルデータをバイナリ形 式 で受 け取 るので、Storage Serviceに対 しても バイナリデータとしてファイル保 存 を行 います。 <ファイルを受信するためのファンクションコンテナ「filer.js」> 1: // 画面初期化 2: function init(request){ 3: var root = new VirtualFile("filebox"); 4: 5: // 保存ディレクトリの有無のチェック 6: if(! root.isDirectory()){ root.makeDirectories(); // ディレクトリ作成 7: 8: } 9: 10: } 11: 12: // 指定ファイルの受信 13: function action_upload(request){ 14: 15: // パラメータ情報(=RequestParameter オブジェクト)を取得 16: var parameter = request.getParameter("local_file"); 17: 18: // ファイルの中身を取得(バイナリ) 19: var fileData = parameter.getValueAsStream(); 20: 21: 34 // ファイル名の取得 intra-mart WebPlatform/AppFramework 1 Storage 22: Serviceの利 用 方 法 var fileName = parameter.getFileName() 23: 24: // ファイルの書き出し 25: var vf = new VirtualFile("filebox/" + fileName); 26: var res = vf.save(fileData); 27: 28: } この画 面 では、以 下 のように動 作 します。 1:ファイルコントロールにより選択されたファイルデータがサーバに送られます。 2:サーバでは、ファイルの内容の有無を確認します。 3:ファイルを受信していた場合、受信したファイルのファイル名を取得します。 4:元のファイル名のまま受信したファイルデータをStorage Serviceに出力します。 <実 行 画 面 (結 果 )> <INPUT type="file"> HTMLフォーム中 で利 用 している<INPUT type="file">について、もう少 し詳 しく説 明 します。 フォームコントロールである<INPUT type="file">を利 用 すると、ブラウザからサーバに対 してファイルを アップロードすることができます。 この時 、フォームは以 下 のような記 述 が必 要 になります。 <IMART type="form" method="POST" enctype="multipart/form-data"> これは、ファイルの情 報 をMIME形 式 にエンコードして POSTモードでサーバにリクエストをするという指 定 になります。 RequestParameter オブジェクト intra-martでは、アップロードされたファイルの操 作 を容 易 にするRequestParameterオブジェクトを用 意 しています。本 オブジェクトを利 用 することで、サーバ側 では受 信 したデータに対 して特 殊 な処 理 を行 うことなくファイルを取 り出 すことができます。RequestParameterオブジェクトには、アップロードさ れたファイルのファイル名 を取 得 するメソッド等 も用 意 されています。詳 しくはAPIリストを参 照 してくだ さい。 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 1.2 ファイルリストの表示 ここでは、前 節 で作 成 した画 面 を改 良 して、アップロードしたファイルの一 覧 を表 示 するようにソースを 修 正 します。 <一覧表を表示するためのプレゼンテーション・ページ(filer.html)> 1: <HTML> 2: <HEAD> 3: <TITLE>File Center</TITLE> 4: </HEAD> 5: <BODY bgcolor="WhiteSmoke"> 6: <H2>Upload</H2> 7: <IMART type="form" action="action_upload" method="POST" enctype="multipart/f orm-data"> 8: <INPUT type="file" name="local_file"> 9: <INPUT type="submit" value=" send "> 10: </IMART> 11: <HR> 12: <H2>File List</H2> 13: <TABLE> 14: <TR><TH>File Name</TH></TR> 15: <IMART type="repeat" list=fList item="rec"> 16: <TR> 17: <TD><IMART type="string" value=rec></IMART></TD> 18: </TR> 19: </IMART> 20: </TABLE> 21: </BODY> 22: </HTML> アップロードされたファイルを一 覧 表 として表 示 するためには、保 存 されているファイルをリストとして取 得 する必 要 があります。 Storage Serviceに問 い合 わせてファイルリストを取 得 するためのコードを追 加 します。 <ファイル一覧を取得するように修正したファンクションコンテナ> 1: var fList, rec; 2: 3: // 画面初期化 4: function init(request){ 5: var root = new VirtualFile("filebox"); 6: 7: // 保存ディレクトリの有無のチェック 8: if(! root.isDirectory()){ 9: 10: root.makeDirectories(); } 11: 12: fList = root.files(); // ファイルリストの取得 13: } 14: 15: // 指定ファイルの受信 16: function action_upload(request){ 17: 18: // パラメータ情報(=RequestParameter オブジェクト)を取得 19: var parameter = request.getParameter("local_file"); 20: 21: // ファイルの中身を取得(バイナリ) 22: var fileData = parameter.getValueAsStream(); 23: 36 intra-mart WebPlatform/AppFramework 1 Storage 24: // ファイル名の取得 25: var fileName = parameter.getFileName() Serviceの利 用 方 法 26: 27: // ファイルの書き出し 28: var vf = new VirtualFile("filebox/" + fileName); 29: var res = vf.save(fileData); 30: 31: } Storage Service 上のファイルを操作する API VirtualFile Storage Service(標 準 では%Storage Service%/storage/)にあるファイルやディレクトリの情 報 を 取 得 したり、作 成 や削 除 などの更 新 したりするためのAPIです。 このAPIを利 用 することで様 々なファイルの作 成 や取 得 、またディレクトリの作 成 やリストの取 得 など ができ、分 散 システムにおいても、すべてのApplication Runtime間 で、環 境 に依 存 することなくファイ ルを共 有 することができます。 <実 行 画 面 (結 果 )> この実 行 画 面 では、すでに1つのファイルがアップロードされていることが確 認 できます。 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 1.3 ファイル・ダウンロード ファイルをアップロードできて、アップロードされたファイルがStorage Serviceに保 存 されていることが確 認 できたので、次 は、保 存 されているファイルをブラウザにダウンロードする機 能 を追 加 します。前 節 で 作 成 した画 面 に対 してファイルをダウンロードできるようにソースを修 正 します。 ファイルをダウンロードするには、プレゼンテーションページにダウンロードをするためのリンクを追 加 します。 また、そのリンクがクリックされた時 にファイルを送 信 するためのロジックをファンクションコンテナに追 加 し ていきます。 <ダウンロード用リンクを追加したプレゼンテーション・ページ(filer.html)> 1: 2: <HTML> <HEAD> 3: <TITLE>File Center</TITLE> 4: </HEAD> 5: <BODY bgcolor="WhiteSmoke"> 6: <H2>Upload</H2> 7: <IMART type="form" action="action_upload" method="POST" enctype="multipart/f orm-data"> 8: <INPUT type="file" name="local_file"> 9: <INPUT type="submit" value=" send "> 10: </IMART> 11: <HR> 12: <H2>File List</H2> 13: <TABLE> 14: <TR><TH>File Name</TH><TH></TH></TR> 15: <IMART type="repeat" list=fList item="rec"> 16: <TR> 17: <TD><IMART type="string" value=rec></IMART></TD> 18: <TD> 19: <IMART type="link" action="action_download" server_file=rec>do wnload</IMART> 20: </TD> 21: </TR> 22: </IMART> 23: 24: </TABLE> </BODY> 25: </HTML> Downloadと表 示 するためのリンクを作 成 します。 このリンクには、クリックされた時 にダウンロード処 理 をするためのサーバー関 数 action_downloadが指 定 されていますので、ファンクションコンテナ内 にダウンロード関 数 action_downloadを追 加 します。 <ダウンロード用関数を追加したファンクション・コンテナ> 1: var fList, rec; 2: 3: // 画面初期化 4: function init(request){ 5: var root = new VirtualFile("filebox"); 6: 7: // 保存ディレクトリの有無のチェック 8: if(! root.isDirectory()){ 9: 10: root.makeDirectories(); } 11: 12: 38 fList = root.files(); // ファイルリストの取得 intra-mart WebPlatform/AppFramework 1 Storage Serviceの利 用 方 法 13: } 14: 15: // 指定ファイルの受信 16: function action_upload(request){ 17: 18: // パラメータ情報(=RequestParameter オブジェクト)を取得 19: var parameter = request.getParameter("local_file"); 20: 21: // ファイルの中身を取得(バイナリ) 22: var fileData = parameter.getValueAsStream(); 23: 24: // ファイル名の取得 25: var fileName = parameter.getFileName() 26: 27: // ファイルの書き出し 28: var vf = new VirtualFile("filebox/" + fileName); 29: var res = vf.save(fileData); 30: 31: } 32: 33: // 指定ファイルの送信 34: function action_download(request){ 35: var fpath = new VirtualFile("filebox/" + request.server_file); // 取得 36: Module.download.send(fpath.load(), request.server_file); // 送信 37: } <実 行 画 面 (結 果 )> ダウンロード API Module.download.send() サーバからHTML形 式 以 外 での情 報 の送 信 を行 うためのAPIです。主 に、ファイルをダウンロードする 場 合 に利 用 します。情 報 をダウンロードする時 には、ブラウザが、その情 報 はどのような形 式 なのかを 判 別 するための情 報 を付 加 する必 要 がありますが、このAPIでは、自 動 的 に情 報 の形 式 を判 断 して 適 切 な形 でダウンロードを行 える機 能 を提 供 しています。 例 え ば 、 Word で 保 存 さ れ た フ ァ イ ル デ ー タ を ダ ウ ン ロ ー ド す る 場 合 、 フ ァ イ ル 名 と し て 『 ***.doc 』 という拡 張 子 を持 つ名 称 を与 えます。ダウンロードAPIでは、ファイルの拡 張 子 を判 断 してMIMEコードを決 定 しますので、ダウンロードしたコンピュータに Word がインストールされている場 合 には、ブラウザ内 にドキュメントが表 示 されますし、 Word がインストールされていない場 合 には、フ ァイルを保 存 するためのダイアログボックスが表 示 されます。 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 1.4 ファイルの削除 前 節 までで、ファイルをアップロードすることと、アップロードしたファイルをダウンロードすることができまし た。しかし、このままではアップロードされたファイルがStorage Serviceに溜 まっていってしまうので、ここ では、アップロードされてStorage Service上 に保 存 されているファイルを削 除 する機 能 を追 加 します。 <削除用リンクを追加したプレゼンテーション・ページ(filer.html)> 1: <HTML> 2: <HEAD> 3: <TITLE>File Center</TITLE> 4: </HEAD> 5: <BODY bgcolor="WhiteSmoke"> 6: <H2>Upload</H2> 7: <IMART type="form" action="action_upload" method="POST" enctype="multipart/f orm-data"> 8: <INPUT type="file" name="local_file"> 9: <INPUT type="submit" value=" send "> 10: </IMART> 11: <HR> 12: <H2>File List</H2> 13: <TABLE> 14: <TR><TH>File Name</TH><TH></TH></TR> 15: <IMART type="repeat" list=fList item="rec"> 16: <TR> 17: <TD><IMART type="string" value=rec></IMART></TD> 18: <TD> 19: <IMART type="link" action="action_download" server_file=rec>do wnload</IMART> 20: / <IMART type="link" action="action_remove" server_file=rec>rem ove</IMART> 21: </TD> 22: </TR> 23: </IMART> 24: </TABLE> 25: </BODY> 26:</HTML> <削除用関数を追加したファンクション・コンテナ(filer.js)> 1: var fList, rec; 2: 3: // 画面初期化 4: function init(request){ 5: var root = new VirtualFile("filebox"); 6: 7: // 保存ディレクトリの有無のチェック 8: if(! root.isDirectory()){ 9: 10: root.makeDirectories(); } 11: 12: fList = root.files(); // ファイルリストの取得 13: } 14: 15: // 指定ファイルの受信 16: function action_upload(request){ 17: 18: 40 // パラメータ情報(=RequestParameter オブジェクト)を取得 intra-mart WebPlatform/AppFramework 1 Storage 19: Serviceの利 用 方 法 var parameter = request.getParameter("local_file"); 20: 21: // ファイルの中身を取得(バイナリ) 22: var fileData = parameter.getValueAsStream(); 23: 24: // ファイル名の取得 25: var fileName = parameter.getFileName() 26: 27: // ファイルの書き出し 28: var vf = new VirtualFile("filebox/" + fileName); 29: var res = vf.save(fileData); 30: 31: } 32: 33: // 指定ファイルの送信 34: function action_download(request){ 35: var fpath = new VirtualFile("filebox/" + request.server_file); // 取得 36: Module.download.send(fpath.load(), request.server_file); // 送信 37: } 38: 39: // 指定ファイルの削除 40: function action_remove(request){ 41: var fpath = new VirtualFile("filebox/" + request.server_file); // 取得 42: fpath.remove(); 43: } <実 行 画 面 (結 果 )> 削 除 リンクをクリックすると、該 当 するファイルを削 除 することができます。 // 削除 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 VirtualFile の remove() メソッド ファイルを削 除 するためのAPIです。 このAPIでは、ファイルの他 にディレクトリも削 除 することができます。 ただし、ディレクトリを削 除 する場 合 には、削 除 対 象 としているディレクトリ内 にファイルやディレクトリが 存 在 せずに空 である必 要 がありますので注 意 してください。 画面遷移について このサンプルでは、画 面 遷 移 を一 切 行 わずに1画 面 ですべての機 能 を持 っています。 この場 合 、各 機 能 に対 するリクエストや、リクエスト後 の画 面 の表 示 の際 に、リンクやフォームに対 する page 指 定 を行 わなくても、自 分 自 身 を再 度 表 示 することができます。 42 intra-mart WebPlatform/AppFramework 2 メール送 信 2 メール送信 ここでは、メールを送 信 するための画 面 を作 成 します。 メールを送 信 するためには、conf/imart.xml内 のSMTPサーバの設 定 を正 しく行 ってください。 2.1 メール送信フォームの作成 メールを送 信 するためのフォームを作 成 します。 プレゼンテーション・ページのフォーム内 には、メール送 信 に必 要 な送 信 先 アドレス、送 信 者 アドレス、件 名 、本 文 を登 録 するコントロールを用 意 します。 また、ファンクション・コンテナでは、受 け取 った情 報 を元 にしてMailSender APIを利 用 してメール送 信 を 行 うための関 数 を定 義 します。 <メール送信用フォームを記述したプレゼンテーションページ(sender.html)> 1: <HTML> 2: <HEAD> 3: <TITLE>Mail Sender</TITLE> 4: </HEAD> 5: <BODY bgcolor="WhiteSmoke"> 6: <IMART type="form" action="action_send" method="POST"> 7: To: <INPUT type="text" name="mail_to"><BR> 8: From: <INPUT type="text" name="mail_from"><BR> 9: Subject: <INPUT type="text" name="mail_subject"><BR> 10: Message: <TEXTAREA name="mail_body" cols="40" rows="8"></TEXTAREA><BR> 11: <INPUT type="submit" value=" send "> 12: </IMART> 13: 14: </BODY> </HTML> <メール送信ロジックを記述したファンクションコンテナ(sender.js)> 1: // メールの送信 2: function action_send(request){ 3: 4: // ロケールの取得 5: var locale = AccessSecurityManager.getSessionInfo().locale; 6: 7: // MailSender オブジェクトを生成 8: var mailSender = new MailSender(locale); 9: 10: // 送信情報の設定 11: mailSender.addTo(request.mail_to); 12: mailSender.setFrom(request.mail_from); 13: mailSender.setSubject(request.mail_subject); 14: 15: // 本文の設定 16: mailSender.setText(request.mail_body); 17: 18: // メールの送信 19: if( mailSender.send() ){ 20: // 送信成功 21: Module.alert.reload("SYSTEM.SUCCESS", 22: 23: "メールを送信しました。"); } 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 24: else{ 25: // 送信失敗 26: Module.alert.reload("SYSTEM.ERR", 27: mailSender.getErrorMessage()); 28: } 29: 30: } <実 行 画 面 (結 果 )> フォーム中 の必 要 事 項 をすべて入 力 した後 に[send]ボタンをクリックするとメールを送 信 することがで きます。 MailSender API メールを送 信 するためのAPIです。 サンプルでは、送 信 先 、送 信 者 、件 名 、本 文 の設 定 しか行 っていませんが、CCやBCCの設 定 をする こともできます。 TO および From 設定方法 MailSenderオブジェクトを利 用 することで、送 信 先 や送 信 者 、またCCやBCCなどの設 定 には、メール アドレスだけではなく名 前 も設 定 することができます。詳 しくはAPIリストを参 照 してください。 メール送信とサーバ処理速度 メールを送 信 する場 合 、intra-mart Application ServerとSMTPサーバが連 携 する必 要 があります。 送 信 するメールの情 報 量 はもちろんのこと、ネットワーク環 境 やネットワークトラフィックなどによりメー ル送 信 処 理 時 間 がかかる場 合 があります。 44 intra-mart WebPlatform/AppFramework 2 メール送 信 2.2 添付ファイル付きメールの送信 前 節 で作 成 したメール送 信 フォームを改 良 して添 付 ファイルをメール本 文 と共 に送 信 できるようにしま す。プレゼンテーションページでは添 付 ファイルをアップロードするためのフォーム・コントロールを追 加 し、 フォームの属 性 を変 更 します。 ファンクションコンテナは、フォームの修 正 に合 わせて、メール送 信 関 数 を添 付 ファイルに対 応 できるよう に修 正 します。 <ファイルアップロード用コントロールを追加したプレゼンテーションページ(sender.html)> 1: 2: <HTML> <HEAD> 3: <TITLE>Mail Sender</TITLE> 4: </HEAD> 5: <BODY bgcolor="WhiteSmoke"> 6: <IMART type="form" action="action_send" method="POST" enctype="multipart/form-data"> 7: To: <INPUT type="text" name="mail_to"><BR> 8: From: <INPUT type="text" name="mail_from"><BR> 9: Subject: <INPUT type="text" name="mail_subject"><BR> 10: Attachment: <INPUT type="file" name="mail_file"><BR> 11: Message: <TEXTAREA name="mail_body" cols="40" rows="8"></TEXTAREA><BR> 12: <INPUT type="submit" value=" send "> 13: 14: 15: </IMART> </BODY> </HTML> ファイルをアップロードするためのフォーム ファイルをアップロードするためには以 下 のようなフォームの記 述 が必 要 になります。 <IMART type="form" method="POST" enctype="multipart/form-data"> こうすることで、サーバー上 では、フォームコントロール <INPUT type="file"> によりローカルのファイル を受 け取 ることができます。 <添付ファイル送信に対応したファンクションコンテナ(sender.js)> 1: // メールの送信 2: function action_send(request){ 3: 4: // ロケールの取得 5: var locale = AccessSecurityManager.getSessionInfo().locale; 6: 7: // MailSender オブジェクトを生成 8: var mailSender = new MailSender(locale); 9: 10: // 送信情報の設定 11: mailSender.addTo(request.mail_to); 12: mailSender.setFrom(request.mail_from); 13: mailSender.setSubject(request.mail_subject); 14: 15: // 添付ファイルの設定(RequestParameter オブジェクトとして取得) 16: var parameter = request.getParameter("mail_file"); 17: 18: if( parameter != null && parameter.getLength() > 0 ) { 19: 20: // ファイル名の取得 21: var fileName = parameter.getFileName() 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 22: 23: // ファイルの中身を取得(バイナリ) 24: var fileData = parameter.getValueAsStream(); 25: 26: // 添付ファイルの設定 27: mailSender.addAttachment(fileName, fileData); 28: 29: } 30: 31: // 本文の設定 32: mailSender.setText(request.mail_body); 33: 34: // メールの送信 35: if( mailSender.send() ){ 36: // 送信成功 37: Module.alert.reload("SYSTEM.SUCCESS", 38: "メールを送信しました。"); 39: } 40: else{ 41: // 送信失敗 42: Module.alert.reload("SYSTEM.ERR", 43: mailSender.getErrorMessage()); 44: } 45: 46: } <実 行 画 面 (結 果 )> 添付ファイルとメール送信速度 ファイルを添 付 してメール送 信 する場 合 、RFCの規 約 によりファイルのデータそのものをエンコードした のちにメール本 本 も含 めたメール情 報 全 体 をエンコードしてからSMTPサーバに対 して送 信 する必 要 があります。このデータのエンコード処 理 に関 してはMailSender APIIが自 動 的 に行 ってくれますが、エ ンコード処 理 時 には、アプリケーションサーバに高 負 荷 がかかってしまいます。 46 intra-mart WebPlatform/AppFramework 2 メール送 信 添付ファイルと処理速度 添 付 ファイルを送 信 する場 合 、ブラウザがWebサーバに対 してファイルデータを送 信 し、その情 報 を 受 信 したアプリケーションサーバがメール送 信 処 理 を行 います。 1つのメール送 信 に対 して複 数 のネットワークを介 しますので、サイズの大 きなファイルを添 付 してメー ル送 信 する場 合 には、メール送 信 処 理 に時 間 がかかってしまう場 合 があります。 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 3 拡張 <IMART>タグ機能の使用例 拡 張 <IMART>タグとは、intra-mart側 で既 に用 意 されている<IMART>タグ以 外 に、独 自 の機 能 を持 つ 任 意 の<IMART>タグを定 義 できる機 能 です。 具 体 的 には、<IMART>タグに対 して、新 しいtype属 性 を定 義 し、そのtype属 性 が要 求 された時 に、実 際 に処 理 を実 行 するタグ関 数 を登 録 することで、プレゼンテーション・ページ内 で利 用 できるAPIを拡 張 できる機 能 です。 (<IMART type="xxx">のxxxの部 分 をユーザ独 自 に定 義 することができます。) 3.1 タグの定義と登録 ファンクションコンテナに、拡 張 <IMART>タグの処 理 関 数 を記 述 します。同 時 に、関 数 とtype属 性 での 呼 び出 しキーワードを登 録 します。このファイルは、1度 だけ実 行 されればImartオブジェクトに対 して情 報 が登 録 され、以 降 プレゼンテーション・ページ内 では、いつでも利 用 可 能 になります(このことから、通 常 初 期 起 動 時 に1度 だけ実 行 されるようにします)。 1: // 関数と呼び出しキーワードの登録 2: // 呼び出しキーワードNOW_DATEに対して、実行関数nowdate()を 3: // 登録します。 4: Imart.defineType("JP_DATE", jpdate); 5: 実行関数の定義 6: // 7: // 【引数】oAttr : タグ属性引数群オブジェクト 8: // 9: // 【返却】HTMLソース 10: // 【概要】<IMART type="JP_DATE"> の処理実行関数 11: // 属性 date に指定された日付データをフォーマット 12: // 変換して表示します。 13: function jpdate(oAttr, oInner){ oInner: <IMART> および </IMART> に挟まれた部分 14: var target = oInner.date; 15: var format = "yyyy年MM月dd日 hh時mm分ss秒"; 16: var src = Format.fromDate(format, target); // 表示対象時間 // 表示形式 // 表示文字列 17: 18: // <IMART type="NOW_DATE"> および </IMART> に挟まれた部分の 19: // プレゼンテーション・ページ内ソースの解釈と実行および 20: // 表示ソースの取得 21: var sub = oInner.execute(); 22: 表示ソースの返却 23: // 24: return src + sub; 25: } この拡 張 <IMART>タグ実 行 関 数 が返 却 した文 字 列 が、HTMLソースとしてブラウザに送 信 されることに なります。また、必 ず文 字 列 を返 却 しなければなりません。 48 intra-mart WebPlatform/AppFramework 3 拡 張 <IMART>タグ機 能 の使 用 例 3.2 拡張<IMART>タグの利用 sample.html 使 用 するには、プレゼンテー ション・ページ 内 で拡 張 <IMART>タグを 記 述 します。 <IMART type="NOW_DATE" date=now></IMART> 実 行 されると、ファンクション・コンテナからバインドされた日 付 オブジ ェクトの内 容 (実 行 時 の日 付 および時 間 )が表 示 されます。 sample.js 拡 張 <IMART>タグに対 してバインドする日 付 データを作 成 します。 var now; // バインド変 数 function init(request){ now = new Date(); // 現 在 の時 間 情 報 の取 得 } 詳 細 については、APIリスト「アプリケーション共 通 モジュール」の「Imart.defineType()」を参 照 してください。 拡張 <IMART> タグについて <IMART type="XXX">の"XXX"部 分 をユーザ独 自 に定 義 することができます。詳 細 は、「APIリスト」の 画 面 共 通 モジュールの拡 張 <IMART>タグ項 を参 照 してください。 <IMART> タグへの定数値の設定 あらかじめユーザが設 定 した定 数 または関 数 を<IMART>タグの属 性 で指 定 したキーワードで呼 び出 すことができます。詳 細 は、「APIリスト」のimartオブジェクトの次 のメソッドを参 照 してください。 Imart.defineAttribute(sKeyWord, data) Imart.defineAttribute(sKeyWord, function) 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 4 ユーザ定義関数の登録と利用 intra-mart WebPlatformを利 用 した開 発 では、JavaScriptで記 述 したユーザ定 義 関 数 を「グローバル 関 数 」として登 録 する方 法 があります。 Procedure.define() メソッドを使 い、「グローバル関 数 」として登 録 すると、多 少 メモリを消 費 しますが、 関 数 をメモリに保 持 するため実 行 速 度 は速 くなります。 以 下 に、ユーザ定 義 関 数 をグローバル関 数 として、登 録 ・利 用 する方 法 について説 明 を行 います。 Procedure.define() メソッドの詳 細 については、APIリスト「アプリケーション共 通 モジュール」の「Procedure」 を参 照 してください。 <ユーザ定 義 関 数 の利 用 形 態 > 4.1 グローバル関数としての登録・呼び出し ユーザ定 義 関 数 を任 意 のjsファイルに作 成 し、メモリ上 に格 納 されるよう初 期 設 定 ファイル(init.js)に 記 述 をします。これによって、intra-mart起 動 時 にユーザ定 義 関 数 がメモリ上 に格 納 され、ファンクショ ン・コンテナ(アプリケーションjsファイル)からダイレクトにメモリに呼 び出 しがかかるようになります。ユー ザ定 義 関 数 の呼 び出 しは、ファンクション・コンテナに記 述 を行 います。 1 任 意 のjsファイルにユーザ定 義 関 数 を格 納 する ここでは例 として、「library/common.jsファイル」に共 通 関 数 「addVariables()」を作 るものとします。グロ ーバルユーザ定 義 関 数 を格 納 するjsファイルに以 下 のように、Procedure.define()メソッドを使 用 した記 述 をします。 <ユーザ定義関数をjsファイルへ格納する記述> //共通関数として登録する Procedure.define("addVariables", addVariables); //共通関数作成 function addVariables( valueA, valueB ) { return valueA + valueB; } 50 intra-mart WebPlatform/AppFramework 4 ユーザ定 義 関 数 の登 録 と利 用 2 起 動 時 にメモリ上 に格 納 される設 定 を行 う ユ ー ザ 定 義 関 数 を 格 納 し た js フ ァ イル につ いて、 intra-mart起 動 後 に メモリ上 に 格 納 され るよ う init.js ファイル(初 期 設 定 ファイル)にそのjsファイルを取 り込 む記 述 をします。 <共通関数格納ファイルを取り込む記述> /* init.js */ //共通関数格納ファイルの取り込み include("library/common"); 必 ずしもinit.js内 に記 述 しなくても、他 のJavaScriptファイルから一 度 include()で取 り込 まれた関 数 は、以 後 グローバル関 数 として使 用 することができます。 3 ファンクション・コンテナにユーザ定 義 関 数 を呼 び出 す記 述 をする ユーザ定 義 関 数 を必 要 とするファンクション・コンテナに、intra-mart起 動 後 メモリ上 に格 納 されたその 関 数 を呼 び出 す記 述 をします。 こ こ で は 例 と し て 、 フ ァ ン ク シ ョ ン ・ コ ン テ ナ の 「 applicationPath/app001.js フ ァ イ ル 」 で 共 通 関 数 「addVariables()」 を呼 び出 すものとします。 ユーザ定 義 関 数 を呼 び出 すには、アプリケーションjsファイルに、以 下 のように記 述 します。 <ファンクション・コンテナにてグローバルユーザ定義関数を呼び出す記述> /* applicationPath/app001.js */ function add( ) { //共通関数の呼び出し return Procedure.addVariables( 1,2 ); } 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 5 JavaClassとの連携 intra-martで使 用 しているサーバサイドJavaScriptには、さまざまな優 れた機 能 が実 装 されています。し かし、スクリプト言 語 としての制 限 から通 信 機 能 の実 現 や、特 殊 なファイルアクセス等 、システム構 築 上 問 題 となる場 合 があります。 このようなシステム構 築 において問 題 となる部 分 を拡 張 する機 能 として、JavaScriptとJavaClassの連 携 機 能 を説 明 します。 5.1 標準JavaClassとの連携方法 intra-martはJRE(Java Runtime Environment)の実 行 環 境 上 で動 作 しており、intra-martから簡 単 に JDKの標 準 Classと連 携 を行 うことができます。 intra-martからは、決 められた宣 言 方 法 を用 いてクラスを定 義 することにより、intra-martのオブジェクト と同 等 にJavaClassメソッドにアクセスすることができます。 前 項 で説 明 した「HelloWorld」アプリケーションを例 にJavaClassを用 いた方 法 について説 明 します。 このJava版 の「HelloWorld」アプリケーションは、サーバ上 にあるファイルの中 身 を表 示 するアプリケーシ ョンです。本 アプリケーションの処 理 の流 れについて説 明 します。 <「HelloWorld」アプリケーションJava版 の処 理 イメージ> 1 Webブラウザからサーバ上 のプレゼンテーション・ページ(HTML)ファイル(hello.html)を起 動 する。 <hello.html(プレゼンテーション・ページ)> <HTML> <BODY> こんにちは、<IMART type="string" value=nameValue></IMART>です。</H1> </BODY> </HTML> 52 intra-mart WebPlatform/AppFramework 5 JavaClassとの連 携 2 3 プ レ ゼ ン テ ー シ ョ ン ・ ペ ー ジ と 連 動 し た フ ァ ン ク シ ョ ン ・ コ ン テ ナ ( hello.js ) で あ る サ ー バ サ イ ド JavaScriptの処 理 が開 始 される。 サーバサイドJavaScriptより呼 出 されたJavaファイルアクセスクラス(hello.jsの(1)~(4))が外 部 テ キストファイルの内 容 を読 込 みサーバサイドJavaScriptへ結 果 を戻 す。 <hello.js(ファンクション・コンテナ)> var nameValue = " " ; //init関数の定義 function init(request) { //Javaクラス FileInputStreamをJavaScriptオブジェクトとして生成 var javaObjFileIn = new java.io.FileInputStream( "c:¥¥hello.dat" ); (1) //Javaクラス DataInputStreamをJavaScriptオブジェクトとして生成 var javaObjDataIn = new java.io.DataInputStream( javaObjFileIn ); (2) //ファイルを1レコード読み込み var javaObjString = javaObjDataIn.readLine( ); (3) //ファイルクローズ javaObjDataIn.close( ); (4) //プレゼンテーション・ページへ値を引き渡し nameValue = Unicode.from(javaObjString); } 4 サーバサイドJavaScriptはJavaファイルアクセスクラスより取 得 した結 果 をプレゼンテーション・ペー ジ(HTML)の<IMART>タグを結 果 に置 き換 えて出 力 する。 <hello.htmlの実 行 画 面 > コード変換 API Unicode.* intra-martの実 行 環 境 はUnicodeであるため、ファイルに保 存 されている内 容 などローカル文 字 体 系 の文 字 列 を直 接 扱 うことはできません。このような場 合 には、intra-martに用 意 されているローカル文 字 体 系 の 文 字 列 を Unicode に 変 換 す る API を 利 用 し て 変 換 す る 必 要 が あ り ま す 。 詳 細 に つ い て は 「APIリスト」を参 照 してください。 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 5.1.1 標準JavaClasss連携時の問題点 サーバサイドJavaScriptと標 準 JavaClassを連 携 する場 合 の問 題 点 としては、標 準 JavaClass側 で発 生 する例 外 を受 けとる手 段 が存 在 していないという問 題 があります。 この問 題 はサーバサイドJavaScriptで標 準 JavaClassを直 接 使 用 する以 上 回 避 することはできないの で注 意 が必 要 です。しかしまったく回 避 策 がないわけではありません。以 降 に紹 介 する自 作 JavaClass を作 成 し、インスタンス変 数 、メソッドなどを用 意 して例 外 が発 生 したか確 認 することは可 能 です。 5.1.2 自作JavaClassとの連携方法 自 作 JavaClass と の 連 携 を 行 う 場 合 、 intra-mart 起 動 時 の 設 定 と 自 作 JavaClass 側 、 サ ー バ サ イ ド JavaScript側 の双 方 に特 別 な記 述 方 法 が必 要 となります。 5.1.3 intra-mart起動時の設定方法 intra-mart起 動 時 のjavaコマンドの「-cp」オプションで、自 作 JavaClassのあるディレクトリまたはjarファ イルをクラスパスとして追 加 設 定 しなければなりません。javaコマンドの「-cp」オプションの使 い方 につい てはJavaのリファレンスを参 照 してください。 クラスパスは、「-cp」オプションで指 定 します。設 定 はconf/imart.xmlで行 います。 5.1.4 自作JavaClass側の記述方法 自 作 JavaClassを作 成 する場 合 、次 の点 に注 意 して作 成 します。 packageとして作成する。 Classファイルはクラスパスが通っている場所に配置する。 54 intra-mart WebPlatform/AppFramework 5 JavaClassとの連 携 5.1.5 サーバサイドJavaScript側の記述方法 サーバサイドJavaScriptを作 成 する場 合 は、自 作 JavaClassをJavaScriptオブジェクトとして生 成 する 場 合 、Javaのpackage名 の前 に必 ず「Packages」句 を記 述 します。 var javaObjMail = new Packages.orgclass.myclass( ); 以 上 のようにいくつかの点 に注 意 するだけで簡 単 にサーバサイドJavaScriptと自 作 JavaClassと連 携 を 行 うことができるようになります。サーバサイドJavaScriptは、Javaプログラムなどのアプリケーション部 品 を呼 び出 すコンテナとしても十 分 に機 能 します。 このようにサーバサイドJavaScriptをベースとした、より高 度 なアプリケーション開 発 が可 能 となります。 以 下 に自 作 JavaClassを使 用 した記 述 例 「HelloWorld」のリストを示 します。 <hello.js(サーバサイドJavaScriptソース)> var nameValue = " "; //init関数の定義 function init( requesst ) { //Javaクラス helloをJavaScriptオブジェクトとして生成 var javaObjHello = new Packages.intramart.imartjava.hello(); // helloClassのgetHellostrメソッドによりファイルの1レコードを読み込む var javaObjString = javaObjHello.getHellostr( "c:¥¥hello.dat" ); //Javaクラスのエラー確認用インスタンス変数の値を読む var javaObjError = javaObjHello.errstr; //Javaクラスエラーの判定 if(javaObjError.substring( 0,2 ) == "ER") { //エラー時 //プレゼンテーション・ページへ値を引き渡すオブジェクトへエラー内容を渡す。 nameValue = Unicode.form(javaObjError); } else { //正常時 //プレゼンテーション・ページへ値を引き渡すオブジェクトへ読込み内容を渡す。 nameValue = Unicode.from(javaObjString); } } 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 <hello.java(自作JavaClassソース)> //パッケージ定義 package intramart.imartjava; //クラスインポート import java.lang.*; import java.io.*; import java.util.*; //クラス定義 class hello { //例外などのERROR時確認インスタンス変数 public String errstr; //コンストラクタ public hello( ) { } //ファイル読込みメソッド public String getHellostr( String fnamestr ) { //リターンするString変数のインスタンス生成 String readstr = new String(); //インスタンス変数初期化 errstr = "OK"; try { //FileInputStreamのインスタンス生成 FileInputStream fs = new FileInputStream( fnamestr ); //FileInputStreamのインスタンス生成 DataInputStream ds = new DataInputStream( fs ); //ファイルを1レコード読み込み readstr = ds.readLine( ); //ファイルの内容がnullか確認 if(readstr == null) { //インスタンス変数にERRORをセット errstr = "ERROR1"; } //ファイルをクローズ ds.close( ); } //例外処理 catch(IOException e) { //インスタンス変数にERRORをセット errstr = "ERROR2"; } // 読み取り内容をリターン return readstr; } } 56 intra-mart WebPlatform/AppFramework 6 EJBとの連 携 6 EJBとの連携 intra-martでは、EJB(Enterprise JavaBeans)のさまざまなコンポーネントを利 用 することも可 能 です。 <J2EEを組 み込 むことでEJBサーバと連 携 > 6.1 EJBコンポーネントの作成 EJBの規 約 に準 拠 してクラスを作 成 します。JavaScriptと連 携 する部 分 に関 しては、自 作 クラスの呼 び 出 しに準 拠 するようにします。作 成 したEJBコンポーネントのEJBサーバへの登 録 およびネーミング設 定 に 関 しては、各 EJBサーバ製 品 のマニュアルを参 照 してください。 6.2 JavaScriptからの呼び出し クラスパスを適 切 に設 定 して、Application Runtimeを起 動 します。ファンクションコンテナ内 で以 下 のよ うにして、目 的 のEJBコンポーネントを呼 び出 します。 <(例)XXXというEJBコンポーネントを呼び出す場合> var initial = new Packages.javax.naming.InitialContext(); var objref = initial.lookup("XXX"); var home = Packages.javax.rmi.PortableRemoteObject.narrow (objref,java.long.Class.forName("XXXHome")); var interfaceXXX = home.create(); 呼び出されたEJBコンポーネントは、JavaScriptの変数interfaceXXXに格納されているので、あとはJAVA呼び出しの要領 でEJBコンポーネントの持つ各APIを実行できます。 詳 細 に関 しては、APIリストの「JAVAクラスの利 用 」を参 照 してください。 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 7 外部プロセスの呼び出し ユーザが作 成 したプログラムをintra-martアプリケーションから実 行 するには、アプリケーション共 通 モジ ュールのグローバル関 数 「execute()」を利 用 します。この関 数 は、指 定 された文 字 列 コマンドを新 しい プロセスとして実 行 し、実 行 したプロセスが終 了 するまでこの関 数 は待 機 状 態 になります。 オブジェクト型 関 数 (Object) execute((String) command) 入力値 (String) command:実 行 するコマンド 返却値 返 却 値 はオブジェクト型 で以 下 の形 式 になります。 実 行 したプロセスが正 常 終 了 した場 合 return_object ├ output // プロセスからの標準出力ストリーム (String) ├ error // プロセスからのエラー出力ストリーム (String) └ exit // プロセスの終了コード 実 行 したプロセスが正 常 終 了 しなかった場 合 return_object ├ error //エラー内容(String) └ exit //プロセスの終了コード プロセスの終 了 コードは、0の場 合 正 常 終 了 となります。 詳 細 は、APIリスト「アプリケーション共 通 モジュール」のグローバル関 数 「execute()」を参 照 してください。 58 intra-mart WebPlatform/AppFramework 8 XML形 式 のデータを扱 う 8 XML形式のデータを扱う XMLパーサーを利 用 することにより、XML 形 式 のデータを解 析 して、目 的 のデータを取 り出 すことがで きます。 XML(Extensible Markup Language)は環 境 にとらわれない非 常 に柔 軟 性 の高 い汎 用 的 な規 約 とな っています。これにより、他 のアプリケーションとXMLファイルを通 してデータのやりとりをスムーズに行 うこ とができます。 8.1 XMLパーサーとデータの取得 intra-mart の API と し て 提 供 さ れ て い る XML パ ー サ ー を 利 用 す る と 、 XML 形 式 の デ ー タ を 解 析 し て DOM(Document Object Model)ツリー形 式 に変 換 します。XMLの各 タグやその中 に記 述 されているデ ータをDOMツリーオブジェクトから取 得 する事 ができます。 XMLおよびDOMツリーに関 しては、W3Cが規 約 を定 めています。最 新 の情 報 に関 しては W3C のホームペ ージ等 を参 照 してください。 XML パーサーに関 しては、W3C および SAX のホームページ上 で最 新 の技 術 情 報 が公 開 されています。 詳 細 は、APIリストの「アプリケーション共 通 モジュール」-「DOMXXXオブジェクト」、および、「XMLParserオブジ ェクト」を参 照 してください。 8.2 XML形式データの受信方法 ここでは、簡 単 な例 として、以 下 のXML形 式 データを受 信 するアプリケーションを作 成 します。 <?xml version='1.0' encoding='UTF-8'?> <account> <user-id>ueda</user-id> <name>上田</name> <role> <role-id sample-attr="サンプル属性">level1</role-id> </role> </account> 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 8.2.1 Requestオブジェクトを使用したXML形式データの受信方法 Request オブジェクトのgetParameter()、および、getParameterValue()メソッドを利 用 することで、 XML形 式 データの値 を参 照 することができます(これにより、Adobe Flash Playerなどのリッチクライア ントから送 信 されるXML形 式 データを簡 単 に取 り扱 うことができます)。 Request#getParameter()の引 数 には、以 下 の形 式 に則 ったパラメータ名 を指 定 します。 XML 形 式 データの各 タグ名 をセパレータ「/」で区 切 って指 定 する (ルートは「/」) 属 性 値 を取 得 する際 は、属 性 名 の前 に「@」を付 与 する ファンクション・コンテナ(.js)の作 成 1 : function init(request){ 2 : var userId = request.getParameterValue("/account/user-id"); 3 : var name = request.getParameterValue("/account/name"); 4 : var roleId = request.getParameterValue("/account/role/role-id"); 5 : var sampleAttr = request.getParameterValue("/account/role/role-id/@sample-attr "); 6 : 7 : Debug.browse(userId, name, roleId, sampleAttr); 8 : } この機 能 を利 用 するには以 下 の条 件 を満 たしている必 要 があります。 リクエストのメソッドが「POST」であること リクエストの Content-Type エンティティヘッダフィールドが「text/xml」であること リクエストのメッセージボディ部 が構 文 解 析 可 能 なXMLデータであること 8.2.2 XMLParserオブジェクトを使 用したXML形式データの受信方法 ファンクション・コンテナ(.js)の作 成 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 60 : function init(request){ : : //---------------------------: // メッセージボディを取得 : //---------------------------: var messageBody = request.getMessageBody("UTF-8"); : : //---------------------------: // XMLデータの構文解析 : //---------------------------: var xmlParser = new XMLParser(); : var doc = xmlParser.parseString(messageBody); : : if(xmlParser.isError()){ : Debug.browse("エラーが発生しました。", xmlParser.getErrorMessage()); : } : : //---------------------------: // <user-id>, <name>, <role>ノード取得 : //---------------------------: var childNodes = null; : var accountNode = doc.getDocumentElement(); : var userIdNode = null; : var nameNode = null; intra-mart WebPlatform/AppFramework 8 XML形 式 のデータを扱 う 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : } var roleNode = null; childNodes = accountNode.getChildNodes(); for(var i = 0 ; i < childNodes.length ;i++) { if(childNodes[i].getTagName() == "user-id") { userIdNode = childNodes[i]; } else if(childNodes[i].getTagName() == "name") { nameNode = childNodes[i]; } else if(childNodes[i].getTagName() == "role") { roleNode = childNodes[i]; } } //---------------------------// <role-id>ノード取得 //---------------------------var roleIdNode = null; childNodes = roleNode.getChildNodes(); for(var i = 0 ; i < childNodes.length ;i++) { if(childNodes[i].getTagName() == "role-id") { roleIdNode = childNodes[i]; } } //---------------------------// <role-id>ノードの属性取得 //---------------------------var roleIdAttr = roleIdNode.getAttribute("sample-attr"); //---------------------------// 各ノードの値を表示 //---------------------------Debug.browse(userIdNode.getChildNodes()[0].getValue(), nameNode.getChildNodes()[0].getValue(), roleIdNode.getChildNodes()[0].getValue(), roleIdAttr); 8.3 XML形式データの送信方法 一 般 的 なWebブラウザは、受 信 したデータがどのような形 式 であるかを判 定 するために、レスポンスの Content-Type エンティティヘッダフィールドを利 用 します。サーバで作 成 したXML形 式 のデータをクラ イアントに送 信 するには、レスポンスの Content-Type エンティティヘッダフィールドに"text/xml"を指 定 します。ここでは、簡 単 な例 として、以 下 のXML形 式 データをクライアントに送 信 するアプリケーション を作 成 します。 <?xml version='1.0' encoding='UTF-8'?> <account> <user-id>ueda</user-id> <name>上田</name> <role> <role-id sample-attr="サンプル属性">level1</role-id> </role> </account> 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 8.3.1 <IMART type="Content-Type">タグを使 用したXML形式データの送信方 法 プレゼンテーション・ページ(.html)の作 成 1 : <IMART type="Content-Type" value="text/xml; charset=UTF-8"></IMART> 2 : <?xml version='1.0' encoding='UTF-8'?> 3 : <IMART type="string" value=xmlString></IMART> ファンクション・コンテナ(.js)の作 成 1 : var xmlString = ""; 2 : 3 : function init(request){ 4 : 5 : //---------------------------- 6 : // DOM ツリーを構築 7 : //---------------------------- 8 : var doc = new XMLDocument("<account/>"); 9 : var accountNode = doc.getDocumentElement(); 10 : 11 : // エレメントを作成 12 : var userIdNode = doc.createElement("user-id"); 13 : var nameNode = doc.createElement("name"); 14 : var roleNode = doc.createElement("role"); 15 : var roleIdNode = doc.createElement("role-id"); 16 : 17 : // テキストノードを作成 18 : var userIdText = doc.createTextNode("ueda"); 19 : var nameText 20 : var roleIdText = doc.createTextNode("level1"); = doc.createTextNode("上田"); 21 : 22 : // 属性を設定 23 : roleIdNode.setAttribute("sample-attr", "サンプル属性"); 24 : 25 : // 子ノードを追加 26 : userIdNode.appendChild(userIdText); 27 : nameNode.appendChild(nameText); 28 : roleNode.appendChild(roleIdNode); 29 : roleIdNode.appendChild(roleIdText); 30 : 31 : accountNode.appendChild(userIdNode); 32 : accountNode.appendChild(nameNode); 33 : accountNode.appendChild(roleNode); 34 : 35 : //---------------------------- 36 : // XMLの文字列をバインド 37 : //---------------------------- 38 : xmlString = doc.getXmlString(); 39 : 40 : } 62 intra-mart WebPlatform/AppFramework 8 XML形 式 のデータを扱 う 8.3.2 HTTPResponseオブジェクトを使用したXML形式データの送信方法 ファンクション・コンテナ(.js)の作 成 1 : function init(request){ 2 : 3 : //---------------------------- 4 : // DOM ツリーを構築 5 : //---------------------------- 6 : var doc = new XMLDocument("<account/>"); 7 : var accountNode = doc.getDocumentElement(); 8 : 9 : // エレメントを作成 10 : var userIdNode = doc.createElement("user-id"); 11 : var nameNode = doc.createElement("name"); 12 : var roleNode = doc.createElement("role"); 13 : var roleIdNode = doc.createElement("role-id"); 14 : 15 : // テキストノードを作成 16 : var userIdText = doc.createTextNode("ueda"); 17 : var nameText 18 : var roleIdText = doc.createTextNode("level1"); = doc.createTextNode("上田"); 19 : 20 : // 属性を設定 21 : roleIdNode.setAttribute("sample-attr", "サンプル属性"); 22 : 23 : // 子ノードを追加 24 : userIdNode.appendChild(userIdText); 25 : nameNode.appendChild(nameText); 26 : roleNode.appendChild(roleIdNode); 27 : roleIdNode.appendChild(roleIdText); 28 : 29 : accountNode.appendChild(userIdNode); 30 : accountNode.appendChild(nameNode); 31 : accountNode.appendChild(roleNode); 32 : 33 : //---------------------------- 34 : // XMLの文字列をバインド 35 : //---------------------------- 36 : var encoding = "UTF-8"; 37 : var xmlString = "<?xml version='1.0' encoding='" + encoding + "'?>" + doc.getXm lString(); 38 : 39 : //---------------------------- 40 : // Content-Type を設定 41 : //---------------------------- 42 : var response = Web.getHTTPResponse(); 43 : response.setContentType("text/xml; charset=" + encoding); 44 : 45 : //---------------------------- 46 : // データ送信 47 : //---------------------------- 48 : response.sendMessageBodyString(xmlString); 49 : 50 : } 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 9 デバッグ手順 開 発 者 が作 成 したJavaScriptに対 して、Debug オブジェクトを用 いてデバッグを行 うことができます。 デバッグを実 行 すると、デバッグメソッドで指 定 した部 分 のユーザ定 義 オブジェクトに関 する名 称 、型 、 値 、従 属 関 係 をデバッグ結 果 表 示 画 面 およびコンソール画 面 でチェックすることができます。 デバッグメソッドの詳 細 については、APIリスト「アプリケーション共 通 モジュール」の「Debug.browse()」を参 照 してください。 Debug.browse()メソッドを発 行 した時 点 で、デバッグページの表 示 が行 われますので、それ以 降 のスクリプト は一 切 実 行 されません。 9.1 デバッグ例 以 下 にファンクション・コンテナにおけるデバッグの記 述 例 とその実 行 結 果 であるデバッグ結 果 表 示 画 面 例 を示 します。 <デバッグ記述例> // HTMLへ渡す値を宣言します。 var nameVale; var test; // init関数の定義 function init(){ nameValue = Client.get( "nameValue" ); // HTMLへ渡す値を設定します var newDate = new Date(); var returnOfGetAge = procedure.getAge( newDate ); test = returnOfGetAge; Debug.browse(newDate, returnOfGetAge); } <デバッグ結 果 表 示 画 面 > 64 intra-mart WebPlatform/AppFramework // 変数のセット 9 デバッグ手 順 9.2 デバッグAPIの利用方法 ファンクションコンテナをコーディング中 に、変 数 の内 容 を確 認 したい場 合 が多 々あります。 このような場 合 に利 用 するのがデバッグAPIです。 intra-mart WebPlatformでは、Debugクラスでこのような機 能 を提 供 しています。 実 際 にコーディング中 に利 用 する場 合 、以 下 のようにして記 述 します。 <sample.js> 1: //======================================================== 2: // 【入力】request: URL引数取得オブジェクト 3: // 【返却】なし 4: // 【概要】 5: //======================================================== 6: function init(request){ 7: var now = new Date(); 8: Debug.print("デバッグ画面表示前"); 9: Debug.browse(now); 10: Debug.print("デバッグ画面表示後"); 11: // コンソールに出力 // 画面に出力 // コンソールに出力 } このサンプルソースでは、DOSコンソール画 面 に「デバッグ画 面 表 示 前 」というメッセージを表 示 した後 に、ブラウザ画 面 上 に変 数 nowの内 容 (実 行 時 の日 時 )を表 示 します。 9行 目 でbrowse()APIが実 行 されると、その時 点 でスクリプトの実 行 が中 断 されてブラウザ画 面 上 にデ バッグ画 面 が表 示 されます。よって、10行 目 のprint()APIは実 行 されません。 <DOSコンソール実 行 画 面 (結 果 )-1> <ブラウザ実 行 画 面 (結 果 )-2> 詳 細 はAPIリストの「Debug」を参 照 してください。 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 Debug.print() デバッグモードで動 作 しているときに、コンソールウィンドウに対 してデバッグコードを出 力 することがで きるメソッドです。詳 細 は、「APIリスト」を参 照 してください。 プログラム開発環境をサポートする「 eBuilder 6.0 」 (2006/08/31リリース予 定 ) 別 売 のintra-mart 「eBuilder Ver6.0」を活 用 することにより、ユーザアプリケーションを効 率 よく開 発 していくことができます。intra-mart 「eBuilder Ver6.0」には、プレゼンテーションページとファンクショ ンコンテナからなるスクリプト開 発 モデル用 「intra-mart eBuilder Page Producer」とJSP、Servletか らなるJ2EE開 発 モデル用 のオープンソースの統 合 開 発 環 境 である「eclipse」に対 するプラグインとし て利 用 できる「eBuilder Framework Producer」の2種 類 が用 意 されています。 詳 細 は、チュートリアルガイドの「8 intra-mart eBuilder Ver6.0」を参 照 してください。 66 intra-mart WebPlatform/AppFramework 10 JavaScriptコンパイラ機 能 について 10 JavaScriptコンパイラ機能について JavaScriptコンパイラ機 能 は、JavaScriptで記 述 されているファンクションコンテナを Javaクラスに変 換 (コンパイル)する機 能 で、次 の2つのタイプがあります。 プログラム(ファンクションコンテナ)実 行 時 にアプリケーションサーバ 自 動 コンパイル (Application Runtime)が自 動 的 にコンパイルします。以 後 、コンパイル されたJavaク ラス ファイルを使 って実 行 さ れます(サ ーバ稼 動 中 にソ ースを変 更 しても反 映 されません)。 %Resource Service%/pages/src/source-config.xmlの 「 resource-file/javascript/compiler 」 タ グ の enable 属 性 を ture に す ることでこの機 能 が働 きます。falseにするとファンクションコンテナはコ ンパイルされずに(インタプリタモード)動 作 します(サーバ稼 動 中 にソ ースを変 更 した場 合 、次 のプログラム実 行 から変 更 が反 映 されま す)。 フ ァ ン ク シ ョ ン コ ン テ ナ 作 成 後 、 JavaScript コ ン パ イ ル コ マ ン ド を 利 用 手 動 コンパイル し、予 めJavaクラスに変 換 しておきます。(JavaScriptコンパイルコマン ドについてはAPIリストを参 照 してください)自 動 コンパイルよりもパフォ ーマンス向 上 が期 待 できます。運 用 時 は、この方 法 で予 めJavaクラ スファイルを作 成 して実 行 する方 法 を推 奨 します。 source-config.xml ファイル source-config.xmlファイルは、 source-config.xmlファイルが配 置 されているディレク トリ内 (サブディレクトリを含 む)のプログラムに対 する設 定 ファイルです。 source-config.xmlファイルの設 定 例 <resource-file> <charset>Windows-31J</charset> <javascript> <compiler enable="true" /> <!-- enable:true = Auto compiler to Java class --> <!-- enable:false = Interpreter --> <optimize level="0" /> <!-- level:0 to 9 = Optimize level of Compile --> </javascript> <view> <compiler enable="true" /> <!-- enable:true = Auto compiler --> <!-- enable:false = Interpreter --> </view> </resource-file> 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 source-config.xmlファイルでは以 下 の設 定 を行 うことができます。 ● resource-file/charset ソースプログラムの文 字 エンコーディング名 を指 定 します。 ● resource-file/javascript/compiler ファンクションコンテナの自 動 コンパイルの有 効 ・無 効 を設 定 します。 この設 定 を有 効 (true)にすると、ファンクションコンテナは実 行 時 にJavaクラスにコンパ イ ル さ れ て 実 行 さ れ ま す 。 ( ク ラ ス フ ァ イ ル は 、 %Application Runtime%/work/jssp/_functioncontainerディレクトリに作 成 されます)逆 に、この設 定 を無 効 (false)にした場 合 は、ファンクションコンテナはJavaScriptインタプリタにより 実 行 されます。 ● resource-file/javascript/optimize ファンクションコンテナをJavaクラスにコンパイルする際 の最 適 化 レベルを設 定 します。 ● resource-file/view/compiler プレゼンテーションページの自 動 コンパイルの有 効 ・無 効 を設 定 します。 この設 定 を有 効 (true)にする と、プレゼンテーションページがコンパイルされて実 行 さ れます。(クラスファイルは、%Application Runtime%/work/jssp/_presentationpage ディレクトリに作 成 されます)逆 に、この設 定 を無 効 にする場 合 は false を設 定 してく ださい。 下 図 の よ う に source-config.xml フ ァ イ ル を 配 置 し た 場 合 、 各 プ ロ グ ラ ム が 参 照 す る source-config.xmlファイルは以 下 の通 りです。 * Aディレクトリ直 下 のプログラム:(2)の設 定 内 容 が有 効 になります。 * Bディレクトリ直 下 のプログラム:(2)の設 定 内 容 が有 効 になります。 * Cディレクトリ直 下 のプログラム:(1)の設 定 内 容 が有 効 になります。 * Dディレクトリ直 下 のプログラム:(1)の設 定 内 容 が有 効 になります。 Aディレクトリ │ ├─Bディレクトリ │ │ │ └─Cディレクトリ │ │ │ ├──Dディレクトリ │ │ │ └──source-config.xmlファイル・・・(1) │ └─source-config.xmlファイル・・・(2) < source-config.xmlの配 置 例 > 68 intra-mart WebPlatform/AppFramework 10 JavaScriptコンパイラ機 能 について ファイル単位での自動コンパイル設定方法 スクリプト開 発 モデルのプログラムは、プレゼンテーションページとファンクションコンテナのペア単 位 で文 字 コードの指 定 や自 動 コンパイルの設 定 を行 うことができます。「対 象 ファイルラベル名 .properties」フ ァイルを作 成 し、以 下 のように設 定 することで動 作 します。 charset = プログラムの文 字 エンコーディング名 javascript.compile.enable = ファンクションコンテナの自 動 コンパイル設 定 javascript.optimize.level = ファンクションコンテナをJavaクラスにコンパイルする際 の最 適 化 レベル view.compile.enable = プレゼンテーションページの自 動 コンパイル設 定 例 えば、ファイルが文 字 コード「Windows-31J」で作 成 されたsample.htmlとsample.jsを、「ファンクション コンテナの自 動 コンパイル機 能 を有 効 」、「プレゼンテーションページの自 動 コンパイル機 能 を無 効 」に 設 定 する場 合 は、同 一 ディレクトリにsample.propertiesを作 成 し、以 下 の内 容 を記 述 します。 sample.propertiesファイル charset=Windows-31J javascript.compile.enable=true javascript.optimize.level=0 view.compile.enable=false 10.1 実行時のファンクションコンテナ検索手順 ファンクションコンテナは、以 下 の手 順 に従 って検 索 ・実 行 されています。 1 2 3 4 5 クラスパスの中 から手 動 コンパイルされたファンクションコンテナ(Javaクラス)を検 索 自 動 コ ン パ イ ル 機 能 で コ ン パ イ ル さ れ た Java Runtime%/work/jssp/_functioncontainer から検 索 ク ラ ス を %Application %Resource Service%/pages/srcをルートディレクトリとしてソースファイルを検 索 %Resource Service%/pages/product/srcをルートディレクトリとしてソースファイルを検 索 %Resource Service%/pages/platform/srcをルートディレクトリとしてソースファイルを検 索 上 記 プロセスにおいて、該 当 するファンクションコンテナが見 つかり次 第 、実 行 します(自 動 コンパイル機 能 を 利 用 し て い る 場 合 、 手 順 3 ~ 5 で ソ ー ス フ ァ イ ル が 見 つ か っ た 場 合 に %Application Runtime%/work/jssp/_functioncontainerディレクトリ以 下 にJavaクラスファイルを作 成 しています)。 Javaクラスファイルとソースファイルの混 在 による実 行 (例 えば、一 部 のファンクションコンテナのみコン パイルして、残 りはインタプリタモードで実 行 )も可 能 です。 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 %Resource Service% の pages 配下のディレクトリ構成 intra-mart Ver5.0から%Resource Service%/pages配 下 の構 成 が新 しくなりました。開 発 者 は、通 常 、%Resource Service%/pages/srcにプログラムを格 納 します。 %Resource Service%/pages │ ├─platform │ │ │ └─src ← intra-mart WebPlatform/AppFrameworkのスクリプトプログラム格 納 用 │ ├─product │ │ │ └─src ← intra-martアプリケーション(イントラネット・スタートパックなど)のスクリプトプログラム格 納 用 │ │ │ └─src ← 開 発 者 が作 成 したスクリプトプログラム格 納 用 (intra-mart WebPlatformのサンプルもこのディレクトリに格 納 されます) 10.2 仕様詳細 コンパイラによって生 成 されるJava クラスの名 称 は、ファンクションコンテナのファイルを元 に決 定 されま す。この時 、ファンクションコンテナのファイル名 にJava クラス名 として使 用 できない文 字 (下 記 の注 意 参 照 )が含 まれていた場 合 、その文 字 をすべて"_"(アンダースコア)に置 き換 えます。元 のファイル名 に "_"文 字 が使 われていて、他 のクラス名 と合 致 してしまった場 合 、エラーになってしまうことがあります。 クラス名 として利 用 できない文 字 に関 しては、Javaの仕 様 に関 するドキュメントを参 照 してください。 自 動 コンパイル機 能 を利 用 している場 合 、ファンクションコンテナ実 行 時 に %Application Runtime%/work/jssp/_functioncontainer 内 に Java クラスファイルが作 成 されます。プログラムを変 更 した場 合 にはサーバを再 起 動 してください。サーバを再 起 動 しても変 更 が反 映 されない場 合 、以 下 の手 順 で実 行 環 境 を初 期 化 してください。 1 : サーバ停止 2: work/jssp/を削除 3: サーバ起動 JavaScript 関 数 名 はファイル内 でユニークである必 要 性 があります。例 えば関 数 内 に宣 言 されている 関 数 もこれに該 当 します。 JavaScript コンパイル時 に最 適 化 機 能 を利 用 して作 成 した Java クラスファイルは、最 適 化 せずにコン パイルした場 合 とバイトコードの構 成 が異 なります。このため、最 適 化 機 能 を利 用 した場 合 と利 用 しなか った場 合 で、エラー発 生 の有 無 や発 生 したエラーの内 容 が異 なる場 合 があります。 プログラム内 容 によりロードエラーになる場 合 があります。 コンパイル後 のコードサイズが大 きすぎるとロードエラーになる場 合 があります。この場 合 は、各 JavaScript 関 数 のコード量 を少 なくしてください(ファンクションコンテナは JavaScript 関 数 ごとに Java クラスへコンパイルされます)。 ファンクションコンテナ呼 出 側 のプログラムでプログラムパスの指 定 が曖 昧 な(大 文 字 ・小 文 字 が完 全 に 一 致 していない)場 合 、ロードエラーまたは実 行 時 エラーになる場 合 があります(include()関 数 や <IMART> タグのリンクタグ等 に対 する page 属 性 など)。この場 合 は、呼 出 側 で指 定 しているパスを正 しいパスに修 正 してください。 バッチ等 のプログラム実 行 を設 定 するタイプのもので、設 定 しているパスが正 しくない場 合 も同 様 の現 象 が発 生 します。この場 合 は、設 定 しているパスを正 しいパスに再 設 定 してください。 プログラム内 で使 用 されない変 数 が宣 言 されている場 合 、ロードエラーになることがあります。未 使 用 変 数 の宣 言 はしないでください。 70 intra-mart WebPlatform/AppFramework 10 JavaScriptコンパイラ機 能 について 10.3 コンパイラとは直接関係ない部分の仕様 外 部 記 憶 領 域 に対 して64KBを超 える文 字 列 を保 存 することはできません。対 象 となるAPIは次 のよう なものです。 Client.set() 10.4 制約 以 下 に制 約 について説 明 します。ファイルサイズによる制 約 プレゼンテーションページ(html)の<IMART> タグを除 く静 的 なスクリプト部 分 のうち、連 続 した部 分 のサイズが64[KB]を超 える場 合 、実 行 時 エラ ーになります。 10.5 プログラムの書き方による制約 以 下 の2つの条 件 を満 たす場 合 、実 行 時 エラーとなります。 source-config.xmlを以下のようにした設定した場合 resource-file/javascript/compilerタグのenable属性をtrueにしている resource-file/javascript/optimizeタグのlevel属性を1以上にしている 次のようなプログラムの書き方をした場合 init()関数およびaction属性により実行される関数の両方から呼び出される共通関数を持っている。 init()関数からaction属性により実行される関数を呼び出している。 resource-file/javascript/optimizeタグのlevel属 性 を1以 上 にしている場 合 エラーとなるコード test_page.html <HTML> <HEAD> <TITLE>Test Page</TITLE> </HEAD> <BODY bgcolor="WhiteSmoke"> <CENTER> <HR> <!-- actionFunction関数の呼び出し --> <IMART type="form" action="actionFunction"> <INPUT type="submit"> </IMART> <HR> </CENTER> </BODY> </HTML> test_page.js /** * 初期化関数 * @param request Web リクエスト引数 */ function init(request){ //ここでactionFunction関数を呼び出す //actionFunction関数はtest_page.htmlからも呼び出される actionFunction(null); } /** * フォームの action 属性により呼び出される関数 * @param request Web リクエスト引数 */ function actionFunction(request){ 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 Debug.print(viewTime().toString()); } /** * 共通関数 * @return 現在時刻を表す Date 型値 */ function viewTime(){ return new Date(); } resource-file/javascript/optimizeタグのlevel属 性 を1以 上 にしている場 合 エラーとならないコード test_page.html <HTML> <HEAD> <TITLE>Test Page</TITLE> </HEAD> <BODY bgcolor="WhiteSmoke"> <CENTER> <HR> <!-- actionFunction関数の呼び出し --> <IMART type="form" action="actionFunction"> <INPUT type="submit"> </IMART> <HR> </CENTER> </BODY> </HTML> test_page.js /** * 初期化関数 * @param request Web リクエスト引数 */ function init(request){ //ここではactionFunction関数を呼び出さない //actionFunction関数はtest_page.htmlからのみ呼び出される Debug.print(viewTime().toString()); } /** * フォームの action 属性により呼び出される関数 * @param request Web リクエスト引数 */ function actionFunction(request){ Debug.print(viewTime().toString()); } /** * 共通関数 * @return 現在時刻を表す Date 型値 */ function viewTime(){ return new Date(); } 72 intra-mart WebPlatform/AppFramework 11 im-J2EE Frameworkとの連 携 11 im-J2EE Frameworkとの連携 im-J2EE Frameworkはもとより、ServletやJSP等 の画 面 からスクリプト開 発 モデルの画 面 へ遷 移 する 場 合 、下 記 APIを利 用 します。 jp.co.intra_mart.jssp.net.URLBuilder このクラスは、スクリプト開 発 モデルの画 面 を呼 び出 すためのURLを作 成 するものです。リクエストのコン テキストを示 すURLを生 成 する、以 下 のユーティリティクラスもあわせてご利 用 ください。 jp.co.intra_mart.common.aid.jsdk.utility.URLUtil 使 用 例 // URLBuilderを生成 URLBuilder urlBuilder = new URLBuilder(request, response); // リクエストのコンテキストを示すURLを生成 java.net.URL urlContext = URLUtil.getContextURL(request); // HTTP セッションを維持したまま、 // 指定のスクリプト開発モデルの画面へリンクするための URL を取得 java.net.URL url = urlBuilder.createURLonSession(urlContext, "スクリプト開発モデルのページパス"); // この URL の文字列表現を構築 String nextPageURL = url.toExternalForm(); 「スクリプト開 発 モデルのページパス」には、通 常 スクリプト開 発 モデルの実 装 において指 定 するページ パスと同 様 のパス(%Resource Service%/pages/srcからの相 対 )を指 定 してください。 J2EE開 発 モデル( im-J2EE Frameworkを含 む)からスクリプト開 発 モデルの画 面 へ遷 移 することもできま す。詳 細 については、プログラミングガイド(J2EE開 発 モデル編 )をご覧 ください。 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 12 サンプル・アプリケーション intra-mart WebPlatform/AppFramework に は 、 ス ク リ プ ト 開 発 モ デ ル 用 の サ ン プ ル と し て 「 勤 怠 管 理 」が用 意 されています。この勤 怠 管 理 は、ワークフロー・モジュールとの連 携 のサンプルとしてもご活 用 いただけます。 12.1 データベースへのサンプルデータの登録 登 録 したデータベースにサンプルのデータを登 録 します。サンプルデータのインポートは、システム管 理 者 権 限 でログインし、[ライセンス]メニューで行 います。プルダウンメニューで、サンプルデータをインポ ートするログイングループ名 を選 択 して、[インポート]ボタンをクリックします。 <サンプルアプリケーション用 データのインポート> 12.2 「勤怠管理」アプリケーションの操作 「勤 怠 管 理 」 アプリケーショ ンは、 [ サン プ ル]- [スク リプ ト開 発 モデ ル ]-[ 勤 怠 管 理 ]に[ 勤 怠 登 録 ]と [勤 怠 修 正 ]の2つのメニューが用 意 されています。 12.2.1 勤怠登録 [サンプル]-[スクリプト開 発 モデル]-[勤 怠 管 理 ]から[勤 怠 登 録 ]を選 択 すると、 今 月 の勤 怠 情 報 が表 示 されます。別 の月 の勤 怠 情 報 を表 示 するには、画 面 右 上 のコンボボックスで表 示 したい年 月 を 選 択 し、表 示 ボタンを押 してください。勤 怠 を登 録 するには、登 録 したい日 付 の編 集 ボタンをクリックし ます。指 定 日 に関 する「勤 務 種 別 」・「業 務 種 別 」・「始 業 ・終 業 時 刻 」等 の勤 怠 内 容 を登 録 します。 74 intra-mart WebPlatform/AppFramework 12 サンプル・アプリケーション <勤 怠 一 覧 画 面 > <勤 怠 登 録 画 面 > 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 12.2.2 勤怠修正 勤 怠 年 月 および申 請 者 のユーザコードをキーに検 索 し、申 請 された勤 怠 内 容 を呼 び出 し、修 正 するこ とができます。 検 索 条 件 入 力 画 面 にて、勤 怠 年 月 および申 請 者 のユーザコードを入 力 し、検 索 ボタン を押 すと、 検 索 条 件 に一 致 した勤 怠 内 容 を表 示 します。 勤 怠 を修 正 するには、修 正 したい日 付 の 編 集 ボタンをクリックします。 指 定 日 に関 する「勤 務 種 別 」・「業 務 種 別 」・「始 業 ・終 業 時 刻 」等 の勤 怠 内 容 を修 正 します。 <検 索 条 件 入 力 画 面 > <ユーザ検 索 画 面 > 76 intra-mart WebPlatform/AppFramework 12 サンプル・アプリケーション <検 索 結 果 画 面 > 12.3 ワークフロー・モジュールとの連携 「勤 怠 管 理 」アプリケーションはワークフロー・モジュールを利 用 したサンプルアプリケーションとしても動 作 します。 12.3.1 ワークフロー連携概 要 「勤 怠 登 録 」で作 成 された1ヵ月 分 の勤 怠 情 報 は、ワークフロー・モジュールの機 能 で、あらかじめ設 定 されているルートに従 い、承 認 を受 けることとなります。 <勤 怠 ワークフロー連 携 概 要 > 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 12.3.2 申請画面 <ワークフロー_サンプル_起 票 > 12.3.3 フロー情報 画面 <ワークフロー_サンプル_フロー情 報 > 78 intra-mart WebPlatform/AppFramework 12 サンプル・アプリケーション 12.3.4 承認画面 <ワークフロー_サンプル_承 認 > サンプルのソースは、以 下 のフォルダに用 意 されています。 %Resource Service%/pages/src/sample/bpw/purchase/standard intra-martでは、ワークフロー・モジュールを使 用 することで、簡 単 にワークフローに対 応 したアプリケーションを 作 成 することができます。ワークフロー・モジュールとの連 携 やプロセス(承 認 ルート)の作 成 等 のワークフロー 機 能 の詳 細 は、別 冊 の「ワークフローガイド」「ワークフロー仕 様 書 」を参 照 してください。 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 13 モジュールの組み込みと操作 intra-martは前 述 のように「ユーザインタフェース層 (プレゼンテーション・ページ)」、「ビジネスロジック層 (ファンクション・コンテナ)」、「業 務 基 盤 ツール」に分 類 されます。 ここでは各 モジュールについて説 明 を行 います。 80 intra-mart WebPlatform/AppFramework 13 モジュールの組 み込 みと操 作 13.1 ユーザインターフェース層 ユーザインタフェース層 に属 するモジュールを説 明 します。 13.1.1 画面共通モジュール WebベースでのGUI開 発 でよく利 用 される画 面 部 品 のモジュールです。それぞれのモジュールに適 当 な プロパティを設 定 して呼 び出 すだけで、データベースと連 動 したユーザインターフェースを簡 単 に作 成 できます。 提 供 される画 面 共 通 モジュールの例 一 般 的 な入 力 コントロール群 ユーザインタフェース構 築 に必 要 となる一 般 的 な入 力 コントロール(テ キストフィールド、パスワードボックス、ラジオボタン、チェックボックス、テ キストエリア など)を用 意 しています。これらのコントロール郡 は、サーバ サイドのスクリプトやデータと連 動 が可 能 なコントロールとなります。 レイアウト制 御 モジュール群 さまざまな条 件 により表 示 すべき値 を変 化 させたり、表 示 する内 容 を 選 択 したりするなど、HTMLでは表 現 できないプログラム的 な要 素 をプ レゼンテーションページ内 に定 義 することができます。 構 築 されたWebユーザインターフェースの例 前 述 のオブジェクト/関 数 群 を利 用 してHTML上 で編 集 していくことで、細 かなレベルのユーザインター フェースの構 築 が可 能 になり、従 来 のVisualBasicなどによるユーザインタフェースと遜 色 がないスタイル のWebシステムの構 築 が可 能 です。 画 面 の作 成 例 は以 下 のようになっています。 <画 面 の作 成 例 > 画 面 共 通 モジュールの詳 細 については、APIリストの「スクリプト開 発 モデル」-「画 面 共 通 モジュール」を参 照 してください。ここで紹 介 したintra-mart標 準 の画 面 共 通 モジュールのほかに、エクステンション・モジュール (別 売 )として、クライアントGUI環 境 を実 現 する「IM-Curl」を用 意 しています。「IM-Curl」は、高 度 かつ複 雑 な ユーザインターフェイスを構 築 可 能 なリッチクライアントサイドWebプログラミング言 語 です。IM-Curlの詳 細 資 料 に関 しては、以 下 の資 料 を参 照 してください。 ・ 製 品 に添 付 されている、Curlアプレットが相 互 に通 信 するアプリケーションを作 成 するために用 意 されて いるCurl連 携 用 APIを利 用 するためのチュートリアルガイド 「IM-Curl連 携 APIチュートリアルガイド」(im_curl_api_tutorial.pdf) ・ APIリストの「スクリプト開 発 モデル」-「ビジネスロジック層 」-「アプリケーション共 通 モジュール」内 の jp.co.intra_mart.foundation.im_curlクラス また、本 書 第 3章 「さまざまなコンポーネント群 (im-BizAPI)の利 用 」の「15 エクステンション・モジュールの組 み込 みと操 作 」も参 照 してください。 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 13.1.2 グラフ描 画モジュール(プレゼンテーション・ページ) グラフの画 像 ファイルをサーバサイド作 成 して、ブラウザ画 面 上 にグラフを表 示 します。 以 下 の5種 類 のグラフが利 用 できます。 折れ線グラフ 棒グラフ 円グラフ レーダーチャート ポートフォリオ グラフ描 画 の設 定 プレゼンテーション・ページ(HTMLファイル)にグラフ描 画 に関 する<IMART>タグを記 述 します。用 いられ る<IMART>タグは以 下 の5種 類 です。 type属 性 値 グラフの種 類 lineGraph 折 れ線 グラフ barGraph 棒 グラフ circleGraph 円 グラフ radarChart レーダーチャート portFolio ポートフォリオ 折 れ線 グラフ描 画 の<IMART>タグの記 述 例 は以 下 のようになります。 <HTML> <HEAD> <TITLE>Line_Graph Sample</TITLE> </HEAD> <BODY> <IMART type="lineGraph" data=oData imageWidth="300" imageHeight="300" dataMin="-30" dataMax="60" scaleCount="20" alt="IM_LineGraph"> </IMART> </BODY> </HTML> 82 intra-mart WebPlatform/AppFramework 13 モジュールの組 み込 みと操 作 グラフの値 となるオブジェクトの作 成 上 記 の<IMART type="lineGraph">タグの属 性 dataへのバインド変 数 はグラフのデータ値 となり、以 下 のように、オブジェクトへ値 をセットします。 //バインド変数宣言 var oData; // 折れ線グラフ描画データ // ページの初期化関数 function init() { // 折れ線グラフ描画データオブジェクトの作成 oData.aCaption = new Array("1月", "2月", "3月", "4月", "5月", "6月"); oData.aData = new Array(); oData.aData[0] = new Object(); oData.aData[0].aData = new Array(50, 10, 30, 5, 30, 20); oData.aData[0].sColor = "red"; oData.aData[0].nWidth = 5; oData.aData[1] = new Object(); oData.aData[1].aData = new Array(10, 40, -20, 30, -10, 45); oData.aData[1].sColor = "yellow"; oData.aData[2] = new Object(); oData.aData[2].aData = new Array(20, 30, 50, 25, 45, 55); oData.aData[2].sColor = "green"; oData.aData[2].nStyle = new Array(10,10); } <グラフ画 面 例 > 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 13.2 ビジネスロジック層 ビジネスロジック層 に属 するモジュールを説 明 します。 13.2.1 アプリケーション共通 モジュール 各 アプリケーション開 発 に必 要 な処 理 ロジックのモジュールが、使 いやすくオブジェクト化 されています。 これらオブジェクトをビジネスロジックに組 み込 んで編 集 していくことで、余 計 なロジックの作 り込 みをせ ずに多 階 層 アーキテクチャに基 づいたWebシステムの開 発 を短 期 間 でおこなうことが可 能 になります。 提 供 されるアプリケーション共 通 モジュールのオブジェクト概 要 アプリケーション開 発 に必 要 な処 理 ロジックのモジュール(セッション管 理 やDBアクセス)が使 いやすくオ ブジェクト化 されて提 供 されています。このオブジェクトの利 用 により、ページをまたいだセッション管 理 を 実 現 することができます。またフッター等 に利 用 する会 社 名 称 や各 種 データベースへのログインユーザ 名 等 の情 報 も、このオブジェクトから利 用 できます。これらのオブジェクトをアプリケーションロジックに組 み込 んで編 集 していくことで、余 計 なロジックの作 りこみをせずに複 雑 なWebシステムの開 発 を短 期 間 でおこなうことが可 能 になります。その他 、アプリケーションの環 境 変 数 を含 めた各 設 定 値 へのアクセス 用 オブジェクト、区 分 コードへのアクセス用 オブジェクト、データベース関 連 の汎 用 オブジェクト、日 付 関 連 オブジェクト、デバック関 連 オブジェクト、URL管 理 オブジェクトなど多 数 用 意 されています。これらによ り、現 在 接 続 している社 員 コードや、直 前 に表 示 したHTMLページ名 などさまざまな情 報 にアクセスでき ます。 また、複 数 DBへの同 時 アクセスメソッドや大 量 の検 索 データに対 して、指 定 した件 数 ごとに結 果 を画 面 表 示 する機 能 の検 索 ストリーミング、アプリケーションロック機 能 、XML対 応 モジュールなど、高 度 な 機 能 が含 まれています。 アプリケーション共 通 モジュールの詳 細 については、APIリストの「スクリプト開 発 モデル」-「アプリケーション共 通 モジュール」を参 照 してください。 13.2.2 メール連 携モジュール(ファンクション・コンテナ) 本 モジュールを利 用 することで、SMTP/POP3互 換 のメールサーバに対 するメールの送 信 処 理 を行 うこ とができます。 84 intra-mart WebPlatform/AppFramework 13 モジュールの組 み込 みと操 作 メールサーバの設 定 メールサーバの設 定 は、conf/imart.xmlファイルで行 います。記 述 例 は以 下 の通 りです。 <メールサーバの設定> <smtp-server host="localhost" port="25" mailbox-check="false" /> メール送 信 管 理 の設 定 メール送 信 の設 定 には、MailSenderオブジェクトを用 います。MailSenderオブジェクトのメソッドは以 下 の 11より構 成 されており、これらを用 いてファンクション・コンテナでメール送 信 の設 定 を行 います。 (1) setFrom(String address ,String personal) : メール送信元(From)を設定するメソッド (2) addTo(String address ,String personal) : メール送信先(To)を追加するメソッド (3) addCc(String address ,String personal) : メール送信先(Cc)を追加するメソッド (4) addBcc(String address ,String personal) : メール送信先(Bcc)を追加するメソッド (5) addReplyTo(String replyto) : メール返信先を追加するメソッド (6) addHeader(String name ,String value) : メールヘッダーを追加するメソッド (7) setSubject(String subject) : メール題名(Subject)を設定するメソッド (8) setText(String text) : 本文を設定するメソッド (9) addAttachment(String filename ,String file) : メールへの添付ファイルを追加するメソッド (10) send() : メールを送信するメソッド (11) getErrorMessage() : メール送信エラー時のメッセージを取得するメソッド 前 記 メソッドの記 述 例 は以 下 のようになります。 <メールの送信処理(ファンクション・コンテナ)> var ret; var errorMessage; var locale = AccessSecurityManager.getSessionInfo().locale; // ロケールの取得 var mailSender = new MailSender(locale); // MailSender オブジェクトを生成 //---------------------------// 送信情報の設定 //---------------------------// 送信先メールアドレス mailSender.addTo("[email protected]"); mailSender.addTo("[email protected]"); mailSender.addTo("[email protected]"); mailSender.addTo("[email protected]"); mailSender.addTo("[email protected]"); // CCメールアドレスをセット mailSender.addCc("[email protected]"); // 送信元メールアドレス mailSender.setFrom(request.mail_from); //---------------------------//メールタイトルと内容をセット //---------------------------// 題名の設定 mailSender.setSubject("メール送信サンプル"); // 本文の設定 mailSender.setText("メール送信のテストです。" + "¥n" + "うまく送れましたか?"); //メール送信 ret = mailSender.send(); 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 //エラー判定 if( ret ) { errorMessage = "エラーメッセージ:" + mailSender.getErrorMessage(); //メール送信エラー Module.alert.back( "SYSTEM.ERR", errorMessage); } 13.2.3 外部ソフトウェア接続モジュール 市 販 の ア プ リ ケ ー シ ョ ン パ ッ ケ ー ジ か ら im-BizAPI の 各 種 API を 呼 び 出 し て 直 接 利 用 す る な ど 、 intra-martと外 部 ソフトウェアを簡 単 に連 携 ・接 続 できるモジュールです。連 携 ・接 続 する方 法 には、次 の2通 りの方 法 が用 意 されています。 ひとつは、こ の 「 連 携 A P I コ ネ ク タ 」 が フ レ ー ム ワ ー ク の 中 の i m - B i z A P I と 連 携 す る た め の J a v a ベ ー ス API と し て 提 供 さ れ て い る の で 、 外 部 ソ フ ト ウ ェ ア が Java 実 行 環 境 で あ れ ば 任 意 の プ ロ セ ス と im-BizAPIを連 携 させる方 法 です。例 えば、市 販 のポータルサーバ製 品 と組 み合 わせて、ポータル 画 面 中 にintra-martの画 面 を表 示 したり、他 のアプリケーション と連 携 してバッチ動 作 する独 自 のJavaプロセスからユーザアカウント情 報 を操 作 したりすることが可 能 です。 2つ目 の方 法 としては、外 部 ソフトウェアからWebサービスによりim-BizAPIの各 種 APIを呼 び出 すことも 可 能 です。 このほかに、XMLによるデータ連 携 の方 法 もあります。詳 細 に関 しましては、本 書 「8 XML形 式 のデータを扱 う」を参 照 してください。 外 部 ソフトウェア接 続 モジュールの詳 細 に関 しましては、APIリストの、「Developer's Guide」の「外 部 ソフトウェ ア接 続 モジュール」を参 照 してください。 86 intra-mart WebPlatform/AppFramework 13 モジュールの組 み込 みと操 作 13.2.4 ERP連 携 モジュール SAP JCo技 術 を利 用 し、SAP APIをライブラリ化 しました。標 準 のJava技 術 を用 いて、アドオン開 発 を 低 コストで行 えます。※intra-mart WebPlatform/AppFramework Enterprise版 のみの機 能 です。 現 在 提 供 しているERP連 携 モジュールには、SAPとの連 携 ができる豊 富 なAPIが用 意 されています。その他 のERP用 の連 携 モジュールも順 次 追 加 して行 く予 定 です。 詳 細 に関 しては以 下 の資 料 を参 照 してください。 ・ 製 品 に添 付 されている、SAP R/3とリアルタイムに連 携 するためのチュートリアルガイド 「ERP連 携 モジュール・チュートリアルガイド」(im_sap_api_tutorial_v60.pdf) ・ APIリストの「スクリプト開 発 モデル」-「ビジネスロジック層 」-「ERP連 携 モジュール」 SAP、SAP R/3、SAP JCO、製 品 内 に記 載 するSAPの製 品 /サービス名 は、すべてドイツおよびその他 の国 に おけるSAP AGの商 標 または登 録 商 標 です。 13.3 業務基盤ツール 業 務 基 盤 ツールの属 するモジュールを説 明 します。 13.3.1 アクセスセキュリティモジュール ユーザやロールなどのログイン・セキュリティ情 報 を操 作 するためのモジュールです。ログインするユーザ の認 証 機 能 はもちろん、ユーザのアクセス権 に応 じた固 有 のWebページを表 示 することができます。た とえば、一 般 社 員 がアクセスしたときには、アクセス権 限 のないページはメニューにもあらわれないため、 ユーザはその存 在 を一 切 意 識 することはありません。しかし、管 理 者 がアクセスした場 合 には、同 じペー ジでも管 理 者 が利 用 できるメニューまで表 示 されることになります。アクセスセキュリティ・モジュールを 利 用 することで、このようなユーザに応 じて内 容 の異 なるページ構 成 を組 むことが可 能 になります。設 定 方 法 についてはアドミニストレータガイド第 2章 「5 アクセスセキュリティの管 理 」を参 照 してください。 標 準 で用 意 されているアクセスセキュリティ・モジュールのほかに、シングルサインオンを実 現 するエクス テンション・モジュール「IM-SecureSignOn(別 売 )」も用 意 されています。 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 intra-mart Ver5.0から、ユーザごとの言 語 の切 り替 えや画 面 のテーマカラーの選 択 が可 能 となりました。 また、これまでユーザ情 報 の設 定 はシステム管 理 者 がすべてを行 う使 用 でしたが、システム管 理 者 の 配 下 にログイングループ管 理 者 を設 定 し、ログイングループ管 理 者 がユーザ情 報 の設 定 を行 えるよう になりました。 さらに、アクセスセキュリティの各 機 能 はAPI化 されており、それらを利 用 して、独 自 のメニュー画 面 を作 成 することもできます。また、intra-martでは完 全 なSecure Sockets Layer(SSL)サポートを提 供 します。 これにより送 信 されるコンテンツに対 して、暗 号 化 セキュリティをかけることが可 能 になります。 ここで紹 介 したintra-mart標 準 のアクセスセキュリティモジュールのほかに、エクステンション・モジュール(別 売 )として、「IM-SecureSignOn」を用 意 しています。「IM-SecureSignOn」は、独 自 のエージェント型 リバース プロシキー方 式 により適 用 範 囲 が広 く、導 入 ・運 用 が容 易 なシングルサインオンを実 現 します。詳 細 は、本 書 第 3章 「さまざまなコンポーネント群 (im-BizAPI)の利 用 」の「15 エクステンション・モジュールの組 み込 み と操 作 」を参 照 してください。 アクセスセキュリティの詳 細 に関 しては、別 冊 の「アクセスセキュリティ仕 様 書 」も参 照 してください。 13.3.2 ワークフロー・モジュール 本 モジュールを利 用 すると、Webブラウザベースのワークフローを効 率 良 く構 築 することができます。作 成 したアプリケーションを「タスク」としてドキュメントワークフローに登 録 するだけでワークフローに対 応 し たアプリケーションとして利 用 できます。ワークフロー機 能 の詳 細 は、別 冊 の「ワークフローガイド」を参 照 してください。 13.3.3 ビジネスプロセスワークフローモジュール 申 請 ・承 認 が中 心 となるドキュメント・ワークフロー(標 準 のワークフロー・モジュールやIM-ワークフローデ ザイナーなど)とは異 なり、ビジネスプロセスワークフローモジュールでは業 務 処 理 のプロセスをあらかじめ 登 録 しておくことで、業 務 処 理 をそのまま自 動 化 することができます。このため、事 務 処 理 の適 正 化 を 図 ることができ、作 業 効 率 を大 幅 に向 上 させることができます。ビジネスプロセスワークフロー機 能 の詳 細 は、別 冊 の「ワークフローガイド」を参 照 してください。 88 intra-mart WebPlatform/AppFramework 13 モジュールの組 み込 みと操 作 13.3.4 バッチ管 理モジュール intra-mart は、Schedule Serviceによるプログラム実 行 のスケジューリング機 能 を提 供 しています。バッ チ実 行 したいロジックを記 述 したバッチプログラムを作 成 し、バッチ設 定 画 面 にて起 動 日 時 を設 定 して ください。 バッチ管 理 に関 しては、アドミニストレータ・ガイド第 2章 「10バッチ管 理 の操 作 」を参 照 してください。 13.3.5 ポータルモジュール ポータルモジュールは、intra-martのログイン初 期 画 面 にあらかじめ用 意 したページ(ポータルアプリケー ションでは、ポートレットと呼 びます)を表 示 させるモジュールです。よく利 用 するアプリケーションの画 面 やユーザに情 報 を見 るように喚 起 する画 面 などを一 覧 表 示 することで、業 務 効 率 をあげることができ ます。 さまざまなアプリケーションで作 成 したページをポートレットとして自 由 にレイアウトして、ポータル画 面 を 作 成 することができます。ポータル画 面 は複 数 作 成 することができ、ユーザが切 り替 えて表 示 すること ができます。さらに、組 織 やロール、ユーザによって利 用 できるポータル画 面 を切 り替 えることで、業 務 に 最 適 な画 面 を提 供 することができます。 <会 社 ・組 織 、ユーザごとのポータル> 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 ポートレット用 ページの作 成 スクリプト開 発 モデルおよびJ2EE開 発 モデル、外 部 URLでポータル画 面 に表 示 させたいページをポート レット用 に作 成 します。なお、intra-martには、あらかじめサンプルのポートレット用 のページが用 意 されて います。 13.3.6 ViewCreator ViewCreatorはintra-martの画 面 上 から、データベースのデータを使 用 して、様 々な表 やグラフを作 成 することができるツールです。使 用 可 能 なデータベースには、ログイングループデータベースとシステム データベースがあります。ViewCreatorの機 能 は、クエリメンテナンスとデータ参 照 メンテナンスの2つの 操 作 に大 きく分 かれます。 クエリメンテナンス データベ ース 上 のテーブルやビューの結 合 などを行 い 、データ参 照 で 使 用 する元 データとなる表 を作 成 します。また、作 成 したクエリのSQL 表 示 やViewの作 成 、あるいは表 をプレビュー表 示 することもできます。 データ参 照 メンテナンス クエリメンテナンスで作 成 したデータの表 示 の仕 方 (グラフまたは表 な ど)やデータの絞 込 みに関 する設 定 を行 います。また、参 照 権 限 をデー タ参 照 単 位 で設 定 することができます。 作 成 したデータ参 照 は、表 示 時 にデータの検 索 や表 示 項 目 の絞 り込 み、並 び順 の変 更 などを行 うこと ができます。また、データ参 照 はポートレットとして追 加 したり、CSV/HTML形 式 のファイルとして出 力 、 あるいはスクリプト開 発 モデルのプログラムファイルとして出 力 可 能 で、出 力 されたプログラムソースは 自 由 にカスタマイズして再 利 用 が可 能 です。 このように、データベースの中 のデータを元 に様 々な表 やグラフの作 成 /表 示 をWebブラウザ上 で簡 単 に操 作 できるのがViewCreatorの大 きな特 徴 です。 詳 細 は、アドミニストレータガイドの第 2章 「13 ViewCreator」を参 照 してください。 90 intra-mart WebPlatform/AppFramework 13 モジュールの組 み込 みと操 作 <ViewCreator> 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 14 ユニットの組み込みと操作 intra-mart WebPlatform/AppFrameworkには、再 利 用 できるソフトウェア部 品 としてユニットが用 意 さ れています。これらは、以 下 のようにユーザアプリケーションに組 み込 むだけで利 用 できるようになります。 また、これらユニットはソースコードが公 開 されておりますので自 由 にカスタマイズすることができます。 14.1 アプリケーション共通マスタunit 会 社 データ、組 織 データ、グループデータ、取 引 先 データ、顧 客 データ、商 品 データなど、システム開 発 でよく利 用 するマスタが標 準 で用 意 されています。これらのマスタを利 用 することにより、設 計 工 程 まで 含 め短 期 間 でのシステム開 発 が可 能 となります。各 intra-martアプリケーションシリーズと連 携 したシス テムが開 発 でき、また、マスタにアクセスするためのAPIなども標 準 で用 意 されています。詳 細 について いは、アドミニストレータ・ガイド第 2章 「8 アプリケーション共 通 マスタ」、および別冊「アプリケーション共通マ スタ説明資料」を、アクセスするAPIは、APIリストの「ユニット」-「アプリケーション共通M API仕様」を参照してくださ い。 intra-mart Ver5.0から、各 マスタは日 付 で履 歴 管 理 することができます。 14.2 カレンダーunit カレンダーunitを組 み込 むと、カレンダーマスメンテナンス画 面 で設 定 したデータと連 携 したカレンダー 画 面 を表 示 することができます。カレンダー画 面 を利 用 すると、会 社 の休 日 や営 業 日 を考 慮 した日 付 の入 力 が行 えます。 <カレンダーunitの例 > 92 intra-mart WebPlatform/AppFramework 14 ユニットの組 み込 みと操 作 14.2.1 呼び出し方法 以 下 のキーワードをリンクすることによりカレンダーunitの画 面 を呼 び出 すことができます。 @IM_CALENDAR_VIEW : 表 示 形 式 はモジュールにより自 動 選 択 @IM_CALENDAR_VIEW_COMPACT : 動 作 の軽 い表 示 形 式 のカレンダー <コーディング例> <IMART type="link" page="@IM_CALENDAR_VIEW" year="1999" month="5"> </IMART> 上 記 コーディング例 のようにリンクに対 して指 定 する方 法 の他 にも<IMART type="frame"> のsrc属 性 や <IMART type="form"> または <IMART type="submit"> の page 属 性 に対 しても同 様 に指 定 することができます。また、以 下 のオプション属 性 を指 定 することでカレンダー画 面 の動 作 を定 義 するこ とができます。 オプション属 性 year (必 須 ) カレンダーの表 示 年 month (必 須 ) カレンダーの表 示 月 past (任 意 ) カレンダーの年 選 択 コンボの表 示 量 (過 去 ) (現 在 表 示 年 から過 去 past年 間 をコンボで選 択 可 能 ) future (任 意 ) カレンダーの年 選 択 コンボの表 示 量 (未 来 ) (現 在 表 示 年 から未 来 past年 間 をコンボで選 択 可 能 ) display (任 意 ) 日 がクリックされたときにページをコールするウィンドウ名 (または、フレーム名 ) link (任 意 ) 日 がクリックされたときにコールされるページパス ( Resource Service の プ ロ グ ラ ム デ ィ レ ク ト リ ( 標 準 で は 、 %Resource Service%/pages/src)からの相 対 パス) 14.2.2 カレンダーデータの受け取 り方法 表 示 カレンダーの日 がクリックされると自 動 的 に link オプションに指 定 されているページをコールします。 このページのファンクションコンテナでユーザのクリック(選 択 )した情 報 を取 得 することができます。ユー ザがクリックした日 情 報 は request オブジェクトを介 して取 得 することができます。 <コーディング例> var sGroup = request.group;; // カレンダーID var sYear = request.dtyear; // 選択年の取得 var sMonth = request.dtmon; // 選択月の取得 var sDate = request.dtday; // 選択日の取得 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 14.2.3 高度なカレンダー画 面のカスタマイズ カレンダーunitは、画 面 だけでなく、各 々が部 品 の形 にまとめられていて必 要 なときに必 要 な部 品 を呼 び出 すことで自 由 にカスタマイズをすることができます。 また、カレンダー設 定 は複 数 設 定 することが できるので、本 社 と工 場 、支 店 などによって使 い分 けけることができます。 カレンダー拡 張 <IMART>タグ <IMART type="calendar"> という拡 張 タグを使 うことでカレンダー画 面 を自 由 に作 成 することができる ようになります。詳 細 は、「APIリスト」を参 照 してください。 カレンダーモジュール CalendarManager.* 上 記 オブジェクトに含 まれる各 メソッドを利 用 することでプログラムにおいてカレンダー設 定 情 報 を呼 び 出 して利 用 することができるようになります。詳 細 は、「APIリスト」を参 照 してください。 カレンダーマスタメンテナンスの操 作 に関 しては、アドミニストレータガイドを参 照 してください。 14.3 ファイルダウンロードunit ファイルダウンロードunitを組 み込 むと、サーバにあるファイルをWebブラウザを通 してクライアントのパソコ ンにダウンロードすることができます。ダウンロードには、HTTPプロトコルを利 用 します。 Storage Serviceを利 用 すると、ファイルを一 元 管 理 できます。 14.3.1 ダウンロードの方法 ファンクション・コンテナでファイルダウンロードAPI(Module.download.*)を利 用 してデータをクライアント へ送 り出 します。 94 intra-mart WebPlatform/AppFramework 14 ユニットの組 み込 みと操 作 14.3.2 ファイル拡張子とMIMEタイプ ダウンロード時 には、ファイルの拡 張 子 によって自 動 的 にMIMEタイプが決 定 されます。 また、ダウンロードAPIへの引 数 の与 え方 により、ダウンロードAPIを利 用 するプログラム側 で任 意 にMIME タイプを指 定 することもできます。 ファイルダウンロードunitは、ブラウザへデータを送 信 するための機 能 です。サーバ上 のファイルをダウンロード するには、一 度 ファイルをロードしてから本 unitを呼 び出 す必 要 があります。 ダウンロードAPIは、クライアントへのデータの送 信 時 に文 字 コード変 換 を行 いません。クライアントが受 信 する 文 字 コード形 式 への適 切 な変 換 は、ダウンロードAPIへデータを渡 す前 に、ダウンロードAPIを利 用 するプログ ラム側 で行 うようにしてください。 ファイルダウンロードunitを利 用 したコーディング方 法 については、本 書 第 3章 の「1 Storage Serviceの利 用 方 法 」を参 照 してください。 14.4 ファイルアップロードunit ファイルアップロードunitを組 み込 むと、クライアントのパソコンにあるファイルをWebブラウザを通 してサー バにアップロードすることができます。アップロードには、HTTPプロトコルを利 用 します。 Storage Serviceを利 用 すると、ファイルを一 元 管 理 できます。 14.4.1 プレゼンテーションページとの連 携 プレゼンテーション・ページでは、以 下 のようにフォームを構 築 します。 <IMART type="form" method="POST" enctype="multipart/form-data"> <INPUT type="file"> <INPUT type="submit"> </IMART> 14.4.2 情報の取得方法 通 常 のリンクやフォームと同 様 に、ファンクションコンテナ内 においてrequestオブジェクトにてフォームの 内 容 を取 得 できます。 ファイルアップロードunitは、ブラウザからアップロードされたファイルの内 容 をデータとして取 得 するための機 能 です。アップロードされたファイルをサーバ上 に保 存 するには、別 途 APIを利 用 する必 要 があります。 ファイルアップロードunitを利 用 したコーディング方 法 については、本 書 第 3章 の「1 Storage Serviceの利 用 方 法 」を参 照 してください。 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 14.5 ツリー表示unit ツリー表 示 unitを組 み込 むと階 層 化 されたデータをツリー表 示 することができ、階 層 構 造 の把 握 やメニ ューの選 択 が用 意 になります。[ページ]メニューの[ページ設 定 ]画 面 の組 織 ツリー表 示 に利 用 されま す。ツリー表 示 ユニットの詳 細 については、APIリストの[スクリプト開 発 モデル]-[ユニット]-[ツリー表 示 モ ジュール]を参 照 してください。 <ツリー表 示 ユニットの例 > 14.6 i-mode unit i-mode unitを組 み込 むと、ユーザが作 成 し、ログイングループ管 理 者 の[ログイングループ管 理 ]-[メニュ ー管 理 ]-[メニュー設 定 ]で登 録 したページをi-mode対 応 の携 帯 電 話 の画 面 で見 ることができるように なります。i-modeに対 応 した画 面 を作 成 するには、i-modeの表 示 領 域 に合 ったページを作 成 し、[ログイ ングループ管 理 設 定 ]-[メニュー管 理 ]-[メニュー設 定 ]で登 録 する際 に、クライアントタイプで、「パソコ ン」または「モバイル」を選 択 します。また、利 用 するユーザの設 定 としては、「ユーザ設 定 」の「モバイル パスワード設 定 」で、あらかじめいくつかの項 目 を設 定 しておく必 要 があります。設 定 の詳 細 は、次 項 の 「ページ管 理 マスタメンテナンスでのi-modeの設 定 」を、アクセスするAPIはAPIリストの「Module.mobile」 および「Procedure.imode」を参 照 してください。 14.6.1 ページ管 理マスタメンテナンスでのi-modeの設定 作 成 したi-mode対 応 のページは、ログイングループ管 理 者 が[ログインググループ管 理 ]-[メニュー管 理 ]-[メニュー設 定 ]でページを登 録 する際 に、「クライアントタイプ」の項 目 で「モバイル」を選 択 します。 [メニュー設 定 ]の操 作 については、アドミニストレータ・ガイド第 2章 「7 アプリケーションの登 録 」を参 照 してください。 <[ログインググループ管 理 ]-[メニュー管 理 ]-[メニュー設 定 ]> 96 intra-mart WebPlatform/AppFramework 14 ユニットの組 み込 みと操 作 14.6.2 i-modeのアドレスとパスワードの設定 i-mode用 に作 成 し登 録 したページをi-mode対 応 モバイルで利 用 するには、ログイングループ管 理 者 が [ログイングループ設 定 ]-[アカウント管 理 ]-[アカウント設 定 ]で、ユーザごとにモバイル用 メールアドレスと モバイル用 パスワードの設 定 を行 います。いったん設 定 されたモバイル用 パスワードに関 しては、各 ユー ザが一 般 ユーザでログインして、[ユーザ設 定 ]の[モバイルパスワード設 定 ]で変 更 することができま す。 <ログイングループ管 理 者 の[ログイングループ設 定 ]-[アカウント管 理 ]-[アカウント設 定 ]> <[ユーザ設 定 ]-[モバイルパスワード設 定 ]> 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 14.6.3 i-mode用外出設定 intra-martから送 信 されるメールは、通 常 時 は[ログイングループ設 定 ]-[アカウント管 理 ]-[アカウント設 定 ]で登 録 したメールアドレスに送 信 されます。一 般 ユーザが[ユーザ設 定 ]-[外 出 設 定 ]で「外 出 」に 設 定 しておくと、通 常 のメールアドレスに送 信 されると同 時 に、i-mode用 メールアドレスにも送 信 されます。 この機 能 を利 用 するには、ログイングループ管 理 者 が[ログイングループ設 定 ]-[アカウント管 理 ]-[アカウ ント設 定 ]で[モバイル用 アドレス]を設 定 しておかなければなりません。 <外 出 設 定 > i-modeで、警 告 画 面 を使 用 するときは、Module.mobile.alert()を使 用 してください。詳 細 は、「APIリスト」を参 照 してください。 98 intra-mart WebPlatform/AppFramework 15 エクステンション・モジュールの組 み込 みと操 作 15 エクステンション・モジュールの組み込みと操作 エクステンション・モジュールは、intra-mart WebPlatform/AppFrameworkに標 準 添 付 されているモジ ュールとは別 に用 意 されているモジュール群 です。より高 機 能 なモジュールが必 要 なユーザのために各 種 エクステンション・モジュールが用 意 されており、必 要 に応 じて組 み込 んで標 準 のモジュールと同 様 に 利 用 できます。現 在 用 意 されているモジュールについて説 明 します。 15.1 帳票印刷モジュール拡張 よりきめ細 かな帳 票 の印 刷 に対 応 したエクステンション・モジュールがオプションで用 意 されています。 15.1.1 IM-PDFデザイナー PDFを採 用 することにより、より複 雑 な帳 票 形 式 への対 応 が可 能 となるモジュールで、単 票 および連 帳 にも対 応 します。ビジュアルな帳 票 デザイン作 成 ツールである「IOWebDoc」で帳 票 フォーマットを作 成 し ます。ユーザアプリケーションからのデータはCSV形 式 で受 け渡 し、PDFファイルを作 成 し、Acrobatを起 動 して印 刷 します。 <IM-PDFデザイナーを利 用 した帳 票 例 > 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 IM-PDFデザイナーの動 作 概 要 IM-PDFデザイナーを組 み込 むと、intra-martのモジュールの一 つとして動 作 します。intra-martのアプリ ケーションのファンクション・コンテナから帳 票 データをCSVファイル形 式 で作 成 し、用 意 されているPDF オブジェクトを使 用 するだけで、より複 雑 な帳 票 をPDFで作 成 できます。 帳 票 のデザインはIM-PDFデザイナー(IOWebDoc)で作 成 します。 IM-PDFデザイナーの制 御 ファイルおよびPDFオブジェクトの詳 細 については、「APIリスト」およびIM-PDFデザイ ナー付 属 のオンラインマニュアルを参 照 してください。 複 数 アプリケーションサーバ環 境 でのIM-PDFデザイナーの利 用 ア プ リ ケ ー シ ョ ン サ ー バ を 複 数 配 置 し て い る 環 境 で IM-PDF デ ザ イ ナ ー を 利 用 す る に は 、 S torage Service上 でIM-PDFデザイナーを稼 働 します。これにより、生 成 したPDFファイルをStorage Serviceで 一 元 管 理 することができます。 <複 数 アプリケーションサーバ環 境 で、IM-PDFデザイナーを利 用 する> 100 intra-mart WebPlatform/AppFramework 15 エクステンション・モジュールの組 み込 みと操 作 15.1.2 IM-X Server 大 量 帳 票 出 力 やプリンタへのダイレクト出 力 、電 子 署 名 とタイムスタンプのサポートも可 能 な印 刷 モジ ュールです。XML対 応 の高 機 能 ビジネス帳 票 ソリューションで、オンデマンド印 刷 、ダイレクト出 力 など、 多 様 な機 能 を提 供 します。 さまざまな形 式 の帳 票 の生 成 ・出 力 ・配 信 が可 能 IM-X-Serverの帳 票 生 成 はXMLで定 義 されるため、電 子 化 (PDF、HTML、CSV、OPR)や印 刷 (ダイレ クト印 刷 、FAX送 信 )から検 索 ・入 力 フォームまで、1ソースマルチフォーマットで生 成 でき、開 発 工 数 を 削 減 することが可 能 です。基 幹 帳 票 生 成 から日 々の業 務 に必 要 なビジネスレポートまで、トータルソリ ューションを提 供 します。 きめ細 かい帳 票 作 成 が可 能 なデザインツールも合 わせて提 供 日 本 固 有 の複 雑 な罫 線 やページ単 位 のレポート、連 帳 ・単 票 ・サブレポート、ラベル、カスタムサイズ等 の設 計 に対 応 。動 的 グラフ生 成 、動 的 バーコード生 成 、電 子 署 名 、表 計 算 、複 数 オブジェクトのグルー プ化 による段 組 表 現 など、フレキシブルな表 現 でさまざまなビジネス帳 票 に対 応 します。 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 15.2 アクセスセキュリティ・モジュール拡張 標 準 で用 意 されているアクセスセキュリティ・モジュールのほかに、シングルサインオンを実 現 するエクス テンション・モジュールがオプションで用 意 されています。 15.2.1 IM-SecureSignOn(セキュア・サイン・オン) IM-SecureSignOnは、シングルサインオンを実 現 するツールです。社 内 のさまざまなWebシステムへのロ グインも、このSecureSignOnに一 度 ログインするだけ、すべての認 証 が完 了 します。独 自 のエージェント 型 リバースプロキシー方 式 により、適 応 範 囲 が広 く、導 入 ・運 用 が容 易 なシステムです。 IM-SecureSignOnの特 徴 大 規 模 、異 種 環 境 下 での利 用 が可 能 エージェント型 リバースプロキシー方 式 により、「クライアントの設 定 が不 要 」「大 規 模 環 境 に段 階 的 な導 入 が可 能 」「Web サーバ、OS を問 わない」というエージェントプラグイン、リバースプロキシー方 式 両 者 の 特 徴 を備 える。 すでに多 くの Web サーバが稼 動 しているときに段 階 的 な導 入 が可 能 (すべてのアクセスを集 中 する Proxy サーバは不 要 ) ACL はサーバごとに分 散 管 理 している。(集 中 管 理 機 能 を構 築 中 ) ほぼ Web サーバを選 ばない方 式 である 認 証 モジュールは WindowsNT、Solaris、Linux での動 作 を確 認 済 み。 CGI を使 って名 前 、メールアドレス、所 属 部 署 などのユーザ情 報 がとれる バックエンドユーザデータベースは LDAP 及 び NT ドメインをサポート。プラグインにより独 自 データもサポ ート可 能 電 子 署 名 によりアクセスチケットの改 竄 は不 可 能 102 intra-mart WebPlatform/AppFramework 15 エクステンション・モジュールの組 み込 みと操 作 シングルサインオンを実 現 する3つの方 式 シングルサインオンを実 現 するには、一 般 的 にリバースプロキシー方 式 とエージェントモジュール方 式 の2 つの方 式 が考 えられます。IM-SecureSignOnでは、これら両 者 の長 所 を兼 ね備 えた独 自 のエージェント 型 リバースプロキシー方 式 を採 用 しています。 詳 細 は、IM-SecureSignOn付 属 のマニュアルを参 照 してください。 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 15.2.2 IM-SecureBlocker インターネットに公 開 するWebアプリケーションのセキュリティ対 策 を低 コストで実 現 することができます。 脆 弱 な箇 所 にピンポイントで適 用 が可 能 なため、導 入 によるWebアプリケーション全 体 への影 響 を最 小 限 に抑 えることができます。 SecureBlockerは入 力 パラメータを検 査 し、自 動 的 に無 害 化 してくれるJavaクラスライブラリです。 IM-SecureBlockerを導 入 すると、次 のような効 果 が得 られます。 104 HTTP Request のパラメータの入 力 値 チェック機 能 の検 討 ・実 装 コストが削 減 できます。 開 発 者 のスキルに依 存 せず、Web アプリケーション脆 弱 性 対 策 が実 施 できます。 Web サイトで使 用 するパラメータごとにチェックを制 御 可 能 です。 クロスサイトスクリプティング、OS コマンドインジェクション、ディレクトリトラバーサル、SQL インジェクションの チェックが可 能 です。 intra-mart WebPlatform/AppFramework 15 エクステンション・モジュールの組 み込 みと操 作 15.3 ワークフロー・モジュール拡張 標 準 で用 意 されているワークフロー・モジュールのほかに、エクステンション・モジュールとして「IM-ワーク フローデザイナー(別 売 )」と「IM-FormatCreator(別 売 )」、「IM-Σ Serv/IM-SonicESB(別 売 り)」が用 意 されています。 ビジネスプロセスワークフローはアドバンスド版 に同 梱 です。 15.3.1 IM-ワークフローデザイナー プロセスが並 列 、結 合 、条 件 分 岐 するなど、より複 雑 な状 況 にも対 応 するワークフロー機 能 です。プロセ ス結 合 時 や分 岐 する際 の処 理 は、分 岐 処 理 、結 合 処 理 として設 定 し実 行 することができます。 IM-ワークフローデザイナーの詳 細 は、別 冊 の「ワークフローガイド」を参 照 してください。 15.3.2 IM-FormatCreator intra-mart上 で動 作 するドキュメントワークフローの起 票 画 面 (申 請 書 )を、ノンプログラミングで作 成 す るためのソリューション。ウィザード形 式 の画 面 にしたがって設 定 するだけで、ワークフローの申 請 画 面 を 作 成 することができるので、HTML、JavaScript、XMLなどのWeb画 面 作 成 言 語 、およびデータベースに 関 する知 識 を必 要 としない。作 成 した申 請 書 は、専 用 の連 携 画 面 で簡 単 にintra-martのワークフロー と連 携 させることができる。また、以 前 に起 票 したものを再 利 用 して効 率 よく起 票 することもできる。 詳 細 は、別 冊 「IM-Format Creator」を参 照 してください。 15.3.3 IM-EX申請システム 電 子 申 請 のための申 請 書 フォーマット画 面 にExcelシ ートを利 用 することができるソリューションです。 intra-martのワークフローと組 み合 わせて利 用 することで、申 請 ワークフローを設 定 だけでノンプラグラミ ングで作 成 することができます。書 式 設 定 やマクロはExcelの機 能 をそのまま利 用 することができるの で、入 力 チェックを行 うこともできます。入 力 した情 報 はデータベースの指 定 のテーブルに保 存 すること が可 能 です。 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 Excel様 式 さえ用 意 すれば、短 時 間 で申 請 書 をWeb化 することができます。 お使 いのExcelの様 式 を入 力 画 面 に活 用 し intra-mart のワークフロー連 動 することができます。 Excelの書 式 設 定 や提 供 するマクロを設 定 し、クライアントサイドで入 力 チェックが行 えます。 Excelに入 力 した情 報 は、データベースの指 定 のテーブルに保 存 可 能 です。 データベースに保 存 されている情 報 を指 定 のExcel様 式 で出 力 できます。 Excel様 式 の登 録 、入 力 チェック等 、すべて設 定 だけでプログラム言 語 の知 識 がいりません。 15.3.4 IM-SonicESB IM-SonicESBは企 業 内 に分 散 している複 数 の既 存 システムを連 携 する、バックエンドシステム統 合 プラ ットフォーム(ESB)です。システム間 のデータの一 貫 性 を保 証 する機 能 も実 装 しており、Webサービス同 士 を高 信 頼 に連 携 させるアプリケーションを、容 易 に開 発 することが可 能 です。 ビジネスプロセスワークフローモジュールと連 携 することで、バックエンドも含 めたダイナミックかつミッショ ンクリティカルなシステム統 合 が実 現 します。 106 intra-mart WebPlatform/AppFramework 15 エクステンション・モジュールの組 み込 みと操 作 15.4 外部ソフトウェア連携ソリューション 各 社 が提 供 する外 部 ソフトウェアを利 用 するための連 携 ソリューションが用 意 されています。 15.4.1 統合検索ソリューション IM-統 合 検 索 ソリューションは、(株 )ジャストシステムの「ConceptBase 」と連 携 することで、MS-Word 、 一 太 郎 、MS-Excel 、PDF ファイルなどさまざまなファイル形 式 のドキュメントから自 然 文 によるナレッジ 検 索 を行 うことができる文 書 検 索 システムです。 ConceptBaseサーバとStorage Service間 の接 続 モジュールを提 供 することにより、ConceptBaseの強 力 な文 書 検 索 機 能 を利 用 したシステムの構 築 が可 能 となります。また、検 索 した文 書 から、内 容 やド キュメントの要 約 をテキストで取 得 することもできます。 Conscept Base Searchは文 書 ファイルを対 象 とした検 索 、CB RDB Gateway はRDB内 の情 報 を対 象 とした検 索 、CBゲートウェイfor Lotus NotesはNotes DBを対 象 とした検 索 が可 能 となります。 15.4.2 マルチデバイスソリューション フレックスファーム社 のX-Servletの利 用 により、マルチデバイスへのコンテンツ配 信 が可 能 になります。 詳 細 については、X-Servlet付 属 のマニュアルを参 照 してください。 主 な特 徴 シングルURL ひとつのURLにアクセスすると、自 動 的 にアクセスされた機 種 を認 識 します。 シングルソース 1つのコードですべての国 内 移 動 体 通 信 会 社 のアクセス方 式 に対 応 します。 オートレイアウト アクセスされた機 種 に対 応 し、画 像 の変 換 やページの自 動 分 割 を行 います。 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 16 その他の機能 intra-mart WebPlatform/AppFrameworkには、次 のような機 能 も用 意 されています。 16.1 ライブラリ intra-mart WebPlatform/AppFramework以 外 にもユーザに公 開 関 数 をいくつか用 意 しています。ユ ーザは公 開 されているソースコードに自 由 に手 を入 れてカスタマイズすることができます。これらは、ファ ンクションコンテナ内 で[Procedure.メソッド名 ]という形 式 で呼 び出 し可 能 です。詳 細 は、「APIリスト」の 「ライブラリについて」を参 照 してください。本 機 能 は、スクリプト開 発 モデルのみが対 象 となります。 16.2 検索ストリーミング機能 大 量 データ検 索 時 の対 応 として、データベースから指 定 した件 数 ごとにレコードを取 得 して画 面 表 示 さ せるための関 数 (データベースフェッチメソッド)を用 意 しました。ワークフローの承 認 状 況 検 索 画 面 、申 請 状 況 検 索 画 面 では当 メソッドを組 み込 んだ画 面 をサンプルとして提 供 しています。詳 細 については 「APIリスト」を参 照 してください。 DatabaseManager.fetch(sql, stratRow, maxRow) 16.3 ソースセキュリティ機能 ソースセキュリティ機 能 とは、Webサーバ上 には画 像 ファイル(gifなど)、CSJS、appletなどHTMLから直 接 参 照 しなければならない最 低 限 度 のファイルだけを配 置 し、メインのプログラムやデータは Application RuntimeやResource Serviceの動 作 するService Platformに配 置 することで、Web経 由 で の不 正 ファイルダウンロードを未 然 に防 ぐための機 能 です。intra-mart は各 サーバがネットワーク接 続 により別 々のハードウェアで動 作 させることができるので、Webサーバと別 マシンで動 作 している Application RuntimeやResource Serviceのプログラムファイル、またはStorage Serviceに保 存 されて いるデータファイルなどをWebを経 由 して不 正 にダウンロードすることができません。 16.4 アプリケーション・ロック機能 アプリケーション・ロック機 能 (処 理 のトランザクション)を実 現 します。Lock というAPIを利 用 することで、 プログラムの直 列 処 理 を行 うことができます。また、このAPIは、アプリケーションサーバが分 散 している 場 合 においても、すべてのサーバで共 通 的 にロックを掛 けることができます(この機 能 は、Serialization Serviceを利 用 します)。詳 細 は「APIリスト」を参 照 してください。 108 intra-mart WebPlatform/AppFramework 16 その他 の機 能 16.5 一意情報の取得機能 このAPIは、Application Runtimeが分 散 している場 合 においても、すべてのApplication Runtimeでユニ ーク(一 意 )の情 報 を取 得 することができる機 能 です(この機 能 は、Server Managerの管 理 情 報 を元 に各 Application Runtimeがシステム一 意 となるように制 御 します)。詳 細 については「APIリスト」を参 照 してください。 Identifier.get() 16.6 データベースのストアドプロシジャーの呼び出し intra-mart からデータベースのストアドプロシジャーを呼 び出 すことができます。詳 細 は「API リスト」の 「Developer's Guide」-「スクリプト開 発 モデル」-「ビジネス・ロジック層 」-「アプリケーション共 通 モジュー ル」-「DatabaseManager」を参 照 してください。 16.7 ファイル操作 このアプリケーションは、Storage Serviceのシステムルート以 下 のファイルやディレクトリを操 作 するため のユーティリティです。ディレクトリやファイルの新 規 作 成 、ファイルの削 除 やアップロード、名 称 の変 更 、 テキスト編 集 などが行 えます。アップロードされたファイルはStorage Serviceに保 存 されます。 <ファイル操 作 画 面 > 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 16.8 データベース操作 データベース操 作 はデータベースに対 してSQL文 を直 接 実 行 するための簡 易 ツールです。 接 続 先 を選 択 後 、テキストエリアにSQL文 を記 入 し、[実 行 ]ボタンをクリックします。 <データベース操 作 画 面 > 16.9 LDAPとの連携 LDAP上 の情 報 に対 し、検 索 、更 新 、削 除 などが行 えます。詳 しくはAPIリストの「スクリプト開 発 モデル」 - 「 ア プ リ ケ ー シ ョ ン 共 通 モ ジ ュ ー ル 」 - 「 Module.ldap 」 を 参 照 し て く だ さ い 。 ま た 、 ロ グ イ ン ユ ー ザ を intra-martと LDAP間 で連 携 させること ができます。アドミニストレー タ・ガイド第 1章 「11 LDAPとの連 携 」を参 照 してください。 16.10 国際化対応 以 下 の機 能 は、国 際 化 (i18n)を考 慮 した設 計 および実 装 がされています。 スクリプト開 発 モデル im-J2EE Framework(Service Framework のみ) アプリケーション共 通 マスタ アクセスセキュリティモジュール これらを利 用 することにより、国 際 化 されたアプリケーションの開 発 や、各 アプリケーションの地 域 化 など が実 現 できます。 利 用 するロケールの種 類 は、運 用 開 始 前 に予 め決 定 してください。 運 用 中 にロケールを追 加 すると、特 にアプリケーション共 通 マスタでデータの不 整 合 が発 生 しアプリケーショ ンの動 作 に影 響 する可 能 性 があります。 機 能 の詳 細 については、下 記 ドキュメントをご覧 ください。 ・APIリスト ・im-J2EE Framework仕 様 書 ・アプリケーション共 通 マスタ説 明 資 料 ・アクセスセキュリティ仕 様 書 110 intra-mart WebPlatform/AppFramework 16 その他 の機 能 16.11 標準画面の作り方(共通画面デザイン) 以 下 のドキュメントが用 意 されています。 画 面 デザインガイドライン スタイルシート仕 様 書 画 面 デザインガイドラインに準 じたAPIも用 意 されています。API仕 様 は、画 面 デザインガイドラインのドキ ュメントに掲 載 されています。 これを参 考 に、共 通 化 APIを利 用 して画 面 を作 成 することにより、製 品 標 準 の画 面 と同 様 の画 面 デザ インでアプリケーション開 発 ができます。デザインが共 通 化 されると、他 の画 面 と見 た目 や操 作 性 が統 一 され、メニューから呼 び出 されたときに利 用 者 が違 和 感 無 くアプリケーションを操 作 できるなどのメリ ットがありますので、アプリケーション開 発 の際 には、デザイン統 一 の方 法 としてこのガイドラインの利 用 を検 討 してください。 intra-mart WebPlatform/AppFrameworkの持 つ各 画 面 ソースは、そのほとんどがプレーンな状 態 でインス トールされています。画 面 デザインガイドラインの適 用 方 法 や、APIの使 用 例 としてご活 用 ください。 16.12 ポータル画面の利用 intra-martのアプリケーションを作 成 する際 に、独 自 のポートレットを作 成 して、intra-martのポータル画 面 に表 示 させることができます。 ポータルとして表 示 させたい画 面 は、通 常 の画 面 ではなく、ポータルモジュールの規 約 にともない変 更 する 必 要 があります。ポータル用 のページ作 成 方 法 については、APIリストの[J2EE開 発 モデル]-[業 務 基 盤 ツー ル]-[ポータルモジュール]-[ポータル]-[開 発 ガイド]および[スクリプト開 発 モデル]-[業 務 基 盤 ツール]-[ポ ータルモジュール]-[ポータル]-[開 発 ガイド]を参 照 してください。 ポートレットに関 しては、アドミニストレータガイドの第 2章 「ログイングループ管 理 者 編 」の「10 ポータルの設 定 と操 作 」も参 照 してください。 第 3章 さまざまなコンポーネント群 (im-BizAPI)の利 用 112 intra-mart WebPlatform/AppFramework 16 その他 の機 能 Appendix Appendix 1 メッセージ設定 %Server Manager%/conf/messageディレクトリに、Javaのプロパティファイル形 式 でメッセージを設 定 します。 メッセージ設 定 の詳 細 は、「アクセスセキュリティ仕 様 書 」を参 照 してください。 こ こ で 設 定 し た メ ッ セ ー ジ を 取 得 す る に は 、 MessageManager オ ブ ジ ェ ク ト を 利 用 し ま す 。 MessageManagerには、メッセージIDからメッセージ文 字 列 を取 得 するgetMessage()メソッドが用 意 さ れています。このメソッドは、ログインした際 のロケールを元 にメッセージを取 得 します。 詳 細 は「APIリスト」のMessageManagerオブジェクトの記 述 を参 照 してください。 2 114 intra-mart WebPlatform/AppFramework 2 予約語一覧 2 予約語一覧 以 下 の用 語 は、intra-martの中 で予 約 語 として使 用 されていますので、使 用 することができません。 IMXXX (prefix が "IM(im)") _XXX(prefix が "_ (アンダースコア)") intra-mart API で使 用 されているクラス、およびグローバル関 数 名 (intra-mart API では大 文 字 を接 頭 辞 として使 用 しています) JavaScript、Java での予 約 語 Appendix 3 制限事項 アプリケーション作 成 時 のファイル名 およびJavaScript関 数 名 には次 のような制 限 があります。 3.1 ファイル名称 ファイル名 称 に、次 の文 字 は使 用 できません。 ¥ / : ; * ? " < > | & # [ ] ( ) { } (space) (tab) (全角文字等日本語は使用できません) ファイル名 とは、プレゼンテーションページ(.htmlファイル)とファイルコンテナ(.jsファイル)が対 象 です。データ ファイルはこれに含 まれません。 3.2 ID、コード intra-martで提 供 している機 能 において、すべてのID、コード(ユーザIDなど)には、以 下 に示 す文 字 を含 めることはできません。 ¥ / : , ; * ? ' " < > | & # + [ ] ( ) { } (space) (tab) (全角文字等日本語は使用できません) 3.3 JS関数 関 数 名 称 に、次 の文 字 は使 用 できません。 * < > [ ] (全角文字等日本語は使用できません) (その他、JavaScriptの仕様に依存します) サーバ上 で動 作 する関 数 に関 しての制 約 です。クライアント上 で動 作 する関 数 (HTML内 )に関 してはこれ に含 まれません。また、関 数 だけでなく、その関 数 の登 録 名 称 やメソッド名 にもこの制 約 は適 応 されます。 116 intra-mart WebPlatform/AppFramework 2 2 つの Web アプリケーションモデル ............................................ 8 A API リスト ............................................................................................ 7 C Client オブジェクト........................................................................ 21 E EJB ................................................................................................... 57 EJB コンポーネント ........................................................................ 57 あ アクセスセキュリティ・モジュール ............................................... 87 アプリケーション・ロック機 能 .................................................... 108 アプリケーション開 発 概 要 ......................................................... 10 アプリケーション共 通 モジュール ............................................... 84 アプリケーション共 通 マスタ unit ............................................... 92 い 一 意 情 報 の取 得 機 能 ............................................................. 109 え エクステンション・モジュール...................................................... 99 か F FormatCreator..........................................................................105 H Hello World .................................................................................... 14 外 出 設 定 ....................................................................................... 98 外 部 ソフトウェア接 続 モジュール .............................................. 86 外 部 ソフトウェア連 携 ソリューション........................................ 107 外 部 プロセス ................................................................................. 58 拡 張 <IMART>タグ ....................................................................... 48 画 面 共 通 モジュール ................................................................... 81 カレンダーunit................................................................................ 92 I IM-EX 申 請 システム ..................................................................105 i-mode unit .................................................................................... 96 i-mode の設 定 .............................................................................. 96 IM-PDF デザイナー ............................................................. 99, 101 IM-SecureSignOn ......................................................................104 IM-SonicESB ................................................................................106 IM-ビジネスプロセスワークフロー ............................................... 88 IM-ワークフローデザイナー ........................................................105 IM-統 合 検 索 オプション ............................................................107 き 起 動 と終 了 ...................................................................................... 2 業 務 基 盤 ツール .......................................................................... 87 勤 怠 管 理 ....................................................................................... 74 勤 怠 修 正 ....................................................................................... 76 く グラフ描 画 モジュール ................................................................. 82 グローバル関 数 ............................................................................ 50 J J2EE 開 発 モデル............................................................................ 8 JavaClass ...................................................................................... 52 L LDAP との連 携 ..........................................................................110 M Module.database オブジェクト.......................................... 24, 31 け 検 索 ストリーミング機 能 ............................................................ 108 こ 国 際 化 対 応 ................................................................................ 110 さ サンプル・アプリケーション .................................................. 73, 74 サンプルプログラムの実 行 ........................................................... 6 V ViewCreator ................................................................................ 90 し 自 動 認 証 .......................................................................................... 3 X XML パーサー ................................................................................ 59 XML 形 式 のデータ ...................................................................... 59 す スクリプト開 発 モデル ............................................................. 8, 10 ストアドプロシジャー .................................................................... 109 せ ほ 制 限 事 項 .....................................................................................116 セッションタイムアウト値 .............................................................. 21 ポータル画 面 ...................................................................... 90, 111 ポータルモジュール ...................................................................... 89 ホーム画 面 ....................................................................................... 5 そ ソースセキュリティ機 能 .............................................................108 ま マルチデバイスソリューション ................................................... 107 て データベースからデータを取 得 する ......................................... 22 データベース操 作 ......................................................................110 デバッグ .......................................................................................... 64 デバッグ API .................................................................................. 65 添 付 ファイル付 きメール ............................................................. 45 め メール送 信 ..................................................................................... 43 メール連 携 モジュール ................................................................. 84 メッセージ設 定 ............................................................................ 114 メニュー構 成 .................................................................................... 4 メニューの表 示 ................................................................................ 4 は バッチ管 理 モジュール ................................................................. 89 も モジュール ...................................................................................... 80 ひ ビジネスロジック ............................................................................ 10 ビュークリエイター ビュークリエイターの概 要 .................................................... 90 標 準 画 面 .....................................................................................111 ユーザインタフェース ................................................................... 10 ユーザ定 義 関 数 .......................................................................... 50 ユニット............................................................................................ 92 よ ふ ファイル・アップロード.................................................................... 34 ファイル・ダウンロード ................................................................... 38 ファイルアップロード unit ..................................................... 95, 96 ファイルサーバ ............................................................................... 34 ファイル操 作 ................................................................................109 ファイルダウンロード unit ............................................................. 94 ファイルの削 除 .............................................................................. 40 ファンクション・コンテナ ........................................................ 10, 11 フォルダ ............................................................................................. 4 プレゼンテーション・ページ ......................................................... 10 へ ページ ................................................................................................. 4 118 ゆ intra-mart WebPlatform/AppFramework 予 約 語 .......................................................................................... 115 ら ライブラリ ...................................................................................... 108 わ ワークフロー ....................................................................................... 5 ワークフロー・モジュール .............................................................. 88 プログラミングガイド Ver6.0 2008年 11月 第 3版 スクリプト開 発 モデル編