关于流程引擎的工作进度条的实现

关于流程引擎的工作进度条的实现

 

 

关键字:驰骋工作流引擎 工作进度条实现 工作进度条接口 ccflow

简洁的效果图:

调用接口:BP.WF. Dev2Interface.DB_JobSchedule(int64 workid) ; 根据当前的workid获得流程的进度信息。

返回值说明:调用该接口后系统返回4个表,也就说4个json数据。

 

中文名

英文名

概要介绍

流程信息表

WF_GenerWorkFlow

只有一条记录,标识流程运行运行的信息,流程的状态,是否结束,运行到那个节点上了。

您可能用到的节点:

FK_Node 流程运行到的节点.

WFState 流程的状态 2=运行中,3=已完成,5退回.

流程节点表

WF_Node

返回是一个集合,当前流程的所有节点的信息。NodeID,Name是重要的两个字段。

方向表

WF_Direction

返回是一个集合,节点的先后顺序,就是节点的连接线.

您可能用到的字段:

Node , 从节点ID.

ToNode,到节点ID

运动轨迹表

Track

返回的是一个集合,节点运动过程中的参与人,时间。

您可能用到的字段:

FK_Node, 发生的节点ID.

NodeName,节点名称。

EmpNo, 人员编号

EmpName, 人员名称

RDT, 发生日期时间

IsPass, 是否完成.

 

 

产生的JSONS结构截图:

 

流程信息表:

 

节点集合:

 

节点连接线:

 

 

 

运动轨迹表

 

 

 

 

 

 

附件完整的代码(可以不看实现过程):

   string sql = "";

            DataSet ds = new DataSet();

 

            /*

             * 流程控制主表, 可以得到流程状态,停留节点,当前的执行人.

             * 该表里有如下字段是重点:

             *  0. WorkID 流程ID.

             *  1. WFState 字段用于标识当前流程的状态..

             *  2. FK_Node 停留节点.

             *  3. NodeName 停留节点名称.

             *  4. TodoEmps 停留的待办人员.

             */

            GenerWorkFlow gwf = new GenerWorkFlow(workID);

            ds.Tables.Add(gwf.ToDataTableField("WF_GenerWorkFlow"));

 

 

            /*节点信息: 节点信息表,存储每个环节的节点信息数据.

             * NodeID 节点ID.

             * Name 名称.

             * X,Y 节点图形位置,如果使用进度图就不需要了.

            */

            NodeSimples nds = new NodeSimples(gwf.FK_Flow);

            ds.Tables.Add(nds.ToDataTableField("WF_Node"));

 

            /*

             * 节点的连接线.

             */

            Directions dirs = new Directions(gwf.FK_Flow);

            ds.Tables.Add(dirs.ToDataTableField("WF_Direction"));

 

            #region 运动轨迹

            /*

             * 运动轨迹: 构造的一个表,用与存储运动轨迹.

             *

             */

            DataTable dtHistory = new DataTable();

            dtHistory.TableName = "Track";

            dtHistory.Columns.Add("FK_Node"); //节点ID.

            dtHistory.Columns.Add("NodeName"); //名称.

            dtHistory.Columns.Add("EmpNo");  //人员编号.

            dtHistory.Columns.Add("EmpName"); //名称

            dtHistory.Columns.Add("RDT"); //记录日期.

            dtHistory.Columns.Add("SDT"); //应完成日期(可以不用.)

            dtHistory.Columns.Add("IsPass"); //是否通过?

            

            //执行人.

            if (gwf.WFState == WFState.Complete)

            {

                //历史执行人.

                sql = "SELECT * FROM ND" + int.Parse(gwf.FK_Flow) + "Track WHERE WorkID=" + workID + " AND (ActionType=1 OR ActionType=0)  ORDER BY RDT DESC";

                DataTable dtTrack = BP.DA.DBAccess.RunSQLReturnTable(sql);

 

                foreach (DataRow drTrack in dtTrack.Rows)

                {

                    DataRow dr = dtHistory.NewRow();

                    dr["FK_Node"] = drTrack["NDFrom"];

                    //dr["ActionType"] = drTrack["NDFrom"];

                    dr["NodeName"] = drTrack["NDFromT"];

                    dr["EmpNo"] = drTrack["EmpFrom"];

                    dr["EmpName"] = drTrack["EmpFromT"];

                    dr["RDT"] = drTrack["RDT"];

                    dr["SDT"] = "";

                    dr["IsPass"] = 1; // gwl.IsPassInt; //是否通过.

                    dtHistory.Rows.Add(dr);

                }

            }

            else

            {

                GenerWorkerLists gwls = new GenerWorkerLists(workID);

                foreach (GenerWorkerList gwl in gwls)

                {

                    DataRow dr = dtHistory.NewRow();

                    dr["FK_Node"] = gwl.FK_Node;

                    dr["NodeName"] = gwl.FK_NodeText;

                    dr["EmpNo"] = gwl.FK_Emp;

                    dr["EmpName"] = gwl.FK_EmpText;

                    dr["RDT"] = gwl.RDT;

                    dr["SDT"] = gwl.SDT;

                    dr["IsPass"] = gwl.IsPassInt; //是否通过.

                    dtHistory.Rows.Add(dr);

                }

            }

 

            if (dtHistory.Rows.Count == 0)

            {

                DataRow dr = dtHistory.NewRow();

                dr["FK_Node"] = gwf.FK_Node;

                dr["NodeName"] = gwf.NodeName;

                dr["EmpNo"] = gwf.Starter;

                dr["EmpName"] = gwf.StarterName;

                dr["RDT"] = gwf.RDT;

                dr["SDT"] = gwf.SDTOfNode;

                dtHistory.Rows.Add(dr);

            }

 

            ds.Tables.Add(dtHistory);

            #endregion 运动轨迹

 

            return ds;

 

 

 

 

 

 

 

 

 

 

发布了261 篇原创文章 · 获赞 43 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/ccflow/article/details/93926774