`

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

阅读更多

 

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

简洁的效果图:

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

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

 

中文名

英文名

概要介绍

流程信息表

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;

 

 

分享到:
评论

相关推荐

    hge游戏开发之进度条的实现

    本主题聚焦于“hge游戏开发之进度条的实现”,通过VC6(Visual C++ 6.0)集成开发环境使用HGE(HGE - Hidden Game Engine)引擎来创建一个进度条,以展示游戏资源的加载进度。HGE是一款功能丰富的2D游戏开发框架,...

    游戏加载进度条的脚本2

    游戏加载进度条是游戏中常见...这个脚本提供了一个基本的加载进度条实现,但实际项目中可能需要处理更多复杂情况,如资源预加载、多资源加载管理、错误处理等。开发者可以在此基础上扩展,以满足更丰富的游戏加载需求。

    工作流前台demo

    6. **自定义组件**:在某些情况下,标准的Flex组件可能无法满足特定的工作流需求,这时开发者可能需要创建自定义组件来实现特定的功能,如进度条显示流程进度,或者定制化的任务列表。 7. **测试与调试**:为了确保...

    泰拉记事社的爬虫下载器,支持多线程下载与进度条显示.zip

    爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP...

    加载网页进度条

    在Android开发中,加载网页进度条是一个常见的用户体验优化元素,它可以帮助用户感知页面加载的状态,提升...对于想要深入研究Android源码的开发者,理解WebView的工作流程以及其与Java层的交互机制是非常有价值的。

    Ogre图形引擎中的技巧总结

    这允许对象参与场景的渲染和更新流程。 2. **RenderQueue管理**:渲染队列的编号决定了渲染顺序,编号越小,渲染越早。例如,背景Queue 0、天空盒Queue 20、世界几何Queue 30、可移动物体Queue 50、覆盖层Queue 100...

    webgl修改启动界面UniveWeTemp.zip

    在Unity引擎中,WebGL是一种将游戏或交互式应用导出到Web平台的方式,使得用户无需下载安装即可在浏览器上体验。"webgl修改启动界面UniveWeTemp.zip"这个压缩包显然提供了修改Unity WebGL项目启动界面的工具和资源。...

    AndEngine引擎开发所需要的各种包

    这对于深入理解引擎的工作原理和进行高级定制是非常有帮助的。 4. **开发流程** 使用AndEngine开发游戏通常包括以下步骤: - 配置环境:安装Android Studio,导入AndEngine库,配置好项目依赖。 - 创建游戏场景...

    C++实现cs模式下文件传输

    4. 客户端-服务器通信模型:理解CS模式的工作原理和流程。 5. 文件操作:读取和写入文件,可能需要考虑错误处理和大文件分块传输。 6. 可视化进度条:在UI上实时更新文件传输进度,提升用户体验。 通过这个项目,...

    浏览器(范例版)源码,用VB实现浏览器 专业源码

    通过研究这个VB实现的浏览器源码,开发者可以了解到浏览器开发的基本流程,理解各个组件间的协同工作方式,这对于未来开发更复杂、功能更完善的浏览器或者其他基于网络的应用程序将大有裨益。同时,源码也提供了实践...

    VC++实现自解压

    4. **控制流程**:自解压程序可能需要执行特定的步骤,如显示进度条、检查目标路径是否存在、询问用户设置等。这可以通过编写控制逻辑实现,结合Windows API函数,如`CreateWindow`来创建用户界面,以及`MessageBox`...

    android开发揭秘PDF

    第14章 游戏引擎实现 14.1 游戏引擎介绍 14.1.1 什么是引擎 14.1.2 引擎的进化 14.1.3 常见的游戏引擎 14.1.4 Android游戏引擎 14.2 游戏引擎结构 14.2.1 游戏引擎原理 14.2.2 游戏引擎定位 14.2.3 游戏引擎框架 ...

    用户工作流

    在实际应用中,`userge-workflow-main`可能是一个包含用户工作流核心代码或配置文件的项目主目录,它可能包括流程定义文件、工作流引擎的实现、业务逻辑代码以及与UI交互的接口等。 总之,用户工作流是软件系统中不...

    《Android应用开发揭秘》附带光盘代码.

     第14章 游戏引擎实现  14.1 游戏引擎介绍  14.1.1 什么是引擎  14.1.2 引擎的进化  14.1.3 常见的游戏引擎  14.1.4 Android游戏引擎  14.2 游戏引擎结构  14.2.1 游戏引擎原理  14.2.2 游戏引擎定位  ...

    基于IOS的打地鼠游戏的设计与实现_论文.doc

    5. **控件功能实现**:包括触摸事件响应、游戏逻辑控制、得分计算等,确保游戏流程的顺畅和玩家体验的提升。 手机游戏不仅提供娱乐,还能激发玩家的反应速度和策略思考,有时甚至带来人生哲理的启示。本项目选择...

    Unity3D实现万圣节

    了解其工作界面、项目设置、资源管理以及场景构建流程是项目开始的基础。 2. **3D模型和纹理**:在万圣节主题中,可能需要创建或导入南瓜灯、鬼魂、骷髅等3D模型。这些模型应具有合适的纹理和贴图,如颜色、法线...

    《Android应用开发揭秘》源码

     第14章 游戏引擎实现  14.1 游戏引擎介绍  14.1.1 什么是引擎  14.1.2 引擎的进化  14.1.3 常见的游戏引擎  14.1.4 Android游戏引擎  14.2 游戏引擎结构  14.2.1 游戏引擎原理  14.2.2 游戏引擎定位  ...

    LoadSceneAsync.zip

    "LoadSceneAsync.zip"文件很显然关注的是Unity引擎中的异步加载场景功能,并且结合了进度条显示,这对于大型游戏或者内容丰富的应用来说是至关重要的。下面我们将详细探讨Unity异步加载场景以及如何实现进度条显示。...

    loading_screen_system:在godot游戏引擎中实现加载屏幕的系统

    总结,实现Godot游戏引擎中的加载屏幕系统涉及资源预加载、UI设计、进度管理等多个方面。通过合理的设计和优化,我们可以创建出既美观又实用的加载界面,提升游戏的整体品质和用户体验。在实际开发中,应根据项目的...

    Cocos2dx loading界面实现

    以上就是Cocos2dx中实现加载界面的基本流程。在实际开发中,可以根据需求进行扩展,比如添加错误处理机制、优化资源加载策略等。记得在设计加载界面时,既要保证功能性,也要注重用户体验,使游戏加载过程更加顺畅且...

Global site tag (gtag.js) - Google Analytics