private string CreateFile(ConnectionData connectionData, string folder, string solutionName, DateTime?createdOn, string fieldTitle, string xmlContent) { string fileName = EntityFileNameFormatter.GetImportJobFileName(connectionData.Name, solutionName, createdOn, fieldTitle, "xml"); string filePath = Path.Combine(folder, FileOperations.RemoveWrongSymbols(fileName)); string name = string.Format("{0} at {1:yyyy.MM.dd HH-mm-ss}", solutionName, createdOn); if (!string.IsNullOrEmpty(xmlContent)) { try { xmlContent = ContentCoparerHelper.FormatXmlByConfiguration(xmlContent, _commonConfig, _xmlOptions); File.WriteAllText(filePath, xmlContent, new UTF8Encoding(false)); this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.EntityFieldExportedToFormat5, connectionData.Name, ImportJob.Schema.EntityLogicalName, name, fieldTitle, filePath); } catch (Exception ex) { this._iWriteToOutput.WriteErrorToOutput(connectionData, ex); } } else { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.EntityFieldIsEmptyFormat4, connectionData.Name, ImportJob.Schema.EntityLogicalName, name, fieldTitle); this._iWriteToOutput.ActivateOutputWindow(connectionData); } return(filePath); }
private Translation GetFieldTranslations() { Translation result = null; try { var request = new ExportFieldTranslationRequest(); var response = (ExportFieldTranslationResponse)_service.Execute(request); var traslationZipFile = response.ExportTranslationFile; var traslationFileBytes = FileOperations.UnzipCrmTranslations(traslationZipFile, "/CrmFieldTranslations.xml"); string xml = Encoding.UTF8.GetString(traslationFileBytes); xml = ContentCoparerHelper.RemoveDiacritics(xml); result = new Translation(); XElement doc = XElement.Parse(xml); FillTranslation(result, doc); } catch (Exception ex) { Helpers.DTEHelper.WriteExceptionToOutput(_service.ConnectionData, ex); } return(result); }
private async Task PerformUpdateEntityField(string folder, Organization organization, string fieldName, string fieldTitle) { if (!this.IsControlsEnabled) { return; } var service = await GetService(); ToggleControls(service.ConnectionData, false, Properties.WindowStatusStrings.UpdatingFieldFormat2, service.ConnectionData.Name, fieldName); try { string xmlContent = organization.GetAttributeValue <string>(fieldName); string filePath = await CreateFileAsync(folder, organization.Name, fieldTitle + " BackUp", xmlContent); var newText = string.Empty; bool?dialogResult = false; this.Dispatcher.Invoke(() => { var form = new WindowTextField("Enter " + fieldTitle, fieldTitle, xmlContent); dialogResult = form.ShowDialog(); newText = form.FieldText; }); if (dialogResult.GetValueOrDefault() == false) { ToggleControls(service.ConnectionData, true, Properties.WindowStatusStrings.UpdatingFieldFailedFormat2, service.ConnectionData.Name, fieldName); return; } newText = ContentCoparerHelper.RemoveAllCustomXmlAttributesAndNamespaces(newText); if (ContentCoparerHelper.TryParseXml(newText, out var doc)) { newText = doc.ToString(SaveOptions.DisableFormatting); } var updateEntity = new Organization { Id = organization.Id }; updateEntity.Attributes[fieldName] = newText; await service.UpdateAsync(updateEntity); organization.Attributes[fieldName] = newText; ToggleControls(service.ConnectionData, true, Properties.WindowStatusStrings.UpdatingFieldCompletedFormat2, service.ConnectionData.Name, fieldName); } catch (Exception ex) { _iWriteToOutput.WriteErrorToOutput(service.ConnectionData, ex); ToggleControls(service.ConnectionData, true, Properties.WindowStatusStrings.UpdatingFieldFailedFormat2, service.ConnectionData.Name, fieldName); } }
private string CreateFile(ConnectionData connectionData, string name, Guid id, string fieldTitle, string xmlContent) { string fileName = EntityFileNameFormatter.GetReportFileName(connectionData.Name, name, id, fieldTitle, "xml"); string filePath = Path.Combine(_commonConfig.FolderForExport, FileOperations.RemoveWrongSymbols(fileName)); if (!string.IsNullOrEmpty(xmlContent)) { try { if (ContentCoparerHelper.TryParseXml(xmlContent, out var doc)) { xmlContent = doc.ToString(); } File.WriteAllText(filePath, xmlContent, new UTF8Encoding(false)); this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.EntityFieldExportedToFormat5, connectionData.Name, Report.Schema.EntityLogicalName, name, fieldTitle, filePath); } catch (Exception ex) { this._iWriteToOutput.WriteErrorToOutput(connectionData, ex); } } else { filePath = string.Empty; this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.EntityFieldIsEmptyFormat4, connectionData.Name, Report.Schema.EntityLogicalName, name, fieldTitle); } return(filePath); }
protected override void CommandAction(DTEHelper helper) { EnvDTE.Document document = helper.GetOpenedDocumentInCodeWindow(FileOperations.SupportsXmlType); if (document != null) { ContentCoparerHelper.RemoveIntellisenseContextEntityNameInDocument(document); } }
protected override void CommandAction(DTEHelper helper, Tuple <string, string[]> schemas) { EnvDTE.Document document = helper.GetOpenedDocumentInCodeWindow(FileOperations.SupportsXmlType); if (document != null) { ContentCoparerHelper.ReplaceXsdSchemaInDocument(document, schemas.Item2); } }
private async Task PerformShowingDifferenceSingleXmlAsync(LinkedEntities <SiteMap> linked, bool showAllways, string fieldName, string fieldTitle) { if (!this.IsControlsEnabled) { return; } ToggleControls(false, Properties.WindowStatusStrings.ShowingDifferenceXmlForFieldFormat1, fieldName); try { var service1 = await GetService1(); var service2 = await GetService2(); if (service1 != null && service2 != null) { var repository1 = new SitemapRepository(service1); var repository2 = new SitemapRepository(service2); var sitemap1 = await repository1.GetByIdAsync(linked.Entity1.Id, new ColumnSet(true)); var sitemap2 = await repository2.GetByIdAsync(linked.Entity2.Id, new ColumnSet(true)); string xml1 = sitemap1.GetAttributeValue <string>(fieldName); string xml2 = sitemap2.GetAttributeValue <string>(fieldName); if (showAllways || !ContentCoparerHelper.CompareXML(xml1, xml2).IsEqual) { string filePath1 = await CreateFileAsync(service1.ConnectionData, sitemap1.SiteMapName, sitemap1.SiteMapNameUnique, sitemap1.Id, fieldTitle, xml1); string filePath2 = await CreateFileAsync(service2.ConnectionData, sitemap2.SiteMapName, sitemap2.SiteMapNameUnique, sitemap2.Id, fieldTitle, xml2); if (File.Exists(filePath1) && File.Exists(filePath2)) { this._iWriteToOutput.ProcessStartProgramComparer(filePath1, filePath2, Path.GetFileName(filePath1), Path.GetFileName(filePath2)); } else { this._iWriteToOutput.PerformAction(service1.ConnectionData, filePath1); this._iWriteToOutput.PerformAction(service2.ConnectionData, filePath2); } } } ToggleControls(true, Properties.WindowStatusStrings.ShowingDifferenceXmlForFieldCompletedFormat1, fieldName); } catch (Exception ex) { _iWriteToOutput.WriteErrorToOutput(null, ex); ToggleControls(true, Properties.WindowStatusStrings.ShowingDifferenceXmlForFieldFailedFormat1, fieldName); } }
private async Task ExecuteCreatingApplicationRibbon(Func <Task <IOrganizationServiceExtented> > getService) { if (!this.IsControlsEnabled) { return; } if (string.IsNullOrEmpty(_commonConfig.FolderForExport)) { _iWriteToOutput.WriteToOutput(null, Properties.OutputStrings.FolderForExportIsEmpty); _commonConfig.FolderForExport = FileOperations.GetDefaultFolderForExportFilePath(); } else if (!Directory.Exists(_commonConfig.FolderForExport)) { _iWriteToOutput.WriteToOutput(null, Properties.OutputStrings.FolderForExportDoesNotExistsFormat1, _commonConfig.FolderForExport); _commonConfig.FolderForExport = FileOperations.GetDefaultFolderForExportFilePath(); } var service = await getService(); this._iWriteToOutput.WriteToOutputStartOperation(service.ConnectionData, Properties.OperationNames.ExportingApplicationRibbonFormat1, service.ConnectionData.Name); ToggleControls(false, Properties.WindowStatusStrings.ExportingApplicationRibbon); try { var repository = new RibbonCustomizationRepository(service); string ribbonXml = await repository.ExportApplicationRibbonAsync(); ribbonXml = ContentCoparerHelper.FormatXmlByConfiguration(ribbonXml, _commonConfig, _xmlOptions , ribbonEntityName: string.Empty ); { string fileName = EntityFileNameFormatter.GetApplicationRibbonFileName(service.ConnectionData.Name); string filePath = Path.Combine(_commonConfig.FolderForExport, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllText(filePath, ribbonXml, new UTF8Encoding(false)); this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.ExportedAppliationRibbonForConnectionFormat2, service.ConnectionData.Name, filePath); this._iWriteToOutput.PerformAction(service.ConnectionData, filePath); } } catch (Exception ex) { this._iWriteToOutput.WriteErrorToOutput(service.ConnectionData, ex); } ToggleControls(true, Properties.WindowStatusStrings.ExportingApplicationRibbonCompleted); this._iWriteToOutput.WriteToOutputEndOperation(service.ConnectionData, Properties.OperationNames.ExportingApplicationRibbonFormat1, service.ConnectionData.Name); }
protected override void CommandAction(DTEHelper helper, Tuple <string, string[]> schemas) { var listDocuments = helper.GetOpenedDocumentsAsDocument(FileOperations.SupportsXmlType).ToList(); if (listDocuments.Any()) { foreach (var document in listDocuments) { ContentCoparerHelper.ReplaceXsdSchemaInDocument(document, schemas.Item2); } } }
protected override void CommandAction(DTEHelper helper) { List <EnvDTE.Document> listDocuments = helper.GetOpenedDocumentsAsDocument(FileOperations.SupportsXmlType).ToList(); if (listDocuments.Any()) { foreach (var document in listDocuments) { ContentCoparerHelper.RemoveXsdSchemaInDocument(document); } } }
private string CreateFile(ConnectionData connectionData, string name, string nameUnique, Guid id, string fieldTitle, string siteMapXml) { string fileName = EntityFileNameFormatter.GetSiteMapFileName(connectionData.Name, name, id, fieldTitle, "xml"); string filePath = Path.Combine(_commonConfig.FolderForExport, FileOperations.RemoveWrongSymbols(fileName)); if (!string.IsNullOrEmpty(siteMapXml)) { try { //if (_commonConfig.SetXmlSchemasDuringExport) //{ // var schemasResources = AbstractDynamicCommandXsdSchemas.GetXsdSchemas(AbstractDynamicCommandXsdSchemas.SchemaSiteMapXml); // if (schemasResources != null) // { // siteMapXml = ContentCoparerHelper.SetXsdSchema(siteMapXml, schemasResources); // } //} //if (_commonConfig.SetIntellisenseContext) //{ // siteMapXml = ContentCoparerHelper.SetIntellisenseContextSiteMapNameUnique(siteMapXml, nameUnique); //} //if (_commonConfig.SortXmlAttributes) //{ // siteMapXml = ContentCoparerHelper.SortXmlAttributes(siteMapXml); //} //siteMapXml = ContentCoparerHelper.FormatXml(siteMapXml, _commonConfig.ExportXmlAttributeOnNewLine); siteMapXml = ContentCoparerHelper.FormatXmlByConfiguration(siteMapXml, _commonConfig, _xmlOptions , schemaName: AbstractDynamicCommandXsdSchemas.SchemaSiteMapXml , siteMapUniqueName: nameUnique ?? string.Empty ); File.WriteAllText(filePath, siteMapXml, new UTF8Encoding(false)); this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.EntityFieldExportedToFormat5, connectionData.Name, SiteMap.Schema.EntityLogicalName, name, fieldTitle, filePath); } catch (Exception ex) { this._iWriteToOutput.WriteErrorToOutput(connectionData, ex); } } else { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.EntityFieldIsEmptyFormat4, connectionData.Name, SiteMap.Schema.EntityLogicalName, name, fieldTitle); this._iWriteToOutput.ActivateOutputWindow(connectionData); } return(filePath); }
private static bool ValidateXmlDocument(ConnectionData connectionData, IWriteToOutput iWriteToOutput, XDocument doc) { ContentCoparerHelper.ClearRoot(doc); XmlSchemaSet schemas = new XmlSchemaSet(); { var schemasResources = AbstractDynamicCommandXsdSchemas.GetXsdSchemas(AbstractDynamicCommandXsdSchemas.SchemaRibbonXml); if (schemasResources != null) { foreach (var fileName in schemasResources) { Uri uri = FileOperations.GetSchemaResourceUri(fileName); StreamResourceInfo info = Application.GetResourceStream(uri); using (StreamReader reader = new StreamReader(info.Stream)) { schemas.Add(string.Empty, XmlReader.Create(reader)); } } } } List <ValidationEventArgs> errors = new List <ValidationEventArgs>(); doc.Validate(schemas, (o, e) => { errors.Add(e); }); if (errors.Count > 0) { iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.TextIsNotValidForFieldFormat1, AbstractDynamicCommandXsdSchemas.SchemaRibbonXml); foreach (var item in errors) { iWriteToOutput.WriteToOutput(connectionData, string.Empty); iWriteToOutput.WriteToOutput(connectionData, string.Empty); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.XmlValidationMessageFormat2, item.Severity, item.Message); iWriteToOutput.WriteErrorToOutput(connectionData, item.Exception); } iWriteToOutput.ActivateOutputWindow(connectionData); } return(errors.Count == 0); }
protected override void CommandAction(DTEHelper helper) { List <SelectedFile> selectedFiles = helper.GetOpenedFileInCodeWindow(FileOperations.SupportsXmlType).Take(2).ToList(); if (selectedFiles.Count == 1) { string fileText = File.ReadAllText(selectedFiles[0].FilePath); if (ContentCoparerHelper.TryParseXml(fileText, out var doc)) { var attribute = doc.Attribute(Intellisense.Model.IntellisenseContext.IntellisenseContextAttributeSavedQueryId); helper.HandleExplorerSystemSavedQuery(attribute?.Value); } } }
private async Task PerformExportXmlToFileAsync(string folder, Guid idCustomControl, string name, string fieldName, string fieldTitle, string extension) { if (!this.IsControlsEnabled) { return; } var service = await GetService(); ToggleControls(service.ConnectionData, false, Properties.WindowStatusStrings.ExportingXmlFieldToFileFormat1, fieldTitle); try { var repository = new CustomControlRepository(service); var customControl = await repository.GetByIdAsync(idCustomControl, new ColumnSet(fieldName)); string xmlContent = customControl.GetAttributeValue <string>(fieldName); if (!string.IsNullOrEmpty(xmlContent)) { if (string.Equals(fieldName, CustomControl.Schema.Attributes.manifest, StringComparison.InvariantCultureIgnoreCase)) { xmlContent = ContentCoparerHelper.FormatXmlByConfiguration(xmlContent, _commonConfig, _xmlOptions , schemaName: AbstractDynamicCommandXsdSchemas.SchemaManifest , customControlId: idCustomControl ); } else if (string.Equals(fieldName, CustomControl.Schema.Attributes.clientjson, StringComparison.InvariantCultureIgnoreCase)) { xmlContent = ContentCoparerHelper.FormatJson(xmlContent); } } string filePath = await CreateFileAsync(folder, idCustomControl, name, fieldTitle, extension, xmlContent); this._iWriteToOutput.PerformAction(service.ConnectionData, filePath); ToggleControls(service.ConnectionData, true, Properties.WindowStatusStrings.ExportingXmlFieldToFileCompletedFormat1, fieldName); } catch (Exception ex) { _iWriteToOutput.WriteErrorToOutput(service.ConnectionData, ex); ToggleControls(service.ConnectionData, true, Properties.WindowStatusStrings.ExportingXmlFieldToFileFailedFormat1, fieldName); } }
protected override void CommandAction(DTEHelper helper, Tuple <string, string[]> schemas) { var listFiles = helper.GetSelectedFilesInSolutionExplorer(FileOperations.SupportsXmlType, false); if (listFiles.Any()) { foreach (var document in listFiles.Where(s => s.Document != null && s.Document.ActiveWindow != null && s.Document.ActiveWindow.Visible).Select(s => s.Document)) { ContentCoparerHelper.ReplaceXsdSchemaInDocument(document, schemas.Item2); } foreach (var filePath in listFiles.Where(s => !(s.Document != null && s.Document.ActiveWindow != null && s.Document.ActiveWindow.Visible)).Select(s => s.FilePath)) { ContentCoparerHelper.ReplaceXsdSchemaInFile(filePath, schemas.Item2); } } }
protected override void CommandAction(DTEHelper helper) { var listFiles = helper.GetSelectedFilesInSolutionExplorer(FileOperations.SupportsXmlType, true).ToList(); if (listFiles.Any()) { foreach (var document in listFiles.Where(s => s.Document != null && s.Document.ActiveWindow != null && s.Document.ActiveWindow.Visible).Select(s => s.Document)) { ContentCoparerHelper.RemoveXsdSchemaInDocument(document); } foreach (var filePath in listFiles.Where(s => !(s.Document != null && s.Document.ActiveWindow != null && s.Document.ActiveWindow.Visible)).Select(s => s.FilePath)) { ContentCoparerHelper.RemoveXsdSchemaInFile(filePath); } } }
protected override void CommandAction(DTEHelper helper) { EnvDTE.Document document = helper.GetOpenedDocumentInCodeWindow(FileOperations.SupportsXmlType); if (document != null) { var objTextDoc = document.Object("TextDocument"); if (objTextDoc != null && objTextDoc is EnvDTE.TextDocument textDocument ) { string text = textDocument.StartPoint.CreateEditPoint().GetText(textDocument.EndPoint); string jsCode = ContentCoparerHelper.FormatToJavaScript("fetchXml", text); Clipboard.SetText(jsCode); } } }
private string CreateFile(string folder, string typeName, string fieldTitle, string xmlContent) { ConnectionData connectionData = null; cmBCurrentConnection.Dispatcher.Invoke(() => { connectionData = cmBCurrentConnection.SelectedItem as ConnectionData; }); if (connectionData == null) { return(null); } string fileName = EntityFileNameFormatter.GetPluginTypeFileName(connectionData.Name, typeName, fieldTitle, "xml"); string filePath = Path.Combine(folder, FileOperations.RemoveWrongSymbols(fileName)); if (!string.IsNullOrEmpty(xmlContent)) { try { if (ContentCoparerHelper.TryParseXml(xmlContent, out var doc)) { xmlContent = doc.ToString(); } File.WriteAllText(filePath, xmlContent, new UTF8Encoding(false)); this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.EntityFieldExportedToFormat5, connectionData.Name, Workflow.Schema.EntityLogicalName, typeName, fieldTitle, filePath); } catch (Exception ex) { this._iWriteToOutput.WriteErrorToOutput(connectionData, ex); } } else { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.EntityFieldIsEmptyFormat4, connectionData.Name, Workflow.Schema.EntityLogicalName, typeName, fieldTitle); this._iWriteToOutput.ActivateOutputWindow(connectionData); } return(filePath); }
private async Task PerformExportApplicationRibbon() { if (!this.IsControlsEnabled) { return; } var service = await GetService(); this._iWriteToOutput.WriteToOutputStartOperation(service.ConnectionData, Properties.OperationNames.ExportingApplicationRibbonFormat1, service.ConnectionData.Name); ToggleControls(service.ConnectionData, false, Properties.WindowStatusStrings.ExportingApplicationRibbon); try { var repository = new RibbonCustomizationRepository(service); string ribbonXml = await repository.ExportApplicationRibbonAsync(); ribbonXml = ContentCoparerHelper.FormatXmlByConfiguration(ribbonXml, _commonConfig, _xmlOptions , ribbonEntityName: string.Empty ); { string fileName = EntityFileNameFormatter.GetApplicationRibbonFileName(service.ConnectionData.Name); string filePath = Path.Combine(_commonConfig.FolderForExport, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllText(filePath, ribbonXml, new UTF8Encoding(false)); this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.ExportedAppliationRibbonForConnectionFormat2, service.ConnectionData.Name, filePath); this._iWriteToOutput.PerformAction(service.ConnectionData, filePath); } } catch (Exception ex) { this._iWriteToOutput.WriteErrorToOutput(service.ConnectionData, ex); } ToggleControls(service.ConnectionData, true, Properties.WindowStatusStrings.ExportingApplicationRibbonCompleted); this._iWriteToOutput.WriteToOutputEndOperation(service.ConnectionData, Properties.OperationNames.ExportingApplicationRibbonFormat1, service.ConnectionData.Name); }
private void ExportEntityXml(string entityName, string filePath) { var request = new OrganizationRequest("RetrieveEntityXml"); request.Parameters["EntityName"] = entityName; var response = _service.Execute(request); if (response.Results.ContainsKey("EntityXml")) { var text = response.Results["EntityXml"].ToString(); if (ContentCoparerHelper.TryParseXml(text, out var doc)) { text = doc.ToString(); } File.WriteAllText(filePath, text, new UTF8Encoding(false)); } }
public async Task GetDescriptionUsedNotExistsEntitiesInWorkflowAsync(StringBuilder strFile, Guid idWorkflow) { try { var repository = new WorkflowRepository(_service); var workflow = await repository.GetByIdAsync(idWorkflow, new ColumnSet(true)); string xmlContent = ContentCoparerHelper.RemoveDiacritics(workflow.Xaml); var doc = XElement.Parse(xmlContent); HashSet <Guid> workflowsWithEntities = new HashSet <Guid>() { idWorkflow }; var handler = new WorkflowUsedEntitiesHandler(); Dictionary <EntityReference, HashSet <Guid> > list = (await handler.GetWorkflowUsedEntitiesAsync(doc)).ToDictionary(e => e, k => new HashSet <Guid>() { idWorkflow }); strFile .AppendFormat("Entity: {0}", workflow.PrimaryEntity).AppendLine() .AppendFormat("Category: {0}", workflow.FormattedValues[Workflow.Schema.Attributes.category]).AppendLine() .AppendFormat("Name: {0}", workflow.Name).AppendLine() .AppendFormat("Url: {0}", _service.UrlGenerator.GetSolutionComponentUrl(ComponentType.Workflow, idWorkflow)).AppendLine() .AppendLine() .AppendLine() .AppendLine() ; await FillDescriptionNotExistsEntities(strFile, workflowsWithEntities, list); } catch (Exception ex) { this._iWriteToOutput.WriteErrorToOutput(_service.ConnectionData, ex); } }
private async Task <string> CreateFile(string folder, string name, string fieldTitle, string siteMapXml) { var service = await GetService(); string fileName = EntityFileNameFormatter.GetOrganizationFileName(service.ConnectionData.Name, name, fieldTitle, "xml"); string filePath = Path.Combine(folder, FileOperations.RemoveWrongSymbols(fileName)); if (!string.IsNullOrEmpty(siteMapXml)) { try { string schemaName = string.Empty; if (string.Equals(fieldTitle, Organization.Schema.Attributes.sitemapxml, StringComparison.InvariantCultureIgnoreCase) || string.Equals(fieldTitle, Organization.Schema.Attributes.referencesitemapxml, StringComparison.InvariantCultureIgnoreCase) ) { schemaName = AbstractDynamicCommandXsdSchemas.SchemaSiteMapXml; } siteMapXml = ContentCoparerHelper.FormatXmlByConfiguration(siteMapXml, _commonConfig, _xmlOptions , schemaName: schemaName ); File.WriteAllText(filePath, siteMapXml, new UTF8Encoding(false)); this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.EntityFieldExportedToFormat5, service.ConnectionData.Name, Organization.Schema.EntityLogicalName, name, fieldTitle, filePath); } catch (Exception ex) { this._iWriteToOutput.WriteErrorToOutput(service.ConnectionData, ex); } } else { this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.EntityFieldIsEmptyFormat4, service.ConnectionData.Name, Organization.Schema.EntityLogicalName, name, fieldTitle); this._iWriteToOutput.ActivateOutputWindow(service.ConnectionData); } return(filePath); }
protected override void CommandAction(DTEHelper helper) { List <SelectedFile> selectedFiles = helper.GetOpenedFileInCodeWindow(FileOperations.SupportsXmlType).Take(2).ToList(); if (selectedFiles.Count == 1) { string siteMapNameUnique = string.Empty; string fileText = File.ReadAllText(selectedFiles[0].FilePath); if (ContentCoparerHelper.TryParseXml(fileText, out var doc)) { var attribute = doc.Attribute(Intellisense.Model.IntellisenseContext.IntellisenseContextAttributeSiteMapNameUnique); if (attribute != null && !string.IsNullOrEmpty(attribute.Value)) { siteMapNameUnique = attribute.Value; } } helper.HandleExplorerSitemap(siteMapNameUnique); } }
private async Task <string> CheckConnectionRoles() { StringBuilder content = new StringBuilder(); await _comparerSource.InitializeConnection(_iWriteToOutput, content); string operation = string.Format(Properties.OperationNames.CheckingConnectionRolesFormat2, Connection1.Name, Connection2.Name); content.AppendLine(_iWriteToOutput.WriteToOutputStartOperation(null, operation)); var taskRole1 = _comparerSource.GetConnectionRole1Async(); var taskRole2 = _comparerSource.GetConnectionRole2Async(); var listRole1 = await taskRole1; content.AppendLine(_iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ConnectionRolesInConnectionFormat2, Connection1.Name, listRole1.Count)); var listRole2 = await taskRole2; content.AppendLine(_iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ConnectionRolesInConnectionFormat2, Connection2.Name, listRole2.Count)); if (!listRole1.Any() && !listRole2.Any()) { _iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ThereIsNothingToCompare); _iWriteToOutput.WriteToOutputEndOperation(null, operation); return(null); } var taskRoleAssociation1 = _comparerSource.GetConnectionRoleAssociation1Async(); var taskRoleAssociation2 = _comparerSource.GetConnectionRoleAssociation2Async(); var taskRoleObjectTypeCode1 = _comparerSource.GetConnectionRoleObjectTypeCode1Async(); var taskRoleObjectTypeCode2 = _comparerSource.GetConnectionRoleObjectTypeCode2Async(); var listRoleAssociation1 = await taskRoleAssociation1; content.AppendLine(_iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ConnectionRoleAssociationsInConnectionFormat2, Connection1.Name, listRoleAssociation1.Count)); var listRoleAssociation2 = await taskRoleAssociation2; content.AppendLine(_iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ConnectionRoleAssociationsInConnectionFormat2, Connection2.Name, listRoleAssociation2.Count)); var listRoleObjectTypeCode1 = await taskRoleObjectTypeCode1; content.AppendLine(_iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ConnectionRoleObjectTypeCodesInConnectionFormat2, Connection1.Name, listRoleObjectTypeCode1.Count)); var listRoleObjectTypeCode2 = await taskRoleObjectTypeCode2; content.AppendLine(_iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ConnectionRoleObjectTypeCodesInConnectionFormat2, Connection2.Name, listRoleObjectTypeCode2.Count)); var commonRolesList = new List <LinkedEntities <ConnectionRole> >(); var dictDifference = new Dictionary <LinkedEntities <ConnectionRole>, List <string> >(); FormatTextTableHandler tableOnlyExistsIn1 = new FormatTextTableHandler(); tableOnlyExistsIn1.SetHeader("Category", "Name", "Id", "IsManaged"); FormatTextTableHandler tableOnlyExistsIn2 = new FormatTextTableHandler(); tableOnlyExistsIn2.SetHeader("Category", "Name", "Id", "IsManaged"); foreach (var role1 in listRole1) { { var role2 = listRole2.FirstOrDefault(role => role.Id == role1.Id); if (role2 != null) { commonRolesList.Add(new LinkedEntities <ConnectionRole>(role1, role2)); continue; } } var category1 = role1.FormattedValues[ConnectionRole.Schema.Attributes.category]; var name1 = role1.Name; tableOnlyExistsIn1.AddLine(category1, name1, role1.Id.ToString(), role1.IsManaged.ToString()); this.ImageBuilder.AddComponentSolution1((int)ComponentType.ConnectionRole, role1.Id); } foreach (var role2 in listRole2) { { var role1 = listRole1.FirstOrDefault(role => role.Id == role2.Id); if (role1 != null) { continue; } } var name2 = role2.Name; var category2 = role2.FormattedValues[ConnectionRole.Schema.Attributes.category]; tableOnlyExistsIn2.AddLine(category2, name2, role2.Id.ToString(), role2.IsManaged.ToString()); this.ImageBuilder.AddComponentSolution2((int)ComponentType.ConnectionRole, role2.Id); } content.AppendLine(_iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ConnectionRolesCommonFormat3, Connection1.Name, Connection2.Name, commonRolesList.Count())); foreach (var commonItem in commonRolesList) { var diff = new List <string>(); { FormatTextTableHandler tabDiff = new FormatTextTableHandler(); tabDiff.SetHeader("Attribute", "Organization", "Value"); List <string> fieldsToCompare = new List <string>() { ConnectionRole.Schema.Attributes.category , ConnectionRole.Schema.Attributes.componentstate //, ConnectionRole.Schema.Attributes.connectionroleid //, ConnectionRole.Schema.Attributes.connectionroleidunique //, ConnectionRole.Schema.Attributes.createdby //, ConnectionRole.Schema.Attributes.createdon //, ConnectionRole.Schema.Attributes.createdonbehalfby , ConnectionRole.Schema.Attributes.description //, ConnectionRole.Schema.Attributes.importsequencenumber //, ConnectionRole.Schema.Attributes.introducedversion , ConnectionRole.Schema.Attributes.iscustomizable //, ConnectionRole.Schema.Attributes.ismanaged //, ConnectionRole.Schema.Attributes.modifiedby //, ConnectionRole.Schema.Attributes.modifiedon //, ConnectionRole.Schema.Attributes.modifiedonbehalfby , ConnectionRole.Schema.Attributes.name //, ConnectionRole.Schema.Attributes.organizationid //, ConnectionRole.Schema.Attributes.overwritetime //, ConnectionRole.Schema.Attributes.solutionid , ConnectionRole.Schema.Attributes.statecode , ConnectionRole.Schema.Attributes.statuscode //, ConnectionRole.Schema.Attributes.supportingsolutionid //, ConnectionRole.Schema.Attributes.versionnumber }; foreach (var fieldName in fieldsToCompare) { if (ContentCoparerHelper.IsEntityDifferentInField(commonItem.Entity1, commonItem.Entity2, fieldName)) { var str1 = EntityDescriptionHandler.GetAttributeString(commonItem.Entity1, fieldName, Connection1); var str2 = EntityDescriptionHandler.GetAttributeString(commonItem.Entity2, fieldName, Connection2); tabDiff.AddLine(fieldName, Connection1.Name, str1); tabDiff.AddLine(fieldName, Connection2.Name, str2); } } if (tabDiff.Count > 0) { diff.AddRange(tabDiff.GetFormatedLines(false)); } } { var enumerable1 = listRoleObjectTypeCode1 .Where(e => e.ConnectionRoleId != null && e.ConnectionRoleId.Id == commonItem.Entity1.ConnectionRoleId) .Select(e => e.AssociatedObjectTypeCode) .Distinct() ; var enumerable2 = listRoleObjectTypeCode2 .Where(e => e.ConnectionRoleId != null && e.ConnectionRoleId.Id == commonItem.Entity2.ConnectionRoleId) .Select(e => e.AssociatedObjectTypeCode) .Distinct() ; CompareConnectionRoleAssociatedObjects(Properties.OrganizationComparerStrings.PrefixAssociatedObjectTypeCodes, diff, enumerable1, enumerable2); } { var enumerable1 = listRoleAssociation1 .Where(e => e.ConnectionRoleId != null && e.ConnectionRoleId == commonItem.Entity1.ConnectionRoleId) .Select(e => e.AssociatedConnectionRoleName) .Distinct() ; var enumerable2 = listRoleAssociation2 .Where(e => e.ConnectionRoleId != null && e.ConnectionRoleId == commonItem.Entity2.ConnectionRoleId) .Select(e => e.AssociatedConnectionRoleName) .Distinct() ; CompareConnectionRoleAssociatedObjects(Properties.OrganizationComparerStrings.PrefixAssociatedConnectionRoles, diff, enumerable1, enumerable2); } if (diff.Count > 0) { dictDifference.Add(commonItem, diff); this.ImageBuilder.AddComponentDifferent((int)ComponentType.ConnectionRole, commonItem.Entity1.Id, commonItem.Entity2.Id, string.Join(Environment.NewLine, diff)); } } if (tableOnlyExistsIn1.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat(Properties.OrganizationComparerStrings.ConnectionRolesOnlyExistsInConnectionFormat2, Connection1.Name, tableOnlyExistsIn1.Count); tableOnlyExistsIn1.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (tableOnlyExistsIn2.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat(Properties.OrganizationComparerStrings.ConnectionRolesOnlyExistsInConnectionFormat2, Connection2.Name, tableOnlyExistsIn2.Count); tableOnlyExistsIn2.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (dictDifference.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat(Properties.OrganizationComparerStrings.ConnectionRolesDifferentFormat3, Connection1.Name, Connection2.Name, dictDifference.Count); FormatTextTableHandler tableDifference = new FormatTextTableHandler(); tableDifference.SetHeader(Connection1.Name, Connection2.Name, "Id"); foreach (var item in dictDifference) { tableDifference.CalculateLineLengths(item.Key.Entity1.Name, item.Key.Entity2.Name, item.Key.Entity1.Id.ToString()); } foreach (var item in dictDifference .OrderBy(w => w.Key.Entity1.Name) .ThenBy(w => w.Key.Entity2.Name) .ThenBy(w => w.Key.Entity1.Id.ToString()) ) { content.AppendLine().Append(tabSpacer + tableDifference.FormatLine(item.Key.Entity1.Name, item.Key.Entity2.Name, item.Key.Entity1.Id.ToString())); foreach (var str in item.Value) { content.AppendLine().Append(tabSpacer + tabSpacer + str); } } } if (tableOnlyExistsIn2.Count == 0 && tableOnlyExistsIn1.Count == 0 && dictDifference.Count == 0 ) { content.AppendLine(Properties.OrganizationComparerStrings.ConnectionRolesNoDifference); } content.AppendLine(_iWriteToOutput.WriteToOutputEndOperation(null, operation)); string fileName = EntityFileNameFormatter.GetDifferenceConnectionsForFieldFileName(_OrgOrgName, Properties.OrganizationComparerStrings.ConnectionRolesFileName); string filePath = Path.Combine(_folder, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllText(filePath, content.ToString(), new UTF8Encoding(false)); await SaveOrganizationDifferenceImage(); return(filePath); }
private async Task StartGettingSiteMaps() { try { var service = await GetServiceAsync(); if (service == null) { return; } _siteMapIntellisenseData.ClearData(); if (Version.TryParse(_connectionData.OrganizationVersion, out var organizationVersion)) { string version = "365.8.2"; switch (organizationVersion.Major) { case 5: version = "2011"; break; case 6: version = "2013"; break; case 7: if (organizationVersion.Minor == 0) { version = "2015"; } else { version = "2015SP1"; } break; case 8: if (organizationVersion.Minor == 0) { version = "2016"; } else if (organizationVersion.Minor == 1) { version = "2016SP1"; } else { version = "365.8.2"; } break; } Uri uri = FileOperations.GetSiteMapResourceUri(version); StreamResourceInfo info = Application.GetResourceStream(uri); var doc = XDocument.Load(info.Stream); _siteMapIntellisenseData.LoadDataFromSiteMap(doc); info.Stream.Dispose(); } { var repository = new SitemapRepository(service); var listSiteMaps = await repository.GetListAsync(new ColumnSet(SiteMap.Schema.Attributes.sitemapxml)); foreach (var item in listSiteMaps) { if (string.IsNullOrEmpty(item.SiteMapXml)) { continue; } if (ContentCoparerHelper.TryParseXmlDocument(item.SiteMapXml, out var doc)) { _siteMapIntellisenseData.LoadDataFromSiteMap(doc); } } } if (service.ConnectionData.OrganizationId.HasValue) { var repository = new OrganizationRepository(service); var organization = await repository.GetByIdAsync(service.ConnectionData.OrganizationId.Value, new ColumnSet(Organization.Schema.Attributes.referencesitemapxml, Organization.Schema.Attributes.sitemapxml)); if (organization != null) { if (!string.IsNullOrEmpty(organization.ReferenceSiteMapXml)) { if (ContentCoparerHelper.TryParseXmlDocument(organization.ReferenceSiteMapXml, out var doc)) { _siteMapIntellisenseData.LoadDataFromSiteMap(doc); } } if (!string.IsNullOrEmpty(organization.SiteMapXml)) { if (ContentCoparerHelper.TryParseXmlDocument(organization.SiteMapXml, out var doc)) { _siteMapIntellisenseData.LoadDataFromSiteMap(doc); } } } } { var repository = new SystemFormRepository(service); var listSystemForms = await repository.GetListByTypeAsync((int)SystemForm.Schema.OptionSets.type.Dashboard_0, new ColumnSet(SystemForm.Schema.Attributes.objecttypecode, SystemForm.Schema.Attributes.name, SystemForm.Schema.Attributes.description)); _siteMapIntellisenseData.LoadDashboards(listSystemForms); } } catch (Exception ex) { DTEHelper.WriteExceptionToLog(ex); } finally { lock (_syncObjectTaskGettingSiteMapInformation) { _taskGettingSiteMapInformation = null; } } }
private async Task PerformUpdateApplicationRibbonDiffXml() { if (!this.IsControlsEnabled) { return; } var service = await GetService(); this._iWriteToOutput.WriteToOutputStartOperation(service.ConnectionData, Properties.OperationNames.UpdatingApplicationRibbonDiffXmlFormat1, service.ConnectionData.Name); ToggleControls(service.ConnectionData, false, Properties.WindowStatusStrings.UpdatingApplicationRibbonDiffXmlFormat1, service.ConnectionData.Name); var newText = string.Empty; { bool?dialogResult = false; var title = "Application RibbonDiffXml"; this.Dispatcher.Invoke(() => { var form = new WindowTextField("Enter " + title, title, string.Empty); dialogResult = form.ShowDialog(); newText = form.FieldText; }); if (dialogResult.GetValueOrDefault() == false) { ToggleControls(service.ConnectionData, true, Properties.WindowStatusStrings.UpdatingApplicationRibbonDiffXmlCanceledFormat1, service.ConnectionData.Name); return; } } newText = ContentCoparerHelper.RemoveAllCustomXmlAttributesAndNamespaces(newText); UpdateStatus(service.ConnectionData, Properties.WindowStatusStrings.ValidatingApplicationRibbonDiffXml); if (!ContentCoparerHelper.TryParseXmlDocument(newText, out var doc)) { ToggleControls(service.ConnectionData, true, Properties.WindowStatusStrings.TextIsNotValidXml); _iWriteToOutput.ActivateOutputWindow(service.ConnectionData); return; } bool validateResult = await RibbonCustomizationRepository.ValidateXmlDocumentAsync(service.ConnectionData, _iWriteToOutput, doc); if (!validateResult) { var dialogResult = MessageBoxResult.Cancel; this.Dispatcher.Invoke(() => { dialogResult = MessageBox.Show(Properties.MessageBoxStrings.ContinueOperation, Properties.MessageBoxStrings.QuestionTitle, MessageBoxButton.OKCancel, MessageBoxImage.Question); }); if (dialogResult != MessageBoxResult.OK) { ToggleControls(service.ConnectionData, true, Properties.WindowStatusStrings.ValidatingApplicationRibbonDiffXmlFailed); return; } } var repositoryPublisher = new PublisherRepository(service); var publisherDefault = await repositoryPublisher.GetDefaultPublisherAsync(); if (publisherDefault == null) { ToggleControls(service.ConnectionData, true, Properties.WindowStatusStrings.NotFoundedDefaultPublisher); _iWriteToOutput.ActivateOutputWindow(service.ConnectionData); return; } var repositoryRibbonCustomization = new RibbonCustomizationRepository(service); var ribbonCustomization = await repositoryRibbonCustomization.FindApplicationRibbonCustomizationAsync(); if (ribbonCustomization == null) { ToggleControls(service.ConnectionData, true, Properties.WindowStatusStrings.NotFoundedApplicationRibbonRibbonCustomization); _iWriteToOutput.ActivateOutputWindow(service.ConnectionData); return; } try { await repositoryRibbonCustomization.PerformUpdateRibbonDiffXml(_iWriteToOutput, _commonConfig, doc, null, ribbonCustomization); ToggleControls(service.ConnectionData, true, Properties.WindowStatusStrings.UpdatingApplicationRibbonDiffXmlCompletedFormat1, service.ConnectionData.Name); } catch (Exception ex) { this._iWriteToOutput.WriteErrorToOutput(service.ConnectionData, ex); ToggleControls(service.ConnectionData, true, Properties.WindowStatusStrings.UpdatingApplicationRibbonDiffXmlFailedFormat1, service.ConnectionData.Name); } this._iWriteToOutput.WriteToOutputEndOperation(service.ConnectionData, Properties.OperationNames.UpdatingApplicationRibbonDiffXmlFormat1, service.ConnectionData.Name); }
private async Task PerformExportApplicationRibbonDiffXml() { if (!this.IsControlsEnabled) { return; } var service = await GetService(); this._iWriteToOutput.WriteToOutputStartOperation(service.ConnectionData, Properties.OperationNames.ExportingApplicationRibbonDiffXmlFormat1, service.ConnectionData.Name); ToggleControls(service.ConnectionData, false, Properties.WindowStatusStrings.ExportingApplicationRibbonDiffXml); var repositoryPublisher = new PublisherRepository(service); var publisherDefault = await repositoryPublisher.GetDefaultPublisherAsync(); if (publisherDefault == null) { ToggleControls(service.ConnectionData, true, Properties.WindowStatusStrings.NotFoundedDefaultPublisher); _iWriteToOutput.ActivateOutputWindow(service.ConnectionData); return; } var repositoryRibbonCustomization = new RibbonCustomizationRepository(service); var ribbonCustomization = await repositoryRibbonCustomization.FindApplicationRibbonCustomizationAsync(); if (ribbonCustomization == null) { ToggleControls(service.ConnectionData, true, Properties.WindowStatusStrings.NotFoundedApplicationRibbonRibbonCustomization); _iWriteToOutput.ActivateOutputWindow(service.ConnectionData); return; } try { string ribbonDiffXml = await repositoryRibbonCustomization.GetRibbonDiffXmlAsync(_iWriteToOutput, null, ribbonCustomization); if (string.IsNullOrEmpty(ribbonDiffXml)) { ToggleControls(service.ConnectionData, true, Properties.WindowStatusStrings.ExportingApplicationRibbonDiffXmlFailed); return; } ribbonDiffXml = ContentCoparerHelper.FormatXmlByConfiguration(ribbonDiffXml, _commonConfig, _xmlOptions , schemaName: AbstractDynamicCommandXsdSchemas.SchemaRibbonXml , ribbonEntityName: string.Empty ); { string fileName = EntityFileNameFormatter.GetApplicationRibbonDiffXmlFileName(service.ConnectionData.Name); string filePath = Path.Combine(_commonConfig.FolderForExport, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllText(filePath, ribbonDiffXml, new UTF8Encoding(false)); this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.ExportedAppliationRibbonDiffXmlForConnectionFormat2, service.ConnectionData.Name, filePath); this._iWriteToOutput.PerformAction(service.ConnectionData, filePath); } ToggleControls(service.ConnectionData, true, Properties.WindowStatusStrings.ExportingApplicationRibbonDiffXmlCompleted); } catch (Exception ex) { this._iWriteToOutput.WriteErrorToOutput(service.ConnectionData, ex); ToggleControls(service.ConnectionData, true, Properties.WindowStatusStrings.ExportingApplicationRibbonDiffXmlFailed); } this._iWriteToOutput.WriteToOutputEndOperation(service.ConnectionData, Properties.OperationNames.ExportingApplicationRibbonDiffXmlFormat1, service.ConnectionData.Name); }
private async Task <string> CheckMailMergeTemplates() { StringBuilder content = new StringBuilder(); await _comparerSource.InitializeConnection(_iWriteToOutput, content); string operation = string.Format(Properties.OperationNames.CheckingMailMergeTemplatesFormat2, Connection1.Name, Connection2.Name); content.AppendLine(_iWriteToOutput.WriteToOutputStartOperation(null, operation)); Task <List <MailMergeTemplate> > task1 = _comparerSource.GetMailMergeTemplate1Async(); Task <List <MailMergeTemplate> > task2 = _comparerSource.GetMailMergeTemplate2Async(); List <MailMergeTemplate> list1 = await task1; content.AppendLine(_iWriteToOutput.WriteToOutput(null, "Mail Merge Templates in {0}: {1}", Connection1.Name, list1.Count())); List <MailMergeTemplate> list2 = await task2; content.AppendLine(_iWriteToOutput.WriteToOutput(null, "Mail Merge Templates in {0}: {1}", Connection2.Name, list2.Count())); if (list1.Count == 0 && list2.Count == 0) { _iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ThereIsNothingToCompare); _iWriteToOutput.WriteToOutputEndOperation(null, operation); return(null); } FormatTextTableHandler tableOnlyExistsIn1 = new FormatTextTableHandler(); tableOnlyExistsIn1.SetHeader("AssociatedEntity", "Name", "Language", "File Name", "Mail Merge Type", "Viewable By", "Owner", "Id"); FormatTextTableHandler tableOnlyExistsIn2 = new FormatTextTableHandler(); tableOnlyExistsIn2.SetHeader("AssociatedEntity", "Name", "Language", "File Name", "Mail Merge Type", "Viewable By", "Owner", "Id"); Dictionary <Tuple <string, string, string, string>, List <string> > dictDifference = new Dictionary <Tuple <string, string, string, string>, List <string> >(); foreach (MailMergeTemplate template1 in list1) { { MailMergeTemplate template2 = list2.FirstOrDefault(template => template.Id == template1.Id); if (template2 != null) { continue; } } string name1 = template1.Name; string entityName1 = template1.TemplateTypeCode; int language1 = template1.LanguageCode.Value; string filename = template1.FileName; string reportType = template1.FormattedValues.ContainsKey(MailMergeTemplate.Schema.Attributes.mailmergetype) ? template1.FormattedValues[MailMergeTemplate.Schema.Attributes.mailmergetype] : string.Empty; Microsoft.Xrm.Sdk.EntityReference ownerRef = template1.OwnerId; string owner = string.Empty; if (ownerRef != null) { owner = ownerRef.Name; } string ispersonal = template1.FormattedValues.ContainsKey(MailMergeTemplate.Schema.Attributes.ispersonal) ? template1.FormattedValues[MailMergeTemplate.Schema.Attributes.ispersonal] : string.Empty; tableOnlyExistsIn1.AddLine(entityName1, name1, LanguageLocale.GetLocaleName(language1), filename, reportType, ispersonal, owner, template1.Id.ToString()); this.ImageBuilder.AddComponentSolution1((int)ComponentType.MailMergeTemplate, template1.Id); } foreach (MailMergeTemplate template2 in list2) { { MailMergeTemplate template1 = list1.FirstOrDefault(template => template.Id == template2.Id); if (template1 != null) { continue; } } string name2 = template2.Name; string entityName2 = template2.TemplateTypeCode; int language2 = template2.LanguageCode.Value; string filename = template2.FileName; string templateType = template2.FormattedValues.ContainsKey(MailMergeTemplate.Schema.Attributes.mailmergetype) ? template2.FormattedValues[MailMergeTemplate.Schema.Attributes.mailmergetype] : string.Empty; Microsoft.Xrm.Sdk.EntityReference ownerRef = template2.OwnerId; string owner = string.Empty; if (ownerRef != null) { owner = ownerRef.Name; } string ispersonal = template2.FormattedValues.ContainsKey(MailMergeTemplate.Schema.Attributes.ispersonal) ? template2.FormattedValues[MailMergeTemplate.Schema.Attributes.ispersonal] : string.Empty; tableOnlyExistsIn2.AddLine(entityName2, name2, LanguageLocale.GetLocaleName(language2), filename, templateType, ispersonal, owner, template2.Id.ToString()); this.ImageBuilder.AddComponentSolution2((int)ComponentType.MailMergeTemplate, template2.Id); } foreach (MailMergeTemplate template1 in list1) { MailMergeTemplate template2 = list2.FirstOrDefault(template => template.Id == template1.Id); if (template2 == null) { continue; } FormatTextTableHandler tabDiff = new FormatTextTableHandler(); tabDiff.SetHeader("Attribute", "Organization", "Value"); foreach (string fieldName in _fieldsToCompareMailMergeTemplateOrdinal) { if (ContentCoparerHelper.IsEntityDifferentInField(template1, template2, fieldName)) { string str1 = EntityDescriptionHandler.GetAttributeString(template1, fieldName, Connection1); string str2 = EntityDescriptionHandler.GetAttributeString(template2, fieldName, Connection2); tabDiff.AddLine(fieldName, Connection1.Name, str1); tabDiff.AddLine(fieldName, Connection2.Name, str2); } } foreach (string fieldName in _fieldsToCompareMailMergeTemplateXml) { string xml1 = template1.GetAttributeValue <string>(fieldName) ?? string.Empty; string xml2 = template2.GetAttributeValue <string>(fieldName) ?? string.Empty; if (!ContentCoparerHelper.CompareXML(xml1, xml2).IsEqual) { string reason = string.Empty; ContentCopareResult compare = ContentCoparerHelper.CompareXML(xml1.ToLower(), xml2.ToLower(), true); if (!compare.IsEqual) { reason = "InCase"; } else { reason = compare.GetCompareDescription(); } tabDiff.AddLine(fieldName, string.Empty, string.Format(Properties.OrganizationComparerStrings.FieldDifferenceReasonFormat3, Connection1.Name, Connection2.Name, reason)); } } if (tabDiff.Count > 0) { string name1 = template1.Name; string entityName1 = template1.TemplateTypeCode; int language1 = template1.LanguageCode.Value; var diff = tabDiff.GetFormatedLines(false); this.ImageBuilder.AddComponentDifferent((int)ComponentType.MailMergeTemplate, template1.Id, template2.Id, string.Join(Environment.NewLine, diff)); dictDifference.Add(Tuple.Create(entityName1, name1, LanguageLocale.GetLocaleName(language1), template1.Id.ToString()), diff); } } if (tableOnlyExistsIn1.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("Mail Merge Templates ONLY EXISTS in {0}: {1}", Connection1.Name, tableOnlyExistsIn1.Count); tableOnlyExistsIn1.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (tableOnlyExistsIn2.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("Mail Merge Templates ONLY EXISTS in {0}: {1}", Connection2.Name, tableOnlyExistsIn2.Count); tableOnlyExistsIn2.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (dictDifference.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("Mail Merge Templates DIFFERENT in {0} and {1}: {2}", Connection1.Name, Connection2.Name, dictDifference.Count); FormatTextTableHandler tableDifference = new FormatTextTableHandler(); tableDifference.SetHeader("AssociatedEntity", "Name", "Language", "Id"); foreach (KeyValuePair <Tuple <string, string, string, string>, List <string> > template in dictDifference) { tableDifference.CalculateLineLengths(template.Key.Item1, template.Key.Item2, template.Key.Item3, template.Key.Item4); } foreach (KeyValuePair <Tuple <string, string, string, string>, List <string> > template in dictDifference .OrderBy(w => w.Key.Item1) .ThenBy(w => w.Key.Item2) .ThenBy(w => w.Key.Item3) .ThenBy(w => w.Key.Item4) ) { content.AppendLine().Append(tabSpacer + tableDifference.FormatLine(template.Key.Item1, template.Key.Item2, template.Key.Item3, template.Key.Item4)); foreach (string str in template.Value) { content.AppendLine().Append(tabSpacer + tabSpacer + str); } } } if (tableOnlyExistsIn2.Count == 0 && tableOnlyExistsIn1.Count == 0 && dictDifference.Count == 0 ) { content.AppendLine("No difference in Mail Merge Templates."); } content.AppendLine().AppendLine().AppendLine(_iWriteToOutput.WriteToOutputEndOperation(null, operation)); string fileName = EntityFileNameFormatter.GetDifferenceConnectionsForFieldFileName(_OrgOrgName, "Mail Merge Templates"); string filePath = Path.Combine(_folder, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllText(filePath, content.ToString(), new UTF8Encoding(false)); await SaveOrganizationDifferenceImage(); return(filePath); }
private async Task <string> CheckContractTemplates() { StringBuilder content = new StringBuilder(); await _comparerSource.InitializeConnection(_iWriteToOutput, content); string operation = string.Format(Properties.OperationNames.CheckingContractTemplatesFormat2, Connection1.Name, Connection2.Name); content.AppendLine(_iWriteToOutput.WriteToOutputStartOperation(null, operation)); Task <List <ContractTemplate> > task1 = _comparerSource.GetContractTemplate1Async(); Task <List <ContractTemplate> > task2 = _comparerSource.GetContractTemplate2Async(); List <ContractTemplate> list1 = await task1; content.AppendLine(_iWriteToOutput.WriteToOutput(null, "Contract Templates in {0}: {1}", Connection1.Name, list1.Count())); List <ContractTemplate> list2 = await task2; content.AppendLine(_iWriteToOutput.WriteToOutput(null, "Contract Templates in {0}: {1}", Connection2.Name, list2.Count())); if (list1.Count == 0 && list2.Count == 0) { _iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ThereIsNothingToCompare); _iWriteToOutput.WriteToOutputEndOperation(null, operation); return(null); } List <string> fieldsToCompare = new List <string>() { ContractTemplate.Schema.Attributes.abbreviation , ContractTemplate.Schema.Attributes.allotmenttypecode , ContractTemplate.Schema.Attributes.billingfrequencycode //, ContractTemplate.Schema.Attributes.componentstate , ContractTemplate.Schema.Attributes.contractservicelevelcode //, ContractTemplate.Schema.Attributes.contracttemplateid //, ContractTemplate.Schema.Attributes.contracttemplateidunique //, ContractTemplate.Schema.Attributes.createdby //, ContractTemplate.Schema.Attributes.createdon //, ContractTemplate.Schema.Attributes.createdonbehalfby , ContractTemplate.Schema.Attributes.description , ContractTemplate.Schema.Attributes.effectivitycalendar //, ContractTemplate.Schema.Attributes.importsequencenumber //, ContractTemplate.Schema.Attributes.introducedversion , ContractTemplate.Schema.Attributes.iscustomizable //, ContractTemplate.Schema.Attributes.ismanaged //, ContractTemplate.Schema.Attributes.modifiedby //, ContractTemplate.Schema.Attributes.modifiedon //, ContractTemplate.Schema.Attributes.modifiedonbehalfby , ContractTemplate.Schema.Attributes.name //, ContractTemplate.Schema.Attributes.organizationid //, ContractTemplate.Schema.Attributes.overriddencreatedon //, ContractTemplate.Schema.Attributes.overwritetime //, ContractTemplate.Schema.Attributes.solutionid //, ContractTemplate.Schema.Attributes.supportingsolutionid , ContractTemplate.Schema.Attributes.usediscountaspercentage //, ContractTemplate.Schema.Attributes.versionnumber }; List <string> xmlFieldsToCompare = new List <string>() { //ContractTemplate.Schema.Attributes.body //, ContractTemplate.Schema.Attributes.presentationxml //, ContractTemplate.Schema.Attributes.subjectpresentationxml }; FormatTextTableHandler tableOnlyExistsIn1 = new FormatTextTableHandler(); tableOnlyExistsIn1.SetHeader("Name", "Id"); FormatTextTableHandler tableOnlyExistsIn2 = new FormatTextTableHandler(); tableOnlyExistsIn2.SetHeader("Name", "Id"); Dictionary <Tuple <string, string>, List <string> > dictDifference = new Dictionary <Tuple <string, string>, List <string> >(); foreach (ContractTemplate template1 in list1) { { ContractTemplate template2 = list2.FirstOrDefault(template => template.Id == template1.Id); if (template2 != null) { continue; } } string name1 = template1.Name; tableOnlyExistsIn1.AddLine(name1, template1.Id.ToString()); this.ImageBuilder.AddComponentSolution1((int)ComponentType.ContractTemplate, template1.Id); } foreach (ContractTemplate template2 in list2) { { ContractTemplate template1 = list1.FirstOrDefault(template => template.Id == template2.Id); if (template1 != null) { continue; } } string name2 = template2.Name; tableOnlyExistsIn2.AddLine(name2, template2.Id.ToString()); this.ImageBuilder.AddComponentSolution2((int)ComponentType.ContractTemplate, template2.Id); } foreach (ContractTemplate template1 in list1) { ContractTemplate template2 = list2.FirstOrDefault(template => template.Id == template1.Id); if (template2 == null) { continue; } FormatTextTableHandler tabDiff = new FormatTextTableHandler(); tabDiff.SetHeader("Attribute", "Organization", "Value"); foreach (string fieldName in fieldsToCompare) { if (ContentCoparerHelper.IsEntityDifferentInField(template1, template2, fieldName)) { string str1 = EntityDescriptionHandler.GetAttributeString(template1, fieldName, Connection1); string str2 = EntityDescriptionHandler.GetAttributeString(template2, fieldName, Connection2); tabDiff.AddLine(fieldName, Connection1.Name, str1); tabDiff.AddLine(fieldName, Connection2.Name, str2); } } foreach (string fieldName in xmlFieldsToCompare) { string xml1 = template1.GetAttributeValue <string>(fieldName) ?? string.Empty; string xml2 = template2.GetAttributeValue <string>(fieldName) ?? string.Empty; if (!ContentCoparerHelper.CompareXML(xml1, xml2).IsEqual) { string reason = string.Empty; ContentCopareResult compare = ContentCoparerHelper.CompareXML(xml1.ToLower(), xml2.ToLower(), true); if (!compare.IsEqual) { reason = "InCase"; } else { reason = compare.GetCompareDescription(); } tabDiff.AddLine(fieldName, string.Empty, string.Format(Properties.OrganizationComparerStrings.FieldDifferenceReasonFormat3, Connection1.Name, Connection2.Name, reason)); } } if (tabDiff.Count > 0) { string name1 = template1.Name; var diff = tabDiff.GetFormatedLines(false); this.ImageBuilder.AddComponentDifferent((int)ComponentType.ContractTemplate, template1.Id, template2.Id, string.Join(Environment.NewLine, diff)); dictDifference.Add(Tuple.Create(name1, template1.Id.ToString()), diff); } } if (tableOnlyExistsIn1.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("Contract Templates ONLY EXISTS in {0}: {1}", Connection1.Name, tableOnlyExistsIn1.Count); tableOnlyExistsIn1.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (tableOnlyExistsIn2.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("Contract Templates ONLY EXISTS in {0}: {1}", Connection2.Name, tableOnlyExistsIn2.Count); tableOnlyExistsIn2.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (dictDifference.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("Contract Templates DIFFERENT in {0} and {1}: {2}", Connection1.Name, Connection2.Name, dictDifference.Count); FormatTextTableHandler tableDifference = new FormatTextTableHandler(); tableDifference.SetHeader("Title", "Id"); foreach (KeyValuePair <Tuple <string, string>, List <string> > template in dictDifference) { tableDifference.CalculateLineLengths(template.Key.Item1, template.Key.Item2); } foreach (KeyValuePair <Tuple <string, string>, List <string> > template in dictDifference .OrderBy(w => w.Key.Item1) .ThenBy(w => w.Key.Item2) ) { content.AppendLine().Append(tabSpacer + tableDifference.FormatLine(template.Key.Item1, template.Key.Item2)); foreach (string str in template.Value) { content.AppendLine().Append(tabSpacer + tabSpacer + str); } } } if (tableOnlyExistsIn2.Count == 0 && tableOnlyExistsIn1.Count == 0 && dictDifference.Count == 0 ) { content.AppendLine("No difference in Contract Templates."); } content.AppendLine().AppendLine().AppendLine(_iWriteToOutput.WriteToOutputEndOperation(null, operation)); string fileName = EntityFileNameFormatter.GetDifferenceConnectionsForFieldFileName(_OrgOrgName, "Contract Templates"); string filePath = Path.Combine(_folder, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllText(filePath, content.ToString(), new UTF8Encoding(false)); await SaveOrganizationDifferenceImage(); return(filePath); }
private async Task <string> CheckDisplayStrings() { StringBuilder content = new StringBuilder(); await _comparerSource.InitializeConnection(_iWriteToOutput, content); string operation = string.Format(Properties.OperationNames.CheckingDisplayStringsFormat2, Connection1.Name, Connection2.Name); content.AppendLine(_iWriteToOutput.WriteToOutputStartOperation(null, operation)); var task1 = _comparerSource.GetDisplayString1Async(); var task2 = _comparerSource.GetDisplayString2Async(); var list1 = await task1; content.AppendLine(_iWriteToOutput.WriteToOutput(null, "Display Strings in {0}: {1}", Connection1.Name, list1.Count())); var list2 = await task2; content.AppendLine(_iWriteToOutput.WriteToOutput(null, "Display Strings in {0}: {1}", Connection2.Name, list2.Count())); if (list1.Count == 0 && list2.Count == 0) { _iWriteToOutput.WriteToOutput(null, Properties.OrganizationComparerStrings.ThereIsNothingToCompare); _iWriteToOutput.WriteToOutputEndOperation(null, operation); return(null); } var taskMap1 = _comparerSource.GetDisplayStringMap1Async(); var taskMap2 = _comparerSource.GetDisplayStringMap2Async(); var listMap1 = await taskMap1; content.AppendLine(_iWriteToOutput.WriteToOutput(null, "Display Strings Maps in {0}: {1}", Connection1.Name, listMap1.Count())); var listMap2 = await taskMap2; content.AppendLine(_iWriteToOutput.WriteToOutput(null, "Display Strings Maps in {0}: {1}", Connection1.Name, listMap2.Count())); FormatTextTableHandler tableOnlyExistsIn1 = new FormatTextTableHandler(); tableOnlyExistsIn1.SetHeader("Key", "LanguageCode", "Published", "Custom", "CustomComment", "FormatParameters"); FormatTextTableHandler tableOnlyExistsIn2 = new FormatTextTableHandler(); tableOnlyExistsIn2.SetHeader("Key", "LanguageCode", "Published", "Custom", "CustomComment", "FormatParameters"); var dictDifference = new Dictionary <Tuple <string, string>, List <string> >(); foreach (var displayString1 in list1) { var displaystringkey1 = displayString1.DisplayStringKey; var languagecode1 = displayString1.LanguageCode.Value; { var displayString2 = list2.FirstOrDefault(displayString => { var displaystringkey2 = displayString.DisplayStringKey; var languagecode2 = displayString.LanguageCode.Value; return(displaystringkey1 == displaystringkey2 && languagecode1 == languagecode2); }); if (displayString2 != null) { continue; } } var customComment = displayString1.CustomComment; var customDisplayString = displayString1.CustomComment; var formatParameters = displayString1.FormatParameters.Value; var publishedDisplayString = displayString1.PublishedDisplayString; tableOnlyExistsIn1.AddLine(displaystringkey1, LanguageLocale.GetLocaleName(languagecode1), publishedDisplayString, customDisplayString, customComment, formatParameters.ToString()); this.ImageBuilder.AddComponentSolution1((int)ComponentType.DisplayString, displayString1.Id); } foreach (var displayString2 in list2) { var displaystringkey2 = displayString2.DisplayStringKey; var languagecode2 = displayString2.LanguageCode.Value; { var displayString1 = list1.FirstOrDefault(displayString => { var displaystringkey1 = displayString.DisplayStringKey; var languagecode1 = displayString.LanguageCode.Value; return(displaystringkey1 == displaystringkey2 && languagecode1 == languagecode2); }); if (displayString1 != null) { continue; } } var customComment = displayString2.CustomComment; var customDisplayString = displayString2.CustomDisplayString; var formatParameters = displayString2.FormatParameters.Value; var publishedDisplayString = displayString2.PublishedDisplayString; tableOnlyExistsIn2.AddLine(displaystringkey2, LanguageLocale.GetLocaleName(languagecode2), publishedDisplayString, customDisplayString, customComment, formatParameters.ToString()); this.ImageBuilder.AddComponentSolution2((int)ComponentType.DisplayString, displayString2.Id); } foreach (var displayString1 in list1) { var displaystringkey1 = displayString1.DisplayStringKey; var languagecode1 = displayString1.LanguageCode.Value; var displayString2 = list2.FirstOrDefault(displayString => { var displaystringkey2 = displayString.DisplayStringKey; var languagecode2 = displayString.LanguageCode.Value; return(displaystringkey1 == displaystringkey2 && languagecode1 == languagecode2); }); if (displayString2 == null) { continue; } FormatTextTableHandler tabDiff = new FormatTextTableHandler(); tabDiff.SetHeader("Attribute", "Organization", "Value"); var temp1 = listMap1.Where(s => s.DisplayStringId == displayString1.Id); var temp2 = listMap2.Where(s => s.DisplayStringId == displayString2.Id); if (temp1.SequenceEqual(temp2)) { tabDiff.AddLine("DisplayStringMap", Connection1.Name, "Differs"); tabDiff.AddLine("DisplayStringMap", Connection2.Name, "Differs"); } List <string> fieldsToCompare = new List <string>() { DisplayString.Schema.Attributes.customcomment , DisplayString.Schema.Attributes.customdisplaystring , DisplayString.Schema.Attributes.formatparameters , DisplayString.Schema.Attributes.publisheddisplaystring }; foreach (var fieldName in fieldsToCompare) { if (ContentCoparerHelper.IsEntityDifferentInField(displayString1, displayString2, fieldName)) { var str1 = EntityDescriptionHandler.GetAttributeString(displayString1, fieldName, Connection1); var str2 = EntityDescriptionHandler.GetAttributeString(displayString2, fieldName, Connection2); tabDiff.AddLine(fieldName, Connection1.Name, str1); tabDiff.AddLine(fieldName, Connection2.Name, str2); } } if (tabDiff.Count > 0) { var diff = tabDiff.GetFormatedLines(false); dictDifference.Add(Tuple.Create(displaystringkey1, LanguageLocale.GetLocaleName(languagecode1)), diff); this.ImageBuilder.AddComponentDifferent((int)ComponentType.DisplayString, displayString1.Id, displayString2.Id, string.Join(Environment.NewLine, diff)); } } if (tableOnlyExistsIn1.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("Display Strings ONLY EXISTS in {0}: {1}", Connection1.Name, tableOnlyExistsIn1.Count); tableOnlyExistsIn1.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (tableOnlyExistsIn2.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("Display Strings ONLY EXISTS in {0}: {1}", Connection2.Name, tableOnlyExistsIn2.Count); tableOnlyExistsIn2.GetFormatedLines(true).ForEach(e => content.AppendLine().Append((tabSpacer + e).TrimEnd())); } if (dictDifference.Count > 0) { content .AppendLine() .AppendLine() .AppendLine() .AppendLine(new string('-', 150)) .AppendLine() .AppendLine(); content.AppendLine().AppendLine().AppendFormat("Display Strings DIFFERENT in {0} and {1}: {2}", Connection1.Name, Connection2.Name, dictDifference.Count); FormatTextTableHandler tableDifference = new FormatTextTableHandler(); tableDifference.SetHeader("Key", "LanguageCode"); foreach (var displayString in dictDifference) { tableDifference.CalculateLineLengths(displayString.Key.Item1, displayString.Key.Item2); } foreach (var displayString in dictDifference .OrderBy(w => w.Key.Item1) .ThenBy(w => w.Key.Item2) ) { content.AppendLine().Append(tabSpacer + tableDifference.FormatLine(displayString.Key.Item1, displayString.Key.Item2)); foreach (var str in displayString.Value) { content.AppendLine().Append(tabSpacer + tabSpacer + str); } } } if (tableOnlyExistsIn2.Count == 0 && tableOnlyExistsIn1.Count == 0 && dictDifference.Count == 0 ) { content.AppendLine("No difference in Display Strings."); } content.AppendLine().AppendLine().AppendLine(_iWriteToOutput.WriteToOutputEndOperation(null, operation)); string fileName = EntityFileNameFormatter.GetDifferenceConnectionsForFieldFileName(_OrgOrgName, "Display Strings"); string filePath = Path.Combine(_folder, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllText(filePath, content.ToString(), new UTF8Encoding(false)); await SaveOrganizationDifferenceImage(); return(filePath); }