您的位置:首页 > 编程语言

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());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐