private void ShowDifferenceOneByOne(CommonConfiguration commonConfig, string fileLocalPath, string fileLocalTitle, string filePath1, string fileTitle1, string filePath2, string fileTitle2) { bool existsFileLocal = File.Exists(fileLocalPath); bool existsFile1 = File.Exists(filePath1); bool existsFile2 = File.Exists(filePath2); if (existsFileLocal && existsFile1) { this._iWriteToOutput.ProcessStartProgramComparer(fileLocalPath, filePath1, fileLocalTitle, fileTitle1); } if (existsFileLocal && existsFile2) { this._iWriteToOutput.ProcessStartProgramComparer(fileLocalPath, filePath2, fileLocalTitle, fileTitle2); } if (existsFile1 && existsFile2) { this._iWriteToOutput.ProcessStartProgramComparer(filePath1, filePath2, fileTitle1, fileTitle2); } int total = Convert.ToInt32(existsFileLocal) + Convert.ToInt32(existsFile1) + Convert.ToInt32(existsFile2); if (total == 1) { _iWriteToOutput.WriteToOutputFilePathUri(null, fileLocalPath); _iWriteToOutput.OpenFile(null, fileLocalPath); _iWriteToOutput.WriteToOutputFilePathUri(null, fileLocalPath); _iWriteToOutput.OpenFile(null, filePath1); _iWriteToOutput.WriteToOutputFilePathUri(null, fileLocalPath); _iWriteToOutput.OpenFile(null, filePath2); } }
public async Task PerformUpdateRibbonDiffXml(IWriteToOutput iWriteToOutput, CommonConfiguration commonConfig, XDocument doc, EntityMetadata entityMetadata, RibbonCustomization ribbonCustomization) { if (entityMetadata == null && ribbonCustomization == null) { throw new ArgumentException("entityMetadata or ribbonCustomization"); } ContentComparerHelper.ClearRoot(doc); Publisher publisherDefault = null; { var repositoryPublisher = new PublisherRepository(_service); publisherDefault = await repositoryPublisher.GetDefaultPublisherAsync(); if (publisherDefault == null) { iWriteToOutput.WriteToOutput(_service.ConnectionData, Properties.OutputStrings.NotFoundedDefaultPublisher); iWriteToOutput.ActivateOutputWindow(_service.ConnectionData); return; } } var idSolution = Guid.NewGuid(); var solutionUniqueName = string.Format("RibbonDiffXml_{0}", idSolution); solutionUniqueName = solutionUniqueName.Replace("-", "_"); var solution = new Solution() { UniqueName = solutionUniqueName, FriendlyName = solutionUniqueName, SolutionId = idSolution, Description = "Temporary solution for exporting RibbonDiffXml.", PublisherId = publisherDefault.ToEntityReference(), Version = "1.0.0.0", }; iWriteToOutput.WriteToOutput(_service.ConnectionData, Properties.OutputStrings.CreatingNewSolutionFormat1, solutionUniqueName); solution.Id = await _service.CreateAsync(solution); iWriteToOutput.WriteToOutputSolutionUri(_service.ConnectionData, solution.UniqueName, solution.Id); try { if (entityMetadata != null) { iWriteToOutput.WriteToOutput(_service.ConnectionData, Properties.OutputStrings.InConnectionAddingInSolutionEntityFormat3, _service.ConnectionData.Name, solutionUniqueName, entityMetadata.LogicalName); { var repositorySolutionComponent = new SolutionComponentRepository(_service); await repositorySolutionComponent.AddSolutionComponentsAsync(solutionUniqueName, new[] { new SolutionComponent() { ComponentType = new OptionSetValue((int)ComponentType.Entity), ObjectId = entityMetadata.MetadataId.Value, RootComponentBehaviorEnum = SolutionComponent.Schema.OptionSets.rootcomponentbehavior.Include_Subcomponents_0, } }); } iWriteToOutput.WriteToOutput(_service.ConnectionData, Properties.OutputStrings.ExportingSolutionAndExtractingRibbonDiffXmlForEntityFormat2, solutionUniqueName, entityMetadata.LogicalName); } else if (ribbonCustomization != null) { iWriteToOutput.WriteToOutput(_service.ConnectionData, Properties.OutputStrings.InConnectionAddingInSolutionApplicationRibbonFormat2, _service.ConnectionData.Name, solutionUniqueName); { var repositorySolutionComponent = new SolutionComponentRepository(_service); await repositorySolutionComponent.AddSolutionComponentsAsync(solutionUniqueName, new[] { new SolutionComponent() { ComponentType = new OptionSetValue((int)ComponentType.RibbonCustomization), ObjectId = ribbonCustomization.Id, RootComponentBehaviorEnum = SolutionComponent.Schema.OptionSets.rootcomponentbehavior.Include_Subcomponents_0, } }); } iWriteToOutput.WriteToOutput(_service.ConnectionData, Properties.OutputStrings.ExportingSolutionAndExtractingApplicationRibbonDiffXmlFormat1, solutionUniqueName); } string header = (entityMetadata != null) ? entityMetadata.LogicalName : "ApplicationRibbon"; var repository = new ExportSolutionHelper(_service); var solutionBodyBinary = await repository.ExportSolutionAndGetBodyBinaryAsync(solutionUniqueName); { string fileName = EntityFileNameFormatter.GetSolutionFileName(_service.ConnectionData.Name, solution.UniqueName, $"{header} Solution Backup", FileExtension.zip); string filePath = Path.Combine(commonConfig.FolderForExport, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllBytes(filePath, solutionBodyBinary); iWriteToOutput.WriteToOutput(_service.ConnectionData, "Solution {0} Backup exported to {1}", solution.UniqueName, filePath); iWriteToOutput.WriteToOutputFilePathUri(_service.ConnectionData, filePath); } string ribbonDiffXml = string.Empty; if (entityMetadata != null) { ribbonDiffXml = ExportSolutionHelper.GetRibbonDiffXmlForEntityFromSolutionBody(entityMetadata.LogicalName, solutionBodyBinary); } else if (ribbonCustomization != null) { ribbonDiffXml = ExportSolutionHelper.GetApplicationRibbonDiffXmlFromSolutionBody(solutionBodyBinary); } ribbonDiffXml = ContentComparerHelper.FormatXmlByConfiguration( ribbonDiffXml , commonConfig , XmlOptionsControls.RibbonXmlOptions , schemaName: AbstractDynamicCommandXsdSchemas.RibbonSchema , entityName: entityMetadata?.LogicalName ?? string.Empty ); { string filePath = string.Empty; if (entityMetadata != null) { string fileName = EntityFileNameFormatter.GetEntityRibbonDiffXmlFileName(_service.ConnectionData.Name, entityMetadata.LogicalName, "BackUp", FileExtension.xml); filePath = Path.Combine(commonConfig.FolderForExport, FileOperations.RemoveWrongSymbols(fileName)); iWriteToOutput.WriteToOutput(_service.ConnectionData, "{0} RibbonDiffXml BackUp exported to {1}", entityMetadata.LogicalName, filePath); } else if (ribbonCustomization != null) { string fileName = EntityFileNameFormatter.GetApplicationRibbonDiffXmlFileName(_service.ConnectionData.Name, "BackUp", FileExtension.xml); filePath = Path.Combine(commonConfig.FolderForExport, FileOperations.RemoveWrongSymbols(fileName)); iWriteToOutput.WriteToOutput(_service.ConnectionData, "Application RibbonDiffXml BackUp exported to {0}", filePath); } File.WriteAllText(filePath, ribbonDiffXml, new UTF8Encoding(false)); iWriteToOutput.WriteToOutputFilePathUri(_service.ConnectionData, filePath); } if (entityMetadata != null) { solutionBodyBinary = ExportSolutionHelper.ReplaceRibbonDiffXmlForEntityInSolutionBody(entityMetadata.LogicalName, solutionBodyBinary, doc.Root); } else if (ribbonCustomization != null) { solutionBodyBinary = ExportSolutionHelper.ReplaceApplicationRibbonDiffXmlInSolutionBody(solutionBodyBinary, doc.Root); } { string fileName = EntityFileNameFormatter.GetSolutionFileName(_service.ConnectionData.Name, solution.UniqueName, $"{header} Changed Solution Backup", FileExtension.zip); string filePath = Path.Combine(commonConfig.FolderForExport, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllBytes(filePath, solutionBodyBinary); iWriteToOutput.WriteToOutput(_service.ConnectionData, "Changed Solution {0} Backup exported to {1}", solution.UniqueName, filePath); iWriteToOutput.WriteToOutputFilePathUri(_service.ConnectionData, filePath); } iWriteToOutput.WriteToOutput(_service.ConnectionData, Properties.OutputStrings.ImportingSolutionFormat1, solutionUniqueName); await repository.ImportSolutionAsync(solutionBodyBinary); await DeleteSolution(iWriteToOutput, solution); { var repositoryPublish = new PublishActionsRepository(_service); if (entityMetadata != null) { iWriteToOutput.WriteToOutput(_service.ConnectionData, Properties.OutputStrings.InConnectionPublishingEntitiesFormat2, _service.ConnectionData.Name, entityMetadata.LogicalName); await repositoryPublish.PublishEntitiesAsync(new[] { entityMetadata.LogicalName }); } else if (ribbonCustomization != null) { iWriteToOutput.WriteToOutput(_service.ConnectionData, Properties.OutputStrings.InConnectionPublishingApplicationRibbonFormat1, _service.ConnectionData.Name); await repositoryPublish.PublishApplicationRibbonAsync(); } } } finally { var task = DeleteSolution(iWriteToOutput, solution); } }