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