Alfresco - 使用like子句搜索工作流程(或包含!)

时间:2014-10-24 07:55:22

标签: search workflow alfresco

我开发了一个简单的webscript,在输入中接受一些参数并返回与条件匹配的工作流列表。这是一个简化版本:

WorkflowInstanceQuery workflowInstanceQuery = new WorkflowInstanceQuery();
Map<QName, Object> filters = new HashMap<QName, Object>(9);
if (req.getParameter(MY_PARAM) != null)
    filters.put(QNAME_MYPROP, req.getParameter(MY_PARAM));
workflowInstanceQuery.setCustomProps(filters);

List<WorkflowInstance> workflows = new ArrayList<WorkflowInstance>();
workflows.addAll(workflowService.getWorkflows(workflowInstanceQuery));
List<Map<String, Object>> results = new ArrayList<Map<String, Object>>(workflows.size());
for (WorkflowInstance workflow : workflows)
{
    results.add(buildSimple(workflow));                         
}

这是完美的,但现在我希望得到所有匹配的工作流程或包含输入中的属性。 例如,如果输入中的属性值为“hello”,我希望在webscript的输出中具有该属性的工作流,其值为“hello”或“hello Dear”或“Say hello”等等。 。 这实际上是在高级搜索Alfresco Share中搜索内容...如何使用WorkflowInstanceQuery实现?!

3 个答案:

答案 0 :(得分:1)

露天的ActivitiWorkflowEngine类使用的Activiti的HistoricProcessInstanceQuery用于搜索和它正在使用“variableValueEquals”方法来添加自定义属性,使之永远表现为一个“喜欢”子句。

答案 1 :(得分:0)

这里有两件事你需要考虑。工作流模型和内容模型。你需要理解这里的两件事。在内容模型中创建的任何属性都与文档一起存储而不是与工作流一起存储。工作流有任务因此,它很难找到基于文档属性的过滤器工作流程。因为它们之间没有关联,除非并且直到你明确地创建它。

如果要根据属性进行过滤,而不是在与工作流任务相关联的工作流模型中进行过滤。那么您也必须根据工作流的任务进行过滤。因为每个任务都有自己的属性。

答案 2 :(得分:-1)

您是否尝试过针对过滤器参数添加通配符? filters.put(QNAME_MYPROP,&#34; *&#34; + req.getParameter(MY_PARAM)+&#34; *&#34;);