コード例 #1
0
        public static List <string> GetProfiles(Project project, ToolWindowType toolWindowType)
        {
            if (toolWindowType == ToolWindowType.PluginTraceViewer)
            {
                return(null);
            }

            SpklConfig spklConfig  = ConfigFile.GetSpklConfigFile(project);
            string     projectPath = ProjectWorker.GetProjectPath(project);

            switch (toolWindowType)
            {
            case ToolWindowType.PluginDeployer:
                return(GetConfigProfiles(projectPath, spklConfig.plugins));

            case ToolWindowType.SolutionPackager:
                return(GetConfigProfiles(projectPath, spklConfig.solutions));

            case ToolWindowType.WebResourceDeployer:
                return(GetConfigProfiles(projectPath, spklConfig.webresources));

            default:
                return(null);
            }
        }
コード例 #2
0
        public static void AddOrUpdateSpklMapping(Project project, string profile, SolutionPackageConfig solutionPackageConfig)
        {
            SpklConfig spklConfig = CoreMapping.GetSpklConfigFile(project);

            if (profile.StartsWith(ExtensionConstants.NoProfilesText))
            {
                spklConfig.solutions[0] = solutionPackageConfig;
            }
            else
            {
                SolutionPackageConfig existingSolutionPackageConfig = spklConfig.solutions.FirstOrDefault(s => s.profile == profile);
                if (existingSolutionPackageConfig != null && solutionPackageConfig != null)
                {
                    existingSolutionPackageConfig.increment_on_import = solutionPackageConfig.increment_on_import;
                    existingSolutionPackageConfig.map                 = solutionPackageConfig.map;
                    existingSolutionPackageConfig.packagetype         = solutionPackageConfig.packagetype;
                    existingSolutionPackageConfig.packagepath         = solutionPackageConfig.packagepath.Replace("/", string.Empty);
                    existingSolutionPackageConfig.solution_uniquename = solutionPackageConfig.solution_uniquename;
                    existingSolutionPackageConfig.solutionpath        = FormatSolutionName(solutionPackageConfig.solutionpath);
                }
            }

            string projectPath = CrmDeveloperExtensions2.Core.Vs.ProjectWorker.GetProjectPath(project);

            ConfigFile.UpdateSpklConfigFile(projectPath, spklConfig);
        }
コード例 #3
0
        private static void AddSpklMapping(SpklConfig spklConfig, Project project, string profile, WebResourceItem webResourceItem)
        {
            var spklConfigWebresourceFile = new SpklConfigWebresourceFile
            {
                uniquename  = webResourceItem.Name,
                file        = webResourceItem.BoundFile,
                description = webResourceItem.Description
            };

            if (WebResourceTypes.GetExtensionType(webResourceItem.BoundFile) == D365DeveloperExtensions.Core.Enums.FileExtensionType.Ts)
            {
                spklConfigWebresourceFile.file = TsHelper.GetJsForTsPath(webResourceItem.BoundFile, project);
                spklConfigWebresourceFile.ts   = webResourceItem.BoundFile;
            }

            if (profile.StartsWith(ExtensionConstants.NoProfilesText))
            {
                spklConfig.webresources[0].files.Add(spklConfigWebresourceFile);
            }
            else
            {
                spklConfig.webresources.FirstOrDefault(w => w.profile == profile)?.files.Add(spklConfigWebresourceFile);
            }

            var projectPath = D365DeveloperExtensions.Core.Vs.ProjectWorker.GetProjectPath(project);

            ConfigFile.UpdateSpklConfigFile(projectPath, spklConfig);
        }
コード例 #4
0
        private static void UpdateSpklMapping(SpklConfig spklConfig, Project project, string profile, WebResourceItem webResourceItem)
        {
            var spklConfigWebresourceFiles = GetSpklConfigWebresourceFiles(profile, spklConfig);

            if (spklConfigWebresourceFiles == null)
            {
                return;
            }

            if (!string.IsNullOrEmpty(webResourceItem.BoundFile))
            {
                var isTs = WebResourceTypes.GetExtensionType(webResourceItem.BoundFile) == D365DeveloperExtensions.Core.Enums.FileExtensionType.Ts;
                foreach (var spklConfigWebresourceFile in
                         spklConfigWebresourceFiles.Where(w => w.uniquename == webResourceItem.Name))
                {
                    spklConfigWebresourceFile.file        = webResourceItem.BoundFile;
                    spklConfigWebresourceFile.description = webResourceItem.Description;
                    spklConfigWebresourceFile.ts          = null;

                    if (!isTs)
                    {
                        continue;
                    }

                    spklConfigWebresourceFile.file = TsHelper.GetJsForTsPath(webResourceItem.BoundFile, project);
                    spklConfigWebresourceFile.ts   = webResourceItem.BoundFile;
                }
            }
            else
            {
                spklConfigWebresourceFiles.RemoveAll(w => w.uniquename == webResourceItem.Name);
            }

            if (profile.StartsWith(ExtensionConstants.NoProfilesText))
            {
                spklConfig.webresources[0].files = spklConfigWebresourceFiles;
            }
            else
            {
                var webresourceDeployConfig = spklConfig.webresources.FirstOrDefault(w => w.profile == profile);
                if (webresourceDeployConfig != null)
                {
                    webresourceDeployConfig.files = spklConfigWebresourceFiles;
                }
            }

            var projectPath = D365DeveloperExtensions.Core.Vs.ProjectWorker.GetProjectPath(project);

            ConfigFile.UpdateSpklConfigFile(projectPath, spklConfig);
        }
コード例 #5
0
        public static PluginDeployConfig GetSpklPluginConfig(Project project, string profile)
        {
            SpklConfig spklConfig = D365DeveloperExtensions.Core.Config.Mapping.GetSpklConfigFile(project);

            List <PluginDeployConfig> spklPluginDeployConfigs = spklConfig.plugins;

            if (spklPluginDeployConfigs == null)
            {
                return(null);
            }

            return(profile.StartsWith(ExtensionConstants.NoProfilesText)
                ? spklPluginDeployConfigs[0]
                : spklPluginDeployConfigs.FirstOrDefault(p => p.profile == profile));
        }
コード例 #6
0
        public static SolutionPackageConfig GetSolutionPackageConfig(Project project, string profile, ObservableCollection <CrmSolution> crmSolutions)
        {
            SpklConfig spklConfig = CoreMapping.GetSpklConfigFile(project);

            List <SolutionPackageConfig> spklSolutionPackageConfigs = spklConfig.solutions;

            if (spklSolutionPackageConfigs == null)
            {
                return(null);
            }

            SolutionPackageConfig solutionPackageConfig = profile.StartsWith(ExtensionConstants.NoProfilesText)
                ? spklSolutionPackageConfigs[0]
                : spklSolutionPackageConfigs.FirstOrDefault(p => p.profile == profile);

            return(solutionPackageConfig);
        }
コード例 #7
0
        public static void RemoveSpklMappings(SpklConfig spklConfig, Project project, string profile, List <SpklConfigWebresourceFile> crmDexExConfigWebResources)
        {
            string projectPath = CrmDeveloperExtensions2.Core.Vs.ProjectWorker.GetProjectPath(project);

            if (profile.StartsWith(ExtensionConstants.NoProfilesText))
            {
                spklConfig.webresources[0].files
                .RemoveAll(w => crmDexExConfigWebResources.Any(m => m.uniquename == w.uniquename));
            }
            else
            {
                spklConfig.webresources.FirstOrDefault(w => w.profile == profile)?.files
                .RemoveAll(w => crmDexExConfigWebResources.Any(m => m.uniquename == w.uniquename));
            }

            ConfigFile.UpdateSpklConfigFile(projectPath, spklConfig);
        }
コード例 #8
0
        public static void AddOrUpdateSpklMapping(Project project, string profile, WebResourceItem webResourceItem)
        {
            SpklConfig spklConfig = CrmDeveloperExtensions2.Core.Config.Mapping.GetSpklConfigFile(project);

            List <SpklConfigWebresourceFile> spklConfigWebresourceFiles = GetSpklConfigWebresourceFiles(profile, spklConfig) ??
                                                                          new List <SpklConfigWebresourceFile>();

            SpklConfigWebresourceFile spklConfigWebresourceFile =
                spklConfigWebresourceFiles.FirstOrDefault(w => w.uniquename == webResourceItem.Name);

            if (spklConfigWebresourceFile == null)
            {
                AddSpklMapping(spklConfig, project, profile, webResourceItem);
            }
            else
            {
                UpdateSpklMapping(spklConfig, project, profile, webResourceItem);
            }
        }
コード例 #9
0
        private static void UpdateSpklMapping(SpklConfig spklConfig, Project project, string profile, WebResourceItem webResourceItem)
        {
            List <SpklConfigWebresourceFile> spklConfigWebresourceFiles = GetSpklConfigWebresourceFiles(profile, spklConfig);

            if (spklConfigWebresourceFiles == null)
            {
                return;
            }

            if (!string.IsNullOrEmpty(webResourceItem.BoundFile))
            {
                foreach (SpklConfigWebresourceFile spklConfigWebresourceFile in
                         spklConfigWebresourceFiles.Where(w => w.uniquename == webResourceItem.Name))
                {
                    spklConfigWebresourceFile.file        = webResourceItem.BoundFile;
                    spklConfigWebresourceFile.description = webResourceItem.Description;
                }
            }
            else
            {
                spklConfigWebresourceFiles.RemoveAll(w => w.uniquename == webResourceItem.Name);
            }

            if (profile.StartsWith(ExtensionConstants.NoProfilesText))
            {
                spklConfig.webresources[0].files = spklConfigWebresourceFiles;
            }
            else
            {
                WebresourceDeployConfig webresourceDeployConfig = spklConfig.webresources.FirstOrDefault(w => w.profile == profile);
                if (webresourceDeployConfig != null)
                {
                    webresourceDeployConfig.files = spklConfigWebresourceFiles;
                }
            }

            string projectPath = CrmDeveloperExtensions2.Core.Vs.ProjectWorker.GetProjectPath(project);

            ConfigFile.UpdateSpklConfigFile(projectPath, spklConfig);
        }
コード例 #10
0
        private static void AddSpklMapping(SpklConfig spklConfig, Project project, string profile, WebResourceItem webResourceItem)
        {
            SpklConfigWebresourceFile spklConfigWebresourceFile = new SpklConfigWebresourceFile
            {
                uniquename  = webResourceItem.Name,
                file        = webResourceItem.BoundFile,
                description = webResourceItem.Description
            };

            if (profile.StartsWith(ExtensionConstants.NoProfilesText))
            {
                spklConfig.webresources[0].files.Add(spklConfigWebresourceFile);
            }
            else
            {
                spklConfig.webresources.FirstOrDefault(w => w.profile == profile)?.files.Add(spklConfigWebresourceFile);
            }

            string projectPath = CrmDeveloperExtensions2.Core.Vs.ProjectWorker.GetProjectPath(project);

            ConfigFile.UpdateSpklConfigFile(projectPath, spklConfig);
        }
コード例 #11
0
        private static SpklConfig RecreateConfig(Project project, string configPath)
        {
            try
            {
                bool fileExists = FileSystem.DoesFileExist(new[] { configPath }, true);
                if (fileExists)
                {
                    FileSystem.RenameFile(configPath);
                }

                CreateSpklConfigFile(project);

                SpklConfig recreateConfig = GetSpklConfigFile(project, true);

                MessageBox.Show(Resource.MessageBox_RecreatedConfig);

                return(recreateConfig);
            }
            catch (Exception ex)
            {
                ExceptionHandler.LogException(Logger, Resource.ErrorMessage_RecreateConfigFile, ex);
                throw;
            }
        }
コード例 #12
0
        private static List <SpklConfigWebresourceFile> GetSpklConfigWebresourceFiles(string profile, SpklConfig spklConfig)
        {
            List <SpklConfigWebresourceFile> spklConfigWebresourceFiles = profile.StartsWith(ExtensionConstants.NoProfilesText)
                ? spklConfig.webresources[0].files
                : spklConfig.webresources.FirstOrDefault(w => w.profile == profile)?.files;

            return(spklConfigWebresourceFiles);
        }
コード例 #13
0
        public static ObservableCollection <WebResourceItem> HandleSpklMappings(Project project, string profile, ObservableCollection <WebResourceItem> webResourceItems)
        {
            SpklConfig spklConfig = CrmDeveloperExtensions2.Core.Config.Mapping.GetSpklConfigFile(project);

            List <SpklConfigWebresourceFile> mappingsToRemove = new List <SpklConfigWebresourceFile>();

            var mappedWebResources = GetSpklConfigWebresourceFiles(profile, spklConfig);

            if (mappedWebResources == null)
            {
                return(webResourceItems);
            }

            //Remove mappings where CRM web resource was deleted
            foreach (SpklConfigWebresourceFile spklConfigWebresourceFile in mappedWebResources)
            {
                if (webResourceItems.Count(w => w.Name == spklConfigWebresourceFile.uniquename) != 0)
                {
                    continue;
                }

                mappingsToRemove.Add(spklConfigWebresourceFile);
            }

            mappedWebResources = mappedWebResources.Except(mappingsToRemove).ToList();

            //Add bound file & description from mapping
            foreach (SpklConfigWebresourceFile spklConfigWebresourceFile in mappedWebResources)
            {
                if (webResourceItems.Count(w => w.Name == spklConfigWebresourceFile.uniquename) <= 0)
                {
                    continue;
                }

                List <WebResourceItem> matches = webResourceItems
                                                 .Where(w => w.Name == spklConfigWebresourceFile.uniquename).ToList();
                foreach (WebResourceItem match in matches)
                {
                    match.Description = string.IsNullOrEmpty(spklConfigWebresourceFile.description)
                        ? null
                        : spklConfigWebresourceFile.description;
                    match.BoundFile = spklConfigWebresourceFile.file;
                }
            }

            //Remove mappings where project file was deleted
            foreach (SpklConfigWebresourceFile spklConfigWebresourceFile in mappedWebResources)
            {
                string mappedFilePath = FileSystem.BoundFileToLocalPath(spklConfigWebresourceFile.file, project.FullName);
                if (File.Exists(mappedFilePath))
                {
                    continue;
                }

                mappingsToRemove.Add(spklConfigWebresourceFile);
                webResourceItems.Where(w => w.BoundFile == spklConfigWebresourceFile.file).ToList().ForEach(w => w.BoundFile = null);
            }

            if (mappingsToRemove.Count > 0)
            {
                RemoveSpklMappings(spklConfig, project, profile, mappingsToRemove);
            }

            return(webResourceItems);
        }
コード例 #14
0
        /// <summary>Updates an configuration file.</summary>
        /// <param name="projectPath">The project path.</param>
        /// <param name="spklConfig">The configuration file.</param>
        public static void UpdateSpklConfigFile(string projectPath, SpklConfig spklConfig)
        {
            var text = JsonConvert.SerializeObject(spklConfig, Formatting.Indented);

            WriteSpklConfigFile(projectPath, text);
        }
コード例 #15
0
        public static ObservableCollection <WebResourceItem> HandleSpklMappings(Project project, string profile, ObservableCollection <WebResourceItem> webResourceItems)
        {
            SpklConfig spklConfig = D365DeveloperExtensions.Core.Config.Mapping.GetSpklConfigFile(project);

            var mappedWebResources = GetSpklConfigWebresourceFiles(profile, spklConfig);

            if (mappedWebResources == null)
            {
                return(webResourceItems);
            }

            //Lock mappings where CRM web resource was deleted
            foreach (SpklConfigWebresourceFile spklConfigWebresourceFile in mappedWebResources)
            {
                if (webResourceItems.Count(w => w.Name == spklConfigWebresourceFile.uniquename) == 0)
                {
                    webResourceItems.Where(w => w.Name == spklConfigWebresourceFile.uniquename).ToList()
                    .ForEach(ww => ww.Locked = true);
                }
            }

            //Add bound file & description from mapping
            foreach (SpklConfigWebresourceFile spklConfigWebresourceFile in mappedWebResources)
            {
                if (webResourceItems.Count(w => w.Name == spklConfigWebresourceFile.uniquename) <= 0)
                {
                    continue;
                }

                List <WebResourceItem> matches = webResourceItems.Where(w => w.Name == spklConfigWebresourceFile.uniquename).ToList();
                foreach (WebResourceItem match in matches)
                {
                    match.Description = string.IsNullOrEmpty(spklConfigWebresourceFile.description)
                        ? null
                        : spklConfigWebresourceFile.description;
                    match.BoundFile = string.IsNullOrEmpty(spklConfigWebresourceFile.ts)
                        ? spklConfigWebresourceFile.file
                        : spklConfigWebresourceFile.ts;
                }
            }

            //Lock mappings where project file was deleted
            foreach (SpklConfigWebresourceFile spklConfigWebresourceFile in mappedWebResources)
            {
                string mappedFilePath = FileSystem.BoundFileToLocalPath(spklConfigWebresourceFile.file, project.FullName);
                string relativePath   = ProjectItemWorker.GetRelativePathFromPath(ProjectWorker.GetProjectPath(project), mappedFilePath);
                bool   inProject      = ProjectWorker.IsFileInProjectFile(project.FullName, relativePath);
                if (File.Exists(mappedFilePath) && inProject)
                {
                    continue;
                }

                if (!string.IsNullOrEmpty(spklConfigWebresourceFile.ts))
                {
                    mappedFilePath = FileSystem.BoundFileToLocalPath(spklConfigWebresourceFile.ts, project.FullName);
                }
                if (File.Exists(mappedFilePath) && inProject)
                {
                    continue;
                }

                webResourceItems.Where(w => w.BoundFile == spklConfigWebresourceFile.file).ToList().ForEach(w => w.Locked = true);
            }

            return(webResourceItems);
        }