12 アセットを保持しない表内のデータ管理
アセットを保持しないWebCenter Sitesデータベース表と対話するにはどうすればよいでしょうか。カスタムの非アセット表内のデータは、プログラムから操作することも、手動で操作することもできます。CatalogManager APIのタグとメソッドを使用して、データ・エントリと管理のためのフォームをコード化します。そして、Explorerツールを利用して、それらの行に行およびデータを手動で追加します。
アセットで作業するには、WebCenter Sitesインタフェースにログインし、WebCenter SitesとOracle WebCenter Sites: Engageアプリケーションで提供されるアセット・フォームを使用する必要があります。大量のアセットをプログラムで追加するには、XMLPostユーティリティを使用します。詳細は、「任意タイプのアセットのインポート」および「フレックス・アセットのインポート」を参照してください。
トピック:
非アセット表でのメソッドおよびタグを使用したデータ管理のプログラミング
非アセット表をどのように管理し、非アセット表とどのように対話するかを自分でプログラミングしますか。CatalogManagerやTreeManagerなどのJavaメソッドと、CATALOGMANAGERやTREEMANAGERなどのXMLタグは、その目的を果たすものです。
次のトピックを参照してください。
データの記述と取得について
CatalogManagerはWebCenter Sitesのサーブレットで、データベースにあるコンテンツとオブジェクトの表を管理します。データベース内のツリー表は、TreeManagerサーブレットが管理します。
-
CatalogManagerサーブレットにアクセスするには、
ics.CatalogManager
Javaメソッド、CATALOGMANAGER
XMLタグまたはics:catalogmanager
JSPタグを使用します。 -
TreeManagerサーブレットにアクセスするには、
ics.TreeManager
Javaメソッド、TREEMANAGER
XMLタグまたはics:treemanager
JSPタグを使用します。
これらのメソッドとタグは、実行する操作およびその操作の実行対象である表を指定する引数から、名前と値のペアを取得します。
CatalogManagerを介したセキュリティ
ics.CatalogManager
Javaメソッド、CATALOGMANAGER
XMLタグおよびics:catalogmanager
JSPタグは、オブジェクトとコンテンツ表で稼働する複数の属性をサポートします。キー属性はftcmd
です。たとえば、ftcmd
をaddrow
に設定すると、CatalogManagerによりカタログに1行追加されます。
CatalogManagerセキュリティが有効な場合には、DefaultReader
ACLを使用してCatalogManagerにアクセスできません。CatalogManagerセキュリティを有効にするには、wcs_properties.json
ファイルのsecure.CatalogManager
プロパティをtrue
に設定します。CatalogManagerセキュリティが有効になっているときにCatalogManagerからログアウトを試みると、セッションが削除されるので注意してください。
次の表に、メインのCATALOGMANAGER
XMLタグ属性を示します。これらは、行のコンテンツまたは行内の特定のフィールドを変更する引数の名前と値のペアとして渡されます。
表12-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 WebCenter Sitesリファレンス・タグ・リファレンス』を参照してください。ics.CatalogManager
Javaメソッドの詳細は、Oracle WebCenter Sites Java APIリファレンスを参照してください。
ツリー表を管理するためのTreeManagerコマンド
次の表に、メインのics.TreeManager
コマンドを示します。これらの操作はツリー表のデータのみをコントロールし、ツリー表のノードが参照するオブジェクトには影響を与えません。
表12-2 TreeManagerのコマンド
名前 | 説明 |
---|---|
|
親ノードを指定された場合、子ノードを追加します。 |
|
複数の子ノードを追加します。 |
|
ノードとその子を別の親にコピーします。コピーされたノードはすべて同じオブジェクトをポイントします。 |
|
ツリー表を作成します。 |
|
ノードとその子ノードを削除します。 |
|
複数のノードを削除します。 |
|
ツリー表を削除します。 |
|
ツリーのノードを検索します。 |
|
すべての子ノードを取得します。 |
|
ノードおよびオブジェクトの属性(オプション)を取得します。 |
|
ノードに親を取得します。 |
|
すべてのツリー表を取得します。 |
|
ノードとその子ノードを別の親に移動します。 |
|
親、子のパスをノードに返します。 |
|
異なるオブジェクトをノードに関連付けます。 |
|
ノードがツリーに存在することを確認します。 |
|
指定されたパスがツリーに存在することを確認します。 |
ics.TreeManager
メソッドの詳細は、Oracle WebCenter Sites Java APIリファレンスを参照してください。
XMLタグとJSP TREEMANAGER
タグの詳細は、『Oracle WebCenter Sitesリファレンス・タグ・リファレンス』を参照してください。
データの問合せのメソッド
この表は、コード問合せをサポートしてコンテンツを選択するために一連のXMLおよびJSPのタグを備えた3つのメソッドを示しています。
表12-3 データの問合せ
メソッド | XMLタグ | JSPタグ | 説明 |
---|---|---|---|
|
|
|
単一の表に対して単一の選択を実行します。 |
|
|
|
インライン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での使用に対応した独自のリストを作成できます。アプリケーションやページでリストの項目を返す前にデータを変換したり、多数のリストから単一のリストを作成できるようになります。この表は、リストを管理するメソッドを示しています。
表12-4 リストを管理するメソッド
メソッド | 説明 |
---|---|
|
指定されたリスト名の |
|
リストをコピーします。 |
|
既存リストの名前を変更します。 |
|
WebCenter Sitesにリストを名前登録して、このリストをXMLまたはJSPエレメントから参照したり、 |
IList
の導入の例については、WebCenter SitesシステムのSamples
フォルダにあるSampleIList.java
を参照してください。
データ・エントリ・フォームのコード化
コード・サンプルでは、サイトの訪問者が情報を入力するフォームをどのようにコーディングし、その情報をデータベースにどのように格納するかを確認できます。これらのコード・サンプルを使用して、新規行を追加する方法、行への問合せを行う方法、行を編集または削除する方法を学習します。各サンプルには、XML、JSPおよびJavaのバージョンが示されています。
次のトピックを参照してください。
行の追加方法
行を追加する単一のアルゴリズムは、次のとおりです。
- 情報をリクエストするフォームを行内の各フィールドに表示します。
- フォームのデータを表に書き込みます。
この例では、次の表に示す列を使用してEmployeeInfo
という名前の架空の表に行を追加します。
表12-5 表への行の追加の例
フィールド | データ型 |
---|---|
|
|
|
|
|
|
この例は、次のエレメントのコードを示しています。
-
addrowFORM
: 従業員のID番号、電話番号および名前をリクエストするフォームを表示するXMLエレメントです。 -
addrowXML
、addrowJSP
およびaddrowJAVA
: 従業員が入力した情報をEmployeeInfo
表に書き込む、3つのバージョンのエレメントです。
addrowFORMエレメント
addrowFORM
エレメントは、ユーザーに従業員名、IDおよび電話番号の入力を求めるフォームを表示します。
これは、フォームを作成するコードです。
<?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>
のmaxlength
修飾子は、各入力の長さをスキーマで定義された最大長に制限することに注意してください。
ユーザーはフォームに入力し、「送信」ボタンをクリックします。フォームとaddrow
ページ(前述のコード・サンプルの最初のinput type
文を参照)のページ名で収集された情報がブラウザに送信されます。ブラウザはページ名をWebCenter Sitesに送信します。WebCenter SitesではSiteCatalog
表内が検索され、そのページ・エントリのルート・エレメントが起動されます。
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
は機能しません。汎用的なフィールド・タイプを参照してください。
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>
行の削除方法
次の例では、架空のEmployeeInfo
表から行を削除します。
この項では、次のエレメントからのコードを示します。
-
deleterowFORM
:EmployeeInfo
表から削除する従業員名をリクエストするフォームを表示するXMLエレメントです。 -
deleterowXML
、deleterowJSP
およびdeleterowJAVA
:deleterowFORM
エレメントから送信された情報に基づいて、EmployeeInfo
表から行を削除するエレメントです。
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
表内が検索され、そのページ・エントリのルート・エレメントが起動されます。
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>
表の問合せ方法
次のサンプル・エレメントは、架空のEmployeeInfo
表に従業員名を問い合せ、従業員名を抽出してブラウザに表示し、ユーザーに情報を編集するよう要求し、編集済の情報をデータベースに書き込みます。
この項では、次のエレメントからのコードを示します。
-
SelectNameForm
: 従業員名をリクエストするフォームを表示するXMLエレメントです。 -
3つのバージョンの
QueryEditRowForm
エレメント(XML、JSPおよびJava): 従業員名を検索し、従業員に関する情報をフォームにロードして、従業員が自分の情報をそのフォームで編集できるようにするエレメントです。 -
3つのバージョンの
QueryEditRow
エレメント(XML、JSPおよびJava): 新規編集済の情報をデータベースへ書き込むエレメントです。
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
が起動されます。
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ページのルート・エレメント
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>
埋め込まれたSQL文を使用した表の問合せ方法
次の例は、表内の名前を検索するもう1つの方法を示しています。この例ではまた、架空のEmployeeInfo
表を検索し、ユーザーによって入力された文字列と一致する行を返します。しかし、今回は、コードで、SELECTTO
文ではなくSQL問合せを使用します。
この項では、次のエレメントからのコードを示します。
-
QueryInlineSQLForm
: 映画のタイトルをリクエストするフォームを表示するXMLエレメントです。 -
3つのバージョンの
QueryInlineSQL
エレメント(XML、JSPおよびJava):EmployeeInfo
表で前述のフォームにユーザーが入力した文字列を含む名前を検索します。
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
表でページ名が検索され、そのページ・エントリのルート・エレメントが起動されます。
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は正確な表に対する結果セットをキャッシュできるようになります。