JBMP流程引擎
流程設計
最簡單的一個流程配置包括下面幾部分:
- 開始節點、人工處理環節(包括參與人、動作)、結束節點;
- 參與人:可配置具體用戶、用戶組、或者表達式,動作可以配置執行的後置事件。
- 參與人表達式配置。
- 動作配置執行的後置事件。
流程發起
- 發起的主要方法:bwService.startProcess(userid, "RFP_TRADETRANSACTIONS_APPROVE", sendapprovelist, map);
- userid:發起用戶
- RFP_TRADETRANSACTIONS_APPROVE:流程設計階段定義的流程KEY
- sendapprovelist:與流程相關的業務數據,主要是單據的主鍵,用於流程審批時加載自定義表單查詢數據使用
- map:傳入流程中的變量,可以用於流程條件
public void sendApprove(CommonTransfer<TransAccountDetail> context) throws Exception {
String[] urids = ((String)context.getProperties().get("ids")).split(",");
String userid = (String)context.getProperties().get("userid");
IDBSession session = DBSessionAdapter.getSession();
TransAccountDetailDao transAccountDetailDao=new TransAccountDetailDao(session);
TradeAccountDao tradeAccountDao=new TradeAccountDao(session);
for (String urid : urids) {
if (FString.isNullOrEmpty(urid)) {
throw new Exception("數據異常,urid字段值非法(爲空)!");
}
TransAccountDetail transAccountDetail = transAccountDetailDao.getByUrid(urid);
if (transAccountDetail == null) {
throw new Exception("數據異常,無法通過urid找到相應的交易明細");
}
if(transAccountDetailDao.existApproving(transAccountDetail)){
throw new ServiceException(ErrorCodeConstants.TAM00013);
}
TradeAccount tradeAccount = tradeAccountDao.getByUrid(transAccountDetail.getTradeaccountsid());
IBusinessWorkflowService bwService = (IBusinessWorkflowService) Globals.getBean("bizWorkflowService");
List<String> sendapprovelist = new ArrayList<String>();
Map<String, Object> map = new HashMap<String, Object>();
sendapprovelist.add(transAccountDetail.getUrid());
map.put("$_ORG_ID", tradeAccount.getOrgid());
bwService.startProcess(userid, "RFP_TRADETRANSACTIONS_APPROVE", sendapprovelist, map);
//更新審批狀態爲審批中
transAccountDetail.setRowversion(transAccountDetail.getRowversion()+1);
transAccountDetail.setApprovestate(ENApproveState.APPROVING.getValue());
transAccountDetailDao.updateWithRowversion(transAccountDetail);
}
}
流程中查找審批用戶表達式
- 新建一個普通類,配置spring Bean,UserQueryDao就是bean的名稱
public List<User> getUserByOrgAndRole(String orgid, String Roles) {
List<User> list = new ArrayList<User>();
StringBuilder SQL = new StringBuilder();
SQL.append("select e.user_code from tsys_user e where e.org_id ='"+orgid+"'" and e.role_code in ("+Roles+") and e.right_flag = 1");
List<String> result=ht.getSessionFactory().getCurrentSession().createSQLQuery(SQL.toString()).list();
for(String userId:result){
UserImpl uimpl=new UserImpl();
uimpl.setId(userId);
list.add(uimpl);
}
return list;
}
後置事件
- 新建一個普通類,實現ISubmitCallBack接口
- 重寫submitCallBack方法,參數data就是放入流程中的數據
public void submitCallBack(Map<String, Object> data) {
String urid = data.get("urid").toString();
}