この章では、アセットを保持しないWebCenter Sitesデータベース表とのやり取りについて説明します。
アセットを保持しないカスタムの表でデータを使用して作業をするには、次の2つの方法があります。
プログラム上で: CatalogManager APIのタグとメソッドを使用して、データ・エントリと管理のためのフォームをコード化します。
手動で: Oracle WebCenter Sites ExplorerツールまたはWebCenter Sites管理ツールの「コンテンツ」フォームを使用して、表に行とその行に対するデータを手動で追加します。
アセットで作業するには、WebCenter Sitesインタフェースにログインし、WebCenter SitesとEngageのアプリケーションで提供されるアセット・フォームを使用する必要があります。
大量のアセットをプログラムで追加するには、XMLPostユーティリティを使用します。詳細は、第20章「任意タイプのアセットのインポート」および第21章「フレックス・アセットのインポート」を参照してください。
この章には次の項が含まれます。
この項では、アセットを保持しない表のデータ管理とそれらの表との一般的なやり取りに関するプログラミングに使用するタグとメソッドの概要について説明します。
この項の内容は、次のとおりです。
CatalogManagerはWebCenter Sitesのサーブレットで、データベースにあるコンテンツとオブジェクトの表を管理し、TreeManagerサーブレットがデータベース内のツリー表を管理します。
CatalogManagerサーブレットにアクセスするには、ics.CatalogManager Javaメソッド、CATALOGMANAGER XMLタグまたはics:catalogmanager JSPタグを使用します。
TreeManagerサーブレットにアクセスするには、ics.TreeManager Javaメソッド、TREEMANAGER XMLタグまたはics:treemanager JSPタグを使用します。
これらのメソッドとタグは、実行する操作およびその操作の実行対象である表を指定する引数から名前と値のペアを取得します。
ics.CatalogManager javaメソッド、CATALOGMANAGER XMLタグおよびics:catalogmanager JSPタグは、オブジェクトとコンテンツ表で稼働する多数の属性をサポートします。キー属性はftcmdです。たとえば、ftcmdをaddrowに設定すると、CatalogManagerによりカタログに1行追加されます。
CatalogManagerセキュリティが有効な場合には、DefaultReader ACLを使用してCatalogManagerにアクセスできません。CatalogManagerセキュリティを有効にするには、futuretense.iniファイルのsecure.CatalogManagerプロパティをtrueに設定します。CatalogManagerセキュリティが有効になっているときにCatalogManagerからログアウトを試みると、セッションが削除されるので注意してください。
主要なCATALOGMANAGER XMLタグの属性は、次のとおりです。これらの属性は、名前/値の引数ペアとして渡され、行のコンテンツや行の特定のフィールドを変更します。
表13-1 CATALOGMANAGER XMLタグ
| argument name="ftcmd" value= | 説明 |
|---|---|
|
|
表に単一行を追加します。 |
|
|
表に複数行を追加します。 |
|
|
表から1行削除します。行の主キー列を指定する必要があります。 |
|
|
表から複数行を削除します。行の主キーを指定する必要があります。 |
|
|
表内の既存の行を削除し、指定された情報に従って行を置換します。 |
|
|
表の複数行を置換します。列の値が指定されていない場合、列の値は消去されます。 |
|
|
指定された表に問合せを実行し、表からのレコードを表示します。表示される列は、パラメータの値で指定された基準と一致します。 |
|
|
|
|
|
表内の複数の行に対するフィールド値を変更します。 |
|
|
|
コマンド・パラメータ(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リファレンスを参照してください。
主要なics.TreeManagerコマンドは、次のとおりです。これらの操作はツリー表のデータのみをコントロールし、ツリー表のノードが参照するオブジェクトには影響を与えません。
表13-2 TreeManagerのコマンド
| 名前 | 説明 |
|---|---|
|
|
親ノードを指定され、子ノードを追加します。 |
|
|
複数の子ノードを追加します。 |
|
|
任意のノードとその子(複数も可)を別の親にコピーします。コピーされたノードはすべて同じオブジェクトをポイントします。 |
|
|
ツリー表を作成します。 |
|
|
ノードとその子ノードを削除します。 |
|
|
複数のノードを削除します。 |
|
|
ツリー表を削除します。 |
|
|
ツリーのノードを検索します。 |
|
|
すべての子ノードを取得します。 |
|
|
ノードおよびオブジェクトの属性(オプション)を取得します。 |
|
|
ノードに親を取得します。 |
|
|
すべてのツリー表を取得します。 |
|
|
ノードとその子ノードを別の親に移動します。 |
|
|
親; 子のパスをノードに返します。 |
|
|
異なるオブジェクトをノードに関連付けます。 |
|
|
ノードがツリーに存在することを確認します。 |
|
|
指定されたパスがツリーに存在することを確認します。 |
ics.TreeManagerメソッドの詳細は、Oracle Fusion Middleware WebCenter Sites Java APIリファレンスを参照してください。
XMLタグとJSP TREEMANAGERタグの詳細は、Oracle Fusion Middleware WebCenter Sitesタグ・リファレンスを参照してください。
コード問合せをサポートしてコンテンツを選択するには、一連のXMLおよびJSPのタグを使用する次の3つのメソッドがあります。
表13-3 データの問合せ
| メソッド | XMLタグ | JSPタグ | 説明 |
|---|---|---|---|
|
|
|
|
単一の表に対して単一の選択を実行します。 |
|
|
|
|
インラインSQL文(コードに埋込み済)を実行します。 |
|
|
|
|
SystemSQL表に行として格納されているSQL文を実行します。 |
ics.CallSQL(またはタグ)を使用するには、SQL文をコード化してSystemSQL表に貼り付けます。
SystemSQL表の実際の問合せを格納し、(ページ名やエレメントをコールする場合と同様に)その問合せを個々のページからコールすることで、コードの外部に問合せが保持されるため、サイトで使用されるSQLが管理しやすくなります。SQLを変更する場合、そのSQLを使用するすべての場所で修正する必要はありません。SystemSQL表でSQLを編集すれば、それをコールするすべてのエレメントで、編集したバージョンをコールするようになります。
ics.CallSQLメソッドとics.SQLメソッドは、いずれの有効なSQLコマンドも実行できます。SQL文が使用可能なリストを返さない場合、WebCenter Sitesではエラーが生成されます。SQLを使用してデータを更新するか挿入する選択をした場合、ics.FlushCatalogメソッドを使用して、適切な表に対してキャッシュされた結果セットを明示的にフラッシュするコードを追加する必要があります。
多くのICSメソッドにより、リストが作成されます。たとえば、SelectToメソッドはリスト内の簡単なSQL問合せの結果を返します。このリストの列は、WHAT句内の項目を反映し、行は表に対する一致を反映しています。
IListインタフェースは、Javaからのリストのアクセスに使用できます。リストは、XMLまたはJSPを使用して名前別に利用でき、値はLOOPタグを使用して反復できます。
WebCenter Sitesで作成されたリストは、データベースの問合せから作成された基礎となる結果セットをポイントします。リストはリクエスト間で永続的にはなりませんが、結果セットはキャッシュされていれば永続的になります。
|
注意: 必ず結果セットのキャッシュを適切に構成してください。問合せの結果セットがキャッシュされている場合、リストは結果セットのコピーをポイントします。結果セットがキャッシュされていない場合、リストは結果セットを直接ポイントし、データベースの接続リソースに問題を発生することがあります。 |
IListインタフェースに基づいたクラスを実装することで、XMLまたはJSPでの使用に対応した独自のリストを作成できます。それにより、アプリケーションやページでリストの項目を返す前にデータを変換したり、多数のリストから単一のリストを作成できるようになります。
リストを管理するメソッドは、次のとおりです。
表13-4 リストを管理するメソッド
| メソッド | 説明 |
|---|---|
|
|
指定されたリスト名の |
|
|
リストをコピーします。 |
|
|
既存リストの名前を変更します。 |
|
|
WebCenter Sitesにリストを名前登録して、このリストをXMLまたはJSPエレメントから参照したり、 |
IListの例の導入については、WebCenter SitesシステムのSamplesフォルダにあるSampleIList.javaを参照してください。
この項では、ユーザーや訪問者が入力した情報を受け入れるフォームのコード化方法、およびそのうえでWebCenter Sitesメソッドとタグを使用してデータベースに情報を書き込む方法を示すコード・サンプルについて説明します。
この項の例は、新しい行の追加、行の削除、既存の行の問合せとその後の編集について説明しています。各例には、XML、JSPおよびJavaのバージョンが示されています。
この項の内容は、次のとおりです。
行を追加する単一のアルゴリズムは、次のとおりです。
情報をリクエストするフォームを行内の各フィールドに表示します。
フォームのデータを表に書き込みます。
次の例では、EmployeeInfoという名前の架空の表に行を追加します。この表にある列は、次のとおりです。
この例は、次のエレメントのコードを示しています。
addrowFORM: 従業員のID番号、電話番号および名前をリクエストするフォームを表示するXMLエレメントです。
addrowXML、addrowJSPおよびaddrowJAVA: 従業員が入力した情報をEmployeeInfo表に書き込む、3つのバージョンのエレメントです。
addrowFORMエレメントは、ユーザーに情報の入力を求めるフォームを表示します。これは次のようになります。

これは、フォームを作成するコードです。
<?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表内が検索され、そのページ・エントリのルート・エレメントが起動されます。
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>
|
注意: サンプル・コードでは、架空の表 |
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.1項「行の追加」で説明されている架空のEmployeeInfo表から行を削除します。
この項では、次のエレメントからのコードを示します。
deleterowFORM: EmployeeInfo表から削除する従業員名をリクエストするフォームを表示するXMLエレメントです。
deleterowXML、deleterowJSPおよびdeleterowJAVA: deleterowFORMエレメントから送信された情報に基づいて、EmployeeInfo表から行を削除するエレメントです。
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表内が検索され、そのページ・エントリのルート・エレメントが起動されます。
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>
次のサンプル・エレメントは、架空のEmployeeInfo表に従業員名を問い合せ、従業員名を抽出してブラウザに表示し、ユーザーに情報を編集するよう要求し、編集済の情報をデータベースに書き込みます。
この項では、次のエレメントからのコードを示します。
SelectNameForm: 従業員名をリクエストするフォームを表示するXMLエレメントです。
3つのバージョンのQueryEditRowFormエレメント(XML、JSPおよびJava): 従業員名を検索し、従業員に関する情報をフォームにロードして、従業員が自分の情報をそのフォームで編集できるようにするエレメントです。
3つのバージョンのQueryEditRowエレメント(XML、JSPおよびJava): 新規編集済の情報をデータベースへ書き込むエレメントです。
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が起動されます。
QueryEditRowFormページのルート・エレメントは、EmployeeInfo表で「従業員名」フィールドに入力した文字列と一致する行を検出し、データをその行から新しいフォームにロードします。従業員は自分の名前と電話番号は編集できますが、IDは編集できません。表示されるフォームは次のとおりです。

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表でページ名が検索され、そのページ・エントリのルート・エレメントが起動されます。
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>
次の例は、表内の名前を検索するもう1つの方法を示しています。この例でも架空のEmployeeInfo表を検索し、ユーザーが入力した文字列と一致する行を返しますが、今回のコードでは、SELECTTO文ではなくSQL問合せが使用されます。
この項では、次のエレメントからのコードを示します。
QueryInlineSQLForm: 映画のタイトルをリクエストするフォームを表示するXMLエレメントです。
3つのバージョンのQueryInlineSQLエレメント(XML、JSPおよびJava): EmployeeInfo表で前述のフォームにユーザーが入力した文字列を含む名前を検索します。
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表でページ名が検索され、そのページ・エントリのルート・エレメントが起動されます。
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は正確な表に対する結果セットをキャッシュできるようになります。
Oracle WebCenter Sites ExplorerツールまたはWebCenter Sites管理ツール内のフォームのいずれかを使用して、データを手動で表に追加できます。
次のような場合には、Oracle WebCenter Sites Explorerを選択することをお薦めします。
新しいページのページ・エントリをSiteCatalog表で作成する場合。
ElementCatalog表内のエレメントに行を作成し、そのエレメントをOracle WebCenter Sites Explorerのエディタでコード化している場合。
サイトの機能の一部をサポートするために作成した表に少量のデータを追加する必要がある場合。つまり、アセットを保持していない表に少量のデータを追加する必要がある場合です。(MimeType表への行の追加など。)
Oracle WebCenter Sites Explorerには、行の追加、編集または削除に関する情報が必要な場合に使用できるオンライン・ヘルプが用意されています。さらに、第4章「Oracle WebCenter Sitesを使用したプログラミング」には、SiteCatalog表へのページ・エントリの追加とElementCatalog表へのエレメントの追加方法が説明されています。
次のような場合には、WebCenter Sites管理ツールを選択することをお薦めします。
ユーザーまたはACLをシステムに追加する場合。
SiteCatalog表のページ・エントリのキャッシュ設定を変更する場合。このタスクは、通常、ContentManagementフォームで実行する方が、Oracle WebCenter Sites Explorerを使用して情報を列に直接入力するより簡単です。
WebCenter Sites管理ツールの詳細は、『Oracle Fusion Middleware WebCenter Sites管理者ガイド』を参照してください。
データベースからのリビジョン追跡を実行中のアセットを保持しない表を削除した場合でも、追跡表は削除されないことに注意してください。そのような結果を避けるには、削除する前にリビジョン追跡を必ず無効化してください。