0

Service Builderを使用して、いくつかのユーザーデータと日付を格納するポートレットを作成しました。

service.xmlファイルの関連部分

<entity name="ServiceAgreement" local-service="true" remote-service="false">
    <column name="agreementId" type="long" primary="true"></column>
    <column name="agreementVersion" type="double"></column>
    <column name="userId" type="long"></column>
    <column name="agreementTimestamp" type="Date"></column><!-- column w/ the trouble -->
    <column name="groupId" type="long"></column>
    <column name="companyId" type="long"></column>
    <order by="asc">
        <order-column name="agreementTimestamp"></order-column>
    </order>
    <finder name="G_AT" return-type="Collection">
        <finder-column name="groupId"></finder-column>
        <finder-column name="agreementTimestamp"></finder-column>
    </finder>
    <finder name="SignedDate" return-type="Collection">
        <finder-column name="agreementTimestamp"></finder-column>
    </finder>
...

現在、この最初のポートレットに格納されているデータのレポートポートレットとなる別のポートレットを作成しています。

私が抱えている問題は、タグを使用して日付で検索を実行すると、そこにあることがわかっている日付についてDBから応答がないことです。ServiceBuilderが作成した「findbysignedDate」メソッドが日付で検索し、ミリ秒まで問題を追跡しました。

取得したいレコード: 取得するレコード たとえば、レポートポートレットには次のものが含まれています。

int month = Integer.parseInt(request.getParameter("dateMonth"));
int day = Integer.parseInt(request.getParameter("dateDay"));
int year = Integer.parseInt(request.getParameter("dateYear"));
GregorianCalendar cal = new GregorianCalendar();
cal.clear();
cal.set(year, month, day);
Date signedDate = cal.getTime();

try {
   if(signedDate == null || signedDate.getTime() < 0) {
     throw new PortalException("Invalid date input provided.");
} else {
    _log.debug("Signed Date: " + signedDate.toString());

    //get TOS data
    JSONArray tosArray = LiferayHelper.getTOSsBySignedDate(signedDate);
...

そして、'tosArray'には何も返されません。しかし、私がこのように書くと:

int month = Integer.parseInt(request.getParameter("dateMonth"));
int day = Integer.parseInt(request.getParameter("dateDay"));
int year = Integer.parseInt(request.getParameter("dateYear"));
GregorianCalendar cal = new GregorianCalendar();
cal.clear();
cal.set(year, month, day,18,49,15); //getting REALLY specific here...
cal.add(Calendar.MILLISECOND, 958);
Date signedDate = cal.getTime();

try {
   if(signedDate == null || signedDate.getTime() < 0) {
     throw new PortalException("Invalid date input provided.");
} else {
    _log.debug("Signed Date: " + signedDate.toString());

    //get TOS data
    JSONArray tosArray = LiferayHelper.getTOSsBySignedDate(signedDate);
...

次に、tosArrayに正しいデータが含まれます。

1日(24時間)のすべてのデータをプルバックしたいだけです。これを回避する方法が組み込まれているかどうか誰かが知っていますか?または、service.xmlファイルを書き直す必要がありますか?独自の検索メソッドを作成する必要がありますか?

ありがとう。

4

1 に答える 1

0

その答えは、Service Builder が作成するカスタム クエリを使用することです。これは、Liferay in Action の第 7 章の終わりにありました。

簡単な概要は、Liferay サイトで入手できます。
http://www.liferay.com/community/wiki/-/wiki/Main/Service+Builder+Finders

Liferay がこれらの Finder に適用する厳密な命名規則の契約に注意してください。サービスジェネレーターが新しいファインダークラスを自動的に構築するようにほぼ一日中苦労しましたが、サービスビルダーが期待していた名前をファインダーに付けていなかったため、失敗していることに気付きました。

于 2012-09-04T13:58:12.627 に答える