public static WfAppRunner ToAppRunner(this WfRunner WfRunner)
        {
            Mapper.CreateMap <WfRunner, WfAppRunner>()
            .ForMember(dest => dest.NextActivityPerformers, opt => opt.ResolveUsing <wfResolver>());
            var result = Mapper.Map <WfRunner, WfAppRunner>(WfRunner);

            return(result);
        }
Ejemplo n.º 2
0
        private void SetInstanceFinish(WfRunner runner, WfResult result)
        {
            var instance = result.Instance;

            instance.DUpdate       = DateTime.Now;
            instance.UpdateUser_Id = runner.AC.User.Id;
            instance.Status        = WfProcessStatus.Stopped;
            instanceService.Update(instance);
        }
Ejemplo n.º 3
0
        public void Execute(WfRunner runner, WfResult result)
        {
            var iTask = result.InstanceTask;

            iTask.Status    = WfTaskStatus.Dealing;
            iTask.User_Id   = runner.AC.User.Id;
            iTask.User_Name = runner.AC.User.UserName ?? runner.AC.User.NickName;
            iTask.DFetch    = DateTime.Now;
            iTaskService.Update(iTask);
        }
Ejemplo n.º 4
0
        private static void TestMethod()
        {
            string process_guid            = "40c4be7f-2c7d-4391-92a3-32e2dc24f58f";
            string application_instance_id = "56";

            // var serviceurl = "http://172.16.22.26:8000/odata/";
            var serviceurl = "http://localhost:53433/odata/";
            var data       = new Container(new Uri(serviceurl));
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            Window w = new Window();

            w.Id           = 1;
            w.Name         = "2";
            w.CurrentShape = new Circle()
            {
                Radius = 1, HasBorder = true
            };
            w.OptionalShapes.Add(new Circle()
            {
                Radius = 1, HasBorder = true
            });
            var ls = data.ListAc(w).GetValue();
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            var eventDataItems = data.Vedios.ToList();

            data.AddObject("Vedios", new Vedio()
            {
                ID = 8, Title = "Inferno of Retribution", Year = 2005
            });
            data.SaveChanges();
            var eventDataItemsw = data.Vedios.Where(p => p.Title == "2").ToList();
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            WfRunner appRunner = new WfRunner();

            appRunner.ProcessGUID   = process_guid;
            appRunner.AppInstanceID = application_instance_id;
            appRunner.AppName       = "ApiTest";
            appRunner.UserID        = "usr1";
            appRunner.UserName      = "******";
            appRunner.NextActivityPerformers.Add(new Point {
                PathID = "fc8c71c5-8786-450e-af27-9f6a9de8560f", UserID = "usr20", UserName = "******"
            });
            var aa = data.StartProcess(appRunner).GetValue();
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            QueryEntity app = new QueryEntity();

            app.ProcessGUID   = process_guid;
            app.AppInstanceID = null;
            app.AppName       = "ApiTest";
            app.UserID        = "usr2";
            app.UserName      = "******";
            var bb = data.GetRunningTasks(app).Execute();
            var cc = data.GetReadyTasks(app).Execute();
        }
Ejemplo n.º 5
0
        private void SetTaskFinish(WfRunner runner, WfResult result)
        {
            var iTask = result.InstanceTask;

            iTask.DUpdate       = DateTime.Now;
            iTask.UpdateUser_Id = runner.AC.User.Id;
            iTask.Status        = WfTaskStatus.Processed;
            iTask.Audit         = WfAuditState.Back;
            iTask.Opinion       = runner.Opinion;
            iTaskService.Update(iTask);
        }
Ejemplo n.º 6
0
 private bool CanWithdraw(WfRunner runner, WfResult result)
 {
     if (result.InstanceTask.User_Id != runner.AC.User.Id)
     {
         result.Message = "你无权处理该件,操作人不符!";
         return(false);
     }
     else if (result.Instance.Status == WfProcessStatus.Stopped)
     {
         result.Message = "流程已结束";
         return(false);
     }
     return(iTaskService.CanWithdraw(result));
 }
Ejemplo n.º 7
0
        public async Task <IActionResult> Post([FromBody] JObject data)
        {
            CheckDataSourceParameter();

            AppCtx.Session.BeginTransaction();
            try
            {
                var param         = data.ToDictionary();
                var appInstanceId = param.GetValue("id", App.IdWorker.NextId());
                param["id"] = appInstanceId;
                var ctx = new RequestContext(SqlScope, SqlId)
                          .SetCmdType(CmdType.insert)
                          .SetParam(param)
                          .SetExtraParam(AppCtx.AC.Params);
                var result = await AppCtx.Session.ExecuteAsync(ctx);

                var taskId = App.GetQuery("taskid", "");
                if (taskId.HasValue())
                {
                    // start workflow
                    var runner = new WfRunner(AppCtx.AC)
                    {
                        TaskId        = long.Parse(taskId),
                        AppInstanceId = appInstanceId
                    };
                    workflowService.Start(runner);
                }

                if (result > 0)
                {
                    var value = SqlMap.Params.GetValue("savetoredis", "");
                    if (value.HasValue())
                    {
                        var array = value.Split('=');
                        var key   = array[0].Replace(ctx.DapperParams);
                        var val   = array[1].Replace(ctx.DapperParams);
                        App.Cache.SetString(key, val, null);
                    }
                }

                AppCtx.Session.Commit();
                return(Ok(appInstanceId));
            }
            catch
            {
                AppCtx.Session.Rollback();
                throw;
            }
        }
        public IHttpActionResult DiscardProcess(ODataActionParameters parameters)
        {
            WfRunner         WfRunner    = parameters["WfRunner"] as WfRunner;
            var              WfAppRunner = WfRunner.ToAppRunner();
            IWorkflowService service     = new WorkflowService();

            try
            {
                var result = service.DiscardProcess(WfAppRunner);
                return(Ok());
            }
            catch (Exception w)
            {
                return(BadRequest(w.Message));
            }
        }
        protected override IDictionary <string, PerformerList> ResolveCore(WfRunner source)
        {
            var data = source.NextActivityPerformers.GroupBy(p => p.PathID);
            IDictionary <string, PerformerList> result = new Dictionary <string, PerformerList>();

            foreach (var item in data)
            {
                PerformerList pl = new PerformerList();
                foreach (var per in item)
                {
                    pl.Add(new Performer(per.UserID, per.UserName));
                }
                result.Add(item.Key, pl);
            }
            return(result);
        }
Ejemplo n.º 10
0
        public void Execute(WfRunner runner, WfResult result)
        {
            var task  = result.Task;
            var iTask = result.InstanceTask;

            if (task.TaskType == WfTaskType.Default)
            {
                // 检查办理人是否一致
                if (iTask.User_Id != runner.AC.User.Id)
                {
                    throw new AceException("你无权处理该件,操作人不符!");
                }

                // 本步结束
                SetTaskFinish(runner, result);

                // 执行下一步
                var nextTasks = result.NextTasks;
                Check.Require(nextTasks.Count > 0, $"未获取到流程后续节点!");
                if (nextTasks.First().TaskType == WfTaskType.Stop)
                {
                    // 后续无业务时结束流程
                    SetInstanceFinish(runner, result);
                }
                else
                {
                    // 生成后续的实例任务
                    nextTasks.Each(nextTask =>
                    {
                        CreateNextInstanceTask(runner, result, nextTask);
                    });
                }
            }
            else if (task.TaskType == WfTaskType.Looping)
            {
                // 选择下一人办理,重复当前节点
            }
            else if (task.TaskType == WfTaskType.Multiple)
            {
                // 按给定顺序执行会签,串行和并行
            }
            else if (task.TaskType == WfTaskType.SubProcess)
            {
                // 启动相应的子流程
            }
        }
Ejemplo n.º 11
0
        private void CreateNextInstanceTask(WfRunner runner, WfResult result, WF_Task nextTask)
        {
            var iTask = new WF_InstanceTask();

            iTask.InitializeId();
            iTask.DCreate       = DateTime.Now;
            iTask.Prev_Id       = result.InstanceTask.Id;
            iTask.AppInstanceId = runner.AppInstanceId;
            iTask.Process_Id    = result.Process.Id;
            iTask.Process_Name  = result.Process.Name;
            iTask.Task_Id       = nextTask.Id;
            iTask.Task_Name     = nextTask.Name;
            iTask.Status        = WfTaskStatus.Pending;
            iTask.Audit         = WfAuditState.Pending;
            iTask.Action        = WfActionType.Forward;
            iTask.CreateUser_Id = runner.AC.User.Id;
            iTaskService.Insert(iTask);
        }
Ejemplo n.º 12
0
        //            D
        //         /      \
        //O-D-R    D-O
        //         \  /
        //          D
        private static void OrSplitEnd()
        {
            string process_guid            = "40c4be7f-2c7d-4391-92a3-32e2dc24f58b";
            string application_instance_id = Guid.NewGuid().ToString();
            //var serviceurl = "http://172.16.22.26:8000/odata/";
            var serviceurl = "http://localhost:53433/odata/";
            var data       = new Container(new Uri(serviceurl));
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            WfRunner appRunner = new WfRunner();

            appRunner.ProcessGUID   = process_guid;
            appRunner.AppInstanceID = application_instance_id;
            appRunner.AppName       = "ApiTest";
            appRunner.UserID        = "usr1";
            appRunner.UserName      = "******";
            appRunner.NextActivityPerformers.Add(new Point {
                PathID = "e60084e4-517a-4892-a290-517159f1b7f4", UserID = "usr21", UserName = "******"
            });
            appRunner.NextActivityPerformers.Add(new Point {
                PathID = "76f7ef75-b538-40c8-b529-0849ca777b95", UserID = "", UserName = ""
            });
            var aa = data.StartProcess(appRunner).GetValue();
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            QueryEntity app = new QueryEntity();

            app.ProcessGUID   = process_guid;
            app.AppInstanceID = null;
            app.AppName       = "ApiTest";
            app.UserID        = "usr21";
            app.UserName      = "******";
            var cc = data.GetReadyTasks(app).Execute();

            //XXX
            appRunner               = new WfRunner();
            appRunner.ProcessGUID   = process_guid;
            appRunner.AppInstanceID = application_instance_id;
            appRunner.AppName       = "ApiTest";
            appRunner.UserID        = "usr21";
            appRunner.UserName      = "******";
            appRunner.NextActivityPerformers.Add(new Point {
                PathID = "76f7ef75-b538-40c8-b529-0849ca777b94", UserID = "", UserName = ""
            });
            string ss = data.RunProcess(appRunner).GetValue();
        }
Ejemplo n.º 13
0
        public void Execute(WfRunner runner, WfResult result)
        {
            var task  = result.Task;
            var iTask = result.InstanceTask;

            // 检查办理人是否一致
            if (iTask.User_Id != runner.AC.User.Id)
            {
                throw new AceException("你无权处理该件,操作人不符!");
            }

            // 本步结束
            SetTaskFinish(runner, result);

            // 返回上一步
            var backTask = taskService.Get(result.BackInstanceTask.Task_Id);

            CreateNextInstanceTask(runner, result, backTask);
        }
        public IHttpActionResult RunProcessApp(ODataActionParameters parameters)
        {
            WfRunner WfRunner    = parameters["WfRunner"] as WfRunner;
            var      WfAppRunner = WfRunner.ToAppRunner();

            IWorkflowService wfService = new WorkflowService();
            IDbConnection    conn      = new SqlConnection(DBConfig.ConnectionString);

            conn.Open();

            IDbTransaction trans = null;

            try
            {
                trans = conn.BeginTransaction();
                var result = wfService.RunProcessApp(conn, WfAppRunner, trans);

                if (result.Status == WfExecutedStatus.Success)
                {
                    trans.Commit();
                    return(Ok("Sucess"));
                }
                else
                {
                    trans.Rollback();
                    return(BadRequest(result.Message));
                }
            }
            catch (WorkflowException w)
            {
                trans.Rollback();
                return(BadRequest(w.Message));
            }
            finally
            {
                trans.Dispose();
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
            }
        }
Ejemplo n.º 15
0
 public WfResult GetInstance(WfRunner runner)
 {
     return(Session.QueryMultiple <WfResult>(
                new RequestContext("wf", "get_instance_by_id")
                .SetParam(new
     {
         runner.AppInstanceId,
         runner.TaskId
     }),
                reader =>
     {
         var result = new WfResult();
         result.Process = reader.Read <WF_Process>(true).FirstOrDefault();
         result.Task = reader.Read <WF_Task>(true).FirstOrDefault();
         result.Instance = reader.Read <WF_Instance>(true).FirstOrDefault();
         result.InstanceTask = reader.Read <WF_InstanceTask>(true).FirstOrDefault();
         return result;
     }
                ));
 }
Ejemplo n.º 16
0
        public void Execute(WfRunner runner, WfResult result)
        {
            if (result.CanWithdraw)
            {
                // 删除后续实例任务
                iTaskService.Delete(result.InstanceTask.Id);

                // 修改本部为处理中
                var iTask = result.InstanceTask;
                iTask.Status  = WfTaskStatus.Dealing;
                iTask.Opinion = null;
                iTask.DUpdate = null;
                iTask.Audit   = result.IsStartTask ? WfAuditState.UnSend : WfAuditState.Pending;
                iTaskService.Update(iTask);
            }
            else
            {
                throw new AceException("该件已回收或后置节点已处理!");
            }
        }
Ejemplo n.º 17
0
        private void CreateNextInstanceTask(WfRunner runner, WfResult result, WF_Task backTask)
        {
            var iTask = new WF_InstanceTask();

            iTask.InitializeId();
            iTask.DCreate       = DateTime.Now;
            iTask.Prev_Id       = result.InstanceTask.Id;
            iTask.AppInstanceId = runner.AppInstanceId;
            iTask.Process_Id    = result.Process.Id;
            iTask.Process_Name  = result.Process.Name;
            iTask.Task_Id       = backTask.Id;
            iTask.Task_Name     = backTask.Name;
            iTask.Status        = WfTaskStatus.Dealing;
            iTask.DFetch        = DateTime.Now;
            iTask.Audit         = result.Instance.StartTask_Id == backTask.Id ? WfAuditState.UnSend : WfAuditState.Pending;
            iTask.Action        = WfActionType.Backward;
            iTask.CreateUser_Id = runner.AC.User.Id;
            iTask.User_Id       = result.BackInstanceTask.User_Id;
            iTask.User_Name     = result.BackInstanceTask.User_Name;
            iTaskService.Insert(iTask);
        }
Ejemplo n.º 18
0
        public IActionResult PostWf([FromBody] JObject data)
        {
            var action = (WfActionType)data.GetValue("action", 3);
            var runner = new WfRunner(AppCtx.AC)
            {
                AppInstanceId        = App.GetQuery <long>("appinstanceid"),
                TaskId               = App.GetQuery <long>("taskid"),
                Audit                = (WfAuditState)data.GetValue("audit", 1),
                Opinion              = data.GetValue("opinion", ""),
                LoadBackInstanceTask = action == WfActionType.Backward,
                LoadCanWithdraw      = action == WfActionType.Withdraw,
                LoadNextTasks        = action == WfActionType.Forward,
                LoadPrevInstanceTask = action == WfActionType.Withdraw
            };

            if (action == WfActionType.Forward)
            {
                return(Ok(wfService.Forward(runner)));
            }
            else if (action == WfActionType.Backward)
            {
                return(Ok(wfService.Backward(runner)));
            }
            else if (action == WfActionType.Fetch)
            {
                return(Ok(wfService.Fetch(runner)));
            }
            else if (action == WfActionType.Withdraw)
            {
                return(Ok(wfService.Withdraw(runner)));
            }
            else
            {
                return(Ok(wfService.Start(runner)));
            }
        }
        public IHttpActionResult StartProcess(ODataActionParameters parameters)
        {
            WfRunner WfRunner    = parameters["WfRunner"] as WfRunner;
            var      WfAppRunner = WfRunner.ToAppRunner();

            IWorkflowService wfService = new WorkflowService();
            IDbConnection    conn      = new SqlConnection(DBConfig.ConnectionString);

            conn.Open();
            IDictionary <string, Slickflow.Engine.Common.PerformerList> NextActivityPerformers = WfAppRunner.NextActivityPerformers;

            int            ProcInstID;
            IDbTransaction trans = null;

            try
            {
                trans = conn.BeginTransaction();
                WfExecutedResult result = wfService.StartProcess(conn, WfAppRunner, trans);

                int newProcessInstanceID = result.ProcessInstanceIDStarted;

                if (result.Status == WfExecutedStatus.Success)
                {
                    trans.Commit();
                    ProcInstID = newProcessInstanceID;
                    //return Ok(ProcInstID);
                }
                else
                {
                    trans.Rollback();
                    return(BadRequest(result.Message));
                }
            }
            catch (WorkflowException w)
            {
                trans.Rollback();
                return(BadRequest(w.Message));
            }
            finally
            {
                trans.Dispose();
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
            }

            conn.Open();
            try
            {
                WfAppRunner.NextActivityPerformers = NextActivityPerformers;

                trans = conn.BeginTransaction();
                WfExecutedResult result = wfService.RunProcessApp(conn, WfAppRunner, trans);

                if (result.Status == WfExecutedStatus.Success)
                {
                    trans.Commit();
                    return(Ok(ProcInstID));
                }
                else
                {
                    trans.Rollback();
                    return(BadRequest(result.Message));
                }
            }
            catch (WorkflowException w)
            {
                trans.Rollback();
                return(BadRequest(w.Message));
            }
            finally
            {
                trans.Dispose();
                if (conn.State == ConnectionState.Open)
                {
                    conn.Close();
                }
            }
        }
Ejemplo n.º 20
0
        private static void SubProcess()
        {
            string process_guid            = "40c4be7f-2c7d-4391-92a3-32e2dc24f585";
            string application_instance_id = Guid.NewGuid().ToString();
            //var serviceurl = "http://172.16.22.26:8000/odata/";
            var serviceurl = "http://localhost:53433/odata/";
            var data       = new Container(new Uri(serviceurl));
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            WfRunner appRunner = new WfRunner();

            appRunner.ProcessGUID   = process_guid;
            appRunner.AppInstanceID = application_instance_id;
            appRunner.AppName       = "ApiTest";
            appRunner.UserID        = "usr1";
            appRunner.UserName      = "******";
            appRunner.NextActivityPerformers.Add(new Point {
                PathID = "fc8c71c5-8786-450e-af27-9f6a9de8560f", UserID = "usr2", UserName = "******"
            });
            // appRunner.NextActivityPerformers.Add(new Point { PathID = "fc8c71c5-8786-450e-af27-9f6a9de8560f", UserID = "usr22", UserName = "******" });
            var aa = data.StartProcess(appRunner).GetValue();

            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            appRunner               = new WfRunner();
            appRunner.ProcessGUID   = process_guid;
            appRunner.AppInstanceID = application_instance_id;
            appRunner.AppName       = "ApiTest";
            appRunner.UserID        = "usr2";
            appRunner.UserName      = "******";
            appRunner.NextActivityPerformers.Add(new Point {
                PathID = "5fa796f6-2d5d-4ed6-84e2-a7c4e4e6aabc", UserID = "usr21", UserName = "******"
            });
            // appRunner.NextActivityPerformers.Add(new Point { PathID = "fc8c71c5-8786-450e-af27-9f6a9de8560f", UserID = "usr22", UserName = "******" });
            string aaa = data.RunProcess(appRunner).GetValue();
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            var app = new QueryEntity();

            app.ProcessGUID   = process_guid;
            app.AppInstanceID = null;
            app.AppName       = "ApiTest";
            app.UserID        = "usr21";
            app.UserName      = "******";
            var cc = data.GetReadyTasks(app).Execute();

            appRunner               = new WfRunner();
            appRunner.ProcessGUID   = "40c4be7f-2c7d-4391-92a3-32e2dc24f58c";
            appRunner.AppInstanceID = application_instance_id;
            appRunner.AppName       = "ApiTest";
            appRunner.UserID        = "usr21";
            appRunner.UserName      = "******";
            appRunner.NextActivityPerformers.Add(new Point {
                PathID = "5fa796f6-2d5d-4ed6-84e2-a7c4e4e6aabc", UserID = "usr3", UserName = "******"
            });
            string ss = data.RunProcess(appRunner).GetValue();

            //appRunner = new WfRunner();
            //appRunner.ProcessGUID = "40c4be7f-2c7d-4391-92a3-32e2dc24f58c";
            //appRunner.AppInstanceID = application_instance_id;
            //appRunner.AppName = "ApiTest";
            //appRunner.UserID = "usr22";
            //appRunner.UserName = "******";
            //appRunner.NextActivityPerformers.Add(new Point { PathID = "5fa796f6-2d5d-4ed6-84e2-a7c4e4e6aabc", UserID = "usr3", UserName = "******" });
            //ss = data.RunProcess(appRunner).GetValue();

            app               = new QueryEntity();
            app.ProcessGUID   = process_guid;
            app.AppInstanceID = null;
            app.AppName       = "ApiTest";
            app.UserID        = "usr3";
            app.UserName      = "******";
            var dd = data.GetReadyTasks(app).Execute();  ///XXX

            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            appRunner               = new WfRunner();
            appRunner.ProcessGUID   = process_guid;
            appRunner.AppInstanceID = application_instance_id;
            appRunner.AppName       = "ApiTest";
            appRunner.UserID        = "usr3";
            appRunner.UserName      = "******";
            appRunner.NextActivityPerformers.Add(new Point {
                PathID = "39c71004-d822-4c15-9ff2-94ca1068d745", UserID = "usr4", UserName = "******"
            });
            ss = data.RunProcess(appRunner).GetValue();
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            appRunner               = new WfRunner();
            appRunner.ProcessGUID   = process_guid;
            appRunner.AppInstanceID = application_instance_id;
            appRunner.AppName       = "ApiTest";
            appRunner.UserID        = "usr4";
            appRunner.UserName      = "******";
            appRunner.NextActivityPerformers.Add(new Point {
                PathID = "b70e717a-08da-419f-b2eb-7a3d71f054de", UserID = "", UserName = ""
            });
            ss = data.RunProcess(appRunner).GetValue();
        }
Ejemplo n.º 21
0
        public WfResult Execute(WfRunner runner)
        {
            var result = instanceService.GetInstance(runner);

            if (result.Instance == null)
            {
                // create instance
                var instance = new WF_Instance();
                instance.InitializeId();
                instance.DCreate         = DateTime.Now;
                instance.AppInstanceId   = runner.AppInstanceId;
                instance.CreateUser_Id   = runner.AC.User.Id;
                instance.CreateUser_Name = runner.AC.User.UserName ?? runner.AC.User.NickName;
                instance.Process_Id      = result.Process.Id;
                instance.Process_Name    = result.Process.Name;
                instance.StartTask_Id    = result.Task.Id;
                instance.Status          = WfProcessStatus.Running;
                instanceService.Insert(instance);

                var iTask = new WF_InstanceTask();
                iTask.InitializeId();
                iTask.DCreate       = DateTime.Now;
                iTask.AppInstanceId = runner.AppInstanceId;
                iTask.Process_Id    = result.Process.Id;
                iTask.Process_Name  = result.Process.Name;
                iTask.Task_Id       = result.Task.Id;
                iTask.Task_Name     = result.Task.Name;
                iTask.DFetch        = DateTime.Now;
                iTask.Status        = WfTaskStatus.Dealing;
                iTask.Audit         = WfAuditState.UnSend;
                iTask.Action        = WfActionType.Begin;
                iTask.CreateUser_Id = runner.AC.User.Id;
                iTask.User_Id       = instance.CreateUser_Id;
                iTask.User_Name     = instance.CreateUser_Name;
                iTaskService.Insert(iTask);

                result.Instance     = instance;
                result.InstanceTask = iTask;
            }

            if (runner.LoadPrevInstanceTask && result.InstanceTask.Prev_Id.HasValue)
            {
                result.PrevInstanceTask = iTaskService.Get(result.InstanceTask.Prev_Id.Value);
            }

            if (runner.LoadBackInstanceTask)
            {
                result.BackInstanceTask = GetBackInstanceTask(result);
            }

            if (runner.LoadNextTasks)
            {
                result.NextTasks = GetNextTasks(result);
            }

            if (runner.LoadCanWithdraw)
            {
                if (result.InstanceTask.Status == WfTaskStatus.Processed)
                {
                    result.CanWithdraw = CanWithdraw(runner, result);
                }
                else
                {
                    result.CanWithdraw = false;
                }
            }

            return(result);
        }
        //            D
        //         /      \
        //O-D-R    D-O
        //         \  /
        //          D
        private static void OrSplitEnd()
        {
            string process_guid = "40c4be7f-2c7d-4391-92a3-32e2dc24f58b";
            string application_instance_id = Guid.NewGuid().ToString();
            //var serviceurl = "http://172.16.22.26:8000/odata/";
            var serviceurl = "http://localhost:53433/odata/";
            var data = new Container(new Uri(serviceurl));
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            WfRunner appRunner = new WfRunner();
            appRunner.ProcessGUID = process_guid;
            appRunner.AppInstanceID = application_instance_id;
            appRunner.AppName = "ApiTest";
            appRunner.UserID = "usr1";
            appRunner.UserName = "******";
            appRunner.NextActivityPerformers.Add(new Point { PathID = "e60084e4-517a-4892-a290-517159f1b7f4", UserID = "usr21", UserName = "******" });
            appRunner.NextActivityPerformers.Add(new Point { PathID = "76f7ef75-b538-40c8-b529-0849ca777b95", UserID = "", UserName = "" });
            var aa = data.StartProcess(appRunner).GetValue();
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            QueryEntity app = new QueryEntity();
            app.ProcessGUID = process_guid;
            app.AppInstanceID = null;
            app.AppName = "ApiTest";
            app.UserID = "usr21";
            app.UserName = "******";
            var cc = data.GetReadyTasks(app).Execute();

            //XXX
            appRunner = new WfRunner();
            appRunner.ProcessGUID = process_guid;
            appRunner.AppInstanceID = application_instance_id;
            appRunner.AppName = "ApiTest";
            appRunner.UserID = "usr21";
            appRunner.UserName = "******";
            appRunner.NextActivityPerformers.Add(new Point { PathID = "76f7ef75-b538-40c8-b529-0849ca777b94", UserID = "", UserName = "" });
            string ss = data.RunProcess(appRunner).GetValue();
        }
        //O-D-|DDD|-D-O
        private static void Multipleinstance()
        {
            string process_guid = "40c4be7f-2c7d-4391-92a3-32e2dc24f58e";
            string application_instance_id = Guid.NewGuid().ToString();
            //var serviceurl = "http://172.16.22.26:8000/odata/";
            var serviceurl = "http://localhost:53433/odata/";
            var data = new Container(new Uri(serviceurl));
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            WfRunner appRunner = new WfRunner();
            appRunner.ProcessGUID = process_guid;
            appRunner.AppInstanceID = application_instance_id;
            appRunner.AppName = "ApiTest";
            appRunner.UserID = "usr1";
            appRunner.UserName = "******";
            appRunner.NextActivityPerformers.Add(new Point { PathID = "fc8c71c5-8786-450e-af27-9f6a9de8560f", UserID = "usr21", UserName = "******" });
            appRunner.NextActivityPerformers.Add(new Point { PathID = "fc8c71c5-8786-450e-af27-9f6a9de8560f", UserID = "usr22", UserName = "******" });
            var aa = data.StartProcess(appRunner).GetValue();
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            var app = new QueryEntity();
            app.ProcessGUID = process_guid;
            app.AppInstanceID = null;
            app.AppName = "ApiTest";
            app.UserID = "usr21";
            app.UserName = "******";
            var cc = data.GetReadyTasks(app).Execute();

            appRunner = new WfRunner();
            appRunner.ProcessGUID = process_guid;
            appRunner.AppInstanceID = application_instance_id;
            appRunner.AppName = "ApiTest";
            appRunner.UserID = "usr21";
            appRunner.UserName = "******";
            appRunner.NextActivityPerformers.Add(new Point { PathID = "39c71004-d822-4c15-9ff2-94ca1068d745", UserID = "usr3", UserName = "******" });
            string ss = data.RunProcess(appRunner).GetValue();

            appRunner = new WfRunner();
            appRunner.ProcessGUID = process_guid;
            appRunner.AppInstanceID = application_instance_id;
            appRunner.AppName = "ApiTest";
            appRunner.UserID = "usr22";
            appRunner.UserName = "******";
            appRunner.NextActivityPerformers.Add(new Point { PathID = "39c71004-d822-4c15-9ff2-94ca1068d745", UserID = "usr3", UserName = "******" });
            ss = data.RunProcess(appRunner).GetValue();

            app = new QueryEntity();
            app.ProcessGUID = process_guid;
            app.AppInstanceID = null;
            app.AppName = "ApiTest";
            app.UserID = "usr3";
            app.UserName = "******";
            var dd = data.GetReadyTasks(app).Execute();  ///XXX
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            appRunner = new WfRunner();
            appRunner.ProcessGUID = process_guid;
            appRunner.AppInstanceID = application_instance_id;
            appRunner.AppName = "ApiTest";
            appRunner.UserID = "usr3";
            appRunner.UserName = "******";
            appRunner.NextActivityPerformers.Add(new Point { PathID = "b70e717a-08da-419f-b2eb-7a3d71f054de", UserID = "", UserName = "" });
            ss = data.RunProcess(appRunner).GetValue();
        }
        private static void TestMethod()
        {
            string process_guid = "40c4be7f-2c7d-4391-92a3-32e2dc24f58f";
            string application_instance_id = "56";

            // var serviceurl = "http://172.16.22.26:8000/odata/";
            var serviceurl = "http://localhost:53433/odata/";
            var data = new Container(new Uri(serviceurl));
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            Window w = new Window();
            w.Id = 1;
            w.Name = "2";
            w.CurrentShape = new Circle() { Radius = 1, HasBorder = true };
            w.OptionalShapes.Add(new Circle() { Radius = 1, HasBorder = true });
            var ls = data.ListAc(w).GetValue();
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            var eventDataItems = data.Vedios.ToList();
            data.AddObject("Vedios", new Vedio() { ID = 8, Title = "Inferno of Retribution", Year = 2005 });
            data.SaveChanges();
            var eventDataItemsw = data.Vedios.Where(p => p.Title == "2").ToList();
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            WfRunner appRunner = new WfRunner();
            appRunner.ProcessGUID = process_guid;
            appRunner.AppInstanceID = application_instance_id;
            appRunner.AppName = "ApiTest";
            appRunner.UserID = "usr1";
            appRunner.UserName = "******";
            appRunner.NextActivityPerformers.Add(new Point { PathID = "fc8c71c5-8786-450e-af27-9f6a9de8560f", UserID = "usr20", UserName = "******" });
            var aa = data.StartProcess(appRunner).GetValue();
            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            QueryEntity app = new QueryEntity();
            app.ProcessGUID = process_guid;
            app.AppInstanceID = null;
            app.AppName = "ApiTest";
            app.UserID = "usr2";
            app.UserName = "******";
            var bb = data.GetRunningTasks(app).Execute();
            var cc = data.GetReadyTasks(app).Execute();
        }