ヘッダーをスキップ
Oracle® Fusion Middleware WebCenter Sites開発者ガイド
11gリリース1 (11.1.1.8.0)
E49681-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

13 アセットを保持しない表内のデータ管理

この章では、アセットを保持しないWebCenter Sitesデータベース表とのやり取りについて説明します。

アセットを保持しないカスタムの表でデータを使用して作業をするには、次の2つの方法があります。

アセットで作業するには、WebCenter Sitesインタフェースにログインし、WebCenter SitesとEngageのアプリケーションで提供されるアセット・フォームを使用する必要があります。

大量のアセットをプログラムで追加するには、XMLPostユーティリティを使用します。詳細は、第20章「任意タイプのアセットのインポート」および第21章「フレックス・アセットのインポート」を参照してください。

この章には次の項が含まれます。

13.1 メソッドとタグ

この項では、アセットを保持しない表のデータ管理とそれらの表との一般的なやり取りに関するプログラミングに使用するタグとメソッドの概要について説明します。

この項の内容は、次のとおりです。

13.1.1 データの記述と取得

CatalogManagerはWebCenter Sitesのサーブレットで、データベースにあるコンテンツとオブジェクトの表を管理し、TreeManagerサーブレットがデータベース内のツリー表を管理します。

  • CatalogManagerサーブレットにアクセスするには、ics.CatalogManager Javaメソッド、CATALOGMANAGER XMLタグまたはics:catalogmanager JSPタグを使用します。

  • TreeManagerサーブレットにアクセスするには、ics.TreeManager Javaメソッド、TREEMANAGER XMLタグまたはics:treemanager JSPタグを使用します。

これらのメソッドとタグは、実行する操作およびその操作の実行対象である表を指定する引数から名前と値のペアを取得します。

13.1.1.1 CatalogManager

ics.CatalogManager javaメソッド、CATALOGMANAGER XMLタグおよびics:catalogmanager JSPタグは、オブジェクトとコンテンツ表で稼働する多数の属性をサポートします。キー属性はftcmdです。たとえば、ftcmdaddrowに設定すると、CatalogManagerによりカタログに1行追加されます。

CatalogManagerセキュリティが有効な場合には、DefaultReader ACLを使用してCatalogManagerにアクセスできません。CatalogManagerセキュリティを有効にするには、futuretense.iniファイルのsecure.CatalogManagerプロパティをtrueに設定します。CatalogManagerセキュリティが有効になっているときにCatalogManagerからログアウトを試みると、セッションが削除されるので注意してください。

主要なCATALOGMANAGER XMLタグの属性は、次のとおりです。これらの属性は、名前/値の引数ペアとして渡され、行のコンテンツや行の特定のフィールドを変更します。

表13-1 CATALOGMANAGER XMLタグ

argument name="ftcmd" value= 説明

addrow

表に単一行を追加します。

addrows

表に複数行を追加します。

deleterow

表から1行削除します。行の主キー列を指定する必要があります。

deleterows

表から複数行を削除します。行の主キーを指定する必要があります。

replacerow

表内の既存の行を削除し、指定された情報に従って行を置換します。

replacerows

表の複数行を置換します。列の値が指定されていない場合、列の値は消去されます。

updaterow

指定された表に問合せを実行し、表からのレコードを表示します。表示される列は、パラメータの値で指定された基準と一致します。

updaterow2

updaterowと同様、表内の行に対する列の値を更新しますが、更新行の列を消去できない場合、updaterow2を使用すると指定された列に値が存在しない場合(フォームに関連付けられたフィールドがないなど)でも列を消去できます。

updaterows

表内の複数の行に対するフィールド値を変更します。

updaterows2

updaterowsと同様、表内の複数行に対するフィールド値を変更しますが、updaterowsを使用して列を消去できない場合には、updaterows2を使用すると指定された列に値がない(フォームに関連付けられたフィールドがないなど)場合でも列を消去できます。


コマンド・パラメータ(ftcmd)を持つCatalogManagerへのリクエストは、POSTリクエストまたは次のコマンドのいずれかである必要があります。

  • exportlog

  • exportForm

  • logout

  • selectFromTable

  • selectCount

  • mirrorgetconfig

  • listtables

  • retrieve

  • retrievebinary

  • pingdb

  • interrogatetbl

  • checksession

  • history

  • retrieverevision

CatalogManagerコマンドの詳細は、Oracle Fusion Middleware WebCenter Sitesタグ・リファレンスを参照してください。ics.CatalogManager Javaメソッドの詳細は、Oracle Fusion Middleware WebCenter Sites Java APIリファレンスを参照してください。

13.1.1.2 ツリー・マネージャ

主要なics.TreeManagerコマンドは、次のとおりです。これらの操作はツリー表のデータのみをコントロールし、ツリー表のノードが参照するオブジェクトには影響を与えません。

表13-2 TreeManagerのコマンド

名前 説明

addchild

親ノードを指定され、子ノードを追加します。

addchildren

複数の子ノードを追加します。

copychild

任意のノードとその子(複数も可)を別の親にコピーします。コピーされたノードはすべて同じオブジェクトをポイントします。

createtree

ツリー表を作成します。

delchild

ノードとその子ノードを削除します。

delchildren

複数のノードを削除します。

deletetree

ツリー表を削除します。

findnode

ツリーのノードを検索します。

getchildren

すべての子ノードを取得します。

getnode

ノードおよびオブジェクトの属性(オプション)を取得します。

getparent

ノードに親を取得します。

listtrees

すべてのツリー表を取得します。

movechild

ノードとその子ノードを別の親に移動します。

nodepath

親; 子のパスをノードに返します。

setobject

異なるオブジェクトをノードに関連付けます。

validatenode

ノードがツリーに存在することを確認します。

verifypath

指定されたパスがツリーに存在することを確認します。


ics.TreeManagerメソッドの詳細は、Oracle Fusion Middleware WebCenter Sites Java APIリファレンスを参照してください。

XMLタグとJSP TREEMANAGERタグの詳細は、Oracle Fusion Middleware WebCenter Sitesタグ・リファレンスを参照してください。

13.1.2 データの問合せ

コード問合せをサポートしてコンテンツを選択するには、一連のXMLおよびJSPのタグを使用する次の3つのメソッドがあります。

表13-3 データの問合せ

メソッド XMLタグ JSPタグ 説明

ics.SelectTo

SELECTTO

ics:selectto

単一の表に対して単一の選択を実行します。

ics.SQL

EXECSQL

ics:sql

インラインSQL文(コードに埋込み済)を実行します。

ics.CallSQL

CALLSQL

ics:callsql

SystemSQL表に行として格納されているSQL文を実行します。


ics.CallSQL(またはタグ)を使用するには、SQL文をコード化してSystemSQL表に貼り付けます。

SystemSQL表の実際の問合せを格納し、(ページ名やエレメントをコールする場合と同様に)その問合せを個々のページからコールすることで、コードの外部に問合せが保持されるため、サイトで使用されるSQLが管理しやすくなります。SQLを変更する場合、そのSQLを使用するすべての場所で修正する必要はありません。SystemSQL表でSQLを編集すれば、それをコールするすべてのエレメントで、編集したバージョンをコールするようになります。

ics.CallSQLメソッドとics.SQLメソッドは、いずれの有効なSQLコマンドも実行できます。SQL文が使用可能なリストを返さない場合、WebCenter Sitesではエラーが生成されます。SQLを使用してデータを更新するか挿入する選択をした場合、ics.FlushCatalogメソッドを使用して、適切な表に対してキャッシュされた結果セットを明示的にフラッシュするコードを追加する必要があります。

13.1.3 リストおよびデータ・リストの作成

多くのICSメソッドにより、リストが作成されます。たとえば、SelectToメソッドはリスト内の簡単なSQL問合せの結果を返します。このリストの列は、WHAT句内の項目を反映し、行は表に対する一致を反映しています。

IListインタフェースは、Javaからのリストのアクセスに使用できます。リストは、XMLまたはJSPを使用して名前別に利用でき、値はLOOPタグを使用して反復できます。

WebCenter Sitesで作成されたリストは、データベースの問合せから作成された基礎となる結果セットをポイントします。リストはリクエスト間で永続的にはなりませんが、結果セットはキャッシュされていれば永続的になります。


注意:

必ず結果セットのキャッシュを適切に構成してください。問合せの結果セットがキャッシュされている場合、リストは結果セットのコピーをポイントします。結果セットがキャッシュされていない場合、リストは結果セットを直接ポイントし、データベースの接続リソースに問題を発生することがあります。


IListインタフェースに基づいたクラスを実装することで、XMLまたはJSPでの使用に対応した独自のリストを作成できます。それにより、アプリケーションやページでリストの項目を返す前にデータを変換したり、多数のリストから単一のリストを作成できるようになります。

リストを管理するメソッドは、次のとおりです。

表13-4 リストを管理するメソッド

メソッド 説明

ics.GetList

指定されたリスト名のIListを返します。

ics.CopyList

リストをコピーします。

ics.RenameList

既存リストの名前を変更します。

ics.RegisterList

WebCenter Sitesにリストを名前登録して、このリストをXMLまたはJSPエレメントから参照したり、GetListメソッドを使用して参照できるようにします。


IListの例の導入については、WebCenter SitesシステムのSamplesフォルダにあるSampleIList.javaを参照してください。

13.2 データ・エントリ・フォームのコード化

この項では、ユーザーや訪問者が入力した情報を受け入れるフォームのコード化方法、およびそのうえでWebCenter Sitesメソッドとタグを使用してデータベースに情報を書き込む方法を示すコード・サンプルについて説明します。

この項の例は、新しい行の追加、行の削除、既存の行の問合せとその後の編集について説明しています。各例には、XML、JSPおよびJavaのバージョンが示されています。

この項の内容は、次のとおりです。

13.2.1 行の追加

行を追加する単一のアルゴリズムは、次のとおりです。

  1. 情報をリクエストするフォームを行内の各フィールドに表示します。

  2. フォームのデータを表に書き込みます。

次の例では、EmployeeInfoという名前の架空の表に行を追加します。この表にある列は、次のとおりです。

表13-5 表への行の追加の例

フィールド データ型

id

VARCHAR(6)

phone

VARCHAR(16)

name

VARCHAR(32)


この例は、次のエレメントのコードを示しています。

  • addrowFORM: 従業員のID番号、電話番号および名前をリクエストするフォームを表示するXMLエレメントです。

  • addrowXMLaddrowJSPおよびaddrowJAVA: 従業員が入力した情報をEmployeeInfo表に書き込む、3つのバージョンのエレメントです。

13.2.1.1 addrowFORMエレメント

addrowFORMエレメントは、ユーザーに情報の入力を求めるフォームを表示します。これは次のようになります。

g-addrowform.gifの説明が続きます
図g-addrowform.gifの説明

これは、フォームを作成するコードです。

<?xml version="1.0" ?>
<!DOCTYPE FTCS SYSTEM "futuretense_cs.dtd">
<FTCS Version="1.1">
<!-- Documentation/CatalogManager/addrowFORM
-->

<form ACTION="ContentServer" method="post"
REPLACEALL="CS.Property.ft.cgipath">
<input type="hidden" name="pagename" value="Documentation/CatalogManager/addrow"/>

<table>
<tr>
<td>Employee name:</td>
<td><input type="text" value="" name="EmployeeName" size="22" maxlength="32"/></td>
</tr>
<tr>
<td>Employee id number:</td>
<td><input type="text" value="" name="EmployeeID" size="6" maxlength="6"/></td>
</tr>
<tr>
<td>Phone number:</td>
<td><input type="text" value="" name="EmployeePhone" size="12" maxlength="16"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="Submit"/></td>
</tr>
</table>

</form>
</FTCS>

<INPUT>の最大長修飾子は、各入力の長さをスキーマで定義された最大長の長さに制限することに注意してください。

ユーザーはフォームに入力し、「送信」ボタンをクリックします。フォームとaddrowページ(前述のコード・サンプルの最初のinput type文を参照)のページ名で収集された情報がブラウザに送信されます。ブラウザはページ名をWebCenter Sitesに送信します。WebCenter SitesではSiteCatalog表内が検索され、そのページ・エントリのルート・エレメントが起動されます。

13.2.1.2 addrowページのルート・エレメント

addrowページのルート・エレメントは、addrowFORMエレメントから渡された情報をデータベースに追加します。つまり、EmployeeInfo表に行を追加し、その行に、addrowFORMエレメントから渡された情報を移入します。

WebCenter Sitesページのルート・エレメントは1つ(つまり、SiteCatalog表内のエントリ)のみです。この項では、addrowページに対応する次の3つのバージョンのルート・エレメントを示します。

  • addrowXML.xml

  • addrowJSP.jsp

  • addrowJAVA.jsp

addrowXML

これは、ルート・エレメントのXMLバージョンのコードです。

<?xml version="1.0" ?>
<!DOCTYPE FTCS SYSTEM "futuretense_cs.dtd">
<FTCS Version="1.1">
<!-- Documentation/CatalogManager/addrowXML
-->

<SETVAR NAME="errno" VALUE="0"/>
<CATALOGMANAGER>
<ARGUMENT NAME="ftcmd" VALUE="addrow"/>
<ARGUMENT NAME="tablename" VALUE="EmployeeInfo"/>
<ARGUMENT NAME="id" VALUE="Variables.EmployeeID"/>
<ARGUMENT NAME="phone" VALUE="Variables.EmployeePhone"/>
<ARGUMENT NAME="name" VALUE="Variables.EmployeeName"/>
</CATALOGMANAGER>
errno=<CSVAR NAME="Variables.errno"/><br/>
</FTCS>

注意:

サンプル・コードでは、架空の表EmployeeInfoにWebCenter Sitesの汎用フィールド・タイプが備わっているため、CATALOGMANAGERタグを使用できます。EmployeeInfoにデータベース固有のフィールド・タイプが含まれている場合、addrowXMLは機能しません。詳細は、第12.2.1項「汎用的なフィールド・タイプ」を参照してください。


addrowJSP

これは、ルート・エレメントのJSPバージョンのコードです。

<%@ taglib prefix="cs" uri="futuretense_cs/ftcs1_0.tld" %>
<%@ taglib prefix="ics" uri="futuretense_cs/ics.tld" %>
<%//
// Documentation/CatalogManager/addrowJSP
//%>
<%@ page import="COM.FutureTense.Interfaces.*" %>
<%@ page import="COM.FutureTense.Util.ftMessage"%>
<%@ page import="COM.FutureTense.Util.ftErrors" %>
<cs:ftcs>

<ics:setvar name="errno" value="0"/>
<ics:catalogmanager>
<ics:argument name="ftcmd" value="addrow"/>
<ics:argument name="tablename" value="EmployeeInfo"/>
<ics:argument name="id"
value='<%=ics.GetVar("EmployeeID")%>'/>
<ics:argument name="phone" 
value='<%=ics.GetVar("EmployeePhone")%>'/>
<ics:argument name="name" value='<%=ics.GetVar("EmployeeName")%>'/>
</ics:catalogmanager>

errno=<ics:getvar name="errno"/><br/>

</cs:ftcs>

addrowJAVA

これは、ルート・エレメントのJavaバージョンのコードです。

<%@ taglib prefix="cs" uri="futuretense_cs/ftcs1_0.tld" %>
<%//
// Documentation/CatalogManager/addrowJAVA
//%>
<%@ page import="COM.FutureTense.Interfaces.*" %>
<%@ page import="COM.FutureTense.Util.ftMessage"%>
<%@ page import="COM.FutureTense.Util.ftErrors" %>
<cs:ftcs>

<!-- user code here -->
<%
ics.SetVar("errno","0");
FTValList vl = new FTValList();
vl.put("ftcmd","addrow");
vl.put("tablename","EmployeeInfo");
vl.put("id",ics.GetVar("EmployeeID"));
vl.put("phone",ics.GetVar("EmployeePhone"));
vl.put("name",ics.GetVar("EmployeeName"));
ics.CatalogManager(vl);
%>
errno=<%=ics.GetVar("errno")%><br />

</cs:ftcs>

13.2.2 行の削除

次の例では、第13.2.1項「行の追加」で説明されている架空のEmployeeInfo表から行を削除します。

この項では、次のエレメントからのコードを示します。

  • deleterowFORM: EmployeeInfo表から削除する従業員名をリクエストするフォームを表示するXMLエレメントです。

  • deleterowXMLdeleterowJSPおよびdeleterowJAVA: deleterowFORMエレメントから送信された情報に基づいて、EmployeeInfo表から行を削除するエレメントです。

13.2.2.1 deleterowFORMエレメント

deleterowFORMエレメントは、ユーザーに従業員名の入力を求めるフォームを表示します。これは、フォームを作成するコードです。

<?xml version="1.0" ?>
<!DOCTYPE FTCS SYSTEM "futuretense_cs.dtd">
<FTCS Version="1.1">
<!-- Documentation/CatalogManager/deleterowFORM
-->

<form ACTION="ContentServer" method="post" REPLACEALL="CS.Property.ft.cgipath">
<input type="hidden" name="pagename" value="Documentation/CatalogManager/deleterow"/>

<table>
<tr>
<td>Employee name:</td>
<td><input type="text" value="Barton Fooman" name="EmployeeName" size="22" maxlength="32"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="submit"/></td>
</tr>
</table>
</form>
</FTCS>

ユーザーは従業員名を入力し、「送信」ボタンをクリックします。従業員名とdeleterowページ(前述のコード・サンプルの最初のinput type文を参照)のページ名がブラウザに送信されます。

ブラウザはページ名をWebCenter Sitesに送信します。WebCenter SitesではSiteCatalog表内が検索され、そのページ・エントリのルート・エレメントが起動されます。

13.2.2.2 deleterowページのルート・エレメント

deleterowページのルート・エレメントは、EmployeeInfo表にdeleterowFORMエレメントから送信された従業員名に基づいて、その表から行を削除します。

WebCenter Sitesページのルート・エレメントは1つ(つまり、SiteCatalog表内のエントリ)のみです。この項では、deleterowページに対応する次の3バージョンのルート・エレメントを示します。

  • deleterowXML.xml

  • deleterowJSP.jsp

  • deleterowJAVA.jsp

deleterowXML

これは、エレメントのXMLバージョンのコードです。

<?xml version="1.0" ?>
<!DOCTYPE FTCS SYSTEM "futuretense_cs.dtd">
<FTCS Version="1.1">
<!-- Documentation/CatalogManager/deleterowXML
-->
<SETVAR NAME="errno" VALUE="0"/>

<CATALOGMANAGER>
<ARGUMENT NAME="ftcmd" VALUE="deleterow"/>
<ARGUMENT NAME="tablename" VALUE="EmployeeInfo"/>
<ARGUMENT NAME="tablekey" VALUE="name"/>
<ARGUMENT NAME="tablekeyvalue" VALUE="Variables.EmployeeName"/>
</CATALOGMANAGER>

errno=<CSVAR NAME="Variables.errno"/><br/>
</FTCS>

deleterowJSP

これは、エレメントのJSPバージョンのコードです。

<%@ taglib prefix="cs" uri="futuretense_cs/ftcs1_0.tld" %>
<%@ taglib prefix="ics" uri="futuretense_cs/ics.tld" %>
<%//
// Documentation/CatalogManager/deleterowJSP
//%>
<%@ page import="COM.FutureTense.Interfaces.*" %>
<%@ page import="COM.FutureTense.Util.ftMessage"%>
<%@ page import="COM.FutureTense.Util.ftErrors" %>
<cs:ftcs>

<!-- user code here -->
<!-- user code here -->
<ics:setvar name="errno" value="0"/>
<ics:catalogmanager>
<ics:argument name="ftcmd" value="deleterow"/>
<ics:argument name="tablename" value="EmployeeInfo"/>
<ics:argument name="name" value='<%=ics.GetVar("EmployeeName")%>'/>
</ics:catalogmanager>

errno=<ics:getvar name="errno"/><br />

</cs:ftcs>

deleterowJAVA

これは、エレメントのJavaバージョンのコードです。

<%@ taglib prefix="cs" uri="futuretense_cs/ftcs1_0.tld" %>
<%//
// Documentation/CatalogManager/deleterowJAVA
//%>
<%@ page import="COM.FutureTense.Interfaces.*" %>
<%@ page import="COM.FutureTense.Util.ftMessage"%>
<%@ page import="COM.FutureTense.Util.ftErrors" %>
<cs:ftcs>

<%
ics.SetVar("errno","0");
FTValList vl = new FTValList();
vl.put("ftcmd","deleterow");
vl.put("tablename","EmployeeInfo");
vl.put("name",ics.GetVar("EmployeeName"));
ics.CatalogManager(vl);
%>
errno=<%=ics.GetVar("errno")%><br />

</cs:ftcs>

13.2.3 表の問合せ

次のサンプル・エレメントは、架空のEmployeeInfo表に従業員名を問い合せ、従業員名を抽出してブラウザに表示し、ユーザーに情報を編集するよう要求し、編集済の情報をデータベースに書き込みます。

この項では、次のエレメントからのコードを示します。

  • SelectNameForm: 従業員名をリクエストするフォームを表示するXMLエレメントです。

  • 3つのバージョンのQueryEditRowFormエレメント(XML、JSPおよびJava): 従業員名を検索し、従業員に関する情報をフォームにロードして、従業員が自分の情報をそのフォームで編集できるようにするエレメントです。

  • 3つのバージョンのQueryEditRowエレメント(XML、JSPおよびJava): 新規編集済の情報をデータベースへ書き込むエレメントです。

13.2.3.1 SelectNameFormエレメント

SelectNameFormエレメントは、従業員情報を変更している従業員名をリクエストするシンプル・フォームを表示します。コードは次のとおりです。

<?xml version="1.0" ?>
<!DOCTYPE FTCS SYSTEM "futuretense_cs.dtd">
<FTCS Version="1.1">
<!-- Documentation/CatalogManager/SelectNameForm
-->

<form ACTION="ContentServer" method="post">
<input type="hidden" name="pagename" value="Documentation/CatalogManager/QueryEditRowForm"/>
<TABLE>
<TR>
<TD>Employee name: </TD>
<TD><INPUT type="text" value="" name="EmployeeName" size="22" maxlength="32"/></TD>
</TR>
<TR>
<TD COLSPAN="100%" ALIGN="CENTER">
<input type="submit" name="doit" value="Submit"/></TD>
</TR>
</TABLE>
</form>
</FTCS>

従業員が「送信」ボタンをクリックすると、「従業員名」フィールドとQueryEditRowFormページの名前(前述のコード・サンプルの最初のinput type文を参照)で収集された情報がブラウザに送信されます。

ブラウザはページ名をWebCenter Sitesに送信します。WebCenter SitesではSiteCatalog表でページ名が検索され、そのページ・エントリのルート・エレメントQueryEditRowFormが起動されます。

13.2.3.2 QueryEditRowFormページのルート・エレメント

QueryEditRowFormページのルート・エレメントは、EmployeeInfo表で「従業員名」フィールドに入力した文字列と一致する行を検出し、データをその行から新しいフォームにロードします。従業員は自分の名前と電話番号は編集できますが、IDは編集できません。表示されるフォームは次のとおりです。

g-queryeditrowform.gifの説明が続きます
図g-queryeditrowform.gifの説明

WebCenter Sitesページのルート・エレメントは1つ(つまり、SiteCatalog表内のエントリ)のみです。この項では、QueryEditRowFormページに対応する次の3つのバージョンのルート・エレメントを示します。

  • QueryEditRowFormXML.xml

  • QueryEditRowFormJSP.jsp

  • QueryEditRowFormJAVA.jsp

QueryEditRowFormXML

これは、エレメントのXMLバージョンのコードです。

<?xml version="1.0" ?>
<!DOCTYPE FTCS SYSTEM "futuretense_cs.dtd">
<FTCS Version="1.1">
<!-- Documentation/CatalogManager/QueryEditRowFormXML
-->

<SETVAR NAME="errno" VALUE="0"/>
<SETVAR NAME="name" VALUE="Variables.EmployeeName"/>
<SELECTTO FROM="EmployeeInfo"
WHERE="name"
WHAT="*"
LIST="MatchingEmployees"/>

<IF COND="Variables.errno=0">
<THEN>
<form ACTION="ContentServer" method="post">
<input type="hidden" name="pagename" value="Documentation/CatalogManager/QueryEditRow"/>
<input type="hidden" name="MatchingID" value="MatchingEmployees.id" REPLACEALL="MatchingEmployees.id"/>
<TABLE>
<TR>
<TD COLSPAN="100%" ALIGN="CENTER">
<H3>Change Employee Information</H3>
</TD>
</TR>
<TR>
<TD>Employee id number: </TD>
<TD><CSVAR NAME="MatchingEmployees.id"/></TD>
</TR>
<TR>
<TD>Employee name: </TD>
<TD><INPUT type="text" value="MatchingEmployees.name" name="NewEmployeeName" size="22" maxlength="32" REPLACEALL="MatchingEmployees.name"/></TD>
</TR>
<TR>
<TD>Phone number: </TD>
<TD><INPUT type="text" value="MatchingEmployees.phone" name="NewEmployeePhone" size="12" maxlength="16" REPLACEALL="MatchingEmployees.phone"/></TD>
</TR>
<TR>
<TD colspan="100%" align="center">
<input type="submit" name="doit" value="Change"/></TD>
</TR>
</TABLE>
</form>
</THEN>
<ELSE>
<P>Could not find this employee.</P>
<CALLELEMENT NAME="Documentation/CatalogManager/SelectNameFormXML"/>
</ELSE>
</IF>
</FTCS>

従業員が「変更」ボタンをクリックすると、2つのフィールドから収集された情報とQueryEditRowページの名前がブラウザに送信されます。

ブラウザはページ名とフィールド情報をWebCenter Sitesに送信します。WebCenter SitesではSiteCatalog表でページ名が検索され、そのページ・エントリのルート・エレメントが起動されます。

QueryEditRowFormJSP

これは、エレメントのJSPバージョンのコードです。

<%@ taglib prefix="cs" uri="futuretense_cs/ftcs1_0.tld" %>
<%@ taglib prefix="ics" uri="futuretense_cs/ics.tld" %>
<%//
// Documentation/CatalogManager/QueryEditRowFormJSP
//%>
<%@ page import="COM.FutureTense.Interfaces.*" %>
<%@ page import="COM.FutureTense.Util.ftMessage"%>
<%@ page import="COM.FutureTense.Util.ftErrors" %>
<cs:ftcs>

<ics:setvar name="errno" value="0"/>
<ics:setvar name="name" value='<%=ics.GetVar("EmployeeName")%>'/>
<ics:selectto table="EmployeeInfo"
where="name"
what="*"
listname="MatchingEmployees"/>

<ics:if condition='<%=ics.GetVar("errno").equals("0")%>'>
<ics:then>
<form action="ContentServer" method="post">
<input type="hidden" name="pagename" value="Documentation/CatalogManager/QueryEditRow"/>
<input type="hidden" name="MatchingID" value="<ics:listget listname='MatchingEmployees' fieldname='id'/>"/>
<TABLE>
<TR>
<TD COLSPAN="100%" ALIGN="CENTER">
<H3>Change Employee Information</H3>
</TD>
</TR>
<TR>
<TD>Employee id number: </TD>
<TD><ics:listget listname='MatchingEmployees
fieldname='id'/></TD>
</TR>
<TR>
<TD>Employee name: </TD>
<TD><INPUT type="text" value="<ics:listget
listname='MatchingEmployees' fieldname='name'/>"
name="NewEmployeeName" size="22" maxlength="32"/></TD>
</TR>
<TR>
<TD>Phone number: </TD>
<TD><INPUT type="text" value="<ics:listget
listname='MatchingEmployees' fieldname='phone'/>"
name="NewEmployeePhone" size="12" maxlength="16"/>
</TD>
</TR>
<TR>
<TD colspan="100%" align="center">
<input type="submit" name="doit" value="Change"/></TD>
</TR>
</TABLE>
</form>
</ics:then>
<ics:else>
<P>Could not find this employee.</P>
<ics:callelement element="Documentation/CatalogManager/
SelectNameForm"/>
</ics:else>
</ics:if>

</cs:ftcs>

従業員が「変更」ボタンをクリックすると、2つのフィールドから収集された情報とQueryEditRowページの名前がブラウザに送信されます。

ブラウザはページ名とフィールド情報をWebCenter Sitesに送信します。WebCenter SitesではSiteCatalog表でページ名が検索され、そのページ・エントリのルート・エレメントが起動されます。

QueryEditRowFormJAVA

これは、エレメントのJavaバージョンのコードです。

<%@ taglib prefix="cs" uri="futuretense_cs/ftcs1_0.tld" %>
<%//
// Documentation/CatalogManager/QueryEditRowFormJAVA
//%>
<%@ page import="COM.FutureTense.Interfaces.*" %>
<%@ page import="COM.FutureTense.Util.ftMessage"%>
<%@ page import="COM.FutureTense.Util.ftErrors" %>
<cs:ftcs>

<!-- user code here -->
<%
ics.SetVar("errno","0");
ics.SetVar("name",ics.GetVar("EmployeeName"));
StringBuffer errstr = new StringBuffer();
IList matchingEmployees = ics.SelectTo("EmployeeInfo",// tablename
*", // what
"name", // where
"name", // orderby
1, // limit
null, // ics list name
true, // cache?
errstr); // error StringBuffer

if ("0".equals(ics.GetVar("errno")) && matchingEmployees!=null && matchingEmployees.hasData())
{
%>
<form action="ContentServer" method="post">
<input type="hidden" name="pagename" value="Documentation/CatalogManager/QueryEditRow"/>
<%
String id = matchingEmployees.getValue("id");
String name = matchingEmployees.getValue("name");
String phone = matchingEmployees.getValue("phone");
%>
<input type="hidden" name="MatchingID" value="<%=id%>"/>
<TABLE>
<TR>
<TD COLSPAN="100%" ALIGN="CENTER">
<H3>Change Employee Information</H3>
</TD>
</TR>
<TR>
<TD>Employee id number: </TD>
<TD><%=id%></TD>
</TR>
<TR>
<TD>Employee name: </TD>
<TD><INPUT type="text" value="<%=name%>" name="NewEmployeeName" size="22" maxlength="32"/></TD>
</TR>
<TR>
<TD>Phone number: </TD>
<TD><INPUT type="text" value="<%=phone%>" name="NewEmployeePhone" size="12" maxlength="16"/></TD>
</TR>
<TR>
<TD colspan="100%" align="center">
<input type="submit" name="doit" value="Change"/></TD>
</TR>
</TABLE>
</form>
<%
}
else
{
%><P>Could not find this employee.</P>
<%
ics.CallElement("Documentation/CatalogManager/SelectNameForm",null);
}
%>
</cs:ftcs>

従業員が「変更」ボタンをクリックすると、2つのフィールドから収集された情報とQueryEditRowページの名前がブラウザに送信されます。

ブラウザはページ名とフィールド情報をWebCenter Sitesに送信します。WebCenter SitesではSiteCatalog表でページ名が検索され、そのページ・エントリのルート・エレメントが起動されます。

13.2.3.3 QueryEditRowページのルート・エレメント

QueryEditRowページのルート・エレメントは、従業員が「従業員名」フィールドと「電話番号」フィールドに入力した情報を書き込み、データベースの行を更新します。

WebCenter Sitesページのルート・エレメントは1つ(つまり、SiteCatalog表内のエントリ)のみです。この項では、QueryEditRowページに対応する次の3つのバージョンのルート・エレメントを示します。

  • QueryEditRowXML.xml

  • QueryEditRowJSP.jsp

  • QueryEditRowJAVA.jsp

QueryEditRowXML

これは、エレメントのXMLバージョンのコードです。

<?xml version="1.0" ?>
<!DOCTYPE FTCS SYSTEM "futuretense_cs.dtd">
<FTCS Version="1.1">
<!-- Documentation/CatalogManager/QueryEditRowXML
-->

<SETVAR NAME="errno" VALUE="0"/>

<CATALOGMANAGER>
<ARGUMENT NAME="ftcmd" VALUE="updaterow"/>
<ARGUMENT NAME="tablename" VALUE="EmployeeInfo"/>
<ARGUMENT NAME="id" VALUE="Variables.MatchingID"/>
<ARGUMENT NAME="name" VALUE="Variables.NewEmployeeName"/>
<ARGUMENT NAME="phone" VALUE="Variables.NewEmployeePhone"/>
</CATALOGMANAGER>

<IF COND="Variables.errno=0">
<THEN>
<P>Successfully updated the database.</P>
</THEN>
<ELSE>
<P>Failed to update the information in the database.</P>
</ELSE>
</IF>
</FTCS>

QueryEditRowJSP

これは、エレメントのJSPバージョンのコードです。

<%@ taglib prefix="cs" uri="futuretense_cs/ftcs1_0.tld" %>
<%@ taglib prefix="ics" uri="futuretense_cs/ics.tld" %>
<%//
// Documentation/CatalogManager/QueryEditRowJSP
//%>
<%@ page import="COM.FutureTense.Interfaces.*" %>
<%@ page import="COM.FutureTense.Util.ftMessage"%>
<%@ page import="COM.FutureTense.Util.ftErrors" %>
<cs:ftcs>

<ics:setvar name="errno" value="0"/>

<ics:catalogmanager>
<ics:argument name="ftcmd" value="updaterow"/>
<ics:argument name="tablename" value="EmployeeInfo"/>
<ics:argument name="id" value="<%=ics.GetVar("MatchingID")%>"/>
<ics:argument name="name" 
value='<%=ics.GetVar("NewEmployeeName")%>'/>
<ics:argument name="phone"
value='<%=ics.GetVar("NewEmployeePhone")%>'/>
</ics:catalogmanager>

<ics:if condition='<%=ics.GetVar("errno").equals("0")%>'>
<ics:then>
<P>Successfully updated the database.</P>
</ics:then>
<ics:else>
<p>failed to update the information in the database. errno=<ics:getvar name='errno'/></p>
</ics:else>
</ics:if>

</cs:ftcs>

QueryEditRowJAVA

これは、エレメントのJavaバージョンのコードです。

<%@ taglib prefix="cs" uri="futuretense_cs/ftcs1_0.tld" %>
<%//
// Documentation/CatalogManager/QueryEditRowJAVA
//%>
<%@ page import="COM.FutureTense.Interfaces.*" %>
<%@ page import="COM.FutureTense.Util.ftMessage"%>
<%@ page import="COM.FutureTense.Util.ftErrors" %>
<cs:ftcs>

<!-- user code here -->
<%
ics.SetVar("errno","0");

FTValList args = new FTValList();
args.put("ftcmd","updaterow");
args.put("tablename","EmployeeInfo");
args.put("id",ics.GetVar("MatchingID"));
args.put("name",ics.GetVar("NewEmployeeName"));
args.put("phone",ics.GetVar("NewEmployeePhone"));

ics.CatalogManager(args);

if("0".equals(ics.GetVar("errno")))
{
%><P>Successfully updated the database.</P><%
}
else
{
%><p>failed to update the information in the database. errno=<ics:getvar name='errno'/></p><%
}
%>
</cs:ftcs>

13.2.4 埋め込まれたSQL文を持つ表の問合せ

次の例は、表内の名前を検索するもう1つの方法を示しています。この例でも架空のEmployeeInfo表を検索し、ユーザーが入力した文字列と一致する行を返しますが、今回のコードでは、SELECTTO文ではなくSQL問合せが使用されます。

この項では、次のエレメントからのコードを示します。

  • QueryInlineSQLForm: 映画のタイトルをリクエストするフォームを表示するXMLエレメントです。

  • 3つのバージョンのQueryInlineSQLエレメント(XML、JSPおよびJava): EmployeeInfo表で前述のフォームにユーザーが入力した文字列を含む名前を検索します。

13.2.4.1 QueryInlineSQLForm

QueryInlineSQLエレメントは、EmployeeInfo表で検索する際に使用する名前をリクエストするシンプル・フォームを表示します。コードは次のとおりです。

<?xml version="1.0" ?>
<!DOCTYPE FTCS SYSTEM "futuretense_cs.dtd">
<FTCS Version="1.1">
<!-- Documentation/CatalogManager/QueryInlineSQLForm
-->
<form ACTION="ContentServer" method="post">
<input type="hidden" name="pagename" value="Documentation/CatalogManager/QueryInlineSQL"/>

<table>
<tr>
<td>Employee Name:</td>
<td><input type="text" value="Foo,Bar" name="EmployeeName" size="22" maxlength="32"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="submit"/></td>
</tr>
</table>

</form>
</FTCS>

ユーザーが「送信」ボタンをクリックすると、「従業員名」フィールドで収集された情報と、QueryInlineSQLページの名前がブラウザに送信されます。

ブラウザは、QueryInlineSQLページのページ名をWebCenter Sitesに送信します。WebCenter SitesではSiteCatalog表でページ名が検索され、そのページ・エントリのルート・エレメントが起動されます。

13.2.4.2 QueryInlineSQLページのルート・エレメント

QueryInlineSQLページのルート・エレメントは、QueryInlineSQLFormエレメントからEmployeeInfo表に送信された文字列と一致するエントリを、その表で検索するインラインSQL文を実行します。

WebCenter Sitesページのルート・エレメントは1つ(つまり、SiteCatalog表内のエントリ)のみです。この項では、QueryInlineSQLページに対応する次の3つのバージョンのルート・エレメントを示します。

  • QueryInlineSQLXML.xml: EXECSQL XMLタグを使用してSQL問合せを作成します。

  • QueryInlineSQLJSP.jsp: ics:sql JSPタグを使用してSQL問合せを作成します。

  • QueryInlineSQLJAVA.jsp: ics.CallSQL Javaメソッドを使用してSQL問合せを作成します。

QueryInlineSQLXML

これは、エレメントのXMLバージョンのコードです。

<!DOCTYPE FTCS SYSTEM "futuretense_cs.dtd">
<FTCS Version="1.1">
<!-- Documentation/CatalogManager/QueryInlineSQLXML
-->

<SETVAR NAME="tablename" VALUE="EmployeeInfo"/>

<SQLEXP OUTSTR="MySQLExpression"
TYPE="OR"
VERB="LIKE"
STR="Variables.EmployeeName"
COLNAME="name"/>

<EXECSQL
SQL="SELECT id,name,phone FROM Variables.tablename WHERE Variables.MySQLExpression"
LIST="ReturnedList"
LIMIT="5"/>

<table border="1" bgcolor="99ccff">
<tr>
<th>id</th>
<th>name</th>
<th>phone</th>
</tr>

<LOOP LIST="ReturnedList">
<tr>
<td><CSVAR NAME="ReturnedList.id"/></td>
<td><CSVAR NAME="ReturnedList.name"/></td>
<td><CSVAR NAME="ReturnedList.phone"/></td>
</tr>
</LOOP>
</table>

</FTCS>

SQL文は、実際にはEXECSQLタグに埋め込まれていません。かわりに、前述のSQLEXPタグがSQL式を作成し、それが引数としてEXECSQLコールに渡されます。EXECSQLタグは検索を実行し、結果をReturnedListという名前のリスト変数に返します。

また、エレメントの本文の最初の行はtablenameという名前の変数を作成し、問い合せられた表の名前であるEmployeeInfoに値を設定します。これにより、CatalogManagerは正確な表に対する結果セットをキャッシュできるようになります。

QueryInlineSQLJSP

これは、エレメントのJSPバージョンのコードです。

<?xml version="1.0" ?>
<%@ taglib prefix="cs" uri="futuretense_cs/ftcs1_0.tld" %>
<%@ taglib prefix="ics" uri="futuretense_cs/ics.tld" %>
<%//
// Documentation/CatalogManager/QueryInlineSQLJSP
//%>
<%@ page import="COM.FutureTense.Interfaces.*" %>
<%@ page import="COM.FutureTense.Util.ftMessage"%>
<%@ page import="COM.FutureTense.Util.ftErrors" %>
<cs:ftcs>

<!-- user code here -->
<ics:setvar name="tablename" value="EmployeeInfo"/>

<%
// no ics:sqlexp tag, must do in java
String sqlexp = ics.SQLExp("EmployeeInfo","OR","LIKE",ics.GetVar("EmployeeName"),"name");
String sql = "SELECT id,name,phone FROM "+ics.GetVar("tablename")+" WHERE "+sqlexp;
%>
<ics:sqltable='<%=ics.GetVar("tablename")%>'
sql='<%=sql%>'
listname="ReturnedList"
limit="5"/>

<table border="1" bgcolor="99ccff">
<tr>
<th>id</th>
<th>name</th>
<th>phone</th>
</tr>

<ics:listloop listname="ReturnedList">
<tr>
<td><ics:listget listname="ReturnedList" fieldname="id"/></td>
<td><ics:listget listname="ReturnedList" fieldname="name"/></td>
<td><ics:listget listname="ReturnedList" fieldname="phone"/></td>
</tr>
</ics:listloop>

</table>

</cs:ftcs>

SQL文は、実際にはics:sqlタグに埋め込まれていません。かわりに、前述のJava式がSQL式を作成し、それが引数としてics:sqlコールに渡されます。(サンプル・コードではJSPに相当するSQLEXPタグがないため、Javaが使用されます。)ics:sqlタグは検索を実行し、結果をReturnedListという名前のリスト変数に返します。

また、エレメントの本文の最初の行はtablenameという名前の変数を作成し、問い合せられた表の名前であるEmployeeInfoに値を設定します。これにより、CatalogManagerは正確な表に対する結果セットをキャッシュできるようになります。

QueryInlineSQLJava

これは、エレメントのJavaバージョンのコードです。

<%@ taglib prefix="cs" uri="futuretense_cs/ftcs1_0.tld" %>
<%//
// Documentation/CatalogManager/QueryInlineSQLJAVA
//%>
<%@ page import="COM.FutureTense.Interfaces.*" %>
<%@ page import="COM.FutureTense.Util.ftMessage"%>
<%@ page import="COM.FutureTense.Util.ftErrors" %>
<cs:ftcs>

<%

ics.SetVar("tablename","EmployeeInfo");

String sqlexp = ics.SQLExp(ics.GetVar("tablename"),"OR","LIKE",ics.GetVar("EmployeeName"),"name");
String sql = "SELECT id,name,phone FROM "+ics.GetVar("tablename")+" WHERE "+sqlexp;
StringBuffer errstr = new StringBuffer();

IList list = ics.SQL(ics.GetVar("tablename"),sql,null,5,true,errstr);

%>

<table border="1" bgcolor="99ccff">
<tr>
<th>id</th>
<th>name</th>
<th>phone</th>
</tr>

<%

while (true)
{
%>
<tr>
<td><%=list.getValue("id")%></td>
<td><%=list.getValue("name")%></td>
<td><%=list.getValue("phone")%></td>
</tr>
<%
if (list.currentRow() == list.numRows())
break;
list.moveTo(list.currentRow()+1);
}
%>

</table>
</cs:ftcs>

SQL文は、実際にはics.SQL文に埋め込まれていません。かわりに、前述のics.SQLExp文がSQL式を作成し、それが引数としてEXECSQLコールに渡されます。ics.SQL文は検索を実行し、結果をReturnedListという名前のリスト変数に返します。

このコードは問合せのコードの前にtablenameという名前の変数も作成し、値をEmployeeInfo(問合せ先の表名)に設定します。これにより、CatalogManagerは正確な表に対する結果セットをキャッシュできるようになります。

13.3 データの手動管理

Oracle WebCenter Sites ExplorerツールまたはWebCenter Sites管理ツール内のフォームのいずれかを使用して、データを手動で表に追加できます。

次のような場合には、Oracle WebCenter Sites Explorerを選択することをお薦めします。

Oracle WebCenter Sites Explorerには、行の追加、編集または削除に関する情報が必要な場合に使用できるオンライン・ヘルプが用意されています。さらに、第4章「Oracle WebCenter Sitesを使用したプログラミング」には、SiteCatalog表へのページ・エントリの追加とElementCatalog表へのエレメントの追加方法が説明されています。

次のような場合には、WebCenter Sites管理ツールを選択することをお薦めします。

WebCenter Sites管理ツールの詳細は、『Oracle Fusion Middleware WebCenter Sites管理者ガイド』を参照してください。

13.4 アセットを保持しない表の削除

データベースからのリビジョン追跡を実行中のアセットを保持しない表を削除した場合でも、追跡表は削除されないことに注意してください。そのような結果を避けるには、削除する前にリビジョン追跡を必ず無効化してください。