データ ウ ィ ン ド ウ オブジェ ク ト のデータ を 使用し て、HTML (HyperText Markup Language) 構文を 作成でき ま す。 作成し た HTML は、Web ブラ ウ ザに表示でき ま す。
Web デー タ ウ ィ ン ド ウ
こ の節では、Web デー タ ウ ィ ン ド ウ については説明 し ません。Web デー タ ウ ィ ン ド ウ は、 デー タ ウ ィ ン ド ウ オブジ ェ ク ト のプ ロ パテ ィ を使用 し ま す (142 ページの 「Web デー タ ウ ィ ン ド ウ のプ ロ パテ ィ 」 お よ び
『デー タ ウ ィ ン ド ウ リ フ ァ レ ン ス』 マニ ュ アルを参照 し て く だ さ い)。
使用可能な方法 デー タ ウ ィ ン ド ウ オブジ ェ ク ト ま たはデー タ ス ト ア か ら HTML を生 成す る には、 い く つかの方法があ り ます。
ペ イ ン タ を使用 デー タ ウ ィ ン ド ウ ペ イ ン タ と 、 デー タ ベー ス ペ イ ン タ の出力ビ ュ ーではど ち ら で も 、 検索 し たデー タ を HTML 形式で保存 で き ま す。 デー タ ウ ィ ン ド ウ ペ イ ン タ で そ の 保存 を 行 う に は、 メ ニ ュ ーか ら [フ ァ イ ル|名前を付けて行を保存] を選択 し ます。 デー タ ベース ペ イ ン タ では、 出力ビ ュ ーを開 き 、 メ ニ ュ ーか ら [行|名前 を付け て行を保存] を選択 し ま す。 ど ち ら のペ イ ン タ で も 、 フ ァ イ ル 形式 と し て 「HTML Table」 を指定 し ます。
ア プ リ ケーシ ョ ン コ ー ド を使用 Data.HTMLTable プ ロ パテ ィ か ら 、 デー タ ウ ィ ン ド ウ の提示様式やデー タ の HTML 文字列を取得 し ます。 こ の 文字列を変数内に保存 し 、 文字列処理操作に よ っ て HTML を修正す る こ と がで き ます。PowerBuilder では、FileOpen 関数 と FileWrite 関数を 使用 し て、HTML を フ ァ イ ルに保存す る こ と も で き ます。
HTMLTable プ ロ パ テ ィ に は、Table HTML 要 素 に 関 連 付 け ら れ る HTML 属性や ス タ イ ル シー ト を 制御す る ために設定で き る 固有のプ
ロ パテ ィ があ り ます。
PowerBuilder のみ PowerBuilder では、さ ら に以下の 2 つの方法 も 使用 で き ます。
• SaveAs メ ソ ッ ド を呼び出し て、データ ウ ィ ン ド ウ の内容を直接デ ィ ス ク 上の フ ァ イ ルに保存す る。 デー タ を HTML 形式で保存す る に は、SaveAs を呼び出す際にフ ァ イ ルの種類 と し て HTMLTable を指 定する必要があ る
• GenerateHTMLForm メ ソ ッ ド を呼び出 し て、フ リ ーフ ォ ーム ま たは タ ブ ラ 提示様式を使用 し てい る デー タ ウ ィ ン ド ウ オブジ ェ ク ト が 含ま れ る デー タ ウ ィ ン ド ウ コ ン ト ロ ール ま たはデー タ ス ト ア内の デー タ か ら HTML フ ォ ーム を作成す る
提示様式の選択 デー タ ウ ィ ン ド ウ の提示様式に よ っ ては、HTML に変換す る 方が好ま し い場合 も あ り ます。 以下の提示様式は、 優れた結果を生成 し ます。
タ ブ ラ グループ ツ リ ービ ュ ー フ リ ーフ ォ ーム ク ロ ス タ ブ グ リ ッ ド
コ ン ポジ ッ ト 、 グ ラ フ、 リ ッ チテ キ ス ト 、 お よ び OLE 2.0 提示様式の 場合は、 デー タ だけが HTML 化 さ れ、 提示様式は反映 さ れ ません。 コ ン ト ロ ールが重複 し てい る デー タ ウ ィ ン ド ウ では、 期待どお り の結果 が得 ら れない場合 も あ り ます。 ネ ス テ ィ ッ ド レ ポー ト は無視 さ れ、 生 成 さ れ る HTML には含ま れ ません。
例 次の例に、 デー タ ウ ィ ン ド ウ で生成 さ れた HTML を アプ リ ケーシ ョ ン で ど の よ う に使用す る か を示 し ます。
こ の コ ー ド では、HTMLTable プ ロ パテ ィ を参照 し て、 デー タ ウ ィ ン ド ウ か ら HTML を取 り 込みます。 以下に各環境におけ る コ ー ド 例を示 し ます。PowerBuilder では、Describe メ ソ ッ ド ま たはプ ロ パテ ィ 式を使用 で き ます。Web ActiveX の場合は、Describe を使用 し なければな り ませ ん。
PowerBuilder
ls_htmlstring = dw_1.Object.DataWindow.Data.HTMLTable Web ActiveX
str_html = dw_1.Describe("DataWindow.Data.HTMLTable");
後で示す例は、PowerBuilder に実装 さ れてい ます。
下の ウ ィ ン ド ウ には、 表形式のデー タ ウ ィ ン ド ウ オブジ ェ ク ト に顧客 デー タ が表示 さ れてい ま す。 ユーザは [参照] ボ タ ン を押す と 、 こ の デー タ ウ ィ ン ド ウ オブジ ェ ク ト の内容を HTML 形式に変換 し て、Web ブ ラ ウ ザに HTML 出力を表示す る こ と がで き ま す。 ま た、 [ブ ラ ウ ザ の選択] ボ タ ン を 押す と 、 ど の Web ブ ラ ウ ザ を 使用す る か を ア プ リ ケーシ ョ ンに指定で き ます。
[ブ ラ ウザの選択] ボ タ ンのス ク リ プ ト [ブ ラ ウ ザの選択] ボ タ ンの ス ク リ プ ト では、 ユーザが Web ブ ラ ウ ザに対す る 実行フ ァ イ ルを選択す る た め の ダ イ ア ロ グ ボ ッ ク ス を 表示 し ま す。 実行 フ ァ イ ル の パ ス は、
is_Browser( ウ ィ ン ド ウ に定義 さ れてい る イ ン ス タ ン ス変数) に格納 さ れてい ます。
String ls_BrowserName
"exe", "実行 フ ァ イル (*.EXE),*.EXE") IF li_Result = -1 THEN
MessageBox("ブ ラ ウザを選択", "ブ ラ ウザが選択 さ れてい ません")
END IF
[参照] ボ タ ンのス ク リ プ ト [参照] ボ タ ンの ス ク リ プ ト では、
Data.HTMLTable プ ロ パテ ィ を文字列変数に割 り 当て る こ と で、 デー タ ウ ィ ン ド ウ 内 の デー タ か ら HTML 文字列 を 作成 し ま す。 こ う し て HTML 文字列 を 構築 し た ら 、 その HTML 文字列にヘ ッ ダ を 追加 し ま す。 その後、 こ の HTML を フ ァ イ ルに保存 し 、Web ブ ラ ウ ザを実行 し て、 出力を表示 し ます。
String ls_HTML, ls_FileName, ls_BrowserPath Integer li_FileNumber, li_Bytes,
Integer li_RunResult, li_Result // HTML を生成 し ます。
ls_HTML = dw_1.Object.DataWindow.Data.HTMLTable IF IsNull(ls_HTML) Or Len(ls_HTML) <= 1 THEN
MessageBox ("エ ラ ー", "HTML 生成エ ラ ーが発生 し ま し た
!")
Return ELSE
ls_HTML ="<H1>デー タ ウ ィ ン ド ウから 生成 さ れた HTML"&
+ "</H1><P>" + ls_HTML END IF
//フ ァ イルを作成 し ます。
ls_FileName = "custlist.htm"
li_FileNumber = FileOpen(ls_FileName, StreamMode!, &
Write!, LockReadWrite!, Replace! ) IF (li_FileNumber >= 0) THEN
li_Bytes = FileWrite(li_FileNumber, ls_HTML) FileClose(li_FileNumber)
IF li_Bytes = Len(ls_HTML) THEN
// HTML フ ァ イルで ブ ラ ウザを実行 し ます。
IF Not FileExists(is_Browser) THEN
cb_selbrowser.Trigger Event Clicked() IF NOT FileExists(is_Browser) THEN
MessageBox("ブ ラ ウザの選択", &
"ブ ラ ウザが見つか り ません") RETURN
END IF END IF
li_RunResult = Run(is_Browser + " file:///"+&
ls_FileName)
IF li_RunResult = -1 THEN
MessageBox("エ ラ ー", "ブ ラ ウザの実行時にエ ラ ー発生 !")
END IF ELSE
MessageBox ("書き込みエ ラ ー", &
"フ ァ イルが正常に書き込めませんで し た") END IF
ELSE
MessageBox ("フ ァ イル エ ラ ー", "フ ァ イルがオープ ン で き ません")
END IF
表示の制御
テーブル表示およ びス タ イ ル シート の使用は、HTMLTable.GenerateCSS プロ パテ ィ を 介し て 制御し ま す。 HTMLTable.GenerateCSS プロ パテ ィ は、HTMLTable プ ロ パ テ ィ の HTML の 下位互換性を 制御し ま す。
HTMLTable.GenerateCSS プロ パティ が FALSE であ る と 、HTMLTable プ ロ パ テ ィ で 書 式 (ス タ イ ル シ ー ト の 参 照) は 参 照 さ れ ま せ ん。
HTMLTable.GenerateCSS プ ロ パ テ ィ が TRUE で あ る と 、 HTML.StyleSheet で指定さ れたカ ス ケ ード ス タ イ ル シ ート を 参照する 要素が HTMLTable プロ パティ に取り 込ま れま す。
次の画面は、 カ ス タ ム の表示機能 を 使用 し て ブ ラ ウ ザに表示 さ れ た HTML テーブルを示 し た も のです。
HTMLTable.Generate
CSS が TRUE の場合 HTMLTable.GenerateCSS プ ロ パテ ィ が TRUE であ る と 、 HTMLTable プ ロ パテ ィ の HTMLTable 要素は さ ら に別のプ ロ パテ ィ を使用 し て、 テー ブル表示を カ ス タ マ イ ズ し ます。 た と えば、 次のプ ロ パテ ィ を指定 し た と し ます。
HTMLTable.NoWrap=Yes HTMLTable.Border=5 HTMLTable.Width=5 HTMLTable.CellPadding=2 HTMLTable.CellSpacing=2
Describe、Modify、 および ド ッ ト (.) 表記
PowerScript の Modify お よ び Describe メ ソ ッ ド を使用す る か、 ま たは ド ッ ト (.) 表記を使用す る こ と で、 こ れ ら のプ ロ パテ ィ にア ク セ ス で き ます。
HTMLTable プ ロ パテ ィ の HTML 構文には、 ス タ イ ル シー ト を使用で き る よ う に フ ォーマ ッ テ ィ ン グ情報 と ク ラ ス参照が取 り 込まれ ます。
<table cellspacing=2 cellpadding=2 border=5 width=5>
<tr>
<td CLASS=0 ALIGN=center>従業員 ID
<td CLASS=0 ALIGN=center>姓
<td CLASS=0 ALIGN=center>名
<tr>
<td CLASS=6 ALIGN=right>102
<td CLASS=7>鈴木
<td CLASS=7>芳樹
</table>
HTMLTable.Generate CSS が FALSE の場 合
HTMLTable.GenerateCSS プ ロ パテ ィ が FALSE であ る と 、 デー タ ウ ィ ン ド ウ が Table 要素を作成す る 際に HTMLTable プ ロ パテ ィ は使用 さ れ ま せん。 た と え ば、 GenerateCSS が FALSE の場合、HTMLTable プ ロ パ テ ィ の HTML 構文は次の よ う にな り ます。
<table>
<tr>
<th ALIGN=center>従業員 ID
<th ALIGN=center>姓
<th ALIGN=center>名
<tr>
<td ALIGN=right>102
<td>鈴木
<td>芳樹
</table>
HTMLTable と ス タ イ
ル シー ト のマージ HTMLTable プ ロ パ テ ィ に含 ま れ る HTML 構文は不完全 な も の です。
<HTML> 要素 と </HTML> 要素で囲まれていない上に、 ス タ イ ル シー ト が含ま れてい ません。アプ リ ケーシ ョ ン内に ス ク リ プ ト を記述 し て、
完全な HTML ページ を表す文字列を構築で き ます。
PowerBuilder の例 次の例では、 デー タ ウ ィ ン ド ウ プ ロ パテ ィ を設定 し 、HTML 文字列を作成 し て、 それを ブ ラ ウ ザに戻 し ます。
String ls_html ds_1.Modify &
("datawindow.HTMLTable.GenerateCSS='yes'") ds_1.Modify("datawindow.HTMLTable.NoWrap='yes'") ds_1.Modify("datawindow.HTMLTable.width=5") ds_1.Modify("datawindow.HTMLTable.border=5") ds_1.Modify("datawindow.HTMLTable.CellSpacing=2") ds_1.Modify("datawindow.HTMLTable.CellPadding=2") ls_html = "<HTML>"
ls_html += &
ds_1.Object.datawindow.HTMLTable.StyleSheet ls_html += "<BODY>"
ls_html += "<H1>ス タ イルシー ト 付きのデー タ ウ ィ ン ド ウ</H1>"
ls_html += ds_1.Object.DataWindow.data.HTMLTable ls_html += "</BODY>"
ls_html += "</HTML>"
return ls_html
こ の方法を使用す る と 、HTML ページの内容を制御で き ます。HTML を動的に作成す る 場合、HTMLTable! を引数に SaveAs メ ソ ッ ド を呼び 出す方法の代替方法 と し て使用で き ます。
SaveAs メ ソ ッ ド の呼び出 し
使用で き る環境
SaveAs メ ソ ッ ド は、Web コ ン ト ロ ール ActiveX では使用で き ません。
HTML ページ を動的に作成す る 代替方法 と し て、HTMLTable! カ タ ロ グ デー タ 型 と 一緒に SaveAs メ ソ ッ ド を呼び出す こ と がで き ます。
ds_1.SaveAs &
("C:¥TEMP¥HTMLTemp.htm", HTMLTable!, TRUE) こ れに よ っ て、 ス タ イ ル シー ト や適切な要素か ら 構成 さ れ る HTML フ ァ イ ルが作成 さ れ ます。
<STYLE TYPE="text/css">
<!--
.2{COLOR:#000000;BACKGROUND:#ffffff;FONT-STYLE:normal;FONT-WEIGHT:normal;FONT:9pt "Arial", sans-serif;TEXT-DECORATION:none}
.3{COLOR:#000000;BACKGROUND:#ffffff;FONT-STYLE:normal;FONT-WEIGHT:normal;FONT:8pt "MS Sans Serif", sans-serif;TEXT-DECORATION:none}
.3{COLOR:#000000;BACKGROUND:#ffffff;FONT-STYLE:normal;FONT-WEIGHT:normal;FONT:8pt "MS Sans Serif", sans-serif;TEXT-DECORATION:none}
-->
</STYLE>
<TABLE nowrap cellspacing=2 cellpadding=2 border=5 width=5>
<tr>
<td CLASS=2 ALIGN=right>従業員 ID :
<td CLASS=3 ALIGN=right>501
<tr>
<td CLASS=2 ALIGN=right>姓 :
<td CLASS=3>鈴木
<tr>
<td CLASS=2 ALIGN=right>名 :
<td CLASS=3>芳樹
<tr>
<td CLASS=2 ALIGN=right>勤務状況 :
<td CLASS=3>就業中
</TABLE>
デー タ ウ ィ ン ド ウ オブ ジ ェ ク ト の HTML フ ォ ーム と し ての表示
GenerateHTMLForm メ ソ ッ ド は、 デー タ ウ ィ ン ド ウ オ ブ ジ ェ ク ト の
HTML フ ォ ームの構文を生成 し ます。 指定 さ れてい る 数の行に指定 さ
れてい る 数のカ ラ ム を表示す る HTML フ ォ ーム を作成で き ます。 以下 の点に注意 し て く だ さ い。
• HTML フ ォ ーム の構文を作成す る には、 デー タ ウ ィ ン ド ウ コ ン ト ロ ール ま たはデー タ ス ト アに対 し て GenerateHTMLForm メ ソ ッ ド を呼び出す
• GenerateHTMLForm メ ソ ッ ド で HTML フ ォ ームの構文が作成 さ れ る のは、 詳細区域のみ
• 埋め込みネ ス テ ィ ッ ド デー タ ウ ィ ン ド ウ は無視 さ れ、 生成 さ れ る HTML には含まれない
提示様式 GenerateHTMLForm メ ソ ッ ド では、 すべての提示様式に対応す る 構文
を生成で き ますが、HTML に適 し た フ ォ ーム を作成で き る のは、フ リ ー フ ォ ーム様式 と タ ブ ラ 様式だけです。
次の HTML ページは、GenerateHTMLForm メ ソ ッ ド に よ っ て生成 さ れ た構文を使用 し て、 フ リ ーフ ォーム提示様式のデー タ ウ ィ ン ド ウ オブ ジ ェ ク ト を フ ォームに変換 し た例です。