示例#1
0
        public ActionResult StartForm(Guid processDefinitionId)
        {
            IExecutionApplication         executionApplication  = null;
            IProcessDefinitionApplication definitionApplication = null;

            executionApplication  = ServiceLocator.Current.GetInstance <IExecutionApplication>();
            definitionApplication = ServiceLocator.Current.GetInstance <IProcessDefinitionApplication>();
            IProcessDefinition processDefinition = definitionApplication.GetProcessDefinition(processDefinitionId);

            //create Form
            ActivityFormView activityForm = executionApplication.GetStartForm(processDefinitionId);

            return(View(processDefinition.Name.Replace(" ", ""), activityForm));
        }
示例#2
0
        public ActivityFormView GetActivityForm(Guid flowId)
        {
            ActivityFormView activityForm = null;

            using (var scope = new UnitOfWorkScope())
            {
                try
                {
                    var   flowRepository = ServiceLocator.Current.GetInstance <IRepository <Flow> >();
                    Flow  flow           = flowRepository.With(w => w.Node).Get(flowId);
                    State state          = flow.Node as State;

                    var fieldRepository = ServiceLocator.Current.GetInstance <IRepository <Field> >();
                    var fields          = fieldRepository.With(w => w.Attribute).Query(new Specification <Field>(q => q.State.Id == state.Id));
                    var attributeValues = new Dictionary <string, object>();

                    var attributeInstanceRepository = ServiceLocator.Current.GetInstance <IRepository <AttributeInstance> >();
                    foreach (var field in fields)
                    {
                        var    attribute     = field.Attribute;
                        string attributeName = attribute.Name;
                        if ((field.Access.IsReadable() || field.Access.IsWritable()))
                        {
                            AttributeInstance attributeInstance = attributeInstanceRepository.SingleOrDefault(s => s.Scope.Id == flowId && s.AttributeName == attributeName);
                            if (attributeInstance != null)
                            {
                                attributeValues.Add(attributeName, attributeInstance.GetValue());
                            }
                        }
                    }

                    activityForm                 = new ActivityFormView();
                    activityForm.FlowId          = flowId;
                    activityForm.AttributeValues = attributeValues;
                    return(activityForm);
                }
                catch
                {
                    throw;
                }
            }
        }
示例#3
0
        public ActivityFormView GetStartForm(Guid processDefinitionId)
        {
            ActivityFormView activityForm = null;

            using (var scope = new UnitOfWorkScope())
            {
                try
                {
                    var processDefinitionRepository     = ServiceLocator.Current.GetInstance <IRepository <ProcessDefinition> >();
                    ProcessDefinition processDefinition = processDefinitionRepository.With(w => w.Nodes).With(w => w.Attributes).Get(processDefinitionId);

                    var fieldRepository = ServiceLocator.Current.GetInstance <IRepository <Field> >();
                    var fields          = fieldRepository.With(w => w.Attribute).Query(new Specification <Field>(q => q.State.Id == processDefinition.StartStateId));
                    var attributeValues = new Dictionary <string, object>();

                    foreach (var field in fields)
                    {
                        var    attribute     = field.Attribute;
                        string attributeName = attribute.Name;
                        string initialValue  = attribute.InitialValue;
                        if (!string.IsNullOrEmpty(initialValue) && (field.Access.IsReadable() || field.Access.IsWritable()))
                        {
                            AttributeInstance attributeInstance = new AttributeInstance(attribute, null);
                            attributeInstance.ValueText = initialValue;
                            attributeValues.Add(attributeName, attributeInstance.GetValue());
                        }
                    }

                    activityForm = new ActivityFormView();
                    activityForm.ProcessDefinitionId = processDefinition.Id;
                    activityForm.AttributeValues     = attributeValues;

                    return(activityForm);
                }
                catch
                {
                    throw;
                }
            }
        }
示例#4
0
        public ActionResult SubmitForm(ActivityFormView model)
        {
            IExecutionApplication executionApplication = null;

            executionApplication = ServiceLocator.Current.GetInstance <IExecutionApplication>();
            var userId = Guid.Parse(this.User.Identity.Name);

            if (model.Parameters != null)
            {
                model.AttributeValues = new Dictionary <string, object>();
                foreach (var item in model.Parameters)
                {
                    Evaluation evaluation;
                    if (Evaluation.TryParseEvaluation(item.Value, out evaluation))
                    {
                        model.AttributeValues.Add(item.Key, evaluation);
                        continue;
                    }
                    DateTime selectDateTime;
                    if (DateTime.TryParse(item.Value, out selectDateTime))
                    {
                        model.AttributeValues.Add(item.Key, selectDateTime);
                        continue;
                    }
                    model.AttributeValues.Add(item.Key, item.Value);
                }
            }

            if (model.ProcessDefinitionId != null)
            {
                executionApplication.StartProcessInstance(userId, model.ProcessDefinitionId.Value, model.AttributeValues);
            }
            if (model.FlowId != null)
            {
                executionApplication.PerformActivity(userId, model.FlowId.Value, model.AttributeValues);
            }

            return(this.Redirect("/User"));
        }