Workflow提供了两个查询方法(转发)

提供了两个查询方法


一个是根据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,因为这两个查询相对的没有效率,返回的数据也有限,因此所有的查询组合也未被完全测试

猜你喜欢

转载自88548886.iteye.com/blog/1681511