如何在Alfresco中查找超过特定天数的内容

时间:2012-10-16 07:00:39

标签: alfresco

我正在Alfresco开发一些计划任务。其中一个任务应仅在特定日期属性早于固定天数的节点上运行。我查看了范围查询:date:[MIN TO NOW],但我不想使用NOW,而是过去 x 天的日期。

可以在查询中指定吗?

2 个答案:

答案 0 :(得分:2)

嗨,是的,这很容易。让任务触发Javascript。

只需做一些Javascript:

 var days = 7;
 var time = date.getTime();
 var add = 86400000 * days;
 var newDate = new Date(time - add);

 var dateString = utils.toISO8601(newDate);

现在在您的查询中使用dateString,例如"date:[MIN - " + dateString + "]"

答案 1 :(得分:1)

计划任务在Spring配置文件中定义。 CronScheduledQueryBasedTemplateActionDefinition执行查询并对每个结果执行操作。主要问题是为查询添加动态日期范围。

但是,它实际上不是一个查询,而是一个查询模板,它是使用FreeMarker处理的。用于处理模板的模型由另一个bean TemplateActionModelFactory

创建

我们的解决方案是将此工厂子类化为模板提供更丰富的模型:添加了一个函数来计算动态日期范围:

public class CustomTemplateActionModelFactory extends FreeMarkerWithLuceneExtensionsModelFactory {

    /**
      * Function to calculate a date range based on the number of days in the past.
      */
    private static class LuceneDateRangeOlderThanDays implements TemplateMethodModelEx {

        @SuppressWarnings("rawtypes")
        public Object exec(List args) throws TemplateModelException {
            if (args.size() == 1) {
                int days = ((TemplateNumberModel) args.get(0)).getAsNumber().intValue();
                Date date = new Date(System.currentTimeMillis() - days * 24L * 3600 * 1000);

                StringBuilder builder = new StringBuilder();
                builder.append("[2001-01-01 TO ");
                builder.append(DefaultTypeConverter.INSTANCE.convert(String.class, date));
                builder.append("]");

                return builder.toString();
            } else {
                throw new TemplateModelException("Invalid parameters.");
            }
        }
    }

    @Override
    public Map<String, Object> getModel() {
        // Extend the parent model with our custom function
        Map<String, Object> model = super.getModel();
        model.put("luceneDateRangeOlderThanDays", new LuceneDateRangeOlderThanDays());
        return model;
    }
}

在Alfresco存储库的Spring配置中,定义您自己的TemplateActionModelFactory并在其余配置中使用它。

<bean id="customTemplateActionModelFactory" class="com.db.cms.repository.util.DBTemplateActionModelFactory">
    <property name="serviceRegistry">
        <ref bean="ServiceRegistry" />
    </property>
</bean>