业务流程自定义的实现.docx
《业务流程自定义的实现.docx》由会员分享,可在线阅读,更多相关《业务流程自定义的实现.docx(41页珍藏版)》请在冰豆网上搜索。
业务流程自定义的实现
业务流程定义创建的表:
XT_LCXX:
流程信息表
XT_JDXX:
节点信息表
(原)
(改过)
XT_LCSL:
流程实例
(原)
(改过)
流程实例表中添加了节点顺序,不再用上节点id,下节点id,功能类似,这样可以方便一个节点的下一个步骤允许两个节点同时操作的情况。
所以稍做了改变。
但是不太确定在其他情况是否都能够满足要求,还在观察中。
LC_LSJL:
历史记录
逻辑顺序:
定义流程时:
1、定义流程客体,即流程中流转被操作的对象;
2、流程中需要经过的步骤,即节点,注意节点的先后顺序;
3、每个步骤中操作该对象的主体,即人员或角色;
这样一个完整的流程就定义好了。
实现界面:
1、
列表为已存在的流程,图片按钮为创建新流程。
2、
点击空的流程时出现起点。
点击已有流程时则展示流程示意图
3、
点击起点按钮时,开始定义节点(第一个)。
4、
第一个节点出现后,鼠标悬停在节点之上时,提示操作人员和操作类型,点击按钮时则出现菜单有3个选择:
添加,修改和删除。
5、
点击增加时,弹出设置节点的窗口,在节点顺序的下拉框中可以选择要添加的节点的顺序,是与当前节点属于同一时间段进行的,还是下一步骤。
点击删除时,直接删除掉该节点。
操作流程时:
1、在创建流程信息表中包含对象的时候,同时向历史记录表中插入一条记录,并标明状态;
2、根据节点表中的操作人员和历史记录中待处理事件列表,选出待“我”处理的任务;
3、处理完成后,相应增加历史记录,表明目前状态,并把本流程上一个状态注销,(若有并行步骤则需添加多条记录);
4、最终完成后该流程的所有记录的状态都注销。
工作流类的设计:
实体类:
有属性:
id,名称等等
有方法:
add、edit、delete,添加的部分有选择添加下个节点是什么类型的有编制、审核、审批、结束
添加的时候,更新到数据库
有三个类:
publicclassLC
publicclassJD
publicclassLCSL
分别是流程类,节点类,和流程实例类。
一、在流程类中
有一个字段:
privatestring_lcid;
有四个属性:
publicstringBz
publicstringLcmc
publicstringLczt
publicstringLcyhid
实例化流程是有两种方法:
1是创建一个数据库中不存在的新流程,需要传入参数:
publicLC(stringlcmc,stringlczt,stringbz,stringyhid)
2是实例化一个数据库中已存在的流程,则只需传入LCID即可:
publicLC(stringlcid)
stringSql_Select="selectt.lc_mc,t.lc_zt,t.lc_yhid,t.lc_cjrq,t.lc_xgrq,t.lc_scbj,t.lc_bzfromxt_lcxxtwheret.lc_id='"+lcid+"'";
DataTableDt=DBHelper.GetDataSet(Sql_Select);
if(Dt.Rows.Count==1)
{
this._lcmc=Dt.Rows[0]["lc_mc"].ToString();
this._lczt=Dt.Rows[0]["lc_lczt"].ToString();
this._lcyhid=Dt.Rows[0]["lc_yhid"].ToString();
this._bz=Dt.Rows[0]["lc_bz"].ToString();
}
会将其他信息添加到流程类的属性中。
流程类中有方法:
///增加基本流程信息
publicstringAdd_CL()
///修改流程基本信息
publicstringEdit_CL(stringLcid)
publicstringDelete_CL(stringLcid)
在节点类中:
有属性:
publicstringJdid
publicstringCzlx
publicstringCzry
publicstringYhid
publicstringBz
有方法:
///增加一个新节点
publicstringAdd_JD()
///修改节点
publicstringEdit_JD(stringJdid)
///删除节点
publicstringDelete_JD(stringjdid)
实例化节点时,有三种方法1实例化一个空的节点,2实例化一个新的节点(没有节点id),根据节点id实例化一个数据库中已存在的节点(其他属性自动添加)。
三、流程实例类
有属性:
publicstringLcid
publicstringYhid
publicstringBz
有方法:
///向流程添加节点(流程id必须提前设定好)
///节点的层次,001是与上节点同一层次,002是下一层次
publicstringAdd_JdtoLc(stringJdid,stringJdcc)
publicstringDelete_JdFromLc(stringJdid)
必须注意一点,在流程实例中,添加节点和删除节点有点不同:
添加的时候是先用节点类添加一个节点,然后再用流程实例类向流程添加这个节点,而删除的时候直接用流程实例类删除掉节点,因为在Delete_JdFromLc方法中已经调用了Delete_JD方法。
附类的全部代码:
usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.HtmlControls;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Xml.Linq;
usingSystem.Data.OracleClient;
usingSystem.Collections.Generic;
//usingSystem.ComponentModel;
///
///WorkFlow的摘要说明
///
publicclassWorkFlow
{
publicWorkFlow()
{
//
//TODO:
在此处添加构造函数逻辑
//
}
}
///
///流程(基本信息)实体类,实现流程的增删改
///
publicclassLC
{
///
///实例化空流程
///
publicLC()
{}
///
///实例化准备添加的新流程
///
///
///
///
///
publicLC(stringlcmc,stringlczt,stringbz,stringyhid)
{
this._lcmc=lcmc;
this._lczt=lczt;
this._bz=bz;
this._lcyhid=yhid;
}
///
///实例化数据库中已存在的流程,得到该流程的所有属性
///
///
publicLC(stringlcid)
{
this._lcid=lcid;
try
{
stringSql_Select="selectt.lc_mc,t.lc_zt,t.lc_yhid,t.lc_cjrq,t.lc_xgrq,t.lc_scbj,t.lc_bzfromxt_lcxxtwheret.lc_id='"+lcid+"'";
DataTableDt=DBHelper.GetDataSet(Sql_Select);
if(Dt.Rows.Count==1)
{
this._lcmc=Dt.Rows[0]["lc_mc"].ToString();
this._lczt=Dt.Rows[0]["lc_lczt"].ToString();
this._lcyhid=Dt.Rows[0]["lc_yhid"].ToString();
this._bz=Dt.Rows[0]["lc_bz"].ToString();
}
}
catch(Exceptione)
{
throwe;
}
}
privatestring_lcid;
privatestring_bz;
publicstringBz
{
get{return_bz;}
set{_bz=value;}
}
privatestring_lcmc;
///
///流程名称
///
publicstringLcmc
{
get{return_lcmc;}
set{_lcmc=value;}
}
privatestring_lczt;
publicstringLczt
{
get{return_lczt;}
set{_lczt=value;}
}
///
///或许在类中可以直接得到登陆的用户id,就不需要再传值了。
///
privatestring_lcyhid;
publicstringLcyhid
{
get{return_lcyhid;}
set{_lcyhid=value;}
}
///
///增加基本流程信息
///
///数据库操作信息或错误信息
publicstringAdd_CL()
{
stringinfo=string.Empty;
try
{
_lcid=DBHelper.GetScalar("selectget_next_id('xt_lcxx','lc_id','LCXX')fromdual").ToString();
stringSql_Insert="insertintoxt_lcxx(lc_id,lc_mc,lc_zt,lc_yhid,lc_cjrq,lc_bz)values('"+_lcid+"','"+_lcmc+"','"+_lczt+"','"+_lcyhid+"',trunc(sysdate,'dd'),'"+_bz+"')";
info=DBHelper.ExecuteCommand(Sql_Insert).ToString();
}
catch(Exceptione)
{
info=e.Message.ToString();
}
returninfo;
}
///
///修改流程基本信息
///
///准备修改的流程id
///
publicstringEdit_CL(stringLcid)
{
stringinfo=string.Empty;
try
{
stringSql_Update="updatext_lcxxsetlc_mc='"+_lcmc+"',lc_yhid='"+_lcyhid+"',lc_xgrq=trunc(sysdate,'dd'),lc_bz='"+_bz+"'wherelc_id='"+Lcid+"'";//流程的id对应主体,不可变
info=DBHelper.ExecuteCommand(Sql_Update).ToString();
}
catch(Exceptione)
{
info=e.Message.ToString();
}
returninfo;
}
publicstringDelete_CL(stringLcid)
{
stringinfo=string.Empty;
try
{
stringSql_Delete="deletxt_lcxxwherelc_id='"+Lcid+"'";
info=DBHelper.ExecuteCommand(Sql_Delete).ToString();
}
catch(Exceptione)
{
info=e.Message.ToString();
}
returninfo;
}
}
///
///节点实体类,实现节点的增删改
///
publicclassJD
{
publicJD()
{}
///
///实例化节点实体(已存在的节点)
///
///节点id
publicJD(stringjdid)
{
this._jdid=jdid;
try
{
stringSql_Select="selecta.jd_czry,a.jd_yhdw,a.jd_yhid,a.jd_cjrq,a.jd_bz,a.jd_czlx,a.jd_xgrq,a.jd_scbjfromxt_jdxxawherea.jd_id='"+jdid+"'";
DataTableDt=DBHelper.GetDataSet(Sql_Select);
if(Dt.Rows.Count==1)
{
this._czry=Dt.Rows[0]["jd_czry"].ToString();
this._czlx=Dt.Rows[0]["jd_czlx"].ToString();
this._yhid=Dt.Rows[0]["jd_yhid"].ToString();
this._bz=Dt.Rows[0]["jd_bz"].ToString();
}
}
catch(Exceptione)
{
throwe;
}
}
///
///实例化新节点,(准备添加到数据库)
///
///节点的操作人员
///该记录的添加人员
///备注
publicJD(stringczry,stringczlx,stringyhid,stringbz)
{
this._czry=czry;
this._czlx=czlx;
this._yhid=yhid;
this._bz=bz;
}
privatestring_jdid;
publicstringJdid
{
get{return_jdid;}
set{_jdid=value;}
}
privatestring_czlx;
publicstringCzlx
{
get{return_czlx;}
set{_czlx=value;}
}
privatestring_czry;
publicstringCzry
{
get{return_czry;}
set{_czry=value;}
}
privatestring_yhid;
publicstringYhid
{
get{return_yhid;}
set{_yhid=value;}
}
privatestring_bz;
publicstringBz
{
get{return_bz;}
set{_bz=value;}
}
///
///增加节点
///
///
publicstringAdd_JD()
{
stringinfo=string.Empty;
try
{
_jdid=DBHelper.GetScalar("selectget_next_id('xt_jdxx','jd_id','JDXX')fromdual").ToString();
//this.Jdid=_jdid;
stringSql_Insert="insertintoxt_jdxx(jd_id,jd_czry,jd_yhdw,jd_yhid,jd_cjrq,jd_bz,jd_czlx)values('"+_jdid+"','"+_czry+"',(selectyhxx_yhdwfromxt_yhxxwhereyhxx_id='"+_czry+"'),'"+_yhid+"',trunc(sysdate,'dd'),'"+_bz+"','"+_czlx+"')";
info=DBHelper.ExecuteCommand(Sql_Insert).ToString();
}
catch(Exceptione)
{
info=e.Message.ToString();
}
returninfo;
}
///
///修改节点
///
///
///
publicstringEdit_JD(stringJdid)
{
stringinfo=string.Empty;
try
{
stringSql_Update="updatext_jdxxxsetx.jd_czry='"+_czry+"',x.jd_yhdw=(selectyhxx_yhdwfromxt_yhxxwhereyhxx_id='"+_czry+"'),x.jd_yhid='"+_yhid+"',x.jd_xgrq=trunc(sysdate,'dd'),x.jd_bz='"+_bz+"',jd_czlx='"+_czlx+"'wherex.jd_id='"+_jdid+"'";
info=DBHelper.ExecuteCommand(Sql_Update).ToString();
}
catch(Exceptione)
{
info=e.Message.ToString();
}
returninfo;
}
///
///删除节点
///
///
///
publicstringDelete_JD(stringjdid)
{
stringinfo=string.Empty;
try
{
stringSql_Delete="deletext_jdxxwherejd_id='"+jdid+"'";
info=DBHelper.ExecuteCommand(Sql_Delete).ToString();
}
catch(Exceptione)
{
info=e.Message.ToString();
}
returninfo;
}
}
///
///流程实例实体类,实现流程过程的连接
///
publicclassLCSL
{
publicLCSL()
{}
//属性
privatestring_yhid;//用户id
publicstringYhid
{
get{return_yhid;}
set{_yhid=value;}
}
privatestring_bz;//备注
publicstringBz
{
get{return_bz;}
set{_bz=value;}
}
privatestring_lcid;
publicstringLcid
{
get{return_lcid;}
set{_lcid=value;}
}
//方法
///
///向流程添加节点(流程id必须提前设定好)
///
///节点id
///节点的层次,001是与上节点同一层次,002是下一层次
///
publicstringAdd_JdtoLc(stringJdid,stringJdcc)
{
string