Shark编程实例:启动一个流程,获得所有任务的列表,完成一个任务
2005-11-23 16:32
751 查看
import org.enhydra.shark.corba.WorkflowService.*;
import org.enhydra.shark.corbaclient.workflowadmin.*;
import org.enhydra.shark.corbaclient.workflowadmin.instantiation.*;
import org.omg.WfBase.*;
import org.omg.WorkflowModel.*;
……
public ProcessInstantiatorInterface getProcessInstantiator() {
if (processInstantiator == null) {
if (SharkClient.POA) {
processInstantiator = new ProcessInstantiatorPOA();
} else {
processInstantiator = new ProcessInstantiatorCORBA();
}
}
return processInstantiator;
}
/**
* 找到最新版本的流程,并启动
*
* @param sPkgID String: Package ID
* @param sProcID String: Process ID
* @return int --- 1 false, 0 success
*/
public int startProc(String sPkgID, String sProcID) {
SharkClient.findWorkflowServer("localhost","10123","Shark");
ProcessInstantiatorInterface pi = getProcessInstantiator();
WfRequester wfReq = null;
if (SharkClient.POA) {
wfReq = WfRequesterHelper.narrow(((ProcessInstantiatorPOA) pi).
_this_object());
} else {
wfReq = WfRequesterHelper.narrow(((ProcessInstantiatorCORBA) pi));
}
try {
WfProcessMgr mgr = SharkClient.getExecAmin().
getProcessMgrByXPDLDefinition(sPkgID, sProcID);
System.out.println("启动流程: " + mgr.name());
WfProcess proc = mgr.create_process(wfReq);
proc.start();
} catch (RequesterRequired ex1) {
return 1;
} catch (InvalidRequester ex1) {
return 1;
} catch (NotEnabled ex1) {
return 1;
} catch (BaseException ex1) {
return 1;
} catch (AlreadyRunning ex) {
System.out.println("启动流程错误: 流程正在运行!");
return 1;
} catch (CannotStart ex) {
System.out.println("启动流程错误: 流程无法启动!");
return 1;
} catch (Exception ex) {
System.out.println("寻找流程错误: " + ex.getMessage());
return 1;
}
return 0;
}
/**
* 获得任务项
*
* @param sUser String
* @param sPass String
* @return WfAssignmentIterator
*/
public WfAssignmentIterator getWorkList(String sUser, String sPass) {
SharkConnection sc;
sc = connect(sUser,sPass);
WfAssignmentIterator wai = null;
try {
WfResource res = sc.getResourceObject();
wai = res.get_iterator_work_item();
} catch (NotConnected ex) {
ex.printStackTrace();
} catch (BaseException ex) {
ex.printStackTrace();
} finally {
disconnect();
}
return wai;
}
/**
* findWfActivety
*
* @param wfaKey String
* @param sUserName String
* @return WfActivity
*/
private WfActivity findWfActivety(String wfaKey, String sUserName) {
WfAssignmentIterator wfaIt = null;
WfResource wfr = null;
if (!SharkClient.isInitiated())
SharkClient.initiate("admin", "enhydra", "localhost", "10123", "Shark");
//SharkClient.setPassword("enhydra");
//SharkClient.setUsername("admin");
try {
WfResource[] wfri = SharkClient.getExecAmin().get_sequence_resource(
0);
for (int i = 0; i < wfri.length; i++) {
if (wfri[i].resource_key().compareToIgnoreCase(sUserName) == 0) wfr =
wfri[i];
}
} catch (NotConnected ex) {
System.out.println(ex.getMessage());
} catch (BaseException ex) {
System.out.println(ex.getMessage());
}
try {
wfaIt = wfr.get_iterator_work_item();
} catch (BaseException ex) {
System.out.println(ex.getMessage());
}
WfActivity wa = null;
try {
WfAssignment[] wfa = wfaIt.get_next_n_sequence(0);
for (int i = 0; i < wfa.length; i++) {
if (wfa[i].activity().key().compareToIgnoreCase(wfaKey) == 0) {
wa = wfa[i].activity();
break;
}
}
} catch (BaseException ex) {
System.out.println(ex.getMessage());
}
return wa;
}
/**
* commitInquery 将产品代码prod_id赋值给流程相关变量“price001_prod_id”,然后完成活动
*
* @param prod_id String
* @param wfaKey String
*/
public void commitInquery(String prod_id, String wfaKey) {
WfActivity wa = findWfActivety(wfaKey,"john");
if(wa==null)return;//To do
try {
WfAssignment[] wfas = wa.get_sequence_assignment(0);
for (int i = 0; i < wfas.length; i++) {
wfas[i].set_accepted_status(true);
}
} catch (BaseException ex) {
System.out.println(ex.getMessage());
} catch (CannotAcceptSuspended ex) {
System.out.println(ex.getMessage());
}
NameValue[] updContext=new NameValue[1];
NameValue[] procContext=null;
try {
procContext = wa.process_context();
} catch (BaseException ex) {
System.out.println(ex.getMessage());
}
//updContext[0]=new NameValue("price001_prod_id",null);
try {
//updContext[0].the_name="price001_prod_id";
for (int i = 0; i < procContext.length; i++) {
if(procContext[i].the_name.compareToIgnoreCase("price001_prod_id")==0){
updContext[0]=procContext[i];
WorkflowUtilities.insertValueIntoAnyObject(updContext[0].the_value,prod_id,WorkflowUtilities.STRING_KEY);
}
}
wa.set_process_context(updContext);
wa.set_result(updContext); //更新本活动对应的流程相关信息
wa.complete(); //将本活动标志为“完成”
} catch (InvalidData ex) {
System.out.println(ex.getMessage());
} catch (BaseException ex) {
System.out.println(ex.getMessage());
} catch (CannotComplete ex) {
System.out.println(ex.getMessage());
} catch (UpdateNotAllowed ex) {
System.out.println(ex.getMessage());
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
import org.enhydra.shark.corbaclient.workflowadmin.*;
import org.enhydra.shark.corbaclient.workflowadmin.instantiation.*;
import org.omg.WfBase.*;
import org.omg.WorkflowModel.*;
……
public ProcessInstantiatorInterface getProcessInstantiator() {
if (processInstantiator == null) {
if (SharkClient.POA) {
processInstantiator = new ProcessInstantiatorPOA();
} else {
processInstantiator = new ProcessInstantiatorCORBA();
}
}
return processInstantiator;
}
/**
* 找到最新版本的流程,并启动
*
* @param sPkgID String: Package ID
* @param sProcID String: Process ID
* @return int --- 1 false, 0 success
*/
public int startProc(String sPkgID, String sProcID) {
SharkClient.findWorkflowServer("localhost","10123","Shark");
ProcessInstantiatorInterface pi = getProcessInstantiator();
WfRequester wfReq = null;
if (SharkClient.POA) {
wfReq = WfRequesterHelper.narrow(((ProcessInstantiatorPOA) pi).
_this_object());
} else {
wfReq = WfRequesterHelper.narrow(((ProcessInstantiatorCORBA) pi));
}
try {
WfProcessMgr mgr = SharkClient.getExecAmin().
getProcessMgrByXPDLDefinition(sPkgID, sProcID);
System.out.println("启动流程: " + mgr.name());
WfProcess proc = mgr.create_process(wfReq);
proc.start();
} catch (RequesterRequired ex1) {
return 1;
} catch (InvalidRequester ex1) {
return 1;
} catch (NotEnabled ex1) {
return 1;
} catch (BaseException ex1) {
return 1;
} catch (AlreadyRunning ex) {
System.out.println("启动流程错误: 流程正在运行!");
return 1;
} catch (CannotStart ex) {
System.out.println("启动流程错误: 流程无法启动!");
return 1;
} catch (Exception ex) {
System.out.println("寻找流程错误: " + ex.getMessage());
return 1;
}
return 0;
}
/**
* 获得任务项
*
* @param sUser String
* @param sPass String
* @return WfAssignmentIterator
*/
public WfAssignmentIterator getWorkList(String sUser, String sPass) {
SharkConnection sc;
sc = connect(sUser,sPass);
WfAssignmentIterator wai = null;
try {
WfResource res = sc.getResourceObject();
wai = res.get_iterator_work_item();
} catch (NotConnected ex) {
ex.printStackTrace();
} catch (BaseException ex) {
ex.printStackTrace();
} finally {
disconnect();
}
return wai;
}
/**
* findWfActivety
*
* @param wfaKey String
* @param sUserName String
* @return WfActivity
*/
private WfActivity findWfActivety(String wfaKey, String sUserName) {
WfAssignmentIterator wfaIt = null;
WfResource wfr = null;
if (!SharkClient.isInitiated())
SharkClient.initiate("admin", "enhydra", "localhost", "10123", "Shark");
//SharkClient.setPassword("enhydra");
//SharkClient.setUsername("admin");
try {
WfResource[] wfri = SharkClient.getExecAmin().get_sequence_resource(
0);
for (int i = 0; i < wfri.length; i++) {
if (wfri[i].resource_key().compareToIgnoreCase(sUserName) == 0) wfr =
wfri[i];
}
} catch (NotConnected ex) {
System.out.println(ex.getMessage());
} catch (BaseException ex) {
System.out.println(ex.getMessage());
}
try {
wfaIt = wfr.get_iterator_work_item();
} catch (BaseException ex) {
System.out.println(ex.getMessage());
}
WfActivity wa = null;
try {
WfAssignment[] wfa = wfaIt.get_next_n_sequence(0);
for (int i = 0; i < wfa.length; i++) {
if (wfa[i].activity().key().compareToIgnoreCase(wfaKey) == 0) {
wa = wfa[i].activity();
break;
}
}
} catch (BaseException ex) {
System.out.println(ex.getMessage());
}
return wa;
}
/**
* commitInquery 将产品代码prod_id赋值给流程相关变量“price001_prod_id”,然后完成活动
*
* @param prod_id String
* @param wfaKey String
*/
public void commitInquery(String prod_id, String wfaKey) {
WfActivity wa = findWfActivety(wfaKey,"john");
if(wa==null)return;//To do
try {
WfAssignment[] wfas = wa.get_sequence_assignment(0);
for (int i = 0; i < wfas.length; i++) {
wfas[i].set_accepted_status(true);
}
} catch (BaseException ex) {
System.out.println(ex.getMessage());
} catch (CannotAcceptSuspended ex) {
System.out.println(ex.getMessage());
}
NameValue[] updContext=new NameValue[1];
NameValue[] procContext=null;
try {
procContext = wa.process_context();
} catch (BaseException ex) {
System.out.println(ex.getMessage());
}
//updContext[0]=new NameValue("price001_prod_id",null);
try {
//updContext[0].the_name="price001_prod_id";
for (int i = 0; i < procContext.length; i++) {
if(procContext[i].the_name.compareToIgnoreCase("price001_prod_id")==0){
updContext[0]=procContext[i];
WorkflowUtilities.insertValueIntoAnyObject(updContext[0].the_value,prod_id,WorkflowUtilities.STRING_KEY);
}
}
wa.set_process_context(updContext);
wa.set_result(updContext); //更新本活动对应的流程相关信息
wa.complete(); //将本活动标志为“完成”
} catch (InvalidData ex) {
System.out.println(ex.getMessage());
} catch (BaseException ex) {
System.out.println(ex.getMessage());
} catch (CannotComplete ex) {
System.out.println(ex.getMessage());
} catch (UpdateNotAllowed ex) {
System.out.println(ex.getMessage());
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
相关文章推荐
- 文章标题JBPM4.4:执行流程实例(启动、向后一步、查询任务、拾取任务、完成任务、设置获取流程变量)
- Activiti 5.18启动流程到完成所有任务之间的数据库变化
- JBPM4.4:执行流程实例(启动、向后一步、查询任务、拾取任务、完成任务、设置获取流程变量)
- Activiti 5.18启动流程到完成所有任务之间的数据库变化(转)
- 怎样获得Sqlserver 2000得实例列表和运行在一个实例上得数据库列表
- activiti自定义流程之Spring整合activiti-modeler实例(七):任务列表展示
- 每天一个JavaScript实例-提取所有链接并添加到页面末尾列表
- 我完成一个开发任务的流程(一)
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- 立即获得下载任务完成的消息通知。Android DownloadManager通过注册一个广播监听系统的广播事件完成此操作,在创建广播时候,需要指明过滤器为:DownloadManager.ACTIO
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- activiti自定义流程之Spring整合activiti-modeler实例(八):完成个人任务
- UNIX-LINUX编程实践教程->第八章->实例代码注解->写一个简单的shell->在shell中启动另一个程序
- 使用SharePoint 2010的PowerShell完成Object Model编程才能完成的功能的一个实例
- activiti自定义流程之Spring整合activiti-modeler实例(七):任务列表展示
- 这篇文章描述了Nova启动一个实例的内部流程,原文地址是
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- EA&UML日拱一卒-多任务编程超入门-(12)关于Semaphore,一个不得不说的实例
- C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值
- 如果vagrant up启动后,所有东西都没有了,可能是启动了一个新的实例,