在Liferay 6.1中,是否可以仅在日期时间字段中搜索ServiceBuilder portlet?

时间:2012-08-27 22:05:46

标签: liferay-6 alloy-ui

我已经通过Service Builder创建了一个portlet,它存储了一些用户数据以及日期。

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

我目前正在编写另一个portlet,它将成为存储在第一个portlet中的数据的报告portlet。

我遇到的麻烦是当我按日期执行搜索时,使用标记,我没有从数据库获得任何我知道的日期的回复。我已经跟踪了问题,他们找到了ServiceBuilder构建的'findbysignedDate'方法,按日期搜索,直到毫秒

我要检索的记录: Record to be retrieved 例如,我的报告portlet包含:

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包含正确的数据。

我只想将所有数据拉回一天(24小时)。有没有人知道这是否有内置的方法?或者我需要重写我的service.xml文件?我不得不编写自己的搜索方法吗?

感谢。

1 个答案:

答案 0 :(得分:0)

答案是使用Service Builder将为您构建的自定义查询。在Liferay in Action的第7章末尾找到了这个。

Liferay网站上提供了简要概述 http://www.liferay.com/community/wiki/-/wiki/Main/Service+Builder+Finders

请注意Liferay为这些Finder强制执行的严格命名约定合同。我花了差不多一整天努力让服务生成器自动构建我的新finder类,却发现它失败了,因为我没有将我的查找器命名为Service Builder所期望的。