コード例 #1
0
ファイル: XmlParser.cs プロジェクト: zengcheng/Slickflow
        /// <summary>
        /// 保存xml文件
        /// </summary>
        /// <param name="package"></param>
        public void SaveProcessFile(package package)
        {
            var xmlDoc = Serialize(package);

            var processGUID = package.process.id;
            var pm = new ProcessManager();
            var entity = pm.GetByGUID(processGUID);

            if (entity != null)
            {
                var serverPath = ConfigHelper.GetAppSettingString("WorkflowFileServer");
                var physicalFileName = string.Format("{0}\\{1}", serverPath, entity.XmlFilePath);

                //判断目录是否存在,否则创建
                var pathName = Path.GetDirectoryName(physicalFileName);
                if (!Directory.Exists(pathName))
                    Directory.CreateDirectory(pathName);

                xmlDoc.Save(physicalFileName);
            }
            else
            {
                throw new ApplicationException(string.Format("无法获取流程定义记录! ProcessGUID: {0}", processGUID));
            }
        }
コード例 #2
0
ファイル: XmlParser.cs プロジェクト: zengcheng/Slickflow
        /// <summary>
        /// 实体序列化为XML对象
        /// </summary>
        /// <param name="package"></param>
        /// <returns></returns>
        private XmlDocument Serialize(package package)
        {
            var xmlDoc = new XmlDocument();
            var xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null);
            var root = xmlDoc.CreateElement("Package");

            xmlDoc.InsertBefore(xmlDeclaration, xmlDoc.DocumentElement);
            xmlDoc.AppendChild(root);

            var participantsNode = xmlDoc.CreateElement("Participants");
            root.AppendChild(participantsNode);

            var workflowProcessNode = xmlDoc.CreateElement("WorkflowProcess");
            root.AppendChild(workflowProcessNode);

            var processNode = xmlDoc.CreateElement("Process");
            workflowProcessNode.AppendChild(processNode);

            //added participants list
            package.participants.ForEach((a) =>
            {
                var pNode = xmlDoc.CreateElement("Participant");
                pNode.SetAttribute("type", a.type);
                pNode.SetAttribute("id", a.id);
                pNode.SetAttribute("name", a.name);
                pNode.SetAttribute("code", a.code);
                pNode.SetAttribute("outerId", a.outerId.ToString());

                participantsNode.AppendChild(pNode);
            });

            //added process node
            var process = package.process;
            processNode.SetAttribute("id", process.id);
            processNode.SetAttribute("name", process.name);

            //added snodes
            var activitiesNode = xmlDoc.CreateElement("Activities");
            processNode.AppendChild(activitiesNode);

            process.snodes.ForEach((a) =>
            {
                var aNode = xmlDoc.CreateElement("Activity");
                aNode.SetAttribute("name", a.name);
                aNode.SetAttribute("id", a.id);
                if (!string.IsNullOrEmpty(a.code))
                    aNode.SetAttribute("code", a.code);

                var activityTypeNode = xmlDoc.CreateElement("ActivityType");
                activityTypeNode.SetAttribute("type", a.type);
                aNode.AppendChild(activityTypeNode);

                //added performers node
                var performersNode = xmlDoc.CreateElement("Performers");
                a.performers.ForEach((p) =>
                {
                    var pNode = xmlDoc.CreateElement("Performer");
                    pNode.SetAttribute("id", p.id);

                    performersNode.AppendChild(pNode);
                });
                aNode.AppendChild(performersNode);

                //added geography node
                var geographyNode = xmlDoc.CreateElement("Geography");
                aNode.AppendChild(geographyNode);

                //added widget node
                var widgetNode = xmlDoc.CreateElement("Widget");
                widgetNode.SetAttribute("nodeId", a.nodeId.ToString());
                widgetNode.SetAttribute("left", a.x.ToString());
                widgetNode.SetAttribute("top", a.y.ToString());
                widgetNode.SetAttribute("width", a.width.ToString());
                widgetNode.SetAttribute("height", a.height.ToString());

                //added connectors node
                var connectorsNode = xmlDoc.CreateElement("Connectors");
                a.inputConnectors.ForEach((c1) =>
                {
                    var cNode = xmlDoc.CreateElement("Connector");
                    cNode.SetAttribute("type", c1.type);
                    cNode.SetAttribute("index", c1.index.ToString());
                    cNode.SetAttribute("name", c1.name);

                    connectorsNode.AppendChild(cNode);
                });

                a.outputConnectors.ForEach((c2) =>
                {
                    var cNode = xmlDoc.CreateElement("Connector");
                    cNode.SetAttribute("type", c2.type);
                    cNode.SetAttribute("index", c2.index.ToString());
                    cNode.SetAttribute("name", c2.name);

                    connectorsNode.AppendChild(cNode);
                });
                widgetNode.AppendChild(connectorsNode);
                geographyNode.AppendChild(widgetNode);

                activitiesNode.AppendChild(aNode);
            });

            //added slines
            var transitionsNode = xmlDoc.CreateElement("Transitions");
            processNode.AppendChild(transitionsNode);

            process.slines.ForEach((t) =>
            {
                var tNode = xmlDoc.CreateElement("Transition");
                tNode.SetAttribute("name", t.name);
                tNode.SetAttribute("id", t.id);
                tNode.SetAttribute("from", t.from);
                tNode.SetAttribute("to", t.to);

                var dNode = xmlDoc.CreateElement("Description");
                tNode.AppendChild(dNode);

                var dtext = xmlDoc.CreateTextNode(t.Description);
                tNode.AppendChild(dtext);

                var geographyNode = xmlDoc.CreateElement("Geography");
                tNode.AppendChild(geographyNode);

                var lineNode = xmlDoc.CreateElement("Line");
                geographyNode.AppendChild(lineNode);

                lineNode.SetAttribute("fromNode", t.source.nodeId.ToString());
                lineNode.SetAttribute("fromConnector", t.source.connectorIndex.ToString());
                lineNode.SetAttribute("toNode", t.dest.nodeId.ToString());
                lineNode.SetAttribute("toConnector", t.dest.connectorIndex.ToString());

                transitionsNode.AppendChild(tNode);
            });

            return xmlDoc;
        }