提供了两个查询方法
一个是根据WorkflowQuery对象进行查询,一个是根据WorkflowExpressionQuery对象进行查询。
根据WorkflowExpressionQuery对象进行查询,实际上是作用于当前步骤表,预定义的,即os_currentstep。
WorkflowExpressionQuery接受一个Expression对象,Expression可以是单一条件的FieldExpression,或是嵌套条件的NestedExpression。
FieldExpression有四个参数,依次是字段名,表名,比较方式,值,前三个均以静态常量表示。
例子:单一条件的查询,查询在当前步骤中,工作流名为/samples/auto-split.xml的工作流编号列表
IApplicationContext context = ContextRegistry.GetContext();
IWorkflowStore store = (IWorkflowStore)context.GetObject("workflowStore");
Expression exp = new Fieldexpression_r(FieldExpression.NAME, FieldExpression.ENTRY, FieldExpression.EQUALS, "/samples/auto-split.xml");
WorkflowExpressionQuery query = new WorkflowExpressionQuery(exp);
IList list= store.Query(query)
例子:嵌套条件的查询,查询在当前步骤中,工作流名为/samples/auto-split.xml ,当前步骤编号为11的工作流编号列表
IApplicationContext context = ContextRegistry.GetContext();
IWorkflowStore store = (IWorkflowStore)context.GetObject("workflowStore");
Expression exp = new Fieldexpression_r(FieldExpression.NAME, FieldExpression.ENTRY, FieldExpression.EQUALS, "/samples/auto-split.xml");
Expression exp2 = new Fieldexpression_r(FieldExpression.STEP, FieldExpression.CURRENT_STEPS, FieldExpression.EQUALS,11);
NestedExpression expression = new Nestedexpression_r(new Expression[] { exp, exp2 }, NestedExpression.AND);
WorkflowExpressionQuery query = new WorkflowExpressionQuery(expression);
IList list=store.Query(query);
注:列表中返回的字段,当在嵌套条件查询时,总是返回stepEntryId 通常就是os_currentstp.entry_id字段,当在简单条件查询时,返回查询的列名
根据WorkflowQuery对象查询时,可以query对象的Type,可查询当前表和历史表,这里列表总是返回工作流编号
WorkflowQuery可有四个参数,它们是查询的字段名,表名,条件和值,下面两个例子分别查询历史步骤表和当前步骤表
IApplicationContext context = ContextRegistry.GetContext();
IWorkflowStore store = (IWorkflowStore)context.GetObject("workflowStore");
WorkflowQuery query = new WorkflowQuery(WorkflowQuery.ACTION, WorkflowQuery.HISTORY, WorkflowQuery.EQUALS, 1101);
IList list = store.Query(query);
query = new WorkflowQuery(WorkflowQuery.ACTION, WorkflowQuery.CURRENT, WorkflowQuery.EQUALS, 1101);
list = store.Query(query);
在实际运用中,我个人实际上从不用这两个查询api,因为这两个查询相对的没有效率,返回的数据也有限,因此所有的查询组合也未被完全测试