您的位置:首页 > 产品设计

怎样使用CCBPM做一个项目管理系统(七)——业务数据类库-流程事件的应用

2020-02-17 02:56 141 查看

需求如下:

    在《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
  • 收藏
  • 分享
  • 文章举报
chengping8138 发布了0 篇原创文章 · 获赞 3 · 访问量 204 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: