예제 #1
0
 public NodeUserControl()
 {
     InitializeComponent();
     workflowNode = new WorkflowNode();
     //workflowNode.WorkFlowNodeId = this.ControlName;
     label2.ContextMenuStrip = contextMenuStrip1;
 }
예제 #2
0
        private void advanceOnThisThread()
        {
            this.feedbackLabel.setText("See what it may look like to use ActivityRecommender!");
            this.timer = null;
            WorkflowNode node = null;

            try
            {
                node = this.steps[stepNumber];
                node.Process();
                if (this.viewManager.NeedsRelayout)
                {
                    System.Diagnostics.Debug.WriteLine("DemoLayout waiting for ViewManager to complete layout");
                }
                else
                {
                    this.sleepAndStep();
                }
                this.stepNumber++;
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("DemoLayout error processing node " + node + ": " + ex);
                this.viewManager.LayoutCompleted -= ViewManager_LayoutCompleted;
            }
        }
예제 #3
0
        public static WorkflowNode Desearializeworkflownodexml(XmlNode xmlnode)
        {
            WorkflowNode wnode = new WorkflowNode();

            if (xmlnode.Attributes["id"] != null)
            {
                string workflownodeid = xmlnode.Attributes["id"].Value;

                bool   isstart  = bool.Parse(xmlnode.Attributes["isstart"].Value);
                string scenario = xmlnode.Attributes["scenario"].Value;
            }
            foreach (XmlNode cnode in xmlnode.ChildNodes)
            {
                if (cnode.Name == "FormPatterns")
                {
                    wnode.FormPatterns = FormPatterns.Desearilize(cnode);
                }
                else if (cnode.Name == "DataPatterns")
                {
                    wnode.DataPatterns = DataPatterns.Desearilize(cnode);
                }
                else if (cnode.Name == "dataobject")
                {
                    wnode.DataObject = EIBFormDesigner.Workflow.Node.DataObject.Desearilize(cnode);
                }
                else if (cnode.Name == "UserPatterns")
                {
                    wnode.UserPatterns = UserPatterns.Desearilize(cnode);
                }
            }
            return(wnode);
        }
        public ActionResult WorkflowImage(string instanceID)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();

            ViewBag.Result = serializer.Serialize(WorkflowInstance.GetInstance(instanceID));

            DataTable dt = WorkflowNode.GetRecord(instanceID);

            //WorkflowServiceProvider.OfType<IWorkflowActor>().GetRecord(instanceID);
            ViewBag.Record = Newtonsoft.Json.JsonConvert.SerializeObject(dt);

            return(View());
        }
예제 #5
0
 private bool CanAddSourcePoint(WorkflowStepInfo step)
 {
     if (step != null)
     {
         Node node = WorkflowNode.GetInstance(step);
         if (NodeSourcePointsLimits.Max[node.Type] <= step.StepDefinition.SourcePoints.Count)
         {
             return(false);
         }
         return(true);
     }
     return(false);
 }
예제 #6
0
        public static void saveXMLofNode(Control nodeControl, XmlNode xmlNode)
        {
            if (nodeControl != null)
            {
                EIBNode      nodeEIB      = (EIBNode)nodeControl;
                WorkflowNode workflowNode = nodeEIB.WorkFlowNode;
                //Save workflow Node
                Hashtable controlProperties = new Hashtable();
                //Save Form Pattern
                FormPatterns formpatterns = workflowNode.FormPatterns;
                //controlProperties.Clear();
                XmlNode xmlformpatternsnode = formpatterns.Searialize(xmlNode.OwnerDocument);
                xmlNode.AppendChild(xmlformpatternsnode);

                //Save Data Pattern
                DataPatterns dataPatterns = workflowNode.DataPatterns;
                //controlProperties.Clear();
                XmlNode xmldatapatternsnode = dataPatterns.Searialize(xmlNode.OwnerDocument);
                xmlNode.AppendChild(xmldatapatternsnode);

                //Save Data Pattern
                EIBFormDesigner.Workflow.Node.DataObject dataObject = workflowNode.DataObject;
                //controlProperties.Clear();
                XmlNode dataObjectNode = XMLServices.writeElement(xmlNode, "dataobject", controlProperties, null, null);

                //Save Data Info section
                //controlProperties.Clear();
                XMLServices.writeElement(dataObjectNode, "info", controlProperties, null, null);

                //Save Data data section
                //controlProperties.Clear();
                XMLServices.writeElement(dataObjectNode, "data", controlProperties, null, null);

                //Save Data status section
                //controlProperties.Clear();
                XmlNode xmlNodeStatus = XMLServices.writeElement(dataObjectNode, "status", controlProperties, null, null);

                xmlNodeStatus.InnerText = dataObject.Status;
                //xmlNodeStatus.AppendChild(status);
                //Save User Pattern
                UserPatterns userPattern = workflowNode.UserPatterns;
                //controlProperties.Clear();
                XmlNode xmluserpatternsnode = userPattern.Searialize(xmlNode.OwnerDocument);
                xmlNode.AppendChild(xmluserpatternsnode);


                //Save Data status section
                //controlProperties.Clear();
                //XMLServices.writeElement(userPatternNode, "role", controlProperties, null);
            }
        }
예제 #7
0
파일: Workflow.cs 프로젝트: kapiya/Warewolf
        private List <IWorkflowNode> GetWorkflowNodesForHtml()
        {
            var nodeTree = new WorkflowNode();

            foreach (var node in FlowNodes)
            {
                var workflowNode = GetWorkflowNodeFrom(node);
                if (workflowNode != null)
                {
                    nodeTree.Add(workflowNode);
                }
            }

            return(nodeTree.NextNodes);
        }
예제 #8
0
        public ActionResult WebPageView(string instanceID)
        {
            WorkflowInstance workflowInstance     = WorkflowInstance.GetInstance(instanceID);
            WorkflowNode     current              = workflowInstance.Current;
            Stack <Smartflow.Elements.Form> stack = new Stack <Smartflow.Elements.Form>();

            if (current.WebView != null)
            {
                stack.Push(current.WebView);
            }

            ViewBag.InstanceID  = instanceID;
            ViewBag.Stack       = stack;
            ViewBag.Transitions = current.Transitions;
            return(View());
        }
        public ActionResult WorkflowImage(string instanceID)
        {
            WorkflowInstance instance = WorkflowInstance.GetInstance(instanceID);
            string           data     = Newtonsoft.Json.JsonConvert.SerializeObject(new
            {
                structure = GetImageList(instance.Resource),
                id        = instance.Current.ID
            }, new Newtonsoft.Json.JsonSerializerSettings()
            {
                ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
                ContractResolver      = new LowerCaseContractResolver()
            });

            ViewBag.Result = data;
            DataTable dt = WorkflowNode.GetRecord(instanceID);

            ViewBag.Record = Newtonsoft.Json.JsonConvert.SerializeObject(dt);
            return(View());
        }
예제 #10
0
파일: Workflow.cs 프로젝트: kapiya/Warewolf
        private IWorkflowNode WorkflowNodeFrom(IDev2Activity activity)
        {
            if (activity != null && !IsDsfComment(activity))
            {
                var workflowNode = new WorkflowNode
                {
                    ActivityID      = activity.ActivityId,
                    UniqueID        = Guid.Parse(activity.UniqueID),
                    StepDescription = activity.GetDisplayName(),
                };

                if (!_workflowNodes.Any(o => o.UniqueID == workflowNode.UniqueID))
                {
                    _workflowNodes.Add(workflowNode);
                }

                return(workflowNode);
            }
            return(null);
        }
예제 #11
0
        private IWorkflowNode WorkflowNodeFrom(IDev2Activity activity)
        {
            if (activity != null && !IsDsfComment(activity))
            {
                var workflowNode = new WorkflowNode
                {
                    ActivityID      = activity.ActivityId != Guid.Empty ? activity.ActivityId : Guid.Parse(activity.UniqueID),
                    UniqueID        = Guid.Parse(activity.UniqueID),
                    StepDescription = activity.GetDisplayName(),
                    ChildNodes      = activity.GetChildrenNodes()
                                      .Select(o => WorkflowNodeFrom(o))
                                      .ToList()
                };

                if (!_workflowNodes.Any(o => o.UniqueID == workflowNode.UniqueID))
                {
                    _workflowNodes.Add(workflowNode);
                }

                return(workflowNode);
            }
            return(null);
        }
예제 #12
0
    protected static object stepsGrid_OnExternalDataBound(object sender, string sourceName, object parameter)
    {
        WorkflowStepTypeEnum stepType  = WorkflowStepTypeEnum.Undefined;
        GridViewRow          container = null;

        switch (sourceName.ToLowerCSafe())
        {
        case "allowaction":
            container = (GridViewRow)parameter;
            stepType  = (WorkflowStepTypeEnum)ValidationHelper.GetInteger(DataHelper.GetDataRowViewValue((DataRowView)container.DataItem, "StepType"), 3);
            switch (stepType)
            {
            case WorkflowStepTypeEnum.DocumentEdit:
            case WorkflowStepTypeEnum.DocumentPublished:
            case WorkflowStepTypeEnum.DocumentArchived:
                ((Control)sender).Visible = false;
                break;
            }
            break;

        case "steptype":
            stepType = (WorkflowStepTypeEnum)ValidationHelper.GetInteger(parameter, 3);
            WorkflowNode node = WorkflowNode.GetInstance(stepType);
            return(HTMLHelper.HTMLEncode(node.Name));

        case "#objectmenu":
            container = (GridViewRow)parameter;
            WorkflowStepInfo step = new WorkflowStepInfo(((DataRowView)container.DataItem).Row);
            if (step.StepIsDefault)
            {
                ImageButton button = ((ImageButton)sender);
                button.Visible = false;
            }
            break;
        }
        return(parameter);
    }
예제 #13
0
        public async Task <IActionResult> ExecuteTransition(string id, [FromBody] WorkflowTransitionExecutionRequest requestArgs)
        {
            return(await FunctionWrapper.ExecuteFunction(this, async() =>
            {
                // This method assumes that a client has recognized the need to display screens
                // in order to populate all required fields or make any field updates to the item in transition

                if (string.IsNullOrEmpty(requestArgs.ItemId))
                {
                    throw new Exception("Required fields not supplied.");
                }

                Item item = null;
                string serializedObject = "";

                item = await _itemRepository.Get(new ObjectId(requestArgs.ItemId), null);

                if (item == null)
                {
                    throw new Exception("Cannot find item specified.");
                }

                //TODO: Verify that the transition is valid for the item's current state/node

                serializedObject = JsonConvert.SerializeObject(item);

                var transition = await _workflowTransitionRepository.Get(new ObjectId(id));

                if (transition == null)
                {
                    throw new Exception("Cannot find transition.");
                }

                FunctionRegistry functionRegistry = new FunctionRegistry(
                    _itemRepository, _itemTypeRepository, _fieldRepository, _workflowNodeRepository);
                WorkflowTransitionExecutionResult result = new WorkflowTransitionExecutionResult();

                if (transition.PreConditions != null)
                {   // Execute all pre-conditions for the transition
                    foreach (WorkflowTransitionFunction funcRef in transition.PreConditions)
                    {
                        var execResult = await functionRegistry.ExecuteFunction(funcRef, item);

                        if (execResult.IsFailure)
                        {
                            result.ErrorMessages.Add(execResult.DisplayMessage);
                        }
                    }
                }

                // Stop now if any conditions fail
                if (result.ErrorMessages.Count > 0)
                {
                    return result;
                }

                if (transition.Validations != null)
                {   // Execute all validations for the transition
                    foreach (WorkflowTransitionFunction funcRef in transition.Validations)
                    {
                        var execResult = await functionRegistry.ExecuteFunction(funcRef, item);

                        if (execResult.IsFailure)
                        {
                            result.ErrorMessages.Add(execResult.DisplayMessage);
                        }
                    }
                }

                // Stop now if any validations fail
                if (result.ErrorMessages.Count > 0)
                {
                    return result;
                }

                if (transition.PostFunctions != null)
                {
                    foreach (WorkflowTransitionFunction funcRef in transition.PostFunctions)
                    {
                        var execResult = await functionRegistry.ExecuteFunction(funcRef, item);

                        if (execResult.IsFailure)
                        {
                            throw new ApplicationException(execResult.DisplayMessage);
                        }
                    }
                }

                // Set Item Workflow Node / Status (should this be optional to avoid having
                // transitions that simply return to the same status just to execute functions?)
                WorkflowNode node = await _workflowNodeRepository.Get(transition.ToNodeId);
                if (node == null)
                {
                    throw new Exception("Cannot find destination node.");
                }

                item.WorkflowNodeId = node.Id;
                await _itemRepository.Update(item);

                if (result.ErrorMessages.Count > 0)
                {
                    return result;
                }

                return result;
            }));
        }
예제 #14
0
        protected virtual void BuildWorkflow(IEnumerable <WorkflowNode> allNodes, DefinitionSourceV1 source, IEnumerable <AbpWorkflowStepBody> stepBodys, WorkflowNode node)
        {
            if (source.Steps.Any(u => u.Id == node.Key))
            {
                return;
            }

            var stepSource = new StepSourceV1();

            stepSource.Id   = node.Key;
            stepSource.Name = node.Key;
            AbpWorkflowStepBody stepbody = stepBodys.FirstOrDefault(u => u.Name == node.StepBody.Name);

            if (stepbody == null)
            {
                stepbody = new AbpWorkflowStepBody()
                {
                    StepBodyType = typeof(NullStepBody)
                };
            }
            stepSource.StepType = $"{stepbody.StepBodyType.FullName}, {stepbody.StepBodyType.Assembly.FullName}";

            foreach (var input in stepbody.Inputs)
            {
                var value = node.StepBody.Inputs[input.Key].Value;
                if (!(value is IDictionary <string, object> || value is IDictionary <object, object>))
                {
                    value = $"\"{value}\"";
                }
                stepSource.Inputs.TryAdd(input.Key, value);
            }
            source.Steps.Add(stepSource);
            BuildBranching(allNodes, source, stepSource, stepBodys, node.NextNodes);
        }
예제 #15
0
    /// <summary>
    /// Loads data of edited workflow from DB into TextBoxes.
    /// </summary>
    protected void LoadData(WorkflowStepInfo wsi)
    {
        // Don't display settings for archived, edit and action step
        plcReject.Visible = !wsi.StepIsArchived && !wsi.StepIsEdit && !wsi.StepIsStart && !wsi.StepIsAction;

        // Change reject label
        if (CurrentWorkflow.IsAutomation)
        {
            lblAllowReject.ResourceString = "WorkflowStep.AllowMoveToPrevious";
            lblAllowReject.RefreshText();
        }

        // Display settings for Standard, DocumentEdit and Start step type only
        plcPublish.Visible = !CurrentWorkflow.IsAutomation && ((wsi.StepType == WorkflowStepTypeEnum.Standard) || wsi.StepIsEdit || wsi.StepIsStart || (wsi.StepType == WorkflowStepTypeEnum.Wait));

        // Timeout UI is always enabled for wait step type
        ucTimeout.AllowNoTimeout = (wsi.StepType != WorkflowStepTypeEnum.Wait);

        // Display action parameters form only for action step type
        if (wsi.StepIsAction)
        {
            WorkflowActionInfo action = WorkflowActionInfoProvider.GetWorkflowActionInfo(wsi.StepActionID);
            if (action != null)
            {
                if (!RequestHelper.IsPostBack())
                {
                    pnlContainer.CssClass += " " + action.ActionName.ToLowerCSafe();
                }
                ucActionParameters.FormInfo = new FormInfo(action.ActionParameters);
            }

            ucActionParameters.BasicForm.AllowMacroEditing = true;
            ucActionParameters.BasicForm.ResolverName      = WorkflowHelper.GetResolverName(CurrentWorkflow);
            ucActionParameters.Parameters = wsi.StepActionParameters;
            ucActionParameters.ReloadData(!RequestHelper.IsPostBack());
            ucActionParameters.Visible = ucActionParameters.CheckVisibility();
            pnlParameters.GroupingText = string.Format(GetString("workflowstep.parameters"), HTMLHelper.HTMLEncode(ResHelper.LocalizeString(action.ActionDisplayName)));
        }

        pnlParameters.Visible = ucActionParameters.Visible;

        if (plcTimeoutTarget.Visible)
        {
            ucTimeoutTarget.WorkflowStepID = WorkflowStepID;
        }

        // Initialize condition edit for certain step types
        ucSourcePointEdit.StopProcessing = true;

        if (!CurrentWorkflow.IsBasic)
        {
            plcStepType.Visible = true;
            WorkflowNode node = WorkflowNode.GetInstance(wsi.StepType);
            lblWorkflowStepTypeValue.Text = node.Name;

            bool conditionStep = (wsi.StepType == WorkflowStepTypeEnum.Condition);
            if (conditionStep || (wsi.StepType == WorkflowStepTypeEnum.Wait) || (!wsi.StepIsStart && !wsi.StepIsAction && !wsi.StepIsFinished && (wsi.StepType != WorkflowStepTypeEnum.MultichoiceFirstWin)))
            {
                // Initialize source point edit control
                ucSourcePointEdit.WorkflowStepId = WorkflowStepID;
                var sourcePoint = CurrentStepInfo.StepDefinition.DefinitionPoint;
                if (sourcePoint != null)
                {
                    pnlCondition.Visible      = true;
                    pnlCondition.GroupingText = conditionStep ? GetString("workflowstep.conditionsettings") : GetString("workflowstep.advancedsettings");

                    ucSourcePointEdit.StopProcessing    = false;
                    ucSourcePointEdit.SourcePointGuid   = sourcePoint.Guid;
                    ucSourcePointEdit.SimpleMode        = !conditionStep;
                    ucSourcePointEdit.ShowCondition     = (wsi.StepType != WorkflowStepTypeEnum.Userchoice) && (wsi.StepType != WorkflowStepTypeEnum.Multichoice) && (wsi.StepType != WorkflowStepTypeEnum.MultichoiceFirstWin);
                    ucSourcePointEdit.RuleCategoryNames = CurrentWorkflow.IsAutomation ? ModuleEntry.ONLINEMARKETING : WorkflowObjectType.WORKFLOW;
                }
            }
        }

        if (!RequestHelper.IsPostBack())
        {
            if (ShowTimeout)
            {
                ucTimeout.TimeoutEnabled   = wsi.StepDefinition.TimeoutEnabled;
                ucTimeout.ScheduleInterval = wsi.StepDefinition.TimeoutInterval;
            }

            txtWorkflowStepCodeName.Text    = wsi.StepName;
            txtWorkflowStepDisplayName.Text = wsi.StepDisplayName;
            chkAllowReject.Checked          = wsi.StepAllowReject;
            chkAllowPublish.Checked         = wsi.StepAllowPublish;
        }
    }
예제 #16
0
 private static bool isCondition(WorkflowNode node)
 {
     return(node is Condition);
 }
예제 #17
0
        private void CalculateFlowDecisionNodes(List <IWorkflowNode> list, List <IWorkflowNode> childNodes, FlowNode node, out IDev2Activity activity, out List <IWorkflowNode> nodes)
        {
            var flowDecision = ((FlowDecision)node);

            nodes = GetFlowStepFromFlowNode(flowDecision.False);
            if (nodes.Count > 0)
            {
                childNodes.AddRange(nodes);
            }
            else
            {
                var falseA = (((FlowStep)flowDecision.False)?.Action as IDev2Activity);
                if (falseA.GetType().Name is "DsfCommentActivity")
                {
                    //Do nothing. DsfCommentActivity should not be part of coverage
                }
                else
                {
                    var falseArm = new WorkflowNode
                    {
                        ActivityID      = falseA.ActivityId,
                        UniqueID        = Guid.Parse(falseA.UniqueID),
                        StepDescription = falseA.GetDisplayName(),
                    };
                    childNodes.Add(falseArm);
                }
            }

            nodes = GetFlowStepFromFlowNode(flowDecision.True);
            if (nodes.Count > 0)
            {
                childNodes.AddRange(nodes);
            }
            else
            {
                var trueA = ((FlowStep)flowDecision.True)?.Action as IDev2Activity;
                if (trueA.GetType().Name is "DsfCommentActivity")
                {
                    //Do nothing. DsfCommentActivity should not be part of coverage
                }
                else
                {
                    var trueArm = new WorkflowNode
                    {
                        ActivityID      = trueA.ActivityId,
                        UniqueID        = Guid.Parse(trueA.UniqueID),
                        StepDescription = trueA.GetDisplayName(),
                    };
                    childNodes.Add(trueArm);
                }
            }

            activity = flowDecision.Condition as IDev2Activity;
            list.Add(new WorkflowNode
            {
                ActivityID      = activity.ActivityId,
                UniqueID        = Guid.Parse(activity.UniqueID),
                StepDescription = activity.GetDisplayName(),
                NextNodes       = childNodes
            });
        }