예제 #1
0
        private void addWorkflowBtn_Click(object sender, EventArgs e)
        {
            FindWorkflowForm form = new FindWorkflowForm();

            form.BackendApplication  = BackendApplication;
            form.FrontendApplication = FrontendApplication;

            if (form.ShowDialog() == DialogResult.OK)
            {
                DataAccess.Domain.Workflow workflow = dialogService.GetWorkflowById(form.SelectedWorkflow.Id);

                foreach (WorkflowSubworkflow subworkflow in Workflow.Subworkflows)
                {
                    if (subworkflow.SubWorkflow.Id == workflow.Id)
                    {
                        MessageBox.Show("The selected Workflow is already present in the current Workflow.", "MetaManager");
                        return;
                    }
                }

                WorkflowSubworkflow workflowSubworkflow = new WorkflowSubworkflow();
                workflowSubworkflow.SubWorkflow = workflow;
                workflowSubworkflow.Workflow    = Workflow;
                Workflow.Subworkflows.Add(workflowSubworkflow);

                Type activityType = WorkflowTypeFactory.CreateActivities(Workflow, this.BackendApplication, new Dialog[0], new ServiceMethod[0], new DataAccess.Domain.Workflow[] { workflow }).Last();

                TypeProvider typeProvider = workflowControl.GetService(typeof(ITypeProvider)) as TypeProvider;
                typeProvider.AddAssembly(activityType.Assembly);
                workflowControl.ToolBox.AddToolBoxItem(new SelfHostToolboxItem(activityType));
            }
        }
예제 #2
0
        private void LoadWorkflow()
        {
            var dialogs        = new List <Dialog>();
            var serviceMethods = new List <ServiceMethod>();
            var subworkflows   = new List <DataAccess.Domain.Workflow>();

            foreach (WorkflowDialog workflowDialog in Workflow.Dialogs)
            {
                Dialog dialog = MetaManagerServices.GetDialogService().GetDialogWithViewTree(workflowDialog.Dialog.Id);
                dialogs.Add(dialog);
            }

            foreach (WorkflowServiceMethod workflowServiceMethod in Workflow.ServiceMethods)
            {
                ServiceMethod serviceMethod = MetaManagerServices.GetApplicationService().GetServiceMethodMapsById(workflowServiceMethod.ServiceMethod.Id);
                serviceMethods.Add(serviceMethod);
            }

            foreach (WorkflowSubworkflow workflowSubworkflow in Workflow.Subworkflows)
            {
                DataAccess.Domain.Workflow subworkflow = MetaManagerServices.GetDialogService().GetWorkflowById(workflowSubworkflow.SubWorkflow.Id);
                subworkflows.Add(subworkflow);
            }

            IList <Type> activityTypes = new List <Type>();

            activityTypes = WorkflowTypeFactory.CreateActivities(Workflow, this.BackendApplication, dialogs, serviceMethods, subworkflows);

            if ((activityTypes.Count > 0) && (!string.IsNullOrEmpty(Workflow.WorkflowXoml)))
            {
                Workflow.WorkflowXoml = ReplaceAssemblyReferences(Workflow.WorkflowXoml, activityTypes[0].Assembly.GetName().Name);
            }

            workflowControl.LoadWorkflow(Workflow.WorkflowXoml, Workflow.RuleSetXml);
            workflowControl.RootActivity.Description = Workflow.Description;

            TypeProvider typeProvider = workflowControl.GetService(typeof(ITypeProvider)) as TypeProvider;

            if (activityTypes.Count > 0)
            {
                foreach (Type activityType in activityTypes)
                {
                    workflowControl.ToolBox.AddToolBoxItem(new SelfHostToolboxItem(activityType));
                }

                typeProvider.AddAssembly(activityTypes[0].Assembly);
            }

            sessionType = RuleContextFactory.LoadUserSessionType(Workflow.Module.Application);
            typeProvider.AddAssembly(sessionType.Assembly);
            requestType = WorkflowTypeFactory.CreateRequestType(Workflow);
            typeProvider.AddAssembly(requestType.Assembly);

            GenerateMembers();

            tbxName.Text = Workflow.Name;
        }