Alfresco 如何在露天查找早于特定天数的内容

Alfresco 如何在露天查找早于特定天数的内容,alfresco,Alfresco,我正在露天开发一些预定任务。其中一个任务应仅在某些日期属性早于固定天数的节点上运行。我研究了范围查询:date:[MIN TO NOW],但我不想使用NOW,而是使用过去x天的日期 这可以在查询中指定吗?嗨,是的,这很容易实现。让任务触发一个Javascript 只需执行一些Javascript: var days = 7; var time = date.getTime(); var add = 86400000 * days; var newDate = new Date(time

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


这可以在查询中指定吗?

嗨,是的,这很容易实现。让任务触发一个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,例如,
“日期:[MIN-“+dateString+”]”

嗨,是的,这很容易做到。让任务触发一个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,例如,“日期:[MIN-“+dateString+”]”“

计划任务在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;
    }
}
公共类CustomTemplateActionModelFactory使用LuceneExtensionsModelFactory扩展FreeMarker{
/**
*函数根据过去的天数计算日期范围。
*/
私有静态类LuceneDateRangeOlderHandays实现TemplateMethodModelEx{
@抑制警告(“原始类型”)
公共对象执行器(列表参数)抛出TemplateModelException{
如果(args.size()==1){
int days=((TemplateNumberModel)args.get(0)).getAsNumber().intValue();
日期日期=新日期(System.currentTimeMillis()-天*24L*3600*1000);
StringBuilder=新的StringBuilder();
建造商。附加(“[2001-01-01至”);
append(DefaultTypeConverter.INSTANCE.convert(String.class,date));
生成器。追加(“]”);
返回builder.toString();
}否则{
抛出新的TemplateModelException(“无效参数”);
}
}
}
@凌驾
公共地图getModel(){
//使用自定义函数扩展父模型
Map model=super.getModel();
model.put(“LuceneDateRangeOlderHandays”,新的LuceneDateRangeOlderHandays());
收益模型;
}
}
在Alfresco存储库的Spring配置中,定义您自己的TemplateActionModelFactory,并在其余配置中使用它

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

计划任务在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;
    }
}
公共类CustomTemplateActionModelFactory使用LuceneExtensionsModelFactory扩展FreeMarker{
/**
*函数根据过去的天数计算日期范围。
*/
私有静态类LuceneDateRangeOlderHandays实现TemplateMethodModelEx{
@抑制警告(“原始类型”)
公共对象执行器(列表参数)抛出TemplateModelException{
如果(args.size()==1){
int days=((TemplateNumberModel)args.get(0)).getAsNumber().intValue();
日期日期=新日期(System.currentTimeMillis()-天*24L*3600*1000);
StringBuilder=新的StringBuilder();
建造商。附加(“[2001-01-01至”);
append(DefaultTypeConverter.INSTANCE.convert(String.class,date));
生成器。追加(“]”);
返回builder.toString();
}否则{
抛出新的TemplateModelException(“无效参数”);
}
}
}
@凌驾
公共地图getModel(){
//使用自定义函数扩展父模型
Map model=super.getModel();
model.put(“LuceneDateRangeOlderHandays”,新的LuceneDateRangeOlderHandays());
收益模型;
}
}
在Alfresco存储库的Spring配置中,定义您自己的TemplateActionModelFactory,并在其余配置中使用它

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


您能不能用代码计算x天前的日期,然后从分钟搜索到那时?您能不能用代码计算x天前的日期,然后从分钟搜索到那时?这是一个很好的建议。最后,我使用了一个不同的解决方案,我将在后面描述。这是一个很好的建议。最后,我使用了一个不同的解决方案,我将在后面描述。你能提供代码吗,你所写的并不是真正的解决方案……只是你编写的答案。我想社区真的很想知道你编码要实现什么this@TahirMalik我添加了一些代码。这应该为其他有类似问题的人提供一个起点。然后你能提供代码吗,你所写的并不是真正的解决方案……这只是你编码的答案。我想社区真的很想知道你编码要实现什么this@TahirMalik我添加了一些代码。这应该给出一个起点f