Пример #1
0
        /// <summary>
        /// 检查连接线是否有效
        /// </summary>
        /// <param name="dataManager">数据管理器</param>
        /// <param name="name">流程图的名称</param>
        /// <param name="connectorContainerList">连接线链表</param>
        /// <param name="showDetail">是否显示细节</param>
        /// <param name="logBox">输出日志窗体</param>
        /// <returns>连接线是否有效</returns>
        private bool CheckLineAvail(DataManager dataManager, string name, List<ConnectorContainer> connectorContainerList, TextBoxX logBox, bool showDetail)
        {
            bool avail = true;
            ConnectorContainer invalidLine = null;

            foreach (ConnectorContainer line in connectorContainerList)
            {
                if (line.InSlotContainer == null || line.OutSlotContainer == null) // 连接线两端必须连接上结点
                {
                    avail = false;
                    invalidLine = line;
                    logBox.AppendText(string.Format("ID为{0}的连接线没有正确连接!\r\n", line.ID));
                    break;
                }
                else if (line.Invalid) // 连接线必须有效
                {
                    avail = false;
                    invalidLine = line;
                    logBox.AppendText(string.Format("ID为{0}的连接线没有设置条件!\r\n", line.ID));
                    break;
                }
            }

            if (!avail) // 流程图无效 
            {
                MessageBox.Show(string.Format("流程图 {0} 中有不完整的连接,请确认所有的连接是否正确!", name),
                    "流程图有效性检查", MessageBoxButtons.OK, MessageBoxIcon.Information);

                if (showDetail) // 显示细节
                {
                    List<GraphElement> list = new List<GraphElement>();
                    list.Add(invalidLine);
                    dataManager.CurrentFlowChartManager.CurrentGraphManager.SelectGraphElements(list);
                }
            }

            return avail;
        }
Пример #2
0
        /// <summary>
        /// 检测循环圈是否有效
        /// </summary>
        /// <param name="dataManager">数据管理器</param>
        /// <param name="name">流程图的名称</param>
        /// <param name="slotContainerList">插槽容器链表</param>
        /// <param name="showDetail">是否显示细节</param>
        /// <param name="logBox">输出日志窗体</param>
        /// <return>循环圈是否有效</return>
        private bool CheckCircleAvail(DataManager dataManager, string name, List<SlotContainer> slotContainerList, TextBoxX logBox, bool showDetail)
        {
            bool avail = true;
            List<SlotContainer> list = new List<SlotContainer>();
            List<List<SlotContainer>> circleLists = new List<List<SlotContainer>>();
            List<SlotContainer> circleNodeList = new List<SlotContainer>();
            List<List<SlotContainer>> markList = new List<List<SlotContainer>>();

            foreach (SlotContainer slotContainer in slotContainerList)
            {
                if (slotContainer is EventGraphElement)
                {
                    dataManager.FindNextNode(slotContainer, list, circleLists, circleNodeList);
                }
            }

            if (circleLists.Count > 0)
            {
                foreach (List<SlotContainer> circleList in circleLists)
                {
                    avail = false;

                    foreach (SlotContainer node in circleList)
                    {
                        if (node is ConditionGraphElement) // 找到所有的条件结点
                        {
                            // 检查当前圈中的连接线是设置了条件的条件连接线
                            foreach (GraphElement graphElement in dataManager.GetNextGraphElements(node))
                            {
                                ConnectorContainer line = graphElement as ConnectorContainer;
                                if (dataManager.GetData(line) != null && circleList.Contains(line.OutSlotContainer))
                                {
                                    avail = true;
                                    break;
                                }
                            }

                            if (avail)
                            {
                                break;
                            }

                            // 检查是否有通过条件结点连出圈的结点
                            foreach (SlotContainer nextNode in dataManager.GetSpecifyNextSlotContainers(node, circleList))
                            {
                                if (!circleNodeList.Contains(nextNode)) // 有连出圈的结点
                                {
                                    avail = true;
                                    break;
                                }
                            }

                            if (avail)
                            {
                                break;
                            }
                        }
                    }

                    if (!avail)
                    {
                        markList.Add(circleList);
                        string circleString = "";
                        for (int i = 0; i < circleList.Count; i++)
                        {
                            circleString += circleList[i].ID + " -> ";
                        }
                        circleString += circleList[0].ID;
                        logBox.AppendText(string.Format("检测出循环圈{0}!\r\n", circleString));
                    }
                }

                if (markList.Count > 0) // 检测到无效的循环
                {
                    avail = false;
                    MessageBox.Show(string.Format("流程图 {0} 中有可能无效的循环,请确认所有的循环是否设置了有效出口!", name),
                        "流程图有效性检查", MessageBoxButtons.OK, MessageBoxIcon.Information);

                    if (showDetail) // 显示细节
                    {
                        CheckCircleForm cForm = new CheckCircleForm(dataManager.CurrentFlowChartManager.CurrentGraphManager, markList);
                        cForm.ShowDialog();
                    }
                }
            }

            return avail;
        }
Пример #3
0
        /// <summary>
        /// 检查图元是否有效
        /// </summary>
        /// <param name="dataManager">数据管理器</param>
        /// <param name="name">流程图的名称</param>
        /// <param name="graphElementList">图元链表</param>
        /// <param name="showDetail">是否显示细节</param>
        /// <param name="logBox">输出日志窗体</param>
        /// <returns>图元是否有效</returns>
        private bool CheckGraphElementAvail(DataManager dataManager, string name, List<GraphElement> graphElementList, TextBoxX logBox, bool showDetail)
        {
            bool avail = true;
            GraphElement invalidGraphElement = null;

            foreach (GraphElement graphElement in graphElementList)
            {
                if (!graphElement.Enable)
                {
                    avail = false;
                    invalidGraphElement = graphElement;
                    logBox.AppendText(string.Format("ID为{0}的图元没有正确连接事件结点!", graphElement.ID));
                    break;
                }
            }

            if (!avail) // 流程图无效 
            {
                MessageBox.Show(string.Format("流程图 {0} 中有不正确连接的图元,请确认所有的图元都已连接事件结点!", name),
                        "流程图有效性检查", MessageBoxButtons.OK, MessageBoxIcon.Information);

                if (showDetail) // 显示细节
                {
                    List<GraphElement> list = new List<GraphElement>();
                    list.Add(invalidGraphElement);
                    dataManager.CurrentFlowChartManager.CurrentGraphManager.SelectGraphElements(list);
                }
            }

            return avail;
        }