怎样使用CCBPM做一个项目管理系统(七)——业务数据类库-流程事件的应用
需求如下:
在《017.员工入职流程》结束后,需要将员工数据记录到业务表Employee中,
同时还需要为该员工新建登录系统的账号。
功能实现
事件类搭建
1.命名规则
在文件夹FlowEvent中,新建C#类,命名规则定义为FEE+流程编号。如当前流程编号为017,则新建类命名FEE017。
2.继承基类
事件类要继承的基类为:BP.WF.FlowEventBase。该基类可获取流程WorkID FK_Node等基本属性字段值。
3.构造函数与重载字段
构造函数为空参数即可。
需要重载FlowMark字段,内容为当前流程编号。
4.事件类与流程关联。
编译整体项目,WEB项目引用该类库,重新进入流程设计器打开该流程,在流程属性中点击保存实现当前事件类与流程的绑定。
5.流程事件功能实现
CCBPM中包含有以下流程事件,基本包含了所有的事件类型。通过重载事件业务功能即可。
EventListOfNode.CreateWorkID: // 节点表单事件。 EventListOfNode.FrmLoadAfter: // 节点表单事件。 EventListOfNode.FrmLoadBefore: // 节点表单事件。 EventListOfNode.SaveAfter: // 节点事件 保存后。 EventListOfNode.SaveBefore: // 节点事件 - 保存前.。 EventListOfNode.SendWhen: // 节点事件 - 发送前。 EventListOfNode.SendSuccess: // 节点事件 - 发送成功时。 EventListOfNode.SendError: // 节点事件 - 发送失败。 EventListOfNode.ReturnBefore: // 节点事件 - 退回前。 EventListOfNode.ReturnAfter: // 节点事件 - 退回后。 EventListOfNode.UndoneBefore: // 节点事件 - 撤销前。 EventListOfNode.UndoneAfter: // 节点事件 - 撤销后。 EventListOfNode.ShitAfter:// 节点事件-移交后 EventListOfNode.AskerAfter://节点事件 加签后 EventListOfNode.AskerReAfter://节点事件加签回复后 EventListOfNode.QueueSendAfter://队列节点发送后 EventListOfNode.FlowOnCreateWorkID: // 流程事件 EventListOfNode.FlowOverBefore: // 流程结束前.。 EventListOfNode.FlowOverAfter: // 流程结束后。 EventListOfNode.BeforeFlowDel: // 流程删除前。 EventListOfNode.AfterFlowDel: // 删除后. EventListOfNode.WorkArrive: // 工作到达时.
功能实现
需求:
在《017.员工入职流程》结束后,需要将员工数据记录到业务表Employee中,
同时还需要为该员工新建登录系统的账号。
流程结束事件重载
/// <summary> /// 流程结束事件 /// </summary> /// <returns></returns> public override string FlowOverAfter() { return base.FlowOverAfter(); }
流程数据提取
流程数据根据流程新建时数据存储模式的不同,将分别存储在不同的数据表中。共有的数据表为ND17RPT和ND17Track数据表。
以数据存储模式为合并模式为例,从ND17Rpt中提取表单填写的数据。
/// <summary> /// 获取表单数据 /// </summary> public void Get_RptData() { //获取当前流程的表单数据,其中WorkID为唯一编号 MapData map = new MapData("ND17Rpt"); GEEntity genEn = map.HisGEEn; genEn.SetValByKey("OID", this.WorkID); genEn.RetrieveFromDBSources(); //新增员工数据 Employee ee = new Employee(); /** * 为员工表的Name字段赋值 * 数据来源于ND17RPT数据表的RZName字段 * RZName入职人员名称为表单中存储入职人员姓名的控件ID * **/ ee.SetValByKey("Name",genEn.GetValByKey("RZName")); //其他字段以上做数据赋值 //员工新增 ee.Insert(); }
上述方法实现了流程数据的获取的新员工数据的新增,将会在员工数据表中新增一条数据。
在流程结束事件中,调用该方法即可。
/// <summary> /// 流程结束事件 /// </summary> /// <returns></returns> public override string FlowOverAfter() { Get_RptData(); return base.FlowOverAfter(); }
基类保存事件重载
新增员工后,还需要同时为该员工开通登录系统的账号,则需要在员工新增时同步新增一条数据到账号表中即可。
基类的事件有以下类型,基本可以满足日常需要: 新增、新增前、新增后、删除、删除前、删除后、修改、修改前、修改后等。
其他类型可在 BP.En.Entity中查看。
在Employee类中,重载保存后方法。
/// <summary> /// 新增员工后,要同步到port_emp表中。 /// </summary> protected override void afterInsert() { BP.GPM.Emp emp = new GPM.Emp(); emp.No = this.LoginNo; emp.Name = this.Name; emp.FK_Dept = this.FK_Dept; emp.Pass = "123"; emp.Tel = this.BRLXFS; // emp.EmpNo = this.DDNo; emp.Insert(); //其他非实体类数据表数据同步 string mypk = emp.FK_Dept + "_" + emp.No; BP.DA.DBAccess.RunSQL("INSERT INTO PORT_DEPTEMP(MyPK,FK_Emp,FK_Dept,FK_Duty,DutyLevel,Leader) values('" + mypk + "','" + emp.No + "','" + emp.FK_Dept + "','0','','')"); base.afterInsert(); }
上述功能即实现了流程结束后,员工表和系统组织结构表中均有一条数据新增。
运行流程测试即可。
转载于:https://my.oschina.net/ccbpm/blog/1863735
- 点赞 1
- 收藏
- 分享
- 文章举报
- CCBPM重点数据表(一)—— 主要数据表列表
- CCBPM视频教程(一) —— 流程设计基础入门
- CCBPM宣传文案(一)——听说你爱我?
- CCBPM系统集成(一)——接口说明
- UVA 694 The Collatz Sequence
- the user operation is waiting for "buiding workspace" to complete问题
- xmlhttprequest返回数据转json
- 基于Arduino的麦克纳姆轮小车程序控制设计
- RPA - UiBot学习指南第一期丨数据处理(数组)
- Query the commission contract which without cost center(分批处理数据,多线程异步调用)
- rpm 修复
- Sequelize V5.9.4 MVC模式(二 | 单表增删改查)
- Sequelize V5.9.4 MVC模式(三 | 基本条件查询 )
- Sequelize V5.9.4 MVC模式(四 | 一对一)
- Sequelize V5.9.4 MVC模式(五 | 一对多)
- Sequelize V5.9.4 MVC模式(六 | 多对多)
- Sequelize V5.9.4 MVC模式(七 | 细节补充)
- 在xib里,拖一个UIView到UITableView中作为tableHeaderView:
- UITableViewCell高度自适应的关键点
- GUI读取图片和变换图片