private async Task CheckingGlobalOptionSetDuplicates(ConnectionData connectionData, CommonConfiguration commonConfig) { var service = await ConnectAndWriteToOutputAsync(connectionData); if (service == null) { return; } StringBuilder content = new StringBuilder(); content.AppendLine(Properties.OutputStrings.ConnectingToCRM); content.AppendLine(connectionData.GetConnectionDescription()); content.AppendFormat(Properties.OutputStrings.CurrentServiceEndpointFormat1, service.CurrentServiceEndpoint).AppendLine(); var entityMetadataSource = new SolutionComponentMetadataSource(service); var descriptor = new SolutionComponentDescriptor(service); descriptor.WithUrls = true; descriptor.WithManagedInfo = true; descriptor.WithSolutionsInfo = true; var dependencyRepository = new DependencyRepository(service); var descriptorHandler = new DependencyDescriptionHandler(descriptor); RetrieveAllOptionSetsRequest request = new RetrieveAllOptionSetsRequest(); RetrieveAllOptionSetsResponse response = (RetrieveAllOptionSetsResponse)service.Execute(request); bool hasInfo = false; foreach (var optionSet in response.OptionSetMetadata.OfType <OptionSetMetadata>().OrderBy(e => e.Name)) { var coll = await dependencyRepository.GetDependentComponentsAsync((int)ComponentType.OptionSet, optionSet.MetadataId.Value); if (coll.Any()) { var filter = coll .Where(c => c.DependentComponentType.Value == (int)ComponentType.Attribute) .Select(c => new { Dependency = c, Attribute = entityMetadataSource.GetAttributeMetadata(c.DependentComponentObjectId.Value) }) .Where(c => c.Attribute != null) .GroupBy(c => c.Attribute.EntityLogicalName) .Where(gr => gr.Count() > 1) .SelectMany(gr => gr.Select(c => c.Dependency)) .ToList() ; if (filter.Any()) { var desc = await descriptorHandler.GetDescriptionDependentAsync(filter); if (!string.IsNullOrEmpty(desc)) { if (content.Length > 0) { content .AppendLine(new string('-', 150)) .AppendLine(); } hasInfo = true; content.AppendFormat("Global OptionSet Name {0} IsCustomOptionSet {1} IsManaged {2}", optionSet.Name, optionSet.IsCustomOptionSet, optionSet.IsManaged).AppendLine(); content.AppendLine(desc); } } } } if (!hasInfo) { content.AppendLine("No duplicates were found."); } commonConfig.CheckFolderForExportExists(this._iWriteToOutput); string fileName = string.Format("{0}.Checking Global OptionSet Duplicates on Entity at {1}.txt", connectionData.Name, DateTime.Now.ToString("yyyy.MM.dd HH-mm-ss")); string filePath = Path.Combine(commonConfig.FolderForExport, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllText(filePath, content.ToString(), new UTF8Encoding(false)); this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CreatedFileWithCheckingGlobalOptionSetDuplicatesOnEntityFormat1, filePath); this._iWriteToOutput.PerformAction(service.ConnectionData, filePath); }
private async Task ShowingWebResourcesDependentComponents(ConnectionData connectionData, CommonConfiguration commonConfig, List <SelectedFile> selectedFiles) { var service = await ConnectAndWriteToOutputAsync(connectionData); if (service == null) { return; } StringBuilder content = new StringBuilder(); content.AppendLine(Properties.OutputStrings.ConnectingToCRM); content.AppendLine(connectionData.GetConnectionDescription()); content.AppendFormat(Properties.OutputStrings.CurrentServiceEndpointFormat1, service.CurrentServiceEndpoint).AppendLine(); var descriptor = new SolutionComponentDescriptor(service); descriptor.WithUrls = true; descriptor.WithManagedInfo = true; descriptor.WithSolutionsInfo = true; var descriptorHandler = new DependencyDescriptionHandler(descriptor); var dependencyRepository = new DependencyRepository(service); bool isconnectionDataDirty = false; List <string> listNotExistsOnDisk = new List <string>(); List <string> listNotFoundedInCRMNoLink = new List <string>(); List <string> listLastLinkEqualByContent = new List <string>(); List <SolutionComponent> webResourceNames = new List <SolutionComponent>(); Dictionary <SolutionComponent, string> webResourceDescriptions = new Dictionary <SolutionComponent, string>(); WebResourceRepository repositoryWebResource = new WebResourceRepository(service); FormatTextTableHandler tableWithoutDependenComponents = new FormatTextTableHandler(); tableWithoutDependenComponents.SetHeader("FilePath", "Web Resource Name", "Web Resource Type"); var groups = selectedFiles.GroupBy(sel => sel.Extension); foreach (var gr in groups) { var names = gr.Select(sel => sel.FriendlyFilePath).ToArray(); var dict = repositoryWebResource.FindMultiple(gr.Key, names); foreach (var selectedFile in gr) { if (File.Exists(selectedFile.FilePath)) { string name = selectedFile.FriendlyFilePath.ToLower(); var webresource = WebResourceRepository.FindWebResourceInDictionary(dict, name, gr.Key); if (webresource == null) { Guid?webId = connectionData.GetLastLinkForFile(selectedFile.FriendlyFilePath); if (webId.HasValue) { webresource = await repositoryWebResource.GetByIdAsync(webId.Value); if (webresource != null) { listLastLinkEqualByContent.Add(selectedFile.FriendlyFilePath); } } } if (webresource != null) { // Запоминается файл isconnectionDataDirty = true; connectionData.AddMapping(webresource.Id, selectedFile.FriendlyFilePath); var coll = await dependencyRepository.GetDependentComponentsAsync((int)ComponentType.WebResource, webresource.Id); var desc = await descriptorHandler.GetDescriptionDependentAsync(coll); if (!string.IsNullOrEmpty(desc)) { var component = new SolutionComponent() { ComponentType = new OptionSetValue((int)ComponentType.WebResource), ObjectId = webresource.Id, }; webResourceNames.Add(component); webResourceDescriptions.Add(component, desc); } else { tableWithoutDependenComponents.AddLine(selectedFile.FriendlyFilePath, webresource.Name, "'" + webresource.FormattedValues[WebResource.Schema.Attributes.webresourcetype] + "'"); } } else { connectionData.RemoveMapping(selectedFile.FriendlyFilePath); listNotFoundedInCRMNoLink.Add(selectedFile.FriendlyFilePath); } } else { listNotExistsOnDisk.Add(selectedFile.FilePath); } } } if (isconnectionDataDirty) { //Сохранение настроек после публикации connectionData.Save(); } FindsController.WriteToContentList(listNotFoundedInCRMNoLink, content, "File NOT FOUNDED in CRM: {0}"); FindsController.WriteToContentList(listLastLinkEqualByContent, content, "Files NOT FOUNDED in CRM, but has Last Link: {0}"); FindsController.WriteToContentList(listNotExistsOnDisk, content, Properties.OutputStrings.FileNotExistsFormat1); FindsController.WriteToContentList(tableWithoutDependenComponents.GetFormatedLines(true), content, "Files without dependent components: {0}"); FindsController.WriteToContentDictionary(descriptor, content, webResourceNames, webResourceDescriptions, "WebResource dependent components: {0}"); commonConfig.CheckFolderForExportExists(this._iWriteToOutput); string fileName = string.Format("{0}.WebResourceDependent at {1}.txt", connectionData.Name, DateTime.Now.ToString("yyyy.MM.dd HH-mm-ss")); string filePath = Path.Combine(commonConfig.FolderForExport, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllText(filePath, content.ToString(), new UTF8Encoding(false)); this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CreatedFileWithWebResourcesDependentComponentsFormat1, filePath); this._iWriteToOutput.PerformAction(service.ConnectionData, filePath); }