예제 #1
0
        protected override IList <IParameter> ExtractParameters()
        {
            var parameters = new List <IParameter>();

            var projectConnectionParameterXmlNodes = FileXmlDocument.SelectNodes("/SSIS:Project/SSIS:DeploymentInfo/SSIS:ProjectConnectionParameters/SSIS:Parameter",
                                                                                 NamespaceManager);

            if (projectConnectionParameterXmlNodes != null)
            {
                foreach (XmlNode projectConnectionParameterXmlNode in projectConnectionParameterXmlNodes)
                {
                    parameters.Add(new ProjectParameter("Project", projectConnectionParameterXmlNode));
                }
            }

            var packageParameterXmlNodes = FileXmlDocument.SelectNodes("/SSIS:Project/SSIS:DeploymentInfo/SSIS:PackageInfo/SSIS:PackageMetaData/SSIS:Parameters/SSIS:Parameter",
                                                                       NamespaceManager);

            if (packageParameterXmlNodes != null)
            {
                foreach (XmlNode packageParameterXmlNode in packageParameterXmlNodes)
                {
                    var packageName = packageParameterXmlNode.SelectSingleNode("../../SSIS:Properties/SSIS:Property[@SSIS:Name = \"Name\"]", NamespaceManager)?.InnerText;

                    parameters.Add(new ProjectParameter(packageName, packageParameterXmlNode));
                }
            }

            return(parameters);
        }
예제 #2
0
 private string[] ExtractConnectionManagerNames()
 {
     return(FileXmlDocument.SelectNodes("/SSIS:Project/SSIS:ConnectionManagers/SSIS:ConnectionManager", NamespaceManager)?
            .OfType <XmlElement>().Select(e => e.Attributes["SSIS:Name"]?.Value)
            .Where(v => !string.IsNullOrWhiteSpace(v))
            .ToArray());
 }
예제 #3
0
        protected override IList <IParameter> ExtractParameters()
        {
            var parameterNodes = FileXmlDocument.SelectNodes("/SSIS:Parameters/SSIS:Parameter", NamespaceManager);

            if (parameterNodes == null || parameterNodes.Count == 0)
            {
                return(null);
            }

            var parameters = new List <IParameter>();

            foreach (XmlNode parameterNode in parameterNodes)
            {
                parameters.Add(new ProjectParameter("Project", parameterNode));
            }

            return(parameters);
        }
예제 #4
0
        protected override void PostInitialize()
        {
            var manifestXml = FileXmlDocument.DocumentElement;

            var projectProtectionLevelAttribute = manifestXml?.Attributes["SSIS:ProtectionLevel"];
            var protectionLevelString           = projectProtectionLevelAttribute?.Value;

            if (string.IsNullOrWhiteSpace(protectionLevelString))
            {
                throw new InvalidXmlException("Invalid project file. SSIS:Project node must contain a SSIS:ProtectionLevel attribute.", manifestXml);
            }

            ProtectionLevel protectionLevel;

            if (!Enum.TryParse(protectionLevelString, out protectionLevel))
            {
                throw new InvalidXmlException($"Invalid Protection Level {protectionLevelString}.", manifestXml);
            }

            if (protectionLevel == ProtectionLevel.EncryptAllWithUserKey || protectionLevel == ProtectionLevel.EncryptSensitiveWithUserKey)
            {
                throw new InvalidProtectionLevelException(protectionLevel);
            }

            _protectionLevelNodes.Add(projectProtectionLevelAttribute);

            PackageNames           = ExtractPackageNames();
            ConnectionManagerNames = ExtractConnectionManagerNames();

            foreach (XmlElement packageProtectionLevelNode in FileXmlDocument.SelectNodes("//SSIS:Property[@SSIS:Name = \"ProtectionLevel\"]", NamespaceManager))
            {
                packageProtectionLevelNode.InnerText = protectionLevel.ToString("D");
                _protectionLevelNodes.Add(packageProtectionLevelNode);
            }

            var versionMajorNode = FileXmlDocument.SelectSingleNode("/SSIS:Project/SSIS:Properties/SSIS:Property[@SSIS:Name = \"VersionMajor\"]", NamespaceManager);

            if (versionMajorNode == null)
            {
                throw new InvalidXmlException("Version Major Xml Node was not found", FileXmlDocument);
            }

            var versionMajorString = versionMajorNode.InnerText;

            int test;

            if (!int.TryParse(versionMajorString, out test))
            {
                throw new InvalidXmlException($"Invalid value of Version Major Xml Node: {versionMajorString}.", FileXmlDocument);
            }

            var versionMajorNodes = FileXmlDocument.SelectNodes("//*[@SSIS:Name = \"VersionMajor\"]", NamespaceManager);

            if (versionMajorNodes != null)
            {
                foreach (XmlElement element in versionMajorNodes)
                {
                    if (element != null)
                    {
                        element.InnerText = versionMajorString;
                        _versionMajorNodes.Add(element);
                    }
                }
            }

            var versionMinorNode = FileXmlDocument.SelectSingleNode("/SSIS:Project/SSIS:Properties/SSIS:Property[@SSIS:Name = \"VersionMinor\"]", NamespaceManager);

            if (versionMinorNode == null)
            {
                throw new InvalidXmlException("Version Minor Xml Node was not found", FileXmlDocument);
            }

            var versionMinorString = versionMinorNode.InnerText;

            if (!int.TryParse(versionMinorString, out test))
            {
                throw new InvalidXmlException($"Invalid value of Version Minor Xml Node: {versionMinorString}.", FileXmlDocument);
            }

            var versionMinorNodes = FileXmlDocument.SelectNodes("//*[@SSIS:Name = \"VersionMinor\"]", NamespaceManager);

            if (versionMinorNodes != null)
            {
                foreach (XmlElement element in versionMinorNodes)
                {
                    if (element != null)
                    {
                        element.InnerText = versionMinorString;
                        _versionMinorNodes.Add(element);
                    }
                }
            }

            var versionBuildNode = FileXmlDocument.SelectSingleNode("/SSIS:Project/SSIS:Properties/SSIS:Property[@SSIS:Name = \"VersionBuild\"]", NamespaceManager);

            if (versionBuildNode == null)
            {
                throw new InvalidXmlException("Version Build Xml Node was not found", FileXmlDocument);
            }

            var versionBuildString = versionBuildNode.InnerText;

            if (!int.TryParse(versionBuildString, out test))
            {
                throw new InvalidXmlException($"Invalid value of Version Build Xml Node: {versionBuildString}.", FileXmlDocument);
            }

            var versionBuildNodes = FileXmlDocument.SelectNodes("//*[@SSIS:Name = \"VersionBuild\"]", NamespaceManager);

            if (versionBuildNodes != null)
            {
                foreach (XmlElement element in versionBuildNodes)
                {
                    if (element != null)
                    {
                        element.InnerText = versionBuildString;
                        _versionBuildNodes.Add(element);
                    }
                }
            }

            var versionCommentsNode = FileXmlDocument.SelectSingleNode("/SSIS:Project/SSIS:Properties/SSIS:Property[@SSIS:Name = \"VersionComments\"]", NamespaceManager);

            if (versionCommentsNode == null)
            {
                throw new InvalidXmlException("Version Comments Xml Node was not found", FileXmlDocument);
            }

            var versionCommentsString = versionCommentsNode.InnerText;

            var versionCommentsNodes = FileXmlDocument.SelectNodes("//*[@SSIS:Name = \"VersionComments\"]", NamespaceManager);

            if (versionCommentsNodes != null)
            {
                foreach (XmlElement element in versionCommentsNodes)
                {
                    if (element != null)
                    {
                        element.InnerText = versionCommentsString;
                        _versionCommentsNodes.Add(element);
                    }
                }
            }

            _descriptionNode = FileXmlDocument.SelectSingleNode("/SSIS:Project/SSIS:Properties/SSIS:Property[@SSIS:Name = \"Description\"]", NamespaceManager) as XmlElement;
            if (_descriptionNode == null)
            {
                throw new InvalidXmlException("Description Xml Node was not found", FileXmlDocument);
            }
        }