Forums

Home » Liferay Portal » 日本語 » 3. 開発

Combination View Flat View Tree View
Threads [ Previous | Next ]
toggle
tsuyoshi futamase
キーが2つあるテーブルに対するSearch Containerの利用について
June 26, 2012 9:31 PM
Answer

tsuyoshi futamase

Rank: New Member

Posts: 7

Join Date: January 5, 2011

Recent Posts

初めまして、
ウィンクス株式会社 二間瀬(ふたませ)と申します。

Search Containerに関する質問です。

プライマリキーが2つあるテーブルに対して、Search Containerを
利用する事は可能でしょうか?
1
2<liferay-ui:search-container-row
3        className="jp.co.winx.business.model.CUSTOMER_TBL"
4        keyProperty="CUSTOMER_NUMBER"
5        modelVar="customer_tbl"
6>

今は、上記のように書いていますが、
もう1つのキー「SECTION_NUMBER」をkeyPropertyに設定したい
のですが、記述方法がわかりませんでした。
ネット上で、色々とサンプルコードを探しましたが、全てキーが
1つの場合のみで、キーが2つあるテーブルに対してSearch Containerを
使う際の情報を得る事ができませんでした。
ご存知の方がいらっしゃいましたら、アドバイス頂ければと思います。

以上、よろしくお願いします。
失礼します。

------------------------------------
ウィンクス株式会社
システム事業部
二間瀬 剛(tsuyoshi futamase)
e-mail : winx-futamase@sat.bbiq.jp
------------------------------------
Daniel Kiyotomo Ozeki
RE: キーが2つあるテーブルに対するSearch Containerの利用について
June 28, 2012 3:06 PM
Answer

Daniel Kiyotomo Ozeki

LIFERAY STAFF

Rank: New Member

Posts: 15

Join Date: March 1, 2012

Recent Posts

二間瀬さん、

ご質問ありがとうございます!以下がこちらからの返事です。

まず最初にプライマリキーですがひとつのオブジェクトを他のものと区別するにはプライマリキーを使用しなくてはなりません。 二間瀬さんの説明ですとリストが他のフィルドで表示されているのを制限したいまたはリストのコンテンツの表示方法を変更したいのかと思います。この場合、Serviceレイヤーを設定することによってSearch Containerに送りたいリストのコンテンツを変更できます。。LiferayのServiceBuilderを使用している場合以下の記述方法を使えます。

CustomerLocalServiceUtil.getCustomers()

この方法でデータベースにあるすべてのCustomersが表示されます。

もしService Builder機能で新しいフィルドに新しい"Finder"を追加したい場合(例えばcustomerNumber)まずservice.xmlにFinderを以下の入力で追加できます:
<finder name="G_CN" return-type="Collection">
<finder-column name="groupId" />
<finder-column name="customerNumber" />
</finder>

これによって以前の記述方法を次のように変わり、入力できます:

CustomerLocalServiceUtil.getCustomersByCustomerNumber()

そして<liferay-ui:service-builder-results> を以下のように調整できます:
<liferay-ui:search-container-results
results="<%=CustomerLocalServiceUtil.getCustomersByCustomerNumber(groupId,
customerNumber, searchContainer.getStart(), searchContainer.getEnd()) %>"
total="<%=
CustomerLocalServiceUtil.getCustomersCountByCustomerNumber(groupId,
customerNumber) %>"
/>
これによってSearch Containerの検索にcustomerNumberと一致するものがフィルターされます。

もしService Builderを使用していない場合、<liferay-ui:search-container-results> タグを使用しなくてはなりません。このタグでタイプリストからのresult setが送られます。モデルのプライマリキーはkeyPropertyをによって決められます。この方法でsearch containerは結果を繰り返し、表示します。

ご質問に回答しましたでしょうか?詳しい情報はLiferay Developer's Guideをご覧ください。また追加質問がありましたらお伝えください。
tsuyoshi futamase
RE: キーが2つあるテーブルに対するSearch Containerの利用について
June 28, 2012 7:04 PM
Answer

tsuyoshi futamase

Rank: New Member

Posts: 7

Join Date: January 5, 2011

Recent Posts

大関様

回答ありがとうございます。
説明頂いた方法で、解決する事ができました。
ありがとうございます。

--
ウィンクス株式会社
二間瀬 剛
Hitoshi Ozawa
RE: キーが2つあるテーブルに対するSearch Containerの利用について
June 28, 2012 8:54 PM
Answer

Hitoshi Ozawa

Rank: Liferay Legend

Posts: 7949

Join Date: March 23, 2010

Recent Posts

二間瀬 様、

今は、上記のように書いていますが、
もう1つのキー「SECTION_NUMBER」をkeyPropertyに設定したい
のですが、記述方法がわかりませんでした。


大変申し訳ございませんが、実際に上の質問に対してはkeyPropertyを複数設定しなくてもよいっということで解決したのでしょうか?

また、検索結果の表示に関する情報はLiferay Developer's Documentには記載がないと思いました。次のWikiを参照してください。
http://www.liferay.com/community/wiki/-/wiki/Main/SearchContainer
tsuyoshi futamase
RE: キーが2つあるテーブルに対するSearch Containerの利用について
June 28, 2012 9:31 PM
Answer

tsuyoshi futamase

Rank: New Member

Posts: 7

Join Date: January 5, 2011

Recent Posts

小沢様

はい、解決できました。

質問としては、
「keyPropertyを複数指定するにはどうしたら良いですか?」という趣旨の内容でしたが
大関様から頂いた方法で、結果的にやりたい事(複数のプライマリキーを持つテーブルの
内容をSearch Containerに表示する)を実現できました。

検索結果の表示に関する情報のwikiの場所、ありがとうございます。
参考にしたいと思います。
Hitoshi Ozawa
RE: キーが2つあるテーブルに対するSearch Containerの利用について
June 28, 2012 11:50 PM
Answer

Hitoshi Ozawa

Rank: Liferay Legend

Posts: 7949

Join Date: March 23, 2010

Recent Posts

二間瀬 様、

大関様も以下のようにfinderを定義されていましたが、Liferayデータベーステーブルの設計を参照されると分かると思いますが、多くのテーブルにはcompanyId列が含まれており、連番のxxxxIdを管理されています。その理由はLiferayはマルチテナントに対応しているためです。もし複数のLiferayポータルインスタンスで同じアプリケーションを利用される場合は、顧客番号などをキーにすると、別のLiferayポータルインスタンスで同じ顧客番号が使えなくなるからです。

また、二間瀬様はクラスタ構成でLiferayを利用することを検討されていたと思います。その場合、もし同時に別々のサーバで同じキーの内容を登録した場合のことも設計時に考慮した方がよいと思います。

<finder name="G_CN" return-type="Collection">
<finder-column name="groupId" />
<finder-column name="customerNumber" />
</finder>
Daniel Kiyotomo Ozeki
RE: キーが2つあるテーブルに対するSearch Containerの利用について
June 29, 2012 9:36 AM
Answer

Daniel Kiyotomo Ozeki

LIFERAY STAFF

Rank: New Member

Posts: 15

Join Date: March 1, 2012

Recent Posts

二間瀬様、

解決できてよかったです。また何かありましたらご質問ください。

小沢さん、追加の情報もありがとうございます!


大関