コード例 #1
0
        /// <summary>
        /// 流程实例持久化
        /// </summary>
        /// <param name="Process"></param>
        public static void Create(ProcessInstance Process)
        {
            //var _IBPMProcessTaskIDMapService = UnityContainerHelper.GetServer<IBPMProcessTaskIDMapService>();
            //var _IBPMProcessInstanceService = UnityContainerHelper.GetServer<IBPMProcessInstanceService>();
            //var _IBPMTaskInstanceService = UnityContainerHelper.GetServer<IBPMTaskInstanceService>();

            var _IBPMProcessTaskIDMapService = new BPMProcessTaskIDMapService();
            var _IBPMProcessInstanceService  = new BPMProcessInstanceService();
            var _IBPMTaskInstanceService     = new BPMTaskInstanceService();

            _IBPMProcessInstanceService.Add(new BPMProcessInstanceEntity()
            {
                ID         = new Guid(Process.ID),
                CreateUser = Process.CreateUser,
                Name       = Process.Name,
                Status     = (int)Process.Status,
                Version    = Process.Version,
                StartDate  = Process.StartDate,
            });

            foreach (var item in Process.ModelInstanceIDMaps)
            {
                _IBPMProcessTaskIDMapService.Add(new BPMProcessTaskIDMapEntity()
                {
                    ProcessID = new Guid(Process.ID),
                    TaskID    = new Guid(item.Value),
                    TaskKey   = item.Key
                });
            }

            foreach (var item in Process.Tasks)
            {
                var task = new BPMTaskInstanceInfo()
                {
                    ID        = new Guid(item.Key),
                    ProcessID = new Guid(Process.ID),
                    Name      = item.Value.Name,
                    Status    = (int)item.Value.Status,
                    Type      = (int)item.Value.Type,
                    UserID    = item.Value.UserID,
                    SourceID  = item.Value.SourceID
                };

                if (item.Value.From != null)
                {
                    task.Source = new Guid(item.Value.From);
                }
                if (item.Value.To != null)
                {
                    task.Target = new Guid(item.Value.To);
                }

                _IBPMTaskInstanceService.Add(task);
            }
        }
コード例 #2
0
        /// <summary>
        /// 恢复流程实例
        /// </summary>
        /// <param name="TaskID"></param>
        /// <returns></returns>
        public static ProcessInstance BackUpInstance(string TaskID)
        {
            //var _IBPMProcessTaskIDMapService = UnityContainerHelper.GetServer<IBPMProcessTaskIDMapService>();
            //var _IBPMProcessInstanceService = UnityContainerHelper.GetServer<IBPMProcessInstanceService>();
            //var _IBPMTaskInstanceService = UnityContainerHelper.GetServer<IBPMTaskInstanceService>();

            var _IBPMProcessTaskIDMapService = new BPMProcessTaskIDMapService();
            var _IBPMProcessInstanceService  = new BPMProcessInstanceService();
            var _IBPMTaskInstanceService     = new BPMTaskInstanceService();

            var task    = _IBPMTaskInstanceService.Get(new Guid(TaskID));
            var tasks   = _IBPMTaskInstanceService.GetList(t => t.ProcessID == task.ProcessID);
            var process = _IBPMProcessInstanceService.Get(task.ProcessID);
            var idMaps  = _IBPMProcessTaskIDMapService.GetList(m => m.ProcessID == task.ProcessID);

            // 获取流程模板
            var def = ProcessModelCache.Instance[process.Name];

            // 获取流程的监听者
            var _Ob = UnityContainerHelper.GetServer <IObservation>(def.ProcessOb.Name);


            // 生成流程实例
            var pi = new ProcessInstance()
            {
                ID        = task.ProcessID.ToString(),
                Name      = def.Name,
                StartDate = process.StartDate,
                Version   = process.Version
            };

            // 编译脚本代码
            if (!string.IsNullOrEmpty(def.ConditionCode))
            {
                pi.Compiled = ConditionExpression.Evaluator(def.ConditionCode, def.ID);
            }

            // 流程资源
            def.Resources.ForEach(r =>
            {
                var prs = new ProcessResouce()
                {
                    Key   = r.ID,
                    Users = new Dictionary <string, string>()
                };

                r.Users.ForEach(u =>
                {
                    prs.Users.Add(u.ID, u.Name);
                });

                pi.ProcessResouces.Add(r.ID, prs);
            });

            pi.ModelInstanceIDMaps = new Dictionary <string, string>();

            idMaps.ForEach(m =>
            {
                pi.ModelInstanceIDMaps.Add(m.TaskKey, m.TaskID.ToString());
            });

            pi.OB = _Ob;

            // 生成流程脚本实例
            pi.BackUpTasks(def, tasks);

            return(pi);
        }