예제 #1
0
        public IActionResult Get([FromRoute] string entityname, [FromQuery]  Guid transitionType, [FromQuery] Guid workFlowId)
        {
            try
            {
                var stopwatch = StopwatchLogger.Start(_log);
                _log.Info("Called WorkFlowStepController Get {0}=", JsonConvert.SerializeObject(entityname));
                var entityId           = _iMetadataManager.GetEntityContextByEntityName(entityname);
                var retVal             = WorkFlowHelper.GetAllSteps(entityId);
                var itsSavedInnerSteps = _managerWorkFlowInnerSteps.GetWorkFlowInnerStep_ByStepTransactionType(TenantCode, transitionType, workFlowId);
                if (retVal.Count > 0)
                {
                    retVal = (from retV in retVal where retV.Id != transitionType select retV).ToList();
                }
                List <WorkFlowResource> filteredInnerSteps = new List <WorkFlowResource>();
                foreach (var retV in retVal)
                {
                    var checkExistance = (from itsSavedInnerStep in itsSavedInnerSteps where itsSavedInnerStep.TransitionType.Id == retV.Id select itsSavedInnerStep).ToList();
                    if (checkExistance.Count == 0)
                    {
                        filteredInnerSteps.Add(retV);
                    }
                }

                stopwatch.StopAndLog("End WorkFlowStepController Get");
                return(Ok(filteredInnerSteps));
            }
            catch (Exception ex)
            {
                _log.Error(ExceptionFormatter.SerializeToString(ex));
                return(StatusCode((int)HttpStatusCode.InternalServerError, ApiConstant.CustomErrorMessage));
            }
        }
예제 #2
0
    private string getProcessInfo()
    {
        string formData = Request.Form["formData"];
        string formId   = Request.Form["formId"];

        return(WorkFlowHelper.GetApprover(formId, formData));
    }
예제 #3
0
        /// <summary>
        /// 增加单据中下一审批节点名称
        /// </summary>
        /// <param name="pageResult"></param>
        /// <param name="BizType"> 审批流业务类型</param>
        /// <returns></returns>
        public PagedResult <GHSubjectModel> AddNextApproveName(PagedResult <GHSubjectModel> pageResult, string BizType)
        {
            var approveListId = GetApproveList(pageResult);

            if (approveListId.Count == 0)
            {
                foreach (var item in pageResult.Results)
                {
                    item.FNextApprove = "无";
                }
                return(pageResult);
            }
            var Next_approve = WorkFlowHelper.GetFlowInfoByBizList(BizType, approveListId);

            foreach (var item in pageResult.Results)
            {
                if (item.FApproveStatus == "2")
                {
                    for (var i = 0; i < Next_approve.Count; i++)
                    {
                        if (Next_approve[i]["pk1"].ToString() == item.PhId.ToString() && Next_approve[i]["flow_status_name"].ToString() == "运行中")
                        {
                            item.FNextApprove = Next_approve[i]["curnodes"].ToString();
                            break;
                        }
                    }
                }
                else
                {
                    item.FNextApprove = "无";
                }
            }

            return(pageResult);
        }
예제 #4
0
        public IActionResult Get([FromRoute] Guid workFlowOperationId, [FromQuery] string entityName)
        {
            try
            {
                var stopwatch = StopwatchLogger.Start(_log);
                _log.Info("Called WorkFlowProcessTaskController Get by workFlowOperationId{0}=", JsonConvert.SerializeObject(workFlowOperationId));
                var tasks = _managerWorkFlowProcessTask.GetWorkFlowProcessTask_ByInnerStepId(TenantCode, workFlowOperationId);

                if (tasks.Count > 0)
                {
                    var entityId          = _iMetadataManager.GetEntityContextByEntityName(entityName);
                    var itsProcessorTasks = WorkFlowHelper.GetProcessorTitleByOperationModule(entityId);
                    foreach (var workFlowProcessTask in tasks)
                    {
                        var task = (from itsProcessorTask in itsProcessorTasks
                                    where itsProcessorTask.Id == workFlowProcessTask.ProcessCode select itsProcessorTask).ToList();
                        if (task.Count > 0)
                        {
                            workFlowProcessTask.ProcessName = task[0].Key;
                        }
                    }
                }

                stopwatch.StopAndLog("End WorkFlowProcessTaskController Get by innerStepId");
                return(Ok(tasks));
            }
            catch (Exception ex)
            {
                _log.Error(ExceptionFormatter.SerializeToString(ex));
                return(StatusCode((int)HttpStatusCode.InternalServerError, ApiConstant.CustomErrorMessage));
            }
        }
예제 #5
0
    private string GetDetail()
    {
        string formName = Request.Form["formName"];
        string docId    = Request.Form["docId"];
        string type     = Request.Form["type"];

        return(WorkFlowHelper.GetDocumentDetail(formName, docId, ((UserInfo)Session["user"]).userId.ToString(), type));
    }
예제 #6
0
    private string Back()
    {
        string   formName = Request.Form["formName"];
        string   docId    = Request.Form["docId"];
        UserInfo user     = (UserInfo)Session["user"];

        return(WorkFlowHelper.BackDocument(formName, docId, user.userId.ToString()));
    }
예제 #7
0
    private string findRemoteUrl()
    {
        string type         = Request.Form["type"];
        string value        = Request.Form["value"];
        string relatedType  = Request.Form["relatedType"];
        string relatedValue = Request.Form["relatedValue"];

        return(WorkFlowHelper.find(type, value, relatedType, relatedValue));
    }
예제 #8
0
    private string submitProcess()
    {
        string defaultProcessJson = Request.Form["DefaultProcessJson"];
        string conditionItem      = Request.Form["ConditionItem"];
        string conditionJson      = Request.Form["ConditionJson"];
        string formId             = Request.Form["FormId"];
        string processName        = Request.Form["ProcessName"];

        return(WorkFlowHelper.submitProcess(defaultProcessJson, conditionItem, conditionJson, formId, processName));
    }
예제 #9
0
    private string Approve()
    {
        string formName     = Request.Form["formName"];
        string docId        = Request.Form["docId"];
        string result       = Request.Form["result"];
        string opinion      = Request.Form["opinion"];
        string hospitalCode = Request.Form["hospitalCode"];
        string agentCode    = Request.Form["agentCode"];

        UserInfo user = (UserInfo)Session["user"];

        return(WorkFlowHelper.Approving(formName, docId, user.userId.ToString(), result, opinion, hospitalCode, agentCode));
    }
예제 #10
0
    private string GetData()
    {
        string   formName = Request.Form["formName"];
        UserInfo user     = (UserInfo)Session["user"];

        JObject res = new JObject();

        res.Add("toBeSubmitedByMe", WorkFlowHelper.getFormDataOverall(user.userId.ToString(), 1));
        res.Add("toBeApprovedByMe", WorkFlowHelper.getFormDataOverall(user.userId.ToString(), 2));
        res.Add("submitedByMe", WorkFlowHelper.getFormDataOverall(user.userId.ToString(), 3));
        res.Add("hasApprovedByMe", WorkFlowHelper.getFormDataOverall(user.userId.ToString(), 4));
        res.Add("relatedToMe", WorkFlowHelper.getFormDataOverall(user.userId.ToString(), 5));

        return(res.ToString());
    }
예제 #11
0
 public IActionResult Get(string operationName, string entityName)
 {
     try
     {
         var stopwatch = StopwatchLogger.Start(_log);
         _log.Info("Called WorkFlowProcessTaskController Get {0}=", JsonConvert.SerializeObject(operationName));
         var entityId = _iMetadataManager.GetEntityContextByEntityName(entityName);
         var retVal   = WorkFlowHelper.GetProcessorTitleByOperation(operationName, entityId);
         stopwatch.StopAndLog("End WorkFlowProcessTaskController Get");
         return(Ok(retVal));
     }
     catch (Exception ex)
     {
         _log.Error(ExceptionFormatter.SerializeToString(ex));
         return(StatusCode((int)HttpStatusCode.InternalServerError, ApiConstant.CustomErrorMessage));
     }
 }
예제 #12
0
        WorkFlowProcessMessage IWorkFlowProcess.OperationProcess(Guid?typeName, dynamic data)
        {
            try
            {
                WorkFlowProcessMessage result = null;
                var type = typeof(IOperation);

                var myType = WorkFlowHelper.GetOperationType(typeName.Value);

                if (myType != null)
                {
                    var        myObject      = Activator.CreateInstance(myType);
                    MethodInfo executeMethod = type.GetMethod("Execute");
                    result = (WorkFlowProcessMessage)executeMethod.Invoke(myObject, new object[] { data });
                    if (!result.Success)
                    {
                        if (result.WarningMessage != null)
                        {
                            throw new CustomWorkflowException <WorkFlowMessage>(result.WarningMessage.Code);
                        }
                        if (result.ErrorMessage != null)
                        {
                            throw new CustomWorkflowException <WorkFlowMessage>(result.ErrorMessage.Code);
                        }
                    }
                }
                return(result);
            }
            catch (CustomWorkflowException <WorkFlowMessage> )
            {
                throw;
            }

            catch (System.Exception ex)
            {
                if (ex.InnerException != null)
                {
                    throw ex.InnerException;
                }
                _log.Error("IWorkFlowProcess.OperationProcess with ProcessContext {0} having System.Exception message {1}", typeName, ex.Message);
                throw;
            }
        }
예제 #13
0
        List <WorkFlowInnerStepInfo> IManagerWorkFlow.GetNextPossibleSteps(Guid tenantId, string entityName, string subTypeName, Guid currentTransitionTypeId)
        {
            var entityId    = iMetadataManager.GetEntityContextByEntityName(entityName);
            var subTypeCode = iMetadataManager.GetSubTypeId(entityName, subTypeName);
            var workFlow    = _reviewWorkFlow.GetWorkFlow(tenantId, entityId, subTypeCode);

            if (workFlow == null)
            {
                throw new CustomWorkflowException <WorkFlowMessage>(WorkFlowMessage.NoOperationActivity);
            }
            var itsCurrentStep = _managerWorkFlowStep.GetWorkFlowSteps(tenantId, workFlow.WorkFlowId).FirstOrDefault(x => x.TransitionType.Id == currentTransitionTypeId);

            var innerSteps = _managerWorkFlowInnerStep.GetWorkFlowInnerStep(tenantId, workFlow.WorkFlowId).Where(x => x.WorkFlowStepId == itsCurrentStep.WorkFlowStepId).ToList();

            foreach (var innerStep in innerSteps)
            {
                innerStep.TransitionType.Name = WorkFlowHelper.GetKeyByContext(entityId, innerStep.TransitionType.Id);
            }
            return(innerSteps);
        }
예제 #14
0
        protected override void OnSaving()
        {
            WorkFlowHelper.CreateWorkFlowProcess(this);

            base.OnSaving();
        }
예제 #15
0
        public static void Init(IConfiguration configuration)
        {
            RedisHelper.Init(configuration);
            RedisHelper.CloseWrite = _close;
            ServerId   = configuration.GetAppSettings <int>("ServerId");
            IsAnalysis = configuration.GetAppSettings <bool>("Analysis");
            ApiDb      = new DataBase(configuration.GetConnectionString("ApiDb"))
            {
                CloseWrite = _close
            };
            _loads = new Dictionary <string, Action>
            {
                //{PermissionHelper.TableName, PermissionHelper.LoadConfig},
                { "ReadDB", LoadDateBase },
                { PermissionHelper.TableName, PermissionHelper.LoadConfig },
                { PermissionGroupHelper.TableName, PermissionGroupHelper.LoadConfig },
                { NpcProxyLinkServerHelper.TableName, NpcProxyLinkServerHelper.LoadConfig },
            };

            foreach (var action in _loads.Values)
            {
                action();
            }

            GateUrl = configuration.GetAppSettings <string>("GateUrl");
            ErpUrl  = configuration.GetAppSettings <string>("ErpUrl");
            GlobalConfig.LoadGlobalConfig();
            AccountInfoHelper.Init(configuration);
            WorkFlowHelper.Init();
            OldWorkFlowHelper.Init();
            //HMaterialHelper.MaterialChange3();
            //return;
            if (ServerId == 1)
            {
                HKanBanHelper.Init();
            }
            else if (ServerId == 2)
            {
                HNotifyHelper.Init();
                HWarningHelper.Init();
                HOpScheduleHelper.Init();
                //HFlowCardHelper.Init();
                //SimulateHelper.Init();
                HScheduleHelper.Init();
                TimerHelper.Init();
                //HMaterialHelper.Init();
            }
            else if (ServerId == 3)
            {
                AnalysisHelper.Init();
                HKanBanHelper.Init();
            }
            if (!RedisHelper.Exists(IsSetProcessDataKey))
            {
                RedisHelper.SetForever(IsSetProcessDataKey, 1);
            }
            if (!RedisHelper.Exists(IsSetDataIgnoreKey))
            {
                RedisHelper.SetForever(IsSetDataIgnoreKey, 0);
            }

            _loads.Add(HWarningHelper.RedisReloadKey, HWarningHelper.NeedReload);
            _loads.Add(HOpScheduleHelper.RedisReloadKey, HOpScheduleHelper.NeedReload);
            Log.InfoFormat("ServerConfig Done");
        }
예제 #16
0
    private string showFormFiled()
    {
        string formId = Request.Form["formId"];

        return(WorkFlowHelper.showFormFiled(formId));
    }
예제 #17
0
    private string getProcessTree()
    {
        string formId = Request.Form["formId"];

        return(WorkFlowHelper.GetTreeJson(formId));
    }
예제 #18
0
    private string showProcessData()
    {
        string formId = Request.Form["formId"];

        return(WorkFlowHelper.getFormProcessOther(formId));
    }
        List <WorkFlowInfo> IManagerWorkFlowSecurity.GetWorkFlowsByUserCode(Guid tenantId, Guid userId, bool isSuperAdmin)
        {
            var workFlowSteps      = _managerWorkFlowStep.GetWorkFlowStepsByUserId(tenantId, userId, isSuperAdmin);
            var workFlows          = _managerWorkFlow.GetWorkFlowsByIds(tenantId, workFlowSteps.Select(p => p.WorkFlowId).Distinct().ToList());
            var workFlowOperations = _managerOperation.GetWorkFlowOperationsByWorkFlowIds(tenantId, workFlows.Select(p => p.WorkFlowId).ToList());

            var workFlowInnerSteps        = _managerInnerStep.GetWorkFlowInnerStep_ByStepIds(tenantId, workFlowSteps.Select(p => p.WorkFlowStepId).ToList());
            var operationOrTransactionIds = new List <Guid>();

            operationOrTransactionIds.AddRange(workFlowOperations.Select(p => p.WorkFlowOperationId).ToList());
            operationOrTransactionIds.AddRange(workFlowInnerSteps.Select(p => p.InnerStepId).ToList());
            var workFlowProcess = _managerWorkFlowProcess.GetWorkFlowProcessByOperationOrTransitionIds(tenantId, operationOrTransactionIds);
            var processTasks    = _managerWorkFlowProcessTask.GetWorkFlowProcessTask_ByProcessIds(tenantId, workFlowProcess.Select(proc => proc.WorkFlowProcessId).ToList());
            var workFlowRoles   = _managerWorkFlowRole.GetWorkFlowRolesByStepIds(tenantId, workFlowSteps.Select(p => p.WorkFlowStepId).ToList());

            foreach (var workFlow in workFlows)
            {
                //get its operations
                workFlow.Operations = (from workFlowOperation in workFlowOperations where workFlowOperation.WorkFlowId == workFlow.WorkFlowId select workFlowOperation).ToList();
                //set process to operation
                foreach (var operation in workFlow.Operations)
                {
                    operation.WorkFlowProcess = (from workFlowPro in workFlowProcess where workFlowPro.OperationOrTransactionId == operation.WorkFlowOperationId &&
                                                 workFlowPro.WorkFlowId == workFlow.WorkFlowId select workFlowPro).ToList();
                    foreach (var process in operation.WorkFlowProcess)
                    {
                        process.WorkFlowProcessTasks = new List <WorkFlowProcessTaskInfo>();
                        if (process.ProcessType == (int)WorkFlowProcessType.PreProcess)
                        {
                            process.WorkFlowProcessTasks.AddRange((from allProcessTask in processTasks
                                                                   where process.WorkFlowProcessId == allProcessTask.WorkFlowProcessId && process.WorkFlowId == workFlow.WorkFlowId
                                                                   orderby allProcessTask.SequenceCode
                                                                   select allProcessTask).ToList());
                        }

                        if (process.ProcessType == (int)WorkFlowProcessType.Process)
                        {
                            process.WorkFlowProcessTasks.AddRange((from allProcessTask in processTasks
                                                                   where process.WorkFlowProcessId == allProcessTask.WorkFlowProcessId && process.WorkFlowId == workFlow.WorkFlowId
                                                                   orderby allProcessTask.SequenceCode
                                                                   select allProcessTask).ToList());
                        }

                        if (process.ProcessType == (int)WorkFlowProcessType.PostProcess)
                        {
                            process.WorkFlowProcessTasks.AddRange((from allProcessTask in processTasks
                                                                   where process.WorkFlowProcessId == allProcessTask.WorkFlowProcessId && process.WorkFlowId == workFlow.WorkFlowId
                                                                   orderby allProcessTask.SequenceCode
                                                                   select allProcessTask).ToList());
                        }
                    }
                }

                //get its steps
                workFlow.Steps = new List <WorkFlowStepInfo>();
                var allSteps         = WorkFlowHelper.GetAllSteps(workFlow.EntityId);
                var itsWorkFlowSteps = (from workFlowStep in workFlowSteps where workFlowStep.WorkFlowId == workFlow.WorkFlowId select workFlowStep).ToList();

                foreach (var itsWorkFlowStep in itsWorkFlowSteps)
                {
                    //filter its role
                    itsWorkFlowStep.Roles = (from workFlowRole in workFlowRoles where workFlowRole.WorkFlowStepId == itsWorkFlowStep.WorkFlowStepId &&
                                             workFlowRole.WorkFlowId == workFlow.WorkFlowId select workFlowRole).ToList();
                    var filteredStep = (from allStep in allSteps where itsWorkFlowStep.TransitionType.Id == allStep.Id select allStep).FirstOrDefault();
                    itsWorkFlowStep.TransitionType.Name = filteredStep.Value;
                    //filter its inner steps
                    var itsInnerSteps = (from workFlowInnerStep in workFlowInnerSteps where workFlowInnerStep.WorkFlowStepId == itsWorkFlowStep.WorkFlowStepId &&
                                         workFlowInnerStep.WorkFlowId == workFlow.WorkFlowId select workFlowInnerStep).ToList();
                    if (itsInnerSteps.Count > 0)
                    {
                        //filter Inner step process
                        foreach (var itsInnerStep in itsInnerSteps)
                        {
                            itsInnerStep.WorkFlowProcess = (from workFlowPro in workFlowProcess where workFlowPro.OperationOrTransactionId == itsInnerStep.InnerStepId &&
                                                            workFlowPro.WorkFlowId == workFlow.WorkFlowId select workFlowPro).ToList();

                            foreach (var process in itsInnerStep.WorkFlowProcess)
                            {
                                process.WorkFlowProcessTasks = new List <WorkFlowProcessTaskInfo>();
                                if (process.ProcessType == (int)WorkFlowProcessType.PreProcess)
                                {
                                    process.WorkFlowProcessTasks.AddRange((from allProcessTask in processTasks
                                                                           where process.WorkFlowProcessId == allProcessTask.WorkFlowProcessId && process.WorkFlowId == workFlow.WorkFlowId
                                                                           orderby allProcessTask.SequenceCode
                                                                           select allProcessTask).ToList());
                                }

                                if (process.ProcessType == (int)WorkFlowProcessType.Process)
                                {
                                    process.WorkFlowProcessTasks.AddRange((from allProcessTask in processTasks
                                                                           where process.WorkFlowProcessId == allProcessTask.WorkFlowProcessId && process.WorkFlowId == workFlow.WorkFlowId
                                                                           orderby allProcessTask.SequenceCode
                                                                           select allProcessTask).ToList());
                                }

                                if (process.ProcessType == (int)WorkFlowProcessType.PostProcess)
                                {
                                    process.WorkFlowProcessTasks.AddRange((from allProcessTask in processTasks
                                                                           where process.WorkFlowProcessId == allProcessTask.WorkFlowProcessId && process.WorkFlowId == workFlow.WorkFlowId
                                                                           orderby allProcessTask.SequenceCode
                                                                           select allProcessTask).ToList());
                                }
                            }
                        }
                        itsWorkFlowStep.InnerSteps = new List <WorkFlowInnerStepInfo>(itsInnerSteps);
                    }
                    workFlow.Steps.Add(itsWorkFlowStep);
                }
            }
            foreach (var workFlow in workFlows)
            {
                workFlow.EntityId = iMetadataManager.GetEntityNameByEntityContext(workFlow.EntityId);
                var subTypes = iMetadataManager.GetSubTypesDetails(workFlow.EntityId);
                foreach (var subType in subTypes)
                {
                    if (subType.Key == workFlow.SubTypeCode)
                    {
                        workFlow.SubTypeCode = subType.Value;
                    }
                }
            }
            return(workFlows);
        }
        static void ProcessOnce(int i)
        {
            var wfApp = WorkFlowHelper
                        .CreateApplication
                        (
                "a:" + (i % 4).ToString()
                , () =>
            {
                return
                (_xaml);
            }
                        );

            wfApp.Completed = (e) =>
            {
                //Console.WriteLine(e.InstanceId);
            };

            wfApp.Aborted = (e) =>
            {
            };

            //wfApp.OnUnhandledException = (e) =>
            //{
            //    Console.WriteLine(e.UnhandledException.ToString());
            //    return UnhandledExceptionAction.Terminate;
            //};

            //wfApp.Idle = (e) =>
            //{
            //    idleEvent.Set();
            //};


            var config          = @"{
                                ""WorkflowInstanceQuery"" :
                                                            [{
                                                                ""States"":
                                                                            [
                                                                                ""*""
                                                                            ]
                                                                , ""QueryAnnotations"": {}
                                                            }]
                               , ""ActivityStateQuery"" :
                                                            [{
                                                                ""ActivityName"": ""*""
                                                                , ""Arguments"": []
                                                                , ""Variables"": []
                                                                , ""States"": [""*""]
                                                                , ""QueryAnnotations"": {}
                                                            }]
                                ,
                                ""CustomTrackingQuery"": [{
                                                                ""Name"": ""*"",
                                                                ""ActivityName"": ""*"",
                                                                ""QueryAnnotations"": {}
                                                            }]
                                ,
                                ""FaultPropagationQuery"": [{
                                                                ""FaultHandlerActivityName"": ""*"",
                                                                ""FaultSourceActivityName"": ""*"",
                                                                ""QueryAnnotations"": {}
                                                                }],
                                ""BookmarkResumptionQuery"": [{
                                                                    ""Name"": ""*"",
                                                                    ""QueryAnnotations"": {}
                                                                    }],
                                ""ActivityScheduledQuery"": [{
                                                                ""ActivityName"": ""*"",
                                                                ""ChildActivityName"": ""*"",
                                                                ""QueryAnnotations"": {}
                                                                }],
                                ""CancelRequestedQuery"": [{
                                                                ""ActivityName"": ""*"",
                                                                ""ChildActivityName"": ""*"",
                                                                ""QueryAnnotations"": {}
                                                                }]
                            }";
            var trackingProfile = WorkFlowHelper
                                  .GetTrackingProfileFromJson
                                  (
                config
                , true
                                  );
            var etwTrackingParticipant = new EtwTrackingParticipant();

            etwTrackingParticipant.TrackingProfile = trackingProfile;
            var commonTrackingParticipant = new CommonTrackingParticipant()
            {
                TrackingProfile = trackingProfile
                ,
                OnTrackingRecordReceived = (x, y) =>
                {
                    //Console.WriteLine("{1}{0}{2}", ",", x, y);
                    return(true);
                }
            };

            wfApp
            .Extensions
            .Add
            (
                etwTrackingParticipant
            );
            wfApp
            .Extensions
            .Add
            (
                commonTrackingParticipant
            );

            wfApp.Run();

            // Loop until the workflow completes.
            //WaitHandle[] handles = new WaitHandle[] { syncEvent, idleEvent };
            //while (WaitHandle.WaitAny(handles) != 0)
            //{
            //    // Gather the user input and resume the bookmark.
            //    bool validEntry = false;
            //    while (!validEntry)
            //    {
            //        int Guess;
            //        if (!int.TryParse(Console.ReadLine(), out Guess))
            //        {
            //            Console.WriteLine("Please enter an integer.");
            //        }
            //        else
            //        {
            //            validEntry = true;
            //            wfApp.ResumeBookmark("EnterGuess", Guess);
            //        }
            //    }
            //}
        }
        static void Main()
        {
            DynamicJson dj = DynamicJson.Parse("{\"F1\":10}");

            var xx     = dj["F1"].GetValue <int>();
            var inputs = new Dictionary <string, object>()
            {
                { "Inputs", dj }
            };

            var wfApp = WorkFlowHelper
                        .CreateApplication
                        (
                "aa"
                , () =>
            {
                return
                (_xaml);
            }
                , inputs
                        );

            wfApp.Completed = (e) =>
            {
                //int Turns = Convert.ToInt32(e.Outputs["Turns"]);
                //Console.WriteLine("Congratulations, you guessed the number in {0} turns.", Turns);

                //syncEvent.Set();
            };

            wfApp.Aborted = (e) =>
            {
                Console.WriteLine(e.Reason);
                //syncEvent.Set();
            };

            wfApp.OnUnhandledException = (e) =>
            {
                Console.WriteLine(e.UnhandledException.ToString());
                return(UnhandledExceptionAction.Terminate);
            };

            wfApp.Idle = (e) =>
            {
                //idleEvent.Set();
            };

            wfApp.Run();

            Console.ReadLine();
            return;


            var config          = @"{
                                ""WorkflowInstanceQuery"" :
                                                            [{
                                                                ""States"":
                                                                            [
                                                                                ""*""
                                                                            ]
                                                                , ""QueryAnnotations"": {}
                                                            }]
                               , ""ActivityStateQuery"" :
                                                            [{
                                                                ""ActivityName"": ""*""
                                                                , ""Arguments"": []
                                                                , ""Variables"": []
                                                                , ""States"": [""*""]
                                                                , ""QueryAnnotations"": {}
                                                            }]
                                ,
                                ""CustomTrackingQuery"": [{
                                                                ""Name"": ""*"",
                                                                ""ActivityName"": ""*"",
                                                                ""QueryAnnotations"": {}
                                                            }]
                                ,
                                ""FaultPropagationQuery"": [{
                                                                ""FaultHandlerActivityName"": ""*"",
                                                                ""FaultSourceActivityName"": ""*"",
                                                                ""QueryAnnotations"": {}
                                                                }],
                                ""BookmarkResumptionQuery"": [{
                                                                    ""Name"": ""*"",
                                                                    ""QueryAnnotations"": {}
                                                                    }],
                                ""ActivityScheduledQuery"": [{
                                                                ""ActivityName"": ""*"",
                                                                ""ChildActivityName"": ""*"",
                                                                ""QueryAnnotations"": {}
                                                                }],
                                ""CancelRequestedQuery"": [{
                                                                ""ActivityName"": ""*"",
                                                                ""ChildActivityName"": ""*"",
                                                                ""QueryAnnotations"": {}
                                                                }]
                            }";
            var trackingProfile = WorkFlowHelper
                                  .GetTrackingProfileFromJson
                                  (
                config
                , true
                                  );
            var etwTrackingParticipant = new EtwTrackingParticipant();

            etwTrackingParticipant.TrackingProfile = trackingProfile;
            var commonTrackingParticipant = new CommonTrackingParticipant()
            {
                TrackingProfile = trackingProfile
                ,
                OnTrackingRecordReceived = (x, y) =>
                {
                    //Console.WriteLine("{1}{0}{2}", ",", x, y);
                    return(true);
                }
            };

            wfApp
            .Extensions
            .Add
            (
                etwTrackingParticipant
            );
            wfApp
            .Extensions
            .Add
            (
                commonTrackingParticipant
            );

            wfApp.Run();

            Console.ReadLine();

            //// Loop until the workflow completes.
            //WaitHandle[] handles = new WaitHandle[] { syncEvent, idleEvent };
            //while (WaitHandle.WaitAny(handles) != 0)
            //{
            //    // Gather the user input and resume the bookmark.
            //    bool validEntry = false;
            //    while (!validEntry)
            //    {
            //        int Guess;
            //        if (!int.TryParse(Console.ReadLine(), out Guess))
            //        {
            //            Console.WriteLine("Please enter an integer.");
            //        }
            //        else
            //        {
            //            validEntry = true;
            //            wfApp.ResumeBookmark("EnterGuess", Guess);
            //        }
            //    }
            //}
        }
        object IManagerWorkFlowSecurity.GetWorkFlowSecurity(Guid tenantId, string entityname)
        {
            var subTypes      = iMetadataManager.GetSubTypesDetails(entityname);
            var entityId      = iMetadataManager.GetEntityContextByEntityName(entityname);
            var workFlowItems = _managerWorkFlow.GetWorkFlows(tenantId, entityname);
            var allRoles      = _managerRole.Roles(tenantId);
            var mainObj       = new { roleList = allRoles, workFlows = new List <object>() };
            var allSteps      = WorkFlowHelper.GetAllSteps(entityId);
            var workFlowSteps = _managerWorkFlowStep.GetWorkFlowStepsByWorkFlowIds(tenantId, workFlowItems.Select(p => p.WorkFlowId).ToList());
            var roles         = _managerWorkFlowRole.GetWorkFlowRolesByWorkFlowIds(tenantId, workFlowItems.Select(p => p.WorkFlowId).ToList());

            foreach (var workFlowItem in workFlowItems)
            {
                var subTypeName       = subTypes.FirstOrDefault(t => t.Key.Equals(workFlowItem.SubTypeCode));
                var thisWorkFlowRoles = (from role in roles where role.WorkFlowId == workFlowItem.WorkFlowId select role).ToList();
                var workFLowObj       = new
                {
                    EntityId    = entityname,
                    SubTypeCode = subTypeName.Value,
                    WorkFlowId  = workFlowItem.WorkFlowId,
                    Steps       = new List <object>()
                };

                var thisWorkFLowSteps = (from workFlowStep in workFlowSteps where workFlowStep.WorkFlowId == workFlowItem.WorkFlowId select workFlowStep).ToList();
                foreach (var step in allSteps)
                {
                    var filteredStep = (from workFlowStep in thisWorkFLowSteps where workFlowStep.TransitionType.Id == step.Id select workFlowStep).FirstOrDefault();
                    if (filteredStep != null)
                    {
                        var stepObj = new
                        {
                            filteredStep.WorkFlowStepId,
                            filteredStep.WorkFlowId,
                            Name = step.Value,
                            filteredStep.IsAssigmentMandatory,
                            filteredStep.AllotedTime,
                            filteredStep.CriticalTime,
                            ActivatedList = new List <object>(),
                            AccessedList  = new List <object>(),
                            AssignedList  = new List <object>()
                        };


                        var checkRoles = (from role in thisWorkFlowRoles where role.WorkFlowStepId == filteredStep.WorkFlowStepId select role).ToList();
                        if (checkRoles.Count > 0)
                        {
                            foreach (var checkRole in checkRoles)
                            {
                                var rolObj = new
                                {
                                    checkRole.RoleAssignmetId,
                                    checkRole.RoleId,
                                    checkRole.WorkFlowId,
                                    checkRole.WorkFlowStepId,
                                    name = checkRole.RoleName,
                                    checkRole.AssignmentOperationType
                                };
                                if (checkRole.AssignmentOperationType == (int)WorkFlowRoleType.ActivatedRoles)
                                {
                                    stepObj.ActivatedList.Add(rolObj);
                                }
                                if (checkRole.AssignmentOperationType == (int)WorkFlowRoleType.AccessedRoles)
                                {
                                    stepObj.AccessedList.Add(rolObj);
                                }
                                if (checkRole.AssignmentOperationType == (int)WorkFlowRoleType.AssignedRoles)
                                {
                                    stepObj.AssignedList.Add(rolObj);
                                }
                            }
                        }
                        workFLowObj.Steps.Add(stepObj);
                    }
                }
                mainObj.workFlows.Add(workFLowObj);
            }
            return(mainObj);
        }
        bool IManagerWorkFlowSecurity.InitializeRootTenantWorkFlow(Guid tenantId, string entityId)
        {
            var allEntities = iMetadataManager.GetEntities(false);
            // Filtwer all  Workflow supported entity
            var workFlowEntities = (from allEntity in allEntities where allEntity.SupportWorkflow && allEntity.Name == entityId select allEntity).ToList();

            foreach (var workFlowEntity in workFlowEntities)
            {
                var entityContextAll = iMetadataManager.GetEntitityByName(workFlowEntity.Name);
                var entityContext    = iMetadataManager.GetEntityContextByEntityName(workFlowEntity.Name);
                foreach (var subtype in workFlowEntity.Subtypes)
                {
                    var workflowInfo = new WorkFlowInfo
                    {
                        WorkFlowId  = Guid.NewGuid(),
                        EntityId    = entityContext,
                        Status      = true,
                        SubTypeCode = iMetadataManager.GetSubTypeId(workFlowEntity.Name, subtype)
                    };
                    _managerWorkFlow.CreateWorkFlow(tenantId, workflowInfo);

                    //all steps from static classes (Transition)
                    List <WorkFlowResource> allSteps = WorkFlowHelper.GetAllSteps(entityContext);
                    var count = 0;
                    foreach (var allStep in allSteps)
                    {
                        var workFlowStep = new WorkFlowStepInfo
                        {
                            WorkFlowId     = workflowInfo.WorkFlowId,
                            TransitionType = new ItemName {
                                Id = allStep.Id
                            },
                            SequenceNumber = count++
                        };
                        workFlowStep.WorkFlowStepId = _managerWorkFlowStep.CreateWorkFlowStep(tenantId, workFlowStep);
                    }

                    // (Operations)
                    List <WorkFlowOperationInfo> workFlowOperations = new List <WorkFlowOperationInfo>();
                    foreach (var entityCon in entityContextAll.Operations)
                    {
                        if (entityCon.Name == "Create")
                        {
                            workFlowOperations.Add(new WorkFlowOperationInfo
                            {
                                WorkFlowOperationId = Guid.NewGuid(),
                                OperationType       = WorkFlowOperationType.Create,
                                WorkFlowId          = workflowInfo.WorkFlowId
                            });
                        }
                        else if (entityCon.Name == "Update")
                        {
                            workFlowOperations.Add(new WorkFlowOperationInfo
                            {
                                WorkFlowOperationId = Guid.NewGuid(),
                                OperationType       = WorkFlowOperationType.Update,
                                WorkFlowId          = workflowInfo.WorkFlowId
                            });
                        }
                        else if (entityCon.Name == "Delete")
                        {
                            workFlowOperations.Add(new WorkFlowOperationInfo
                            {
                                WorkFlowOperationId = Guid.NewGuid(),
                                OperationType       = WorkFlowOperationType.Delete,
                                WorkFlowId          = workflowInfo.WorkFlowId
                            });
                        }
                        else if (entityCon.Name == "UpdateStatus")
                        {
                            workFlowOperations.Add(new WorkFlowOperationInfo
                            {
                                WorkFlowOperationId = Guid.NewGuid(),
                                OperationType       = WorkFlowOperationType.UpdateStatus,
                                WorkFlowId          = workflowInfo.WorkFlowId
                            });
                        }
                    }
                    _managerOperation.CreateWorkFlowOperations(tenantId, workFlowOperations);
                    count = 0;
                    List <WorkFlowProcessInfo> workFlowProcesses = new List <WorkFlowProcessInfo>();
                    foreach (var workFlowOperation in workFlowOperations)
                    {
                        workFlowProcesses.Add(new WorkFlowProcessInfo
                        {
                            WorkFlowProcessId          = Guid.NewGuid(),
                            WorkFlowId                 = workflowInfo.WorkFlowId,
                            OperationOrTransactionId   = workFlowOperation.WorkFlowOperationId,
                            OperationOrTransactionType = (int)OperationOrTransactionType.Operation,
                            ProcessType                = (int)WorkFlowProcessType.PreProcess
                        });

                        workFlowProcesses.Add(new WorkFlowProcessInfo
                        {
                            WorkFlowProcessId          = Guid.NewGuid(),
                            WorkFlowId                 = workflowInfo.WorkFlowId,
                            OperationOrTransactionId   = workFlowOperation.WorkFlowOperationId,
                            OperationOrTransactionType = (int)OperationOrTransactionType.Operation,
                            ProcessType                = (int)WorkFlowProcessType.Process
                        });
                        workFlowProcesses.Add(new WorkFlowProcessInfo
                        {
                            WorkFlowProcessId          = Guid.NewGuid(),
                            WorkFlowId                 = workflowInfo.WorkFlowId,
                            OperationOrTransactionId   = workFlowOperation.WorkFlowOperationId,
                            OperationOrTransactionType = (int)OperationOrTransactionType.Operation,
                            ProcessType                = (int)WorkFlowProcessType.PostProcess
                        });
                    }
                    _managerWorkFlowProcess.CreateWorkFlowProcess(tenantId, workFlowProcesses);
                }
            }

            return(true);
        }
예제 #24
0
        List <WorkFlowInfo> IManagerWorkFlow.GetAllWorkFlowDetails(Guid tenantId, string entityname)
        {
            var entityId  = iMetadataManager.GetEntityContextByEntityName(entityname);
            var workFlows = _reviewWorkFlow.GetWorkFlows(tenantId, entityId);
            var subTypes  = iMetadataManager.GetSubTypesDetails(entityname);

            if (workFlows != null && workFlows.Count > 0)
            {
                var allSteps    = WorkFlowHelper.GetAllSteps(entityId);
                var workFlowIds = workFlows.Select(p => p.WorkFlowId).ToList();

                var workFlowSteps      = _managerWorkFlowStep.GetWorkFlowStepsByWorkFlowIds(tenantId, workFlowIds);
                var workFlowInnerSteps = _managerWorkFlowInnerStep.GetWorkFlowInnerStepByWorkFlowIds(tenantId, workFlowIds);
                var roles = _managerWorkFlowRole.GetWorkFlowRolesByWorkFlowIds(tenantId, workFlowIds).ToList();
                foreach (var workFlow in workFlows)
                {
                    var thisWorkFlowRoles = (from role in roles where role.WorkFlowId == workFlow.WorkFlowId select role).ToList();
                    var allWorkFlowSteps  = new List <WorkFlowStepInfo>();
                    var allStepSavedCount = (from workFlowStep in workFlowSteps where workFlowStep.WorkFlowId == workFlow.WorkFlowId
                                             orderby workFlowStep.SequenceNumber descending select workFlowStep.SequenceNumber).FirstOrDefault();
                    foreach (var step in allSteps)
                    {
                        //return saved step
                        var checkStepsSaved = (from workFlowStep in workFlowSteps where workFlowStep.WorkFlowId == workFlow.WorkFlowId &&
                                               workFlowStep.TransitionType.Id == step.Id select workFlowStep).FirstOrDefault();

                        var checkRoles = (from role in thisWorkFlowRoles where role.WorkFlowStepId == checkStepsSaved.WorkFlowStepId select role).ToList();

                        if (checkStepsSaved != null)
                        {
                            checkStepsSaved.TransitionType.Name = step.Key;
                            checkStepsSaved.WorkFlowId          = workFlow.WorkFlowId;
                            checkStepsSaved.Roles = checkRoles;
                            allWorkFlowSteps.Add(checkStepsSaved);
                        }
                    }

                    foreach (var workFlowStep in allWorkFlowSteps)
                    {
                        var itsInnerSteps = (from workFlowInnerStep in workFlowInnerSteps where workFlowInnerStep.WorkFlowId == workFlow.WorkFlowId &&
                                             workFlowInnerStep.WorkFlowStepId == workFlowStep.WorkFlowStepId
                                             select workFlowInnerStep).ToList();

                        foreach (var workFlowInnerStep in itsInnerSteps)
                        {
                            workFlowInnerStep.TransitionType.Name = (from allStep in allSteps where allStep.Id == workFlowInnerStep.TransitionType.Id select allStep.Key).FirstOrDefault();
                        }
                        workFlowStep.InnerSteps = itsInnerSteps.OrderBy(p => p.SequenceNumber).ToList();
                    }

                    workFlow.Steps = allWorkFlowSteps.OrderBy(p => p.SequenceNumber).ToList();
                    //Chnage sab typesId To name
                    var mapped = subTypes.FirstOrDefault(t => t.Key.Equals(workFlow.SubTypeCode));
                    if (mapped.Key != null)
                    {
                        workFlow.SubTypeCode = mapped.Value;
                    }
                    workFlow.EntityId = entityname;
                }
            }
            return(workFlows);
        }
예제 #25
0
        WorkFlowInfo IManagerWorkFlow.GetWorkFlowDetail(Guid tenantId, string entityname, string subTypeName)
        {
            var entityId    = iMetadataManager.GetEntityContextByEntityName(entityname);
            var subTypeCode = iMetadataManager.GetSubTypeId(entityname, subTypeName);
            var workFlow    = _reviewWorkFlow.GetWorkFlow(tenantId, entityId, subTypeCode);

            if (workFlow != null)
            {
                var workflowOperations = _managerWorkFlowOperation.GetWorkFlowOperations(tenantId, workFlow.WorkFlowId);
                workFlow.Operations = workflowOperations;
                //Get all steps from statci class
                var allSteps = WorkFlowHelper.GetAllSteps(entityId);

                var workFlowSteps      = _managerWorkFlowStep.GetWorkFlowSteps(tenantId, workFlow.WorkFlowId);
                var workFlowInnerSteps = _managerWorkFlowInnerStep.GetWorkFlowInnerStep(tenantId, workFlow.WorkFlowId);
                var workFlowProcess    = _managerWorkFlowProcess.GetWorkFlowProcess(tenantId, workFlow.WorkFlowId);

                // var workFlowProcessTasks=_managerWorkFlowProcessTask.GetWorkFlowProcessTask(tenantId,workFlow.WorkFlowId);
                var allWorkFlowSteps  = new List <WorkFlowStepInfo>();
                var allStepSavedCount = (from workFlowStep in workFlowSteps orderby workFlowStep.SequenceNumber descending select workFlowStep.SequenceNumber).FirstOrDefault();
                foreach (var step in allSteps)
                {
                    //return saved step
                    var checkStepsSaved = (from workFlowStep in workFlowSteps where workFlowStep.TransitionType.Id == step.Id select workFlowStep).FirstOrDefault();
                    if (checkStepsSaved != null)
                    {
                        checkStepsSaved.TransitionType.Name = step.Key;
                        checkStepsSaved.WorkFlowId          = workFlow.WorkFlowId;
                        allWorkFlowSteps.Add(checkStepsSaved);
                    }
                    else
                    {
                        //return not saved step
                        allWorkFlowSteps.Add(new WorkFlowStepInfo
                        {
                            WorkFlowStepId = Guid.Empty,
                            WorkFlowId     = workFlow.WorkFlowId,
                            SequenceNumber = ++allStepSavedCount,
                            TransitionType = new ItemName {
                                Id = step.Id, Name = step.Key
                            }
                        });
                    }
                }

                foreach (var workFlowStep in allWorkFlowSteps)
                {
                    var itsInnerSteps = (from workFlowInnerStep in workFlowInnerSteps where
                                         workFlowInnerStep.WorkFlowStepId == workFlowStep.WorkFlowStepId
                                         select workFlowInnerStep).ToList();

                    foreach (var workFlowInnerStep in itsInnerSteps)
                    {
                        workFlowInnerStep.TransitionType.Name = (from allStep in allSteps where allStep.Id == workFlowInnerStep.TransitionType.Id select allStep.Key).FirstOrDefault();

                        workFlowInnerStep.WorkFlowProcess = (from workFlowPro in workFlowProcess
                                                             where workFlowPro.OperationOrTransactionId == workFlowInnerStep.InnerStepId
                                                             select workFlowPro).ToList();
                    }

                    workFlowStep.InnerSteps = itsInnerSteps.OrderBy(p => p.SequenceNumber).ToList();
                }

                workFlow.Steps = allWorkFlowSteps.OrderBy(p => p.SequenceNumber).ToList();

                //Chnage sab typesId To name
                workFlow.SubTypeCode = subTypeName;
                workFlow.EntityId    = entityname;
            }


            return(workFlow);
        }