有一段时间没写文章了,这段时间项目比较忙一直没写,在shark方面也加深了很多了解,这一段时间完成了权限的设置,流程变量直接赋值等等很多功能,有时间再补上.这里说下迭代器(Iterator)和shark查询表达式(qeury express)
对shark的迭代器我以前一直搞不明白为什么不用java的iterator 而是用自已的wfprocessIterator、wfActivityIterator等这种迭代器,直到用到shark的查询才明白.原这shark提供的这个迭代器在得到时并没有内容,而是在你需要得到数据时(调用它的方法)再生成sql到库里查东东,也就是说可以给迭代器一个查询表达式,来减少数据量.这个表达示我在网上查到以下两个例子
Example 6. Getting process managers based on some criteria
This example shows how to get process managers based on some criteria. It'll try to get all process managers which package Id is "test", and which state is enabled.
ExecutionAdministration eAdmin = Shark.getInstance()
.getAdminInterface()
.getExecutionAdministration();
eAdmin.connect("user", "secret", "", "");
WfProcessMgrIterator pmi = eAdmin.get_iterator_processmgr();
String query = "packageId.equals(/"test/") && enabled.booleanValue()";
pmi.set_query_expression(query);
WfProcessMgr[] procs = pmi.get_next_n_sequence(0);
Example 7. Getting processes based on some criteria
This example shows how to get processes created by some process manager based on some criteria. It'll try to get all processes which state is "open.running", which are started in last 10 minutes, which have more than 3 active activities, and which String variable called "myvariable" has value "test".
/*
WfProcessMgr mgr;
*/
WfProcessIterator wpi = mgr.get_iterator_process();
String query = "state.equals(/"open.running/") && "
+ "startTime.longValue()>(java.lang.System.currentTimeMillis()-10*60*1000) && "
+ "activeActivitiesNo.longValue()>3 && "
+ "context_myvariable.equals(/"test/")";
wpi.set_query_expression(query);
WfProcess[] procs = wpi.get_next_n_sequence(0);
这两个已经写的很详细了.只是这个表达示的写法查的好多也没有找到具体要怎
么写(如我要按流程实例的id查找就弄了好长时间也没写好),
后来发现Shark2.0有提供另外的方法来生成这个表达示那就是FilterBuilder这个类,
有好多种filterBuild如ProcessFilterBuild、processMgrFilterBuild等用来生成各种查询表达示:
用法如下:
这样shark就会根据你的设置来生成查询表达式了,不用再苦恼条件表达示的写法了,
我这代码是按流程实例id来查找的,经我测试生成的表达式是:key.equals("1201_P1_WP37")
另外还有一种比较特别的查找方法,是我在看shark原码进发现的,用法和上面的差不多,
但查到的结果却是和shark的model包中内容差不多的另外一个包中的数据类,
但是可以不依赖shark的迭代器而直接查找用法如下
......