maximo 工作流实现代码
要實現效果:已發出的工作流,誰都不可以修改流程里的單子(可以查看,不可以保存),除了特殊權限的人(maxadmin),或狀態為審核不通過(即,返回給申請人);已發出且未結束的工作流,審批人(節點接收人)必須添加自己的審批意見。
AppBean類
public int SAVE() throws MXException, RemoteException { ?
MboRemote mr = getMbo();// 獲取主表對象 ?
MboSetRemote msr = mr.getMboSet("zzid");// 通過關聯關系獲取子表對象,zi表 ?
MboSetRemote msrsp = mr.getMboSet("zhushenpi");// 通過關聯關系獲取子表對象,zhushenpi主子表的關聯關系名
? String loginPerson = getMbo().getUserInfo().getPersonId();// 得到當前登錄人的名字 ?
String zhuStatus = mr.getString("status"); // 得到主表里的審批狀態,status為主表里存儲狀態的字段
? //hasAuth()方法判斷是夠有權限修改保存單子 ?
if (!hasAuth()) { // 當hasAuth()返回為false時,沒有權限修改單子 ??
throw new MXApplicationException("您沒有權限修改此計劃單子", ""); ?
}
//判斷是否要添加審批意見
else if (!(zhuStatus.equals("新建") || zhuStatus.equals("審批不通過"))) {//單子在審批人這里時,不需要有審批意見?
//此時需要有審批意見,如果JZSHENPI表為空,說明沒有審批意見,則提示??
if (!msrsp.isEmpty()) {?
for (int i = 0; i < msrsp.count(); i++) { ????
// 當前登錄人在審批表里有沒有記錄,當前審批表里的狀態和主表里的狀態是不是一致的 ????
if (!(loginPerson.equalsIgnoreCase(msrsp.getMbo(i) .getString("SHENPIREN")) &&
????????? zhuStatus.equalsIgnoreCase(msrsp.getMbo(i).getString( "SHENPISTATUS")))) { ?????
msrsp.setValue("HASLD", false, 11L);
????? throw new MXApplicationException("還沒有填寫你的審批意見", ""); ????
} ???
} ??
} else { ???
throw new MXApplicationException("還沒有填寫你的審批意見", ""); ??
} ?
}
? if (!msr.isEmpty()) { ??
mr.setValue("allout", msr.sum("outmoney")); ??
mr.setValue("allin", msr.sum("inmoney")); ?? mr.setValue("yue", msr.sum("gerenyue")); ?
} ?
return super.SAVE();
}
// 這個方法判斷當前登錄人的權限
public boolean hasAuth() throws MXException, RemoteException { ?
MboRemote thisMbo = getMbo(); // 得到主表對象 ?
String tableId = thisMbo.getName() + "id"; // 得到主表的id字段名 ?
long codeid = thisMbo.getLong(tableId);// 通過字段名得到這個字段的值,這字段是long類型 ?
String status = thisMbo.getString("status");// 通過字段名去得到該字段的值 ?
String personid = thisMbo.getUserInfo().getPersonId();// 得到當前登錄人的名字 ?
if (personid.equalsIgnoreCase("maxadmin")) { // 如果登陸人是maxadmin(或者其他有權限的人),返回true,可以修改單子 ??
return true; ?
} ?
// 如果這個app名是prplan并且登錄人是jianglei,返回true,可以修改單子(prplan這個應用程序也綁定了這個類,jainglei是特殊權限的) ?
/*?* if ((this.app.getApp().toString().equalsIgnoreCase("PRPLAN")) && (personid.equalsIgnoreCase("jianglei"))) {
return true;
} ?? */
? // 如果這個單子的狀態是“新建”或者“wappr(表示初始狀態)”,返回requestedby字段值和登陸人的比較結果,如果相同,可以修改單子//如果有其他可以修改單子的狀態可以再加上
if ((status.equals("新建")) || (status.equals("WAPPR"))) { ??
return thisMbo.getString("createby").equalsIgnoreCase(personid); ?
} ?
if(status.equals("取消操作")){??? //如果是創建人取消了操作(結束流程),那么就誰都不可以進行任何操作 ??
return false; ?
} ?
// 根據后面的條件從wfinstance表里得到對應的MboSet,==》查有沒有符合下列條件的流程 ? //wfinstance表是保留流程實例信息的
MboSetRemote woinstance = thisMbo.getMboSet("instance", "WFINSTANCE", ??? "ownertable='" + thisMbo.getName() + "' and ownerid='" + codeid ????? ???????????? + "' and active = 1"); // active = 1表示這個流程是活動的(在流程中,已經開始還沒有結束)??
// 如果這個MboSet為空,直接跳過if,如果不為空,則執行if里面的代碼 ?
if (!woinstance.isEmpty()) { ??
String sql = "ownerid='" + codeid + "' and ownertable='"? + thisMbo.getName()?+ "' and assignstatus='ACTIVE' and assigncode='" + personid ???? + "'";// assigncode='" + personid + "'" ??
// 根據sql條件從wfassignment表里得到一個MboSet,==》查找這個流程里有沒有這個人
MboSetRemote mbosetremote = thisMbo.getMboSet("assigncode",? "WFASSIGNMENT", sql); ??
??? return !mbosetremote.isEmpty(); ?
} ?
// 返回requestedby字段值和登陸人的比較結果,如果相同,可以修改單子 ?
return thisMbo.getString("createby").equalsIgnoreCase(personid);
}
?
?
?
如果有判斷不嚴謹的地方,請大家留言提出,謝謝!
轉載于:https://www.cnblogs.com/hanyuqin/p/3683077.html
總結
以上是生活随笔為你收集整理的maximo 工作流实现代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初次树莓派遇到的一些小问题
- 下一篇: jquery模拟LCD 时钟