...

Document 1016245

by user

on
Category: Documents
45

views

Report

Comments

Transcript

Document 1016245
IBM Rational Business Developer V7.5.1
– Enterprise Generation Language (EGL) Frequently Asked Questions –
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
1
EGL FAQ 集
Disclaimer
この資料に含まれる情報は可能な限り正確を期しておりますが、日本アイ・ビー・エム株式会社ならび
に日本アイ・ビー・エム システムズ・エンジニアリング株式会社の正式なレビューを受けておりません。
当資料は、資料内で説明されている製品の仕様を保証するものではありません。
この資料の内容は 2010 年 9 月現在の情報であり、製品の新しいリリース、Fix などによって動作、仕
様が変わる可能性があるのでご注意下さい。
資料のすべてあるいは一部を問わず、日本アイ・ビー・エム・システムズ・エンジニアリング株式会社の
許可なく使用、改変することを禁じます。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
2
EGL FAQ 集
目次
はじめに ......................................................................................................................................... 5
1. 一般編 ...................................................................................................................................... 6
Q1
クライアントの
クライアントの実行環境で
実行環境でサポートされる
サポートされる OS について ........................................................ 6
Q2
EGL Currency Sign の取り扱いについて..........................................................................
6
いについて
Q3
RBD を使った EGL のリファクタリング.................................................................................
リファクタリング
7
Q4
EGL 単体テスト
9
単体テストの
テストの実施ツール
実施ツール.............................................................................................
ツール
Q5
EGL でのサブストリング
でのサブストリング(
部分文字列) ................................................................................ 9
サブストリング(部分文字列)
Q6
EGL における暗黙
10
における暗黙キャスト
暗黙キャストについて
キャストについて..................................................................................
について
Q7
EGL レコード・
レコード・パーツ内
パーツ内での動的配列
での動的配列フィールド
動的配列フィールドの
フィールドの定義 .................................................... 11
Q8
EGL レコード・
レコード・パーツの
パーツの構造化について
構造化について ........................................................................... 12
Q9
EGL 構造化レコード
構造化レコードでの
レコードでの文字化
での文字化け
文字化け .................................................................................... 13
Q10 ExternalType 利用時の
利用時の Java でのコンパイルエラー
でのコンパイルエラーについて
コンパイルエラーについて ......................................... 13
Q11 Java アノテーション機能
アノテーション機能の
設定方法について...................................................................
15
機能の設定方法について
について
Q12 EGL のアノテーションと
アノテーションと Java のアノテーションの
アノテーションの関係について
関係について ........................................ 16
Q13 同一プログラム
同一プログラム間
での相互 Call....................................................................................... 16
プログラム間での相互
Q14 EGL call ステートメントの
ステートメントの記述方法による
記述方法による違
による違い ................................................................. 18
Q15 変数を
変数を使用した
使用したCALL
18
したCALLについて
CALLについて.........................................................................................
について
Q16 EGL call ステートメント
ステートメントで
メントでリテラル呼
リテラル呼び出しをした場合
しをした場合の
場合のアプリ分割
アプリ分割 .................................. 19
Q17 WAR をまたがる call 実行時に
実行時に ClassNotFoundException が発生する
発生する.....................
19
する
Q18 RBD の「すべてビルド
すべてビルド」
ビルド」について ...................................................................................... 20
Q19 生成の
生成の出力先および
出力先およびビルド
設定について ........................................................... 22
およびビルド記述子
ビルド記述子の
記述子の設定について
Q20 ビルド記述子
22
ビルド記述子の
記述子の system オプションについて
オプションについて.....................................................................
について
Q21 生成される
生成されるファイル
出力先について .............................................................................. 22
されるファイルの
ファイルの出力先について
Q22 .ir ファイルが
ファイルが作成される
作成されるフェーズ
されるフェーズについて
フェーズについて ........................................................................ 22
Q23 RBD
Dにおけるビルド
におけるビルド・
生成操作時のファイル更新
ファイル更新について
ビルド・生成操作時の
更新について ................................................ 24
Q24 EGL RUI の生成モード
25
生成モードの
モードの設定について
設定について............................................................................
について
Q25 EGL RichUI アプリケーションで
アプリケーションで hidden 項目を
項目を作成する
作成する方法
25
する方法..........................................
方法
Q26 EGL RichUI で他の Web ページを
26
ページを別ウィンドウで
ウィンドウで表示させる
表示させる方法
させる方法...................................
方法
Q27 ActiveX との連携
との連携について
連携について .............................................................................................. 27
Q28 EGL で HTTP ヘッダーに
27
ヘッダーにアクセスする
アクセスする方法
する方法......................................................................
方法
Q29 EGL RichUI の Grid ウィジェット内
ウィジェット内のデータ行
ータ行への ID の割り振り.................................... 28
Q30 JavaScript から RUIHandler の関数を
28
関数を呼び出す方法.....................................................
方法
Q31 EGL RichUI における一定間隔
における一定間隔での
更新について ......................................... 31
一定間隔での画面表示
での画面表示の
画面表示の更新について
Q32 環境依存の
環境依存の変数値とその
変数値とその外部化
とその外部化 ...................................................................................... 31
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
3
EGL FAQ 集
Q33 生成の
生成の出力先および
出力先およびビルド
設定について ........................................................... 33
およびビルド記述子
ビルド記述子の
記述子の設定について
2. データベース/SQL
編 .............................................................................................................. 34
データベース
Q1
RBD から直接
から直接 EGL を起動する
起動する際
データソース設定について
する際のデータソース設定
設定について ....................................... 34
Q2
EGL-DB 接続の
接続の Schema の設定について
設定について ...................................................................... 35
Q3
ビルド記述子
ビルド記述子における
接続情報の優先順位
優先順位(1) .......................................................... 36
記述子における DB 接続情報の
Q4
ビルド記述子
ビルド記述子における
記述子における DB 接続情報の
接続情報の優先順位(2)
優先順位 .......................................................... 37
Q5
アプリケーションで
アプリケーションで、DB 接続を
接続を切り替える方法
える方法について
38
方法について....................................................
について
Q6
EGL で実行した
実行した SQL ステートメントの
ステートメントの取得方法について
取得方法について ................................................. 39
Q7
SQL の get 構文に
構文に変数として
変数として指定
取得するレコード
39
として指定する
指定する動的配列
する動的配列で
動的配列で取得する
するレコード件数
レコード件数について
件数について............
について
3. 他プログラム/ファイル
40
プログラム ファイルとの
ファイルとの連携編
との連携編.............................................................................................
連携編
Q1
EGL から Kshell の呼び出し ........................................................................................... 40
Q2
シェルから
40
シェルからバッチ
からバッチ EGL の起動方法...................................................................................
起動方法
Q3
EGL から複数
から複数ファイル
複数ファイルに
ファイルにアクセス ..................................................................................... 41
Q4
生成した
生成したバッチプログラム
したバッチプログラムの
バッチプログラムの起動方法 ............................................................................... 41
Q5
EGL プログラムの
プログラムの戻りコード ............................................................................................. 42
Q6
バッチプログラムから
42
バッチプログラムから起動可能
から起動可能な
起動可能な JAR ファイルの
ァイルの作成方法...............................................
作成方法
Q7
EGL で CSV ファイルを
ファイルを作成する
作成する方法
43
する方法について
方法について.................................................................
について
Q8
CSV ファイルに
45
ファイルに書き出すデータについて
データについて...........................................................................
について
Q9
CSV ファイルの
ファイルの Open/Close のタイミングについて
タイミングについて..........................................................
46
について
Q10
CSVRecord を利用した
利用した CSV ファイルの
ファイルの作成について
作成について ................................................... 46
Q11 EGL から XML ファイル生成
ファイル生成の
実装方法
47
生成の実装方法..........................................................................
Q12 EGL からの ZIP ファイル(
ファイル(パスワードつき
パスワードつき)
つき)の作成について
作成について .............................................. 47
Q13 ファイルダウンロードの
ファイルダウンロードの実装方法について
実装方法について.........................................................................
48
について
Q14 EGL でのファイルアップロード
でのファイルアップロードについて
ファイルアップロードについて ............................................................................ 49
4.
EGL VAGen Migration 編 ................................................................................................... 50
Q1 画面間での
画面間でのデータ
でのデータの
データの受渡し
受渡し方法 ......................................................................................... 50
Q2 VGWebTransaction のスレッド数
スレッド数について ....................................................................... 51
Q3 各種 EGL プロパティー・
プロパティー・ファイルからの
ファイルからの値
からの値の取得 ............................................................... 51
Q4 web.xml や JVM カスタム・
カスタム・プロパティーなどの
プロパティーなどの値
などの値の取得方法 ............................................ 52
5.
その他
その他 ................................................................................................................................... 54
Q1 EGL RichUI でのセッション
でのセッション情報取得
セッション情報取得について
情報取得について ................................................................... 54
Q2 EGLSDK のエラーコードについて
54
エラーコードについて......................................................................................
について
Q3 EGLSDK で生成された
生成された javascript ファイル含
ファイル含まれる絶対
まれる絶対パス
55
絶対パスについて
パスについて.............................
について
参考資料リンク
参考資料リンク ............................................................................................................................. 56
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
4
EGL FAQ 集
はじめに
このガイドは、EGL を使って開発する際に、これまでに聞かれた質問をまとめ FAQ 集としています。
記載されていない機能の使い方については、マニュアル等ご参照ください。
・ガイドが
ガイドが対象とする
対象とする製品
とする製品の
製品のバージョン
– IBM Rational Business Developer V7.5.1.5
※当ガイドは IBM Rational Business Devloper V7.5.1.5 (当ガイド作成の 2010 年 9 月時点の最新
Fix バージョン) の EGL を前提に書いております。バージョンが異なることで、挙動が変わる可能性も
あります。その場合はフィックスのリリース・ノートなどを参照し、ご確認ください。
なお、IBM Rational Business Developer は、当資料中 RBD と略称で記載しています。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
5
EGL FAQ 集
1. 一般編
一般編
EGL のコーディングや関数、ツールに関する一般的な質問をまとめています
Q1 クライアントの
クライアントの実行環境で
実行環境でサポートされる
サポートされる OS について
EGLへアクセスするクライアントは、64bit OSのマシンでも、大丈夫でしょうか。
クライアントの設定や、制限事項などあれば、教えてください。
A1. 回答
EGLから生成されたコードが稼働するサーバー (プラットフォーム) にはサポート条件がありますが、実行するクラ
イアント (プラットフォーム) には特別なサポート要件はありません。JavaScriptが稼働するブラウザーを搭載して
あればよいです。
Q2
EGL Currency Sign の取り扱いについて
COBOLからEGLへの変換を予定していますが、COBOLプログラム内で、”¥”(円マーク)を使用しています。英語
環境でソースを確認したところ、通貨記号¥がバックスラッシュに文字化けしてしまいます。これは言語環境の違い
でしょうか?
A2. 回答
「円マーク」が「バックスラッシュ」に文字化けしているということですが、表示フォントの問題が考えられます。また、
英語で開発環境の文字コードがUTF-8であることをご確認ください。
RBDにおける英語環境でのテキスト・フォントは、デフォルトが「Courier New 10」になっております。日本語環境で
のデフォルト・テキスト・フォント「MS ゴシック 10」です。「Courier New 10」では、「MS ゴシック 10」での「円マー
ク」に該当する文字コードに対する文字イメージとして「バックスラッシュ」が割り当てられています。
以上により、英語環境であっても「MS ゴシック 10」を指定すると、「円マーク」として表示されます。
なお英語環境で、EGLソースから生成したJavaプログラムを日本語で実行しても、「円マーク」として表示されま
す。
■言語環境の違いによる、”¥”(円マーク)の違い
英語環境(eclipse.ini に-Diuser.language=en –Duser.country=US を指定)で RBD を起動した状態
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
6
EGL FAQ 集
実行結果1:デフォルト・フォント「Courier New 10」での表示
実行結果2:フォントに「MS ゴシック 10」を指定した場合の表示
フォントの設定を変更しても変わらない場合、COBOLからEGLへのコンバージョン時の文字コードが適切でないこ
とが考えられます。COBOLでのCCSIDおよび「円マーク」のHex値と、EGLソース・コード内のCCSIDおよび「円マー
ク」に該当する文字のHex値を比較し、変換が正しく行われている状態であることを見て頂ければと思います。
Q3
RBD を使った EGL のリファクタリング
リファクタリング
RBDで、EGLのソースコードをリファクタリングする場合、どの程度自動で実行できますか。
A3. 回答
EGL (RBD)で提供されているリファクタリングの機能は、以下の通りです。
(リファクタリング機能を使用するには、プロジェクト・エクスプローラーなどのコンテキスト・メニュー(右クリックして
表示されるメニュー) で「リファクタリング」を選択して実行します。)
1. プロジェクト名の変更
(自動変更されるもの)
・
そのプロジェクトのビルド記述子オプションのgenProject 値
・
そのプロジェクトの.eglproject ファイル内の、ビルド記述子のパス名(プロジェクトのプロパティーの「EGLデフ
ォルトビルド記述子」に相当)
・
EGLプラグイン・プロジェクト内のプログラム・パーツの場合、EGLは、plugin.xml ファイルのプログラムへの
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
7
EGL FAQ 集
参照を変更する
※
変更するかどうか選択可能
(変更されないもの)
・
上記以外のもの。
例えば、以下のようなもので、これらは手動で変更する必要があります。
・他のプロジェクトからの EGL ビルド・パス、プロジェクト参照
・他のプロジェクトのビルド・ファイルのプロジェクトへの参照
■参考:RBD V7.5 InformationCenter “Renaming an EGL project”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/topic/com.ibm.egl.pg.doc/topics/pegl_core_project
_renaming_tsk.html
2. パッケージ名の変更
パッケージ名変更時におけるリファクタリング機能はありません。
3. ソース・ファイル名の変更
(自動変更されるもの)
・
生成可能パーツが含まれているファイルの場合、そのパーツ名
・
生成可能パーツが含まれているファイルの場合(プログラム、レコード定義、ファンクションなど)、それを参照し
ている参照名
※
例えば、呼び出し先プログラムのファイル名を変更する場合、そのプログラムを呼び出す側を変更します。
変更するかどうか選択可能
■参考:RBD V7.5 InformationCenter “Renaming a source file”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/topic/com.ibm.egl.pg.doc/topics/pegl_core_renam
e_file_tsk.html
4. パーツ名の変更
(自動変更されるもの)
・
そのパーツを参照している参照名
例えば、レコード・パーツを名前変更する場合、そのレコードを参照している宣言を変更します。ここでいうパ
ーツとはRecordデータ・パーツ、DataItemデータ・パーツ、datatableパーツです。
※
ファンクション名には、リファクタリングはありません。
変更するかどうか選択可能
■参考:RBD V7.5 InformationCenter “Renaming parts”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/topic/com.ibm.egl.pg.doc/topics/pegl_core_renam
e_part_tsk.html
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
8
EGL FAQ 集
Q4
EGL 単体テスト
単体テストの
テストの実施ツール
実施ツール
JavaでいうJUnitやFindBugsなどのように、EGLで単体テストを実施するためのツールはありますか?
A4. 回答
残念ながら単体テスト用のツール群は提供されてはおりません。ツールを利用する場合には、EGLから生成した
Javaコードに対して適用することになります。
参考までに、ユーザーが独自に作成したJUnitに近いものが、EGL Cafeに公開されています。
■参考:developerWorks:EGL Cafe:EGLDoc-EGLUnit
http://www.ibm.com/developerworks/forums/thread.jspa?threadID=337533&tstart=60
Q5
EGL でのサブストリング
でのサブストリング(
サブストリング(部分文字列)
部分文字列)
EGLで、文字列のサブストリングを実施した場合の動作についての質問です。RBD V7.5 Information Center
“Substring” に使用例が記載されていますが、マルチ・バイト・キャラクター・セットで保持される文字列に対して、
サブストリングを行った場合、どのような挙動になるのでしょうか。例えば、変数myVarに対し「あいうえお」という文
字列が保持されているとき、myVar[2:3] というサブストリングを実施した場合、どのように文字が切り出されるの
でしょうか?
また、myVarの変数のタイプにより、上記オペレーションの動作に違いは出てくるのでしょうか? 例えば、文字単位
で切り出される時と、byte単位で切り出される時があるのでしょうか?
その他、MBCSを使用している場合のサブストリングに対して、注意事項等があれば教えてください。
A5. 回答
半角文字および全角文字の混合であっても、EGLのサブストリングでは、あくまで文字単位でカウントして抜き出し
ます。
HEX型に関しては、4ビット単位 (すなわち0~Fの文字単位) でのカウントで抜き出しが行われます。なお、
RichUIプロジェクト内ではstring型のみ利用可能です。
UTF-8環境のRBDを用い、RichUI、Web両プロジェクトで、各プリミティブ・データ型におけるサブストリングのテス
トを実施した結果を以下に紹介します。
■検証結果
【string型】:RichUIプロジェクト
入力文字列
あいうえお
ABCDE
AあBいCう
アあイいウう
アイウエオ
[1:3] (1文字目から3文字目)
あいう
ABC
AあB
アあイ
アイウ
[2:3] (2文字目から3文字目)
いう
BC
あB
あイ
イウ
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
9
EGL FAQ 集
【string型 / dbchar型 / mbchar型】:Webプロジェクト
入力文字列
あいうえお
ABCDE
AあBいCう
アあイいウう
アイウエオ
[1:3] (1文字目から3文字目)
あいう
ABC
AあB
アあイ
アイウ
[2:3] (2文字目から3文字目)
いう
BC
あB
あイ
イウ
【HEX型】:Webプロジェクト
入力文字列
1234567890ABCDEF
[1:3] (1文字目から3文字目)
123
[2:3] (2文字目から3文字目)
23
Q6
EGL における暗黙
における暗黙キャスト
暗黙キャストについて
キャストについて
下記の(1)と(2)の場合、EGLではどのような暗黙キャストもしくは例外処理が行われますか。
(1) Char (5) である変数に、 '01234567890' を代入した時
(2) Num (2) である変数に 99 + 1 を代入した時
A6. 回答
(1). char(5)に対して10桁の文字を代入した場合は、最初の5桁がchar(5)の変数に格納されます。
■コード例
cVar char(5) = "1234567890";
sysLib.writeStdout(cVar);
■実行例
(2).num(2)に対して3桁の数字を代入した場合にはオーバーフローとなるので、runtimeExceptionが発生します。
■コード例
nVar num(2);
try
nVar = 100;
onException (e RuntimeException)
sysLib.writeStdout("runtime error has occurred. Message ID is ¥""
+ e.messageID + "¥"");
end
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
10
EGL FAQ 集
■実行例
Q7
EGL レコード・
レコード・パーツ内
パーツ内での動的配列
での動的配列フィールド
動的配列フィールドの
フィールドの定義
BasicRecordタイプのレコード定義に、動的配列のフィールドを定義する事は可能でしょうか?
A7. 回答
Recordパーツ内で、動的配列を定義することが可能です。動的配列を定義したフィールドに対し、Programパーツ
においてappendElement() 関数を使って値を代入することができます。
■コーディング例
package programs;
program Program01 type BasicProgram {}
function main()
rec01 Record01;
var01_temp unicode(10);
sourceSubstringIndex int = 1;
sourceSubstringLength int = 3;
rec01.var01.appendElement("1");
rec01.var01.appendElement("2");
rec01.var01.appendElement("3");
for (i int from 1 to rec01.var01.getSize() by 1)
if (i == 1)
var01_temp = rec01.var01[i];
else
var01_temp = var01_temp[1:i - 1] + rec01.var01[i];
end
end
sysLib.writeStdout(var01_temp);
end
end
Record Record01 type BasicRecord
var01 unicode(1)[0];
//ࢎunicode(1)の動的配列として宣言しています。
end
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
11
EGL FAQ 集
■上記サンプルの実行イメージ
Q8
EGL レコード・
レコード・パーツの
パーツの構造化について
構造化について
CSVRecordやBasicRecord などの構造化レコード実装方法についての質問です。
構造化レコードを定義する際、下記例のように、対象フィールドにレベル番号を付与するようですが、番号を付与
するためのルールはありますか? また、構造化されたレコードに対し、データの設定、取得は、どのように実装す
るのでしょうか。
■構造化レコード例
record CustomerRecord type BasicRecord
10 phoneNumber char(10);
20 areaCode char(3);
20 localNumber char(7);
end
A8. 回答
CSVRecordでは構造化レコードはサポートされていないため、BasicRecordに対するレコード番号について回答
します。BasicRecordに対し、第一階層 < 第二階層 < 第三階層… という関係で番号を付与することになりま
す。なお、同一階層の変数については同じ番号を振っておく必要があります。
構造化レコードのデータへのアクセス方法ですが、下記例のように、直接最下層の変数にアクセスする方法、また
は、第一階層から順にアクセスしていく方法、いずれも可能です。
■データアクセス・ロジック例
function getData()
areaCode = customerRecArray[1].areaCode;
localNumber = customerRecArray[1].phoneNumber.localNumber;
end
■参考: RBD V7.5 Information Center “Record Part”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/topic/com.ibm.egl.lr.doc/topics/regl_core_record_
part.html
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
12
EGL FAQ 集
Q9
EGL 構造化レコード
構造化レコードでの
レコードでの文字化
での文字化け
文字化け
以下のように EGL の構造化レコードで、unicode 型を使用すると文字化けしますが、これは仕様ですか?
【正しく処理できる例】
record TestRecordUnicodeOK type BasicRecord
1 WORK_AREA;
2 WK_FIL unicode(15);
:char(30)
:unicode(15)
3 WK_CUBE unicode(7);
:unidode(7)
3 WK_FUDO unicode(7);
:unicode(7)
3 WK_FILLER unicode(1);
:unicode(1)
end
【正しく処理できない例】
record TestRecordUnicodeNG type BasicRecord
1 WORK_AREA;
:char(30)
:char(30)
2 WK_FIL;
3 WK_CUBE unicode(7);
:unicode(7)
3 WK_FUDO unicode(7);
:unicode(7)
3 WK_FILLER unicode(1);
:unicode(1)
end
A9. 回答
仕様です。データ型の指定がない場合、char型として扱われます。
下位の全てのデータ型がunicodeの場合、上位のレコードにも明示的にunicode型を指定して下さい。
構造化レコードの取り扱いについては、以下に注意してください。
・最下位レベルの変数が同一データ型であり、上位レベルの変数で直接、データ入出力を行いたい場合には、
当該レベルの変数に対してデータ型の明示宣言が必要となる
・その場合は、データ型を宣言しているため、当該レベル以下は変数としてサイズ制限が発生する
・複数のデータ型をまとめるレベルの変数ではデータ宣言はない(できない)ためサイズ制限は発生しないが、
当該レベルの変数を直接用いたデータ入出力は実施すべきでない
Q10 ExternalType 利用時の
利用時の Java でのコンパイルエラー
でのコンパイルエラーについて
コンパイルエラーについて
ExternalTypeでJavaのString.splitを利用しようとした場合に、EGLから生成したJavaでコンパイルエラーが発生
します。(EGLではコンパイルエラーは発生していません。)
コンパイルエラーの回避方法はありますでしょうか?
splitの戻り値はString{}です。JavaのString[] は、EGLのデータ型に対応しないのでしょうか?
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
13
EGL FAQ 集
■ExternalTypeの定義
ExternalType javaString type JavaObject
{javaName = "String", PackageName = "java.lang"}
function split(expr String in) returns(string[]);
constructor(str string in);
end
■ExternalType関数の呼び出し
strTemp string = "aaa,bbb,ccc,eee";
js javaString = new javaString(strTemp);
/// split 使用
strList string[] = js.split(",");
A10. 回答
EGLでの動的配列は、javaではListとして扱われます。
従って、戻り値が配列であるjavaの関数などは、一旦、listに変換してからEGLで受け取る必要があります。
逆に、EGLでの動的配列は、javaではlistとして受け取る必要があります。
以下に、String.splitを使用して文字列を分割した値を受け取る場合のサンプル・コードを添付します。
■EGL側ソース
program callJava2 type BasicProgram{}
function main()
strTemp string = "aaa,bbb,ccc,eee";
SysLib.writeStdout("original data : " + strTemp);
retTemp string[] = cj2.func1(strTemp);
SysLib.writeStdout("*** Array in EGL *** ");
for(i int from 1 to retTemp.getSize())
SysLib.writeStdout("Index: " + i + " Value: " + retTemp[i]);
end
end
end //end-program
externalType cj2 type JavaObject{javaName = "calledJava2", packageName = "eglJava"}
static function func1(strVar string in) returns(string[]);
end
■Java側ソース
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
14
EGL FAQ 集
public static List<String> func1(String st) {
ArrayList<String> st1 = new ArrayList<String>();
System.out.println("recieved data : " + st);
String[] arr = st.split(",");
System.out.println("*** Array in Java *** ");
// array → list 変換
for (int i = 0; i < arr.length; i++) {
System.out.println("Index"+ i + ": " + arr[i]);
st1.add(arr[i]);
}
return st1;
}
■実行結果
original data : aaa,bbb,ccc,eee
recieved data : aaa,bbb,ccc,eee
*** Array in Java ***
Index0: aaa
Index1: bbb
Index2: ccc
Index3: eee
*** Array in EGL ***
Index: 1 Value: aaa
Index: 2 Value: bbb
Index: 3 Value: ccc
Index: 4 Value: eee
Q11 Java アノテーション機能
アノテーション機能の
機能の設定方法について
設定方法について
EGLからJavaを生成した際、Javaのアノテーション機能を使用しないようにするにはどうすればよいですか。
A11. 回答
以下の手順で、設定することが出来ます。
1.
ワ ー ク ス ペ ー ス 画 面 左 側 の 「 プ ロ ジ ェ ク ト ・ エ ク ス プ ロ ー ラ ー 」 に て 「 EGL Web プ ロ ジ ェ ク ト 名 」 →
「WebContent」→「WEB-INF」→「web.xml」をダブル・クリックします。
2.
「Web アプリケーション・デプロイメント記述子エディター」が表示されます。エディター画面右側の「詳細プロ
パティー」にて、「メタデータ完了」に「true」を設定します。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
15
EGL FAQ 集
Q12 EGL のアノテーションと
アノテーションと Java のアノテーションの
アノテーションの関係について
関係について
EGLのアノテーションは、「Java EE5モジュール(Servlet 2.5もしくはEJB 3.0)」のアノテーションと関係があります
か?
A12. 回答
EGLのアノテーションは、データアイテム定義などで各定義に注釈をつけるという意味で使われている用語です。
Java5のアノテーションの機能を受けてはいますが、同じものではありません。
Q13 同一プログラム
同一プログラム間
プログラム間での相互
での相互 Call
同一プログラム間での相互Call (call-calledの関係が循環) は、どのように実装したらよいでしょうか。
A13. 回答
EGLにおけるプログラム間の相互呼び出しに関して、テストを実施いたしました。
EGLとして文法上の問題は特になく、再帰的に実行されるプログラムとして生成が可能です。
EGLソースの検証時点で、自分自身がどこで呼び出されているかは、検査されていないと考えられます。
以下は EGL で相互呼び出しをした時の例です。
■図:相互呼び出しイメージ
Program03ではProgram04を、Program04ではProgram03をcallしています。
■相互呼び出しのサンプル・ソース
Program02.egl
program Program02 type BasicProgram
function main()
call Program03(1);
end
end
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
16
EGL FAQ 集
Program03.egl
program Program03 type BasicProgram(i int) {}
function main()
if (i > 100)
sysLib.writeStdout("Program03 ended because the counter
exceeded 100.");
exit;
else
call Program04(i);
end
end
end
Program04.egl
program Program04 type BasicProgram(i int) {}
function main()
sysLib.writeStdout("current counter is " + i + ".");
i = i + 1;
call Program03(i);
end
end
■実行例
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
17
EGL FAQ 集
Q14 EGL call ステートメントの
ステートメントの記述方法による
記述方法による違
による違い
EGLのcallステートメントでは、文字列で他のプログラムを呼び出す場合と、プログラム名を指定して呼び出す場合
がありますが、それぞれについて考慮点を教えてください。
A14. 回答
callステートメントで他のプログラムを呼び出す方式には、「直接のパーツ参照 (引用符なし)」、「リテラル文字列
(引用符付き)」呼び出しの2つがあります。
「直接のパーツ参照」においては、EGLソースとして、スコープ内に当該プログラム・パーツが存在しているかが検
査されます。別プロジェクト上のプログラム・パーツを参照する場合は、プロジェクト間で適切なEGLビルド・パスを
設定しておく必要があります。
一方、「リテラル文字列」では、当該プログラム・パーツのEGLソースが、スコープ内に存在するかは検査されませ
ん。
全てを「直接のパーツ参照」とする場合には、スコープとするプロジェクトを全て同一ワークスペース上に配置する
必要があります。
【EGLのプログラム名を指定して呼び出す例】
call KOJOHO(KJH_O_RTN)...
← クラスがないとコンパイルエラーになる
【文字列で他のプログラムを呼び出す例】
call "KOJOHO"(KJH_O_RTN)...
← 実行時にしかクラスがないことが分からない
なお、「直接のパーツ参照 (引用符なし)」と「リテラル文字列 (引用符付き)」のどちらでコーディングしても、生成さ
れる.java ファイルのソースコードは同じです。
以上のことから、アプリケーションで使用するプロジェクトが全て単一のワークスペースに置かれ、かつ相互の
EGLビルド・パスが適切に設定された環境でcall対象となるEGLソースがスコープ内に存在するのであれば、生成
時のエラー検知のためにも「直接のパーツ参照」とするのがよいでしょう。
逆に複数のワークスペースに配置、もしくはJavaビルド・パス、もしくはJava EE モジュール依存のみ設定し、
Java実行モジュール(.classファイル)のみ参照させる場合は、「リテラル文字列」呼び出しが必要になります。
Q15 変数を
変数を使用した
使用したCALL
したCALLについて
CALLについて
EGL上で、プログラムに変数を使ってCALLするEGLプログラム (例:CALL ”ProgramA”) が他パッケージにある
場合、LinkageTableを指定することで、生成されるJavaにCALL対象のプログラムのパッケージがハードコーディ
ングされます。
では、変数を利用したCALLをする場合は、どのようなLinkageTableを指定すればよいでしょうか?
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
18
EGL FAQ 集
■例
pgmID = setProgramID();
←他パッケージのプログラムをセット
call pgmID;
A15. 回答
プログラム名を変数で指定する場合は、以下のようにremoteCallのタイプでlinkageプロパティーを指定します。
remoteBind = RUNTIME により、これらのlinkageプロパティーは実行時に参照されることになります。
■例
<name = PGMA
remoteBind = RUNTIME
remoteComType = DIRECT
package = com.sample.package1>
<name = PGMB
remoteBind = RUNTIME
remoteComType = DIRECT
package = com.sample.package2>
<name = *
remoteBind = RUNTIME>
※PGMA、PGMB = 変数の値
※name=* のエントリーは全てのプログラム名に相当するエントリーですので、一番下に置きます。
※実行時にこの linkage プロパティーを参照することになりますので、call されるプログラムは、すべて登録する必
要があります。
Q16 EGL call ステートメントで
ステートメントでリテラル呼
リテラル呼び出しをした場合
しをした場合の
場合のアプリ分割
アプリ分割
EGLのcallステートメントで、文字列で他のプログラムを呼び出ようにした場合、WASにデプロイする単位はどのよ
うに分割できるのかを確認させてください。
呼び出し先のプログラムは、呼び出し元プログラムと同一WAR、もしくは、同一EARファイル内に存在している必
要はありますか?
A16. 回答
パッケージにはJ2EEパッケージを使い、callはローカル呼び出しで行うという前提で回答します。
この場合、call側、callされる側、のプロジェクトが同一EARに存在している必要があります。なお、同一EARであ
れば、同一WARである必要はありません。
異なるEAR間でメソッドを呼び出すにはローカル呼び出しではなく、JVM間の通信を検討する必要があります。
■参考:developerWorks Japan “J2EE 1.2での複数アプリケーションのデプロイメント”
http://www.ibm.com/developerworks/jp/java/library/j-deploy/index.html
Q17 WAR をまたがる call 実行時に
実行時に ClassNotFoundException が発生する
発生する
同一EAR内で、EGL call 構文によるリテラル呼び出しをしていますが、ClassNotFoundException が発生します。
何か設定に問題があるのでしょうか?
回避策として、クラスローダーをアプリケーション単位にするか、EGLWebプロジェクトの .class を jar としてエク
スポートして、<EGLWebプロジェクト名>/WebContent/WEB-INF/lib に配置すると期待通り動作します。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
19
EGL FAQ 集
A17. 回答
呼び出し元プログラムから呼び出し先プログラムを参照させるために、これらのプログラムを同一のクラスローダ
ーに入れる必要があります。
従って、ご質問で回避策として挙げていただいたように、EARプロジェクトにおけるクラスローダーの設定をwar単
位からEAR単位に変更する必要があります。
(クラスローダー設定の変更方法)
1.
RBDでEARプロジェクトのコンテキストメニューで、「JavaEE」→「WebSphere Application Server
Deployment を開く」でWAS拡張デプロイメント定義エディターを開く。
2.
「アプリケーション」 セクションで、アプリケーションのウィンドウでEARを選択し、右側のボックスで WARク
ラス・ローダー・ポリシーを「APPLICATION」に変更する。
3.
WAS拡張デプロイメント定義エディターを保存して閉じ、WTE(WASテスト環境)を再起動。
Q18 RBD の「すべてビルド
すべてビルド」
ビルド」について
「すべてビルド」の実行時、「・・・パーツ XXXX を生成中」というメッセージが表示されます。これは、「すべてビ
ルド」の実行時にパーツの生成が行われているということでしょうか。
また、上記が正しい場合、「すべてビルド」の実行時に生成を行わないようにすることはできますか。
A18. 回答
「すべてビルド」はRBDヘルプによると、
「ワークスペース内のすべてのプロジェクトをビルドします。これはインクリメンタル・ビルドです。つまり、ビルダー
が前回のビルド以降の変更を分析し、変更されるファイルの数を最小にします。」
と記述されています。つまり、これはタイトル通り「ビルド」を行う機能であり、「生成」を行うものではありません。
但し、InfomationCenter によると、自動生成 のオプションが有効になっていた場合には、「ビルド」後に 「生成
(generation)」 が実行されるとあります。
.egl ファイルは複数のパーツ (part) を含むことができるので、メッセージ上では「・・・パーツ XXXX を生成中」
と出ているのではないかと思われます。
■図:EGL自動生成のオプション設定ウィンドウ
下記画面にある自動生成の設定を行うと、「すべてビルド」実行時に、ここでチェックをつけたパーツに対してJava
生成が行われます。
下記画面イメージでは、全てのパーツにチェックがついていますが、デフォルトでは、一部のパーツにのみチェック
が付けられています。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
20
EGL FAQ 集
(InformationCenterからの抜粋)
The Auto generate setting. You can find this setting by following the same steps listed above, for the Build
before generate (if necessary) setting. Below that check box is a section labeled Auto generate. In this
section you can select the types of parts, if any, you want to be automatically generated after they are built.
This automatic generation uses the default build descriptor part.
■参考:IBM Rational Business Developer V7.5 InformationCenter
“Methods of initiating and controlling
the generation process”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r1m0/topic/com.ibm.etools.egl.doc/topics/generation/ge
gl_core_methodsofgeneration.html
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
21
EGL FAQ 集
Q19 生成の
生成の出力先および
出力先およびビルド
およびビルド記述子
ビルド記述子の
記述子の設定について
設定について
生成可能パーツを含むプロジェクトは、デフォルトビルド記述子の設定がないとビルドできないのでしょうか?
A19. 回答
生成可能パーツを呼び出す場合は、生成時に呼び出されるパーツ(Javaのクラス)が存在していないと生成エラー
になります。
ビルド記述子については、その (呼び出される) パーツを生成する際には当然必要ですが、呼び出し側を生成す
る時点では、設定があってもなくても構いません (クラスファイルがあればよいです)。
よって、あらかじめプロジェクトにクラスファイルを生成しておくか、jarファイルにしてパスに設定して生成を実行す
るか (warに含める)、WASのシステムライブラリーとして登録する (ただしJVM全体の設定になります) という処
理が必要になると考えられます。
Q20 ビルド記述子
ビルド記述子の
記述子の system オプションについて
オプションについて
ビルド記述子のsystemオプションは、どのように指定すればよいですか。
A20. 回答
テストする環境 (OS) に応じてsystemの値を変更してください。
例えば、Windows PC上でテストする場合は、Winというように値を設定します。
Q21 生成される
生成されるファイル
されるファイルの
ファイルの出力先について
出力先について
呼び出し先プロジェクトのJavaおよびJavaのクラス・ファイルは、呼び出し元プロジェクトに生成されるのでしょう
か。
A21. 回答
呼び出し先プロジェクトのJavaやJavaクラス・ファイルは、呼び出し元プロジェクトに生成されます。生成されないも
のは、レコード定義など、それ自身実行可能でないコードなどです。
Q22 .ir ファイルが
ファイルが作成される
作成されるフェーズ
されるフェーズについて
フェーズについて
RBDヘルプの生成ガイドには、EGL生成のフェーズについて以下の3つのステップがあると説明されています。
1. 検証フェーズ
2. 生産フェーズ
3. 準備フェーズ
この中で、.irファイルの作成はどのフェーズで行われるでしょうか。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
22
EGL FAQ 集
A22. 回答
.irファイルが作成されるのは、「生成」フェーズより前に行われる「ビルド」フェーズです。
各フェーズは以下のような関係です。
「ビルド」→「生成(検証→生産→準備)」
「ビルド」フェーズについて、RBD V7.5 InformationCenter には、以下のような記述があります。
(Information Centerからの抜粋)
「An EGL build is a process that compiles your EGL source-code files and stores the output in a set of
files that are used for debugging and generation. The built files are called IR files because they provide
an intermediate representation of the generated output.」
■参考:RBD V7.5 InformationCenter “Introduction to EGL generation”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/topic/com.ibm.egl.gg.doc/topics/gegl_core_overvi
ew.html
Javaの生成フェーズに関しては、以下のURLリンク先に記載がありますので、参照してください。
■参考:RBD V7.5 InformationCenter “Overview of Java generation”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/topic/com.ibm.egl.gg.doc/topics/gegl_java_overvi
ewjavagen.html
なお、「ビルド」フェーズで生成される.irファイルは、プロジェクト・エクスプローラー上では表示されないため、.irファ
イルに対してワークスペースから「生成」メニューを使用することはできません。「生成」メニューで指定するのは、
あくまでEGLソース・ファイルです。ただし、実際の生成で使用されているのは当該ソース・ファイルに対応する.irフ
ァイルです。
「生成 (検証→生産→準備) 」フェーズでは、当該EGLソース・ファイルの.irファイルが存在しない場合には、エラ
ーが出されます。
以下のInformation Centerの記述を参照してください。
(Information Centerからの抜粋)
「The EGL Builder and the EGL generator take the EGL code you have written and create these .ir files;
when Java™ or COBOL code is created, it is actually created from the .ir files.」
■参考:RBD V7.5 InformationCenter “Overview of .ir files”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/topic/com.ibm.egl.gg.doc/topics/gegl_core_servic
e_overviewofirfiles.html
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
23
EGL FAQ 集
Q23 RBD
Dにおけるビルド
におけるビルド・
ビルド・生成操作時の
生成操作時のファイル更新
ファイル更新について
更新について
RBD におけるビルド・生成の操作時に、どのファイル (中間ファイル含む) が更新、作成されるのかを教えてくだ
さい。
A23. 回答
以下に、ビルド・生成の操作時に更新・作成されるファイルについてまとめました。
操作
操作時の条件
クリーン
.ir
.java
.class
削除
-
削除
クリーン後
作成
-
作成
クリーンしない
再作成
-
-
「自動ビルド」オンで保管
再作成
-
-
生成(プロジェクト単位)
-
再作成
再作成
再作成
再作成
再作成
-
再作成
-
ビルド
生成前にビルド オン
生成(ファイル単位)
※「自動的にビルド」、「生成時にビルド」、「起動前にビルド」 が全てオフの状態を前提とする
※ -: 変化無し
※「自動的にビルド」をオンにすると、直後に生成までのフローが一通り流れる。
デバッグモードでは、irファイルを使用します。ファイルを更新し、デバッグに入れるまでの待ち時間を短縮する方
法は、以下の通りです。
-クリーンしないでビルド
-自動ビルドで保管
※ただし、「ビルド」はプロジェクト単位でしか実行できないので、1ファイルのみ更新してテストといった場合は「自
動ビルド」オプションを使用するほうがよいでしょう
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
24
EGL FAQ 集
Q24 EGL RUI の生成モード
生成モードの
モードの設定について
設定について
RBDの設定では EGL Rich UI のアプリケーション生成モードで「開発」 or 「デプロイメント」 が選択できます。
この設定を,EGL SDKで指定する方法について教えていただけますでしょうか。
A24. 回答
EGLSDKを使用した生成において、「開発」モードを指定することはできません。生成はすべて「デプロイメント」モ
ードになります。そもそもEGLSDKは、ワークスペース(eclipse) とは離れた生成環境ですので、「開発」モードとい
うデバッガーやエディターを用いるようなeclipse固有の環境を含むことは考慮されていません。
■参考:RBD 7.5 InformationCenter “Overview of EGL Rich UI generation and deployment”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/index.jsp?topic=/com.ibm.egl.gg.doc/topics/gegl_r
ichui_deploying.html
Q25 EGL RichUI アプリケーションで
アプリケーションで hidden 項目を
項目を作成する
作成する方法
する方法
EGL RichUI アプリケーションで、HTML の Hidden フィールドを作成することはできますか?
A25. 回答
できます。EGL RichUI エディターを使用している場合、フィールドを選択し、画面左下に表示される「プロパティー」
ビューの 外観 > visilibity で「hidden」 を設定することで、非表示フィールドを作成することができます。
もしくは、EGL エディターを使用している場合、HTML Widget の「visibility」プロパティーで設定することが可能で
す。
■サンプル・コーディング
HTML1 HTML{ id = "html1", visibility = "hidden", text="<h1>sample</h1>" };
なお、visibility を”visible”にすることで、表示させることが出来ます。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
25
EGL FAQ 集
Q26 EGL RichUI で他の Web ページを
ページを別ウィンドウで
ウィンドウで表示させる
表示させる方法
させる方法
EGL RichUIにおいて、Webページ (HTML) から、他のWebページを表示させる際、別ウィンドウで表示すること
は出来ますか?
A26. 回答
別ウィンドウで画面を立ち上げる方法ですが、HyperLink WidgetのonClickイベントにJavaScriptの
window.open()を組み込むことで実現可能です。
以下はHyperLink WidgetのonClickイベントにて実装した場合のコード例です。
■サンプル・コード
HyperLink Widget
new Div { class = "pfGroup", children = [new Div { class = "groupBox", children
= [
new HyperLink { text = "リンク
リンク・
= "pfText", href = "#", onClick ::=
リンク・テスト",class
テスト
openWindow }
] }] },
function openWindow(event Event in)
urlString string =
"http://localhost:9084/EGLWebTest/CreateCSVRUI-ja_JP.html";
openWindow openWindow = new openWindow();
openWindow.openWindow(urlString);
end
JavaScript ExternalType
externalType openWindow type JavaScriptObject {
relativePath = "customJavaScripts",
javaScriptName = "openWindow"}
function openWindow(urlstring string in);
end
JavaScript
egl.defineClass(
'customJavaScripts', 'openWindow', {
"openWindow" : function(urlstring){
window.open(urlstring);
}});
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
26
EGL FAQ 集
Q27 ActiveX との連携
との連携について
連携について
EGLから、ActiveXコントロールにパラメーターを渡し、呼び出したいのですが、連携可能でしょうか?
A27. 回答
HTML Widget を使用し、ActiveX Controlにパラメーターを指定して動かすことができます。html <param
name=...> タグを利用し、パラメーターに値を指定します。以下にサンプル・コードを紹介します。
■サンプル・コード
function getVideo(id String in, width int in, height int in) returns(String)
player.width = width;
player.height = height;
movie String = "videos/"+id+".swf";
return (
"<object type=¥"application/x-shockwave-flash¥" data=¥"" + movie
+"¥" width=¥""+width+
"¥" height=¥""+height+"¥" id=¥"VideoPlayback¥">" +
" <param name=¥"movie¥" value=¥"" + movie + "¥" />" +
" <param name=¥"FlashVars¥" value=¥"playerMode=embedded¥" />" +
" <param name=¥"allowScriptAcess¥" value=¥"sameDomain¥" />" +
" <param name=¥"autostart¥" value=¥"true¥" />" +
" <param name=¥"scale¥" value=¥"noScale¥" />" +
" <param name=¥"quality¥" value=¥"best¥" />" +
" <param name=¥"bgcolor¥" value=¥"#FFF¥" />" +
" <param name=¥"salign¥" value=¥"TL¥" />" +
"</object>"
);
end
Q28 EGL で HTTP ヘッダーに
ヘッダーにアクセスする
アクセスする方法
する方法
HTTPヘッダーにセットされている値を、EGL RichUIで取得する場合、どのように実装すればよいでしょうか。
A28. 回答
RichUI側の機能として、システム・ライブラリーserviceLibに、サービス呼び出しに対するコールバック時のHTTP
レスポンスを取得するgetCurrentCallbackResponse()関数が提供されております。しかし、サーバー (RESTサ
ービス) 側でのHTTPリクエスト・ヘッダーのハンドリング機能は、EGLでは残念ながら提供されておりません。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
27
EGL FAQ 集
取得したい情報がHTTPレスポンス・ヘッダーに付加されている場合には、getCurrentCallbackResponse()を使っ
てRUI側で取得し、RESTサービス側にパラメーターとして渡す方法が考えられます。
一方、HTTPレスポンス・ヘッダーには付加されない情報(認証情報など)で対応する場合、サーバー側に認証情報
取得(HTTPリクエスト・ヘッダーのハンドリング)を行うためのServletを用意して実行、取得する方法等を講じる必
要があります。
Q29 EGL RichUI の Grid ウィジェット内
ウィジェット内のデータ行
データ行への ID の割り振り
EGL RichUIアプリケーションで、Grid内のデータ行にID属性を割り振ることはできますか?
A29. 回答
Grid Widgetには対して、IDを付加することができますが、Grid内の各行に対してIDを割り振ることはできません。
Q30 JavaScript から RUIHandler の関数を
関数を呼び出す方法
Java Scriptから、RUIhandlerのfunctionの呼び出しは可能でしょうか?
【質問の背景】
Rich UIからのファイルアップロードを以下の方式で検討しています。
①HTMLウィジェットを使用し、form(input type = "file")をインラインフレームに作成
②Rich UIからフレーム内のformをSubmit、Java Servletを呼び出しファイルアップロード
③Rich UIにてファイルアップロード完了後に画面遷移
②の処理の後に、Rich UI側でファイルアップロード完了を検知する必要があります。
フレームの再描画時に、Java ScriptからRUIhandlerのfunctionを呼び出せれば通知可能と考えています。
(他にRUIhandlerでファイルアップロードを検知する方法はないでしょうか?)
A30. 回答
ExternalTypeのJavaScriptからEGL RUIHandler内のfunctionをinvokeする方法については、特に情報はありま
せん。EGL Rich UIのコードから生成されたJavaScriptを解析して、JavaScript側で独自にコーディングすれば適
用できると考えますが、EGL側からのインタフェースは特に決められてはいません。
代替として考えられる対応としては、
1. ExternalType Javascriptから戻り値を受け取り、受け取り後にHTML Widget内の再描画を検知する
2. 最初にサーバー側にアップロードされるファイルの存在チェックを行うようなRESTサービスを呼び出して
おいた後にformをsubmitするExternalTypeのJavaScriptを実行、アップロード完了後にサービスのCallback
によって検知する
といったことが考えられます。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
28
EGL FAQ 集
以下は 1. についてのサンプル・コードです (再描画完了後にボタンを有効化するロジックです)。
RUIHandler
Button2 Button{ id = "button2", text = "Upload", onClick ::= upLoadFunc };
repeat Job{runFunction = repeatFunction};
urlString string = "http://localhost:9084/EGLWebTest/uploadFile.html";
function uploadFunc(e Event in)
Button2.disabled = True;
uploadFile uploadFile = new uploadFile();
uploadFile.uploadFile();
repeat.repeat(1000);
end
function repeatFunction()
checkHtmlName checkHtmlName = new checkHtmlName();
urlString = checkHtmlName.checkHtmlName();
//TextLabel1.text = urlString;
if (urlString !=
"http://localhost:9084/EGLWebTest/uploadFile.html")
TextLabel1.text = urlString;
Button2.disabled = False;
repeat.cancel();
end
end
ExternalType JavaScript (uploadFile および checkHtmlName)
package customJavaScripts;
// externalType
externalType uploadFile type JavaScriptObject {
relativePath = "customJavaScripts",
javaScriptName = "uploadFile"
}
// Function Declarations
function uploadFile();
end
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
29
EGL FAQ 集
// externalType
externalType checkHtmlName type JavaScriptObject {
relativePath = "customJavaScripts",
javaScriptName = "checkHtmlName"
}
// Function Declarations
function checkHtmlName() returns(string);
end
JavaScript upload.js
egl.defineClass(
'customJavaScripts', 'uploadFile',
{
"uploadFile" : function()
{
iframe1.form1.submit();
}
}
);
JavaScript chegkHtmlName.js
egl.defineClass(
'customJavaScripts', 'checkHtmlName',
{
"checkHtmlName" : function()
{
return(iframe1.document.location.href);
}
}
);
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
30
EGL FAQ 集
Q31 EGL RichUI における一定間隔
における一定間隔での
一定間隔での画面表示
での画面表示の
画面表示の更新について
更新について
一定間隔で、表示を自動更新する画面があるのですが、EGL RichUIにおいて、一定間隔で自動更新を行う事は
可能でしょうか? EGL RichUIで、JavaScriptのsetIntervalに相当する機能はあるのでしょうか?
A31. 回答
一定間隔である処理を定期的に実行する仕組みとしては、egl.javascript.Jobが利用可能です。
Jobに定期実行させたいfunctionを登録し、repeat(duration int)でdurationに間隔をミリ秒単位で指定します。
自動更新によって画面を初期状態に戻すという意味であれば、初期化処理をfunctionとして用意し、登録すること
になります。
■参考:RBD V7.5 InformationCenter ”Rich UI job scheduler”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/topic/com.ibm.egl.lr.doc/topics/regl_ui_richui_job_
scheduler.html
Q32 環境依存の
環境依存の変数値とその
変数値とその外部化
とその外部化
環境ごとに修正が必要な値を変更する方法を教えてください。
RUIhandlerにハードコードされているgatewayURLや、MQ接続の接続先情報など、テスト実施時には、機能テス
ト用やパフォーマンス・テスト用、カスタム開発用といった異なる環境で実行するため、その環境ごとに設定を書き
換えてビルドし直すということを回避したいと考えています。
A32. 回答
ビルドを回避するためには、定義情報を持つファイルをEGLソースとして保持せず、外部のファイルから読み込む
必要があります。Javaにおける.properitesの考え方はEGLの基本機能としては提供されておりません。従って、
ユーザー自身で外部ファイルに値を設定し、そのファイルから定義情報を読み込むといったコーディングが必要に
なります。考えられる方法は、ExternalTypeとしてjava.util.Propertiesを定義して利用することです。
■
サンプル・プログラム例
ExternalType
ExternalType Properties type JavaObject {JavaName = "Properties", packageName
= "java.util"}
function getProperty(key string in) returns(string);
function load(inStream FileInputStream in);
end
ExternalType FileInputStream type JavaObject {JavaName = "FileInputStream",
packageName = "java.io"}
constructor(name string in);
end
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
31
EGL FAQ 集
実行プログラム
library Library01 type BasicLibrary {}
function function01 ()
properties Properties = new Properties();
file FileInputStream = new
FileInputStream("C:¥¥propertyTest.properties");
value01 string;
properties.load(file);
value01 = properties.getProperty("key01");
sysLib.writeStdout(value01);
end
end
プロパティー・ファイル
content of "propertyTest.properties"----key01=This message comes from propertyTest.properties.
key02=This message also comes from propertyTest.properties.
---------実行例
ただし、上記は全てサーバー・サイドのプログラムについてとなります。
例として挙げられているRUIHandler内にハードコーディングされたgatewayURLは、HTML (実際にはクライアント
側で動作するJavaScript) としてサーバー側に配置されます。
このHTMLに対して、サーバー側で動的に外部ファイルから定義情報を埋め込むことは難しいと考えます。
なおMQに関しては、.eglbldファイルおよびMQRecordのプロパティーに定義情報を設定します。こちらについては
RBD V7.5 InformationCenter に記載がありますので参照してください。
■参考:RBD V7.5 InformationCenter
“Working with MQ message queues”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/topic/com.ibm.egl.pg.doc/topics/pegl_mq_overvie
w_cpt.html
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
32
EGL FAQ 集
Q33 生成の
生成の出力先および
出力先およびビルド
およびビルド記述子
ビルド記述子の
記述子の設定について
設定について
バッチ用 (J2EE=NO) とオンライン用 (J2EE=YES)で、2回ビルドが必要でしょうか。
オンライン用ビルド結果を、バッチ用実行モジュール作成に再利用したいと考えています。
A33. 回答
J2EE=Yes/Noの設定で作成されるクラスファイルは異なります。
よってバッチ用とオンライン用のコードは別々に生成する必要があります。
また、DB接続に関しては注意が必要になります。
J2EE=Yesで作成した場合、DB接続の設定 (データソースなど)は、J2EE接続の設定がデプロイメント記述子に
反映されますが、バッチの場合はそのJ2EE接続を使用することはできません。
バッチの場合は、JDBC接続によってDBに接続することになりますので、作成されたrununit.propertiesをバッチ実
行時のパスに配置してください。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
33
EGL FAQ 集
2. データベース/SQL
編
データベース
EGL におけるデータベース接続、SQL に関する質問をまとめています
Q1
RBD から直接
から直接 EGL を起動する
起動する際
する際のデータソース設定
データソース設定について
設定について
RBDから直接EGLプログラムを起動する場合、データソースの設定はどのように行えばよいのでしょうか?
当該プログラムが含まれるプロジェクトの <プロパティー> → <EGLランタイム・データソース> を設定しても、以
下のエラーが出ます。
■発生したエラー
「JDBCドライバーのロード中にエラーが発生しました。 エラー:java.lang.ClassNotFoundException」
Javaのビルド・パスに、外部jarとしてdb2jcc4.jarを追加するとDBにアクセスが出来ましたが、接続するたびにユー
ザーIDとパスワードの入力を求められます。正しい設定方法を教えてください。
A1. 回答
RBD上で、バッチ型のプログラムをテストする場合、という前提で回答します。
JDBCのドライバーについては、ご質問にあるように、「Javaのビルド・パスに外部Jarとしてdb2jcc4.jarを追加」す
るのが正しい方法です。
プロジェクト・エクスプローラーで見ると、パスにdb2jcc4.jarが配置されているのが確認できます。
■画面イメージ:プロジェクト・エクスプローラー
接続するユーザーIDとパスワードですが、プロジェクトのデフォルト・データベースに接続する場合 (明示的に
connectしない) は、ビルド記述子に指定されたsqlID、sqlPasswordが使用されます。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
34
EGL FAQ 集
■画面イメージ:ビルド記述子
デフォルトでないデータベースに接続する (明示的にconnectする)場合は、EGLソースで以下のように指定しま
す。
■データベースへの接続コーディング例
sqlLib.connect("jdbc:db2://localhost:50000/SAMPLE", "db2admin","password");
Q2
EGL-DB 接続の
接続の Schema の設定について
設定について
デプロイされたEGLから、WASのデータ・ソースを利用したDBへの接続は、.wdo-connections.xmlより生成され
たweb.xml、ibm-web-bnd.xml、resources.xml (security.xml) にて行われると認識していますが、web.xmlで設
定されているSchemaが無効になっていたため、DBに接続することが出来ませんでした。
アプリケーションを動作させると、Schema名がデータ・ソースに登録したユーザーとなり、エラーとなってしまいま
す。対応としてWAS上のデータ・ソースのカスタム・プロパティーのCurrentSchemaの値に該当するSchemaを設
定することにより対応しておりますが、web.xmlで設定したSchemaを有効には出来ないのでしょうか?
A2. 回答
schema名は、デフォルトではログオン・ユーザー名が採られます。ただし、下記参考文献にあるように、ビルド記
述子のuseCurrentSchemaオプションをYes、currentSchemaオプションにスキーマ名を指定すれことで、そのス
キーマ名にてアクセス可能となっています。
■参考:RBD 7.5 Information Center “currentSchema (EGL system variable)”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/topic/com.ibm.egl.lr.doc/topics/regl_data_sql_curr
ent_schema.html
上記設定のほか、プログラムのSQLで、下記例にあるように、装飾名をはずします。
■例
select
CUSTOMERINFO.CUSTOMERID,
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
35
EGL FAQ 集
なお、Schemaを指定するには、以下のビルド記述子のように、useCurrentSchema=Yesの設定の他、
sqlSchemaのオプションでの指定が必要です。※sqllSchemaは 最後に.(ピリオド)が必要です
■イメージ図:ビルド記述子
Q3
ビルド記述子
ビルド記述子における
記述子における DB 接続情報の
接続情報の優先順位(1)
優先順位
sqlJNDIName (J2EE)を指定して、sqlID、sqlPassword、sqlSchema を指定した場合は、DataSourceの認証設
定<res-auth>が”Application”で使用され、”Container”では使用されないという理解でよいでしょうか。
ビルド記述子に指定したsqlSchemaは、WASのデータ・ソース設定にあるカスタム・プロパティーの
currentSchemaと、どちらが優先されるのかについても教えてください。
(ビルド記述子のuseCurrentSchmaとの関連も含めて)
A3. 回答
sqlJNDIName (J2EE)、sqlID、sqlPassword、sqlSchemaの指定により、必ず<res-auth>が”Application”指定に
なるわけではありません。デフォルトでは”Container”の指定になります。
また、sqlID、sqlPasswordは認証情報ではありますが、WASのデータソース設定において「JAAS – J2C認証デ
ータ」を設定する場合はこの値は使用されません。
sqlSchemaとDataSourceのカスタム・プロパティーのcurrentSchemaでは、DataSourceの値のほうが優先されま
す。DataSourceのほうは、そのDataSource一個に対して一個の指定になりますので、アプリケーションによって
Schemaを切り替えたい場合にはビルド記述子での指定が必要になります。
また、ビルド記述子でのSchema指定をする場合は 同時にuseCurrentSchemaをYesにする必要があります。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
36
EGL FAQ 集
■検証例
・2個のSchema名が違うテーブルを用意
・ビルド記述子(スキーマにdb2adminを指定)
・DataSourceでの指定(YAMAYAMAを指定)
アクセスするとスキーマYAMAYAMAのテーブルの方をアクセスします。(データの内容をわかりやすく
YAMAYAMAにしています)
Q4
ビルド記述子
ビルド記述子における
記述子における DB 接続情報の
接続情報の優先順位(2)
優先順位
EGLのビルド記述子に指定したDB接続情報の優先順位を教えてください。
sqlJNDINameと、sqlDB/sqlJDBCDriverClass/sqlID/sqlPassword/sqlSchemaの両方が指定されている場合、
どちらが優先されるのでしょうか?
A4. 回答
sqlJNDIName ビルド記述子オプションは、J2EE環境でのみ有効です。genProperties ビルド記述子オプション
が GLOBAL または PROGRAM に設定されている場合にのみ、J2EE デプロイメント記述子 (web.xml) の
vgj.jdbc.default.databaseのJava ランタイム・プロパティーにこの値をセットします。
逆に、sqlDBビルド記述子オプションは、非J2EE環境でのみ有効です。genProperties ビルド記述子オプションが、
GLOBAL または PROGRAM に設定されている場合のみ、vgj.jdbc.default.databaseのJavaランタイム・プロパ
ティーにこの値をセットします。(rununit.propertiesファイルにセットされます)
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
37
EGL FAQ 集
また、この場合、sqlJDBCDriverClass オプションで、ドライバークラスが指定できます。(sqlJDBCDriverClassは
EGLSDKでも使用されます)
sqlID、sqlPassword、sqlSchema については、両方(J2EE、非J2EE環境両方)で有効です。
これらに関する情報は以下のInformation Center、または RBDのヘルプを参照ください。
■参考:RBD V7.5 Information Center “sqlJNDIName”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/index.jsp?topic=/com.ibm.egl.gg.doc/topics/gegl_
core_sql_sqljndiname.html
・”sqlDB”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/topic/com.ibm.egl.gg.doc/topics/gegl_core_sql_sq
ldb.html
アプリケーションで
アプリケーションで、DB 接続を
接続を切り替える方法
える方法について
方法について
Q5
アプリケーションの処理内容に合わせ、接続するDBを変更することを考えています。アプリケーションから、接続
先のDBをパラメーター化し、変更するためには、どのようにEGLで実現できますか。なお、WASの管理下で、デー
タベースの切り替えを考えるため、WASのデータ・ソースを、EGLのプログラムから、切り替えて実行するには、ど
のようにしたらよいですか。
A5. 回答
データベースに対して明示的に接続/切断が行うため、sqlLib.connect()、sqlLib.disconnect()が提供されており、
これらを利用することで実現可能です。WASのデータ・ソースを利用する場合も、同様にconnect()を利用すること
になります。connect()のデータベース名の部分に、JNDI名を指定することで、データ・ソース経由での接続となり
ます。
connect()、disconnect()など、sqlLibで提供されている機能については、下記Information Centerにまとめられて
います。
■参考:IBM Rational Business Devleoper 7.5 “EGL LibrarysqlLib”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/topic/com.ibm.egl.lr.doc/topics/regl_data_sql_lib.h
tml
■サンプル・コーディング
//直接接続する場合
sqlLib.connect("jdbc:db2://localhost:50000/SAMPLE2", "db2admin",
"db2admin");
//データ・ソースを利用する場合
sqlLib.connect("jdbc/SAMPLE2", "", "");
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
38
EGL FAQ 集
Q6
EGL で実行した
実行した SQL ステートメントの
ステートメントの取得方法について
取得方法について
EGLのアプリケーションにて、ユーザーが実行したSQLのステートメントをログに出力するには、どのような方法が
ありますか。また、端末、ユーザーIDなどの情報により、SQLのログの出力を制御 (オン/オフ) することは、可能
ですか。
A6. 回答
EGLでは質問のように、SQLステートメントをランタイム・トレースに出力するような機能は提供されておりません。
代替手段として、DB2 JDBCとレースなどを取得して、実行されているSQLステートメントを確認することはできま
す。また、特定の端末ID、ユーザーIDに対してのみログ出力を可能とする機能についても、EGLで提供されている
ものはありません。
JUL (Java Universal Logger) においても、LoggerレベルでのOn/Offとなり、ユーザー変数でのOn/Off機能は残
念ながら提供されておりません。
実装にはEGLではなく、Javaに側で何らかの仕組みを考える必要があります。
Q7
SQL の get 構文に
構文に変数として
変数として指定
として指定する
指定する動的配列
する動的配列で
動的配列で取得する
取得するレコード
するレコード件数
レコード件数について
件数について
EGL言語解説書(388ページ)によると、SQLのget構文では、SQLレコード変数の動的配列を指定して、そこにテー
ブルから取得したレコードを格納できますが、この動的配列にmaxSizeプロパティーを設定した場合の処理につい
て教えてください。例えば SQL の条件に合致するレコードが 10 万件あった場合、maxSize = 100 と設定して
いれば、100 件ずつフェッチしながら最終的に 10 万件の全レコードを取得できますか?
以下、EGL言語解説書(388ページ)から該当部分を抜粋します。
「この変数は、SQL レコード変数によって構成される動的配列に名前を付けます。
EGL は結果セットから一致するすべての行を取得し、それらの値をこの配列の個々のレコード変数要素に挿入し
ます。
配列の maxSize プロパティーを設定して、プログラムが処理可能な量よりも多くのデータを1 度に取り出さない
ようにすると便利です。
配列がその最大サイズに達すると、EGL は結果の取得を停止します。50 ページの『動的配列のプロパティー』を
参照してください。」
A7. 回答
サンプルプログラムを作成し検証した結果、動的配列の maxsize プロパティーを指定することで、指定した件数分
のレコードだけをテーブルから取得することが確認できました。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
39
EGL FAQ 集
3. 他プログラム/ファイル
プログラム ファイルとの
ファイルとの連携編
との連携編
EGL アプリケーションと、他のプログラム、また、EGL から CSV や ZIP ファイルと連携(生成)する場合
の質問をまとめています
Q1
EGL から Kshell の呼び出し
EGL から Kshell を呼び出す場合、どの関数を使用すればいいのでしょうか?
また、起 動時に 外部 ソ ース( 対象 Kshell やサーバリ ソー ス不足等) が存 在 しない場 合 どのよ うなエラ ー
(Exception)が発生するのでしょうか?
A1. 回答
EGL から Kshell を呼び出す際、以下の関数を使用します。
<同期>
sysLib.callCmd:呼び出されたプログラム・スクリプトの処理終了まで待機
<非同期>
sysLib.startCmd
:呼び出されたプログラム・スクリプトの処理終了は待たずに次処理に遷移
sysLib.callCmd、および sysLib.startCmd で発生するエラーは、RuntimeExecption を Catch するようコーディン
グします。
Q2
シェルから
シェルからバッチ
からバッチ EGL の起動方法
バッチのEGLプログラムをAIX Kシェルから起動する場合、フルパスで実行モジュール名を指定するのでしょう
か? それともJavaのように、Javaコマンドで起動するのでしょうか?
また、シェルからEGLを起動したとき、EXITコードは シェルの$?にセットされますか?
A2. 回答
EGLで作成したプログラムは、「生成」を経て最終的にJavaプログラムになるため、kshから実行するのはJavaプ
ログラムになります。そのため、EXITコードに関してもEGLに特化したものはなく、Javaプログラムを実行する場合
と同等と捉えてください。。
なお、EGL から生成された Java プログラムで使用する EGL 特有の jar ファイルについては、別途クラス・パスを
通しておく必要があります。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
40
EGL FAQ 集
Q3
EGL から複数
から複数フ
複数ファイルに
ァイルにアクセス
EGL から複数ファイルにアクセスする場合、シェルから物理ファイル名を渡す方法について教えてください。シェル
で変数にファイル名を設定し、EGL から変数にセットされたファイルを参照する方法になるのでしょうか?
A3. 回答
sysLib.getCmdLineArg(index int)を利用することで、Javaプログラムのmain(String[] args)におけるString[]へ値
を渡す処理を実現することができます。
■サンプル・コード
program InputValueTest type BasicProgram {}
function main()
fileName string = sysLib.getCmdLineArg(1);
sysLib.writeStdout("Your file name is ¥"" + fileName + "¥".");
end
end
Q4 生成した
生成したバッチ
したバッチプログラム
バッチプログラムの
プログラムの起動方法
生成したバッチプログラムの起動方法を教えてください。
A4. 回答
バッチプログラムの起動は、一般的なJavaの起動と同じです。
RBDから起動テストする場合は、生成された.javaファイルのコンテキストメニューで 「実行」→Javaアプリケーショ
ンを選択します。
■イメージ図:RBDにおけるJavaアプリケーションの実行方法
RBDの外で実行する場合は、必要なファイルにPATHを通してください。
(必要なファイルとは、一般に jar ファイルですが、rununit.properties などのプロパティー・ファイルも含みます)
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
41
EGL FAQ 集
Q5
EGL プログラムの
プログラムの戻りコード
プログラムを終了する時に、プログラムの戻りコードとしてあるシステム変数を返し、バッチ・プログラムの中の条件
指定ハンドリングに使っています。同じことをEGL(Java生成)で行う場合、どのように実装すればよいでしょうか。
A5. 回答
ご質問のシステム変数の代替として、 SysVar.returnCode という変数を設定する方法が考えられます。シェルか
ら、EGLプログラムを呼び出し、その戻りコードをシェルで拾うことができれば、現行のシステムと同様な実装が可
能です。ただし、Java生成で取得できる値は、-2147483648以上2147483647以下の範囲になければならないこ
とを、ご確認ください。
sysVar.returnCodeに関しては以下URLリンク先に記載がございます。
■参考:RBD V7.5 Information Center “returnCode”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/topic/com.ibm.egl.lr.doc/topics/regl_core_sysvar_r
eturn_code.html
Q6 バッチプログラム
バッチプログラムから
プログラムから起動可能
から起動可能な
起動可能な JAR ファイルの
ファイルの作成方法
バッチプログラムから起動可能なJARファイルを作成する方法について教えてください。
A6. 回答
Jarファイルは、EGLから生成されたクラス・ファイルから作成します。RBD (Eclipse) を使用しての作成手順は以
下の通りです。
■JAR作成手順
1.
[ファイル]→[エクスポート]→[Java]→[JARファイル]
2.
「JARファイル仕様」でエクスポート先を指定する
3.
「JARパッケージオプション」を指定する (デフォルトでOK)
(ア) ⇒マニフェストを作成する必要がなければ、ここで「完了」をクリックする
4.
「JARマニフェスト仕様」でマニフェストの作成有無、メイン・クラス(main 関数があるクラス)を指定する
(ア) ⇒マニフェストは新規作成でも既存のファイル使用のどちらでも可
5.
「完了」ボタンをクリックする
バッチ用 (非 J2EE 環境) の Jav クラスファイルを作成するためには、ビルド記述子に、J2EE=no、genProterties
に GLOBAL/PROGRAM を指定します。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
42
EGL FAQ 集
Q7
EGL で CSV ファイルを
ファイルを作成する
作成する方法
する方法について
方法について
EGLでCSVファイルを作成する方法を教えてください。
また、作成されるCSVファイルの名前を、動的に変更することはできるでしょうか?
A7. 回答
CSVファイルを作成するためには、CSVRecordタイプのRecordパーツを定義し、そのRecordパーツを使用した書
き出すロジックを、データベース・ファイルへの書き出し処理と同様に作成します。CSVRecordタイプのRecordパ
ーツにおいて、CSVファイルのフォーマット(ファイル名、ヘッダーなど)を指定します。
CSVファイルは、CSVRecordに対し、最初にaddが実行される際に自動的に作成されます。また、CSVファイルの
指定は、「リソース関連」としてEGLプロジェクトのビルドファイルにて予め定義しておくことになります。
以下URLリンク先にあるpptファイル P536-P564 に、CSVをはじめとしたシーケンシャル・ファイルへの入出力処
理についての記載があります。
■参考:EGL Learning Center:Rational Business Developer v7.5.1 EGL Tutorial - Foundation Language
Powerpoint Presentation
http://www-949.ibm.com/software/rational/cafe/servlet/JiveServlet/previewBody/3082-102-2-5782/RBD-EG
L-v751.ppt
■サンプル・コード
CSV ファイル出力関数のコーディング例
function writeCustomers()
// 取得したデータをCSVに書き出す関数を作成
for (i int from 1 to customerArray.getSize() by 1)
move customerArray[i] to csvRec byName;
add csvRec;
end
end
CSVRecord タイプの Record パーツ コーディング例
record CsvRec type CSVRecord{ // CSVRecordタイプのRecordパーツを定義
fileName = "customer", delimiter = ",", textQualifier = "¥"",
style = CsvStyle.quoted,
labels = [ "Customer ID", "First Name", "Last Name", ] }
CUSTOMER_ID int?;
FIRST_NAME string?;
LAST_NAME string?;
end
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
43
EGL FAQ 集
EGL ビルドファイル(.bld)ファイルにある、リソース関連設定例
なお、生成するCSVファイル名を動的に変更する場合は、recordName.ResourceAssociationで書き出し先を
変更します。ただし、CSVRecordタイプのレコード定義には、定義作成時にfileNameプロパティーを設定しておく
必要はあります。fileNameプロパティーには、.bldファイル内のリソース関連で定義したファイル名を指定すること
になります。作業内容としては以下の通りです。
・.bldファイルに基底となるファイル名を設定しておく
・基底となるファイル名をfileNameプロパティーに設定したCSVRecordを定義する
・レコード書き出しの前に、recordName.ResourceAssociation = "file-path" で書き出しファイル名を変更する
■サンプル・コード
function writeCustomers()
csvRec.ResourceAssociation =
"C:¥¥EGLTest¥¥EGLWebTest¥¥WebContent¥¥customers2.csv";
for (i int from 1 to customerArray.getSize() by 1)
move customerArray[i] to csvRec byName;
add csvRec;
end
end
■参考:RBD 7.5 InformationCenter “resourceAssociation variable for file I/O”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/topic/com.ibm.egl.lr.doc/topics/regl_data_core_re
source_assn.html
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
44
EGL FAQ 集
Q8
CSV ファイルに
ファイルに書き出すデータについて
データについて
EGLでCSVファイル作成する際に、書き出すデータの内、文字型のみをダブル・クォテーション(“”)で囲むことを考
えています。(例: "あいう","えお","かきく",20091110,"けこ")
データ型により、ダブル・クォテーションの有無を切り替える事は可能でしょうか?
A8. 回答
CSVRecordの「textQualifier」に ‘’ (シングル・クォテーション)、「style」にCSVStyle.quoted を設定することで、
文字列にダブル・クォテーションを付加した状態で書き出すことができます。ただし、この方法においては、ダブル・
クォテーションを付加する対象 (本件においては文字列データ) に対し、明示的に予めダブル・クォテーションを付
加しておく必要がある点には注意が必要です。
文字列格納時の挙動に関しては、以下URLリンク先に記載があります。
■参考:RBD 7.5 Information Center “CSV Record stereotype”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/topic/com.ibm.egl.lr.doc/topics/regl_data_file_csv.
html
■サンプル・コーディング
CSVRecord の定義
record CsvRec2 type CSVRecord
{
fileName = "employee", delimiter =",", textQualifier = "'",
style = CSVStyle.quoted, labels =
["Job Code", "Permanent?", "First Name"]}
jobCode int;
permStatus string;
firstName string;
end
ファイルに書き出すロジック
function writeEmployees(fileName string in)
csvRec2.ResourceAssociation =
"C:¥¥EGLCodeTest¥¥EGLWebTest¥¥WebContent¥¥" + fileName;
for (i int from 1 to 3 by 1)
csvRec2.jobCode = Employees.jobCode[i];
csvRec2.permStatus = Employees.permStatus[i];
//”First Name”のみ、ダブル・クォテーションが付加されるコーディング
csvRec2.firstName = "¥"" + Employees.firstName[i] + "¥"";
add csvRec2;
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
45
EGL FAQ 集
end
close csvRec2;
end
出力結果
Job Code,Permanent?,Hire Date,First Name
123,yes,07/09/03,"Rahima
-1,no,99/09/09,"Jorge
"
"
92,yes,03/09/01,"Ludmilla "
Q9
CSV ファイルの
ファイルの Open/Close のタイミングについて
タイミングについて
CSVファイルのOpen、Closeのタイミングと、CSVの出力コード (javaでいうflash) についての質問です。
明示的なOpen、Closeは必要なく、addしたタイミングでファイルOpenされるという認識ですが、ファイルのClose
やファイル出力コードについては分かりません。
A9. 回答
最初のaddが行われた時点で、自動的にファイル・オープン処理が行われます。またファイルへの出力は、addが
行われる度に1レコードずつファイルに追加されることになります。一度ファイルがオープン状態になると、以降の
書き込みのためにオープン状態になります。
その後、プログラムが終了する、もしくはcloseステートメントによる明示的なクローズを行うことで、ファイルがクロ
ーズ状態となります。
Q10 CSVRecord を利用した
利用した CSV ファイルの
ファイルの作成について
作成について
CSVRecordを利用したCSVファイル作成について質問があります。作成するCSVファイルの文字コードの設定は
どのように行うのでしょうか? (SJISのCSVファイルの作成を想定しています)
また、ヘッダーレコードを 2 行出力する事は可能でしょうか?CSVRecord のプロパティー(labels)で、ヘッダー・レコ
ードを指定しますが、2 行のヘッダーを CSV ファイルに作成する事は可能でしょうか?
A10. 回答
CSVRecordにおける文字コードですが、EGLプロジェクトのデフォルト・エンコーディングが利用され、残念ながら
その他の設定はできません。例えば、ワークスペースにUTF-8の設定を行っている場合、書き出されるデータは
UTF-8となります。
また、CSVRecordを利用したCSVファイルの書き出しにおいてヘッダー・レコードを2行書き出すことはできません。
あくまで1行での出力となります。
■参考:developerWorks: EGL Café: CSVRecord and UTF-8 or UTF-16
https://www.ibm.com/developerworks/forums/thread.jspa?messageID=14499468&#14499468
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
46
EGL FAQ 集
Q11 EGL から XML ファイル生成
ファイル生成の
生成の実装方法
EGL から XML ファイルを生成することができるのでしょうか。
XML ファイルの生成が可能である場合、EGL での実装方法を教えてください。
A11. 回答
EGL から XML ファイルを生成することはできます。実装方法として以下の 2 通りがあります。
1. RichUI 側で XMLLib.convertToXML() を利用した生成
2. サービス側で javax.xml.~を ExternalType として利用した生成
【1. RichUI 側で XMLLib.convertToXML() を利用した生成】
XMLLib.convertToXML() function ですが、RichUI プロジェクトでのみサポートされます。従って、上記 function を
利用する場合には、フロントエンド (すなわちユーザー・インターフェース) 側で XML を生成する機能を実装させる
形式となります。
■参考:RBD 7.5 Information Center “convertToXML()”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/topic/com.ibm.egl.lr.doc/topics/regl_core_service_
convert_to_xml.html
【2. サービス側で javax.xml.~を ExternalType として利用した生成】
XML を生成する機能を、サーバー (すなわちサービス) 側で実装する場合、javax.xml 以下の Java オブジェクト・
タイプを、JavaObject の ExternalType として宣言し利用します。この方法は、JSFHandler 内で XML 生成を実装
する方法と基本的には同一です。RichUI から呼び出す場合には、ライブラリーで実装している機能をサービスとし
て作成し、呼び出す形式にて実装します。
■参考:EGL Learning Center:Rational Business Developer v7.5.1 EGL Tutorial - Foundation Language
Powerpoint Presentation P.1021~1039 “Calling XPath – XML Parsing and Queries using EGL
Writing XML Files”
http://www-949.ibm.com/software/rational/cafe/servlet/JiveServlet/previewBody/3082-102-2-5782/RBD-EG
L-v751.ppt
Q12 EGL からの ZIP ファイル(
ファイル(パスワードつき
パスワードつき)
つき)の作成について
作成について
サーバー側処理にて、EGLからZIPファイルの作成は可能でしょうか?また、ZIPファイル作成時にパスワードの設
定は可能でしょうか?
A12. 回答
EGL自身の機能でzipファイル生成機能は提供されていないため、java.util.zipパッケージをExternalTypeとして
定義し、利用します。ただし、java.util.zipパッケージを利用したzipファイル生成では、生成ファイル名のエンコーデ
ィングがUTF-8となります。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
47
EGL FAQ 集
クライアントPCでよく利用されるzip解凍用ソフトウェアでは、UTF-8のファイル名はサポートされていないことが多
いため、事実上ASCII文字のみでファイル名を指定する必要があります。日本語ファイル名で生成したい場合には、
Apache Antのorg.apache.tools.zipパッケージを利用して実装してください。
また、パスワード付きのzipファイル生成はjava.util.zip、org.apache.tools.zip共にサポートされていません。パス
ワード付きのzipファイル生成ロジックを独自に開発し、それをEGL側にExternalTypeとして定義し、利用すること
になります。
Q13 ファイルダウンロード
ファイルダウンロードの
ウンロードの実装方法につい
実装方法について
について
ZIP形式で圧縮されたファイルをクライアントPCにダウンロードする事は、EGLで実現可能でしょうか?
A13. 回答
サーバー側のファイルをクライアント PC にダウンロードさせる方法として、3 つの方法が考えられます。
1. モードレス・ウィンドウでの表示
以下のような IE 標準のダウンロード・ウィンドウを表示させたい場合、JavaScript の window.open()を利用するこ
とで可能です。
■画面イメージ:IE 標準のダウンロード・ウィンドウ
EGL RichUIプロジェクトで独自のJavaScriptを利用する場合には、作成した.jsをExternalTypeとして宣言し、利
用することになります。EGL RichUIプロジェクトにおけるJavaScript ExternalTypeの利用にあたっては、下記
URLリンク先の情報を参照してください。
■参考:RBD 7.5 Information Center “ExternalType for JavaScript code”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/index.jsp?topic=/com.ibm.egl.lr.doc/topics/regl_ui
_richui_external_type.html
2.モーダル・ウィンドウでの表示
モーダル・ウィンドウで表示する場合には、ウィンドウを独自に作成し、ユーザーが表示されたダウンロード・ボタン
を押下する方法があります。この場合も、ウィンドウ表示の考え方自体は、1 と同様で、JavaScript で実装します。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
48
EGL FAQ 集
3.URL リンクのクリックによるダウンロード
作成ファイルの URL リンクを RichUI 画面上に表示し、そこをクリックしダウンロードする方法があります。URL をク
リックさせる方法については、下記 EGL Learning Center の情報を参照してください。
■参考:EGL Learning Center - Absolute Path
http://www-949.ibm.com/software/rational/cafe/servlet/JiveServlet/download/2330-1-1105/absolute_path.p
pt
Q14 EGL でのファイルアップロード
でのファイルアップロードについて
ファイルアップロードについて
RichUIウィジェットには、ファイル・インプット (<input type="file">) がなく、HTMLもしくはJavaScriptで実装する必
要があると認識していますが、ファイル・アップロード処理は、どのように実装すればよいでしょうか。
A14. 回答
残念ながらRichUI + RESTでは直接ファイル・アップロードを実装することができません。
代替として、下記URLに記載されているように、JSFを利用することで、ファイル・アップロードが可能です。
■参考:developerWorks: EGL Café: File Upload Control
https://www.ibm.com/developerworks/forums/thread.jspa?messageID=14501189
また、フロント・エンドを RichUI とする場合には、HTML Widget を用意してサーバー側には REST サービスではな
く、ファイル・アップロード用の Servlet を配置し対応する方法も考えられます。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
49
EGL FAQ 集
4. EGL VAGen Migration 編
VisualAge Generator から EGL へ移行した際の質問をまとめています
Q1 画面間での
画面間でのデータ
でのデータの
データの受渡し
受渡し方法
EGL RichUIアプリケーションで、二つの画面間でデータの受渡し方法について、教えてください。
<ケース1>画面遷移
【画面2】の検索ボタン押下→【画面2】検索結果一覧(表形式)を表示→検索結果一覧で任意の項目(1行)を
選択し、選択ボタンを押下→【画面1】に戻り、一覧から選択した項目の値を呼び出し元【画面1】にセットする
上記フローを実現するための実装方法を教えてください。
<ケース2>別ウィンドウ遷移
上記ケース1と同様なフローですが、【画面2】は別ウィンドウとなり、別ウィンドウ上で選択した項目の値を【画
面1】にセットする。
別ウィンドウの場合に、ウィンドウ間でデータを受渡す方法を教えてください。
A1. 回答
ケース1については、VGWebTransactionであれば、画面2を表示したconverse後の処理において画面1用の
VGUIRecoordに値をセットし、画面1をconverseで表示する仕組みとすることで特に問題ありません。
RichUI側の処理のみで実現するのであれば、Delegateパーツの利用やInfobusを利用してRUIHandler間のデー
タ受け渡しを行うことができます。
InfoBus、Delegateパーツについては以下を参照してください。
■参考:RBD V7.5 InformationCenter “Non-Infobus communication between Rich UI handlers”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/topic/com.ibm.egl.lr.doc/topics/regl_ui_richui_com
munication_between_handlers.html
■参考:RBD V7.5 InformationCenter “RichUI Infobus”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/topic/com.ibm.egl.lr.doc/topics/regl_ui_richui_info
bus.html
ケース2についてですが、VGWebTransactionのconverseは、1つのウィンドウに対する入出力を待ち状態にして
いるものですので、別ウィンドウからのデータ連携はできません。
RichUI側のみのデータ操作での実現は可能かと思います。その場合は画面2をモーダル・ウィンドウで表示し、そ
の値を返すボタンなどでデータを受け渡しする方法などが考えられます。
また、その場合はEGLではなく、JavaScript ExternalTypeでの実装になります。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
50
EGL FAQ 集
Q2 VGWebTransaction のスレッド数
スレッド数について
コンバージョンされたプログラム (VGWebTransaction) が、下記の順で画面遷移 (プログラムをコール) した場
合、サーバー上のVGWebTransactionスレッド数は、下記ケースⅠ, Ⅱのどちらになりますか?
画面遷移の順序:
"トップメニュー" → "サブメニュー1" → "サブメニュー2" → "業務画面"
Ⅰ."トップメニュー" , "サブメニュー1" , "サブメニュー2" , "業務画面"が同一のスレッドとして、1スレッド動作す
る。
Ⅱ."トップメニュー" , "サブメニュー1" , "サブメニュー2" , "業務画面"がそれぞれ別のスレッドとして、計4スレッド
動作する。
A2. 回答
ご質問の処理例では、Ⅰとなります。
VGWebTransactionとWAS上で生成されるThreadの関連について検証したところ、1つのVGWebTransactionか
らcallで呼ばれたVGWebTransactionにおいても、新規Threadは立ち上がらずに、既存のThreadで処理が行わ
れていました。
Q3 各種 EGL プロパティー・
プロパティー・ファイルからの
ファイルからの値
からの値の取得
"enableJ2EE=yes"付きのVGWebTransactionで、以下のEGLのプロパティー・ファイルの値を取得することはで
きますか?
•
user.properties
•
csogw.properties
•
gw.properties
A3. 回答
user.properties、programName.properties、rununit.propertiesをsysLib.getProperty()で参照することができる
のは、非J2EE環境(ビルド記述子でJ2EE = NO)の場合です。
J2EE = YES、enableJ2ee = yesが指定されたVGWebTransactionでは、sysLib.getProperty()を使用すると
web.xmlから参照します。
web.xmlで値を変更するためにはアプリケーションを再公開する必要が出てくるため、Propertiesの利用が良いか
と考えます。
csogw.propertiesとgw.propertiesは、VAGenGatewayのプロパティー・ファイルです。csogw.propertiesに
は、VGWebTransactionプログラムがどこに存在しているかを指定する項目があります。GatewayServletは、
csogw.propertiesに記載された内容に従ってクライアント/サーバー間の仲介を行います。
一方、gw.propertiesは、hptSessionIDのPrefixの指定などができるGatewayServletの稼働パラメーター用
のプロパティー・ファイルです。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
51
EGL FAQ 集
web.xml 内で gw.properties が指定されており、その gw.properties 内に csogw.properties が指定されて
います。これら 2 つのファイルに設定された情報をもって、VAGenGateway が稼働することになります。
Q4 web.xml や JVM カスタム・
カスタム・プロパティーなどの
プロパティーなどの値
などの値の取得方法
web.xmlに、環境エントリーやコンテキスト・パラメーターとして指定した値を取得する方法について、サーバー側
(enableJ2ee = yesを指定したVGWebTransaction) とクライアント側 (RUIHandler) のそれぞれについて教えて
ください。
A4. 回答
まず、サーバー側 (VGWebTransaction) について回答します。
enableJ2ee=YESを指定したVGWebTransactionにおいては、sysLib.getProperty()を利用することで、web.xml
に設定された値を取得することができます。
sysLib.getProperty()で取得できる値は、web.xmlのenv-entryのみとなります。
web.xmlの<env-entry>以外の値の取得方法については、EGLのマニュアル等に記載がありません。
しかし、検証した結果、実際にはJVMのカスタム・プロパティーの値もsysLib.getProperty()で取得できました。ただ
し、環境エントリーに関しては取得することができませんでした。
他の方法としては、値を取得するJavaプログラムをExternalTypeとして利用することが考えられます。
以下の表に、取得できる値についてまとめました。
<Javaの場合>
<EGLの場合>
①web.xml のenv-entry
InitialContextで取得
sysLib.getProperty()で取得
②Java仮想マシンのカスタム・
System.getProperty("プロパティ名
web.xmlに当該エントリーがない場合、
プロパティー
")で取得
sysLib.getProperty()で取得可能
③環境エントリー
System.getenv("プロパティー名")
【提供なし】
で取得
※なお、②、③ともにExternalTypeでjava.lang.Systemを定義することで、取得できることも確認できています
次にクライアント側について回答します。
RUIHandlerにおいて、サーバー側のweb.xmlから値を取得する方法は、マニュアル等に記載がなく、EGLの機能
として提供されていないようです。
しかし、検証したところ、sysLib.getProperty()では、RichUIプロジェクトにあるJavaScriptフォルダー内の
rununit.propertiesから値を取得できるようです。しかし、RBD V7.5 InformationCenter の以下URLリンク先に
sysLib.getProperty()はRichUIではサポートされていない旨が記載されております。
(※RUIHandlerを生成すると、拡張子.JSのJavaScriptファイルと拡張子.DEPLOYというデプロイ・ファイルが作成
されます。デプロイ・ファイルはXMLフォーマットで記述されており、その中に<runtimePropertyFiles>という指定が
あります。)
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
52
EGL FAQ 集
なお、テストにおいてrununit.propertiesは手動で編集しようとすると、派生ファイルとして認識されているという
Warningが出されます。現時点では、生成に伴ってrununit.propertiesの内容が消去されることは確認されません
が、Warningが出るということは、このファイルに対しては編集すべきでなく、前述のsysLib.getProperty()が
RichUIでサポートされていないことを示していると考えます。
(Information Centerからの抜粋)
■参考:RBD V7.5 InformationCenter
“EGL Library sysLib”
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/topic/com.ibm.egl.lr.doc/topics/regl_core_sys_lib.
html
RUIHandler を Web プロジェクトにデプロイした場合、rununit.properties の情報は rununit-eze$$rt.js (生成
時には作成されず、EGL デプロイによって WebContents ディレクトリーに作成される) に書き込まれ、デプロ
イした html ファイルではこの.js ファイルから値の読み込みが行われるようです。ただし、この.js ファイルは
Temporary Internet Files に書き込まれますので、クライアントにこのファイルが読み込まれた時点での情報
が使われることになります。サーバー側で値を変更した場合には、再度この.js ファイルもクライアントに取り
込む必要があるので、html への URL 指定での明示アクセスが必要になってきます。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
53
EGL FAQ 集
5. その他
その他
EGL に関するその他の質問をまとめています
Q1 EGL RichUI でのセッション
でのセッション情報取得
セッション情報取得について
情報取得について
RichUI を使用した場合、セッション情報を取得する実装方法について、教えてください。
A1. 回答
Rich UIでは、JSFフレームワーク下でのJSFHandlerのように、セッション情報を取得することができません。これ
はREST+ RichUIが、StrutsやJSFといったJ2EEフレームワークとは異なり、サーバー側のセッション・オブジェクト
を利用する形式ではなく、RESTサービス側でj2eeLib提供のfunctionを利用することが出来ないためです。
セッション・オブジェクトを利用するには、JSFを利用した実装が必要になってきます。
RichUIでは下記リンクに記載されている通り、サービス側に対してパラメーターとして明示的に渡すといった対応
が必要となります。
■参考:developerWorks: EGL Café:Session Handling in EGL Rich UI
https://www.ibm.com/developerworks/forums/thread.jspa?messageID=14501942
なお、JSF を使用した場合のセッション情報の扱いについては、下記リンクを参照してください。
■参考:EGL Learning Center – EGL – JSP Page Flow and Web Application State Mangement
https://www.ibm.com/developerworks/mydeveloperworks/wikis/home?lang=en#/wiki/EGL
Learning
Center/page/EGL-JSP Page FLow and Web Application State ManagementEGL_JSP Page FLow and Web
Application State Management
Q2 EGLSDK のエラーコードについて
エラーコードについて
EGLSDKでビルドを実行する場合、警告やエラーが発生した時に、エラーコードがログに出力されます。このエラ
ーコードを定義した資料はありますか?
A2. 回答
メッセージはその説明で内容が分かるようになっており、ガイドやマニュアルはありません。
RBDの場合、メッセージを右クリックすることで説明が表示されます。
EGLSDKの場合は、エラーレポートに追加情報があります。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
54
EGL FAQ 集
Q3 EGLSDK で生成された
生成された javascript ファイル
ファイル含まれる絶対
まれる絶対パス
絶対パスについて
パスについて
EGL SDKで生成されたjavascriptに、絶対パスが含まれます。RBDで生成した場合は、含まれません。
絶対パスを含んだ状態のjavascriptは、RUIデプロイおよび実行時の動作への影響がないでしょうか。
A3. 回答
絶対パスはEGLソース場所を記録しているのみで、実行時に使用されるとは考えられません。
また、EGLSDKで生成する場合は、プロジェクトの概念がないので絶対パスになるのは避けられないと考えられま
す。
なお、EGLのソースが含まれるEGL RichUIプロジェクトを全て削除した状態でWebプロジェクトにデプロイした
htmlファイルをWTEで実行し、正常に稼働することを確認しました。
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
55
EGL FAQ 集
参考資料
参考資料リンク
資料リンク
・IBM Rational Business Developer ,バージョン 7.5.1.5 リリース情報
http://www-01.ibm.com/support/docview.wss?rs=0&context=SSMQ79&q1=%22system+z%22+li
nux&uid=swg27018346&loc=ja_JP&cs=utf-8&cc=jp&lang=ja+en
・ここからはじめる IBM Rational Business Developer
http://www-06.ibm.com/jp/domino01/mkt/rational.nsf/doc/0008C207
・IBM Rational Business Developer V7.5 Information Center
http://publib.boulder.ibm.com/infocenter/rbdhelp/v7r5m0/index.jsp
・IBM developerWorks: EGL Café (US サイト)
https://www.ibm.com/developerworks/rational/community/cafe/egl.html
・EGL Resources (US サイト)
https://www.ibm.com/developerworks/mydeveloperworks/wikis/home/wiki/W75c8733d99bb_4d5
5_9ee8_4dbc8c56ebee?lang=en
© Copyright IBM Japan Systems Engineering Co.,Ltd. 2010.
56
Fly UP