プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle WebCenter Sitesでの開発
12c (12.2.1)
E72540-01
目次へ移動
目次

前
次

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

この章では、アセットを保持しないWebCenter Sitesデータベース表とのやり取りについて説明します。カスタムの非アセット表内のデータを操作する方法は2通りあります。1つ目は、(a) CatalogManager API用のタグおよびメソッドを使用して、データの入力および管理用のフォームをプログラムでコーディングする方法です。2つ目は、(b) Explorerツールを使用して行の追加およびこれらの行へのデータの追加を手動で行う方法です。

アセットで作業するには、WebCenter Sitesインタフェースにログインし、WebCenter SitesOracle WebCenter Sites: Engageアプリケーションで提供されるアセット・フォームを使用する必要があります。大量のアセットをプログラムで追加するには、XMLPostユーティリティを使用します。詳細は、「任意タイプのアセットのインポート」および「フレックス・アセットのインポート」を参照してください。

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

12.1 非アセット表でのメソッドおよびタグを使用したデータ管理のプログラミング

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

この項には次のトピックが含まれます:

12.1.1 データの記述と取得について

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

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

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

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

12.1.1.1 CatalogManagerを介したセキュリティ

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

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

表12-1に、メインのCATALOGMANAGER XMLタグ属性を示します。これらは、行のコンテンツまたは行内の特定のフィールドを変更する引数の名前と値のペアとして渡されます。

表12-1 CATALOGMANAGER XMLタグ

argument name="ftcmd" value= 説明

addrow

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

addrows

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

deleterow

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

deleterows

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

replacerow

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

replacerows

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

updaterow

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

updaterow2

updaterowと同様、表内の行の列内の値を更新します。ただし、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 WebCenter Sitesタグ・リファレンスを参照してください。ics.CatalogManager Javaメソッドの詳細は、Oracle WebCenter Sites Java APIリファレンスを参照してください。

12.1.1.2 ツリー表を管理するためのTreeManagerコマンド

表12-2に、メインのics.TreeManagerコマンドを示します。これらの操作はツリー表のデータのみをコントロールし、ツリー表のノードが参照するオブジェクトには影響を与えません。

表12-2 TreeManagerのコマンド

名前 説明

addchild

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

addchildren

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

copychild

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

createtree

ツリー表を作成します。

delchild

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

delchildren

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

deletetree

ツリー表を削除します。

findnode

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

getchildren

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

getnode

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

getparent

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

listtrees

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

movechild

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

nodepath

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

setobject

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

validatenode

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

verifypath

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

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

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

12.1.2 データの問合せのメソッド

表12-3に、コード問合せをサポートしてコンテンツを選択するために一連のXMLおよびJSPのタグを備えた3つのメソッドを示します。

表12-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メソッドを使用して、適切な表に対してキャッシュされた結果セットを明示的にフラッシュするコードを追加する必要があります。

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

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

IListインタフェースは、Javaからのリストのアクセスに使用されます。リストは、XMLまたはJSPを使用して名前別に利用でき、値はLOOPタグを使用して反復できます。WebCenter Sitesで作成されたリストは、データベースの問合せから作成された基礎となる結果セットをポイントします。リストはリクエスト間で永続的にはなりませんが、結果セットはキャッシュされていれば永続的になります。

注意:

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

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

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

メソッド 説明

ics.GetList

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

ics.CopyList

リストをコピーします。

ics.RenameList

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

ics.RegisterList

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

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

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

この項では、ユーザーや訪問者が入力した情報を受け入れるフォームのコード化方法、およびWebCenter Sitesメソッドとタグを使用してデータベースに情報を書き込む方法を示すコード・サンプルについて説明します。この項の例は、新しい行の追加、行の削除、既存の行の問合せとその後の編集について説明しています。各例には、XML、JSPおよびJavaのバージョンが示されています。

この項には次のトピックが含まれます:

12.2.1 行の追加方法

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

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

次の例では、表12-5に示す列を使用してEmployeeInfoという名前の架空の表に行を追加します。

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

フィールド データ型

id

VARCHAR(6)

phone

VARCHAR(16)

name

VARCHAR(32)

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

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

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

12.2.1.1 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表内が検索され、そのページ・エントリのルート・エレメントが起動されます。

12.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>

注意:

サンプル・コードでは、架空の表EmployeeInfoWebCenter 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>

12.2.2 行の削除方法

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

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

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

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

12.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表内が検索され、そのページ・エントリのルート・エレメントが起動されます。

12.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>

12.2.3 表の問合せ方法

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

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

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

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

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

12.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が起動されます。

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

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

従業員情報の変更フォームは図12-1のようになります。

図12-1 従業員情報の変更フォーム

図12-1の説明が続きます
「図12-1 従業員情報の変更フォーム」の説明

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表でページ名が検索され、そのページ・エントリのルート・エレメントが起動されます。

12.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>

12.2.4 埋め込まれたSQL文を使用した表の問合せ方法

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

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

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

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

12.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表でページ名が検索され、そのページ・エントリのルート・エレメントが起動されます。

12.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は正確な表に対する結果セットをキャッシュできるようになります。

12.3 非アセット表の削除に関する考慮事項

追跡対象のリビジョンである非アセット表を削除するには、最初に表に対するリビジョン追跡を無効にします。それ以外の場合、表を削除できません。