public static async Task <IOrganizationServiceExtented> ConnectAndWriteToOutputAsync(IWriteToOutput iWriteToOutput, ConnectionData connectionData) { if (connectionData == null) { iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.NoCurrentCRMConnection); return(null); } iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectingToCRM); iWriteToOutput.WriteToOutput(connectionData, connectionData.GetConnectionDescription()); // Подключаемся к CRM. var service = await ConnectAsync(connectionData); if (service == null) { iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return(null); } iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CurrentServiceEndpointFormat1, service.CurrentServiceEndpoint); return(service); }
private async Task ExportingPluginConfigurationXml(ConnectionData connectionData, CommonConfiguration commonConfig) { if (connectionData == null) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.NoCurrentCRMConnection); return; } this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectingToCRM); this._iWriteToOutput.WriteToOutput(connectionData, connectionData.GetConnectionDescription()); // Подключаемся к CRM. var service = await QuickConnection.ConnectAsync(connectionData); if (service == null) { _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return; } this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CurrentServiceEndpointFormat1, service.CurrentServiceEndpoint); var filePath = await CreatePluginDescription(connectionData, service, commonConfig); this._iWriteToOutput.PerformAction(service.ConnectionData, filePath); }
/// <summary> /// Выполнение обновления содержания и публикация. /// </summary> public void UpdateContentAndPublish() { if (_Elements.Count == 0) { this._iWriteToOutput.WriteToOutput(_service.ConnectionData, Properties.OutputStrings.NothingToPublish); return; } this._iWriteToOutput.WriteToOutput(_service.ConnectionData, "Updating WebResources content..."); UpdateContent(); this._iWriteToOutput.WriteToOutput(_service.ConnectionData, "Publishing WebResources..."); PublishActionsRepository repository = new PublishActionsRepository(_service); repository.PublishWebResources(_Elements.Keys); FormatTextTableHandler table = new FormatTextTableHandler(); table.SetHeader("WebResourceName", "WebResourceType"); foreach (var element in this._Elements.Values.OrderBy(e => e.WebResource.Name)) { element.WebResource.FormattedValues.TryGetValue(WebResource.Schema.Attributes.webresourcetype, out var webresourcetype); table.AddLine(element.WebResource.Name, webresourcetype); } this._iWriteToOutput.WriteToOutput(_service.ConnectionData, "Published web-resources: {0}", this._Elements.Values.Count); var lines = table.GetFormatedLines(false); lines.ForEach(item => _iWriteToOutput.WriteToOutput(_service.ConnectionData, " {0}", item)); }
private static async Task <bool> TestConnect(ConnectionData connectionData, IWriteToOutput iWriteToOutput) { iWriteToOutput.ActivateOutputWindow(connectionData); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectingToCRM); iWriteToOutput.WriteToOutput(connectionData, connectionData.GetConnectionDescription()); try { var service = ConnectInternal( connectionData , true , out OrganizationDetail organizationDetail ); if (service != null) { { WhoAmIResponse whoresponse = (WhoAmIResponse)service.Execute(new WhoAmIRequest()); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.WhoAmIRequestExecutedSuccessfully); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.QuickConnectionOrganizationIdFormat1, whoresponse.OrganizationId); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.QuickConnectionBusinessUnitIdFormat1, whoresponse.BusinessUnitId); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.QuickConnectionUserIdFormat1, whoresponse.UserId); } var result = new OrganizationServiceExtentedProxy(service, connectionData); await LoadOrganizationDataAsync(result, organizationDetail); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CurrentServiceEndpointFormat1, result.CurrentServiceEndpoint); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.SuccessfullyConnectedFormat1, connectionData.Name); return(true); } else { iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return(false); } } catch (Exception ex) { iWriteToOutput.WriteErrorToOutput(connectionData, ex); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return(false); } }
private static async Task <bool> TestConnect(ConnectionData connectionData, IWriteToOutput iWriteToOutput, System.Windows.Window window) { iWriteToOutput.ActivateOutputWindow(connectionData, window); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectingToCRM); iWriteToOutput.WriteToOutput(connectionData, connectionData.GetConnectionDescription()); try { var connectionResult = await ConnectInternal(connectionData, true); OrganizationServiceProxy serviceProxy = connectionResult.Item1; OrganizationDetail organizationDetail = connectionResult.Item2; string currentServiceEndpoint = GetServiceManagementEndpoint(connectionData.ConnectionId); if (serviceProxy != null) { using (var serviceProxyExt = new OrganizationServiceExtentedProxy(serviceProxy, connectionData, currentServiceEndpoint)) { var whoAmIResponse = await serviceProxyExt.ExecuteAsync <WhoAmIResponse>(new WhoAmIRequest()); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.WhoAmIRequestExecutedSuccessfully); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.QuickConnectionOrganizationIdFormat1, whoAmIResponse.OrganizationId); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.QuickConnectionBusinessUnitIdFormat1, whoAmIResponse.BusinessUnitId); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.QuickConnectionUserIdFormat1, whoAmIResponse.UserId); await LoadOrganizationDataAsync(serviceProxyExt, organizationDetail, whoAmIResponse); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CurrentServiceEndpointFormat1, serviceProxyExt.CurrentServiceEndpoint); } iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.SuccessfullyConnectedFormat1, connectionData.Name); return(true); } else { iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return(false); } } catch (Exception ex) { iWriteToOutput.WriteErrorToOutput(connectionData, ex); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return(false); } }
private async Task <IOrganizationServiceExtented> GetService() { ConnectionData connectionData = null; cmBCurrentConnection.Dispatcher.Invoke(() => { connectionData = cmBCurrentConnection.SelectedItem as ConnectionData; }); if (connectionData == null) { return(null); } if (_connectionCache.ContainsKey(connectionData.ConnectionId)) { return(_connectionCache[connectionData.ConnectionId]); } ToggleControls(connectionData, false, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectingToCRM); _iWriteToOutput.WriteToOutput(connectionData, connectionData.GetConnectionDescription()); try { var service = await QuickConnection.ConnectAsync(connectionData); if (service != null) { _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CurrentServiceEndpointFormat1, service.CurrentServiceEndpoint); _connectionCache[connectionData.ConnectionId] = service; return(service); } else { _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); } } catch (Exception ex) { _iWriteToOutput.WriteErrorToOutput(connectionData, ex); } finally { ToggleControls(connectionData, true, string.Empty); } return(null); }
public static string CorrectFolderIfEmptyOrNotExists(IWriteToOutput iWriteToOutput, string folder) { if (string.IsNullOrEmpty(folder)) { iWriteToOutput.WriteToOutput(null, Properties.OutputStrings.FolderForExportIsEmpty); folder = FileOperations.GetDefaultFolderForExportFilePath(); } else if (!Directory.Exists(folder)) { iWriteToOutput.WriteToOutput(null, Properties.OutputStrings.FolderForExportDoesNotExistsFormat1, folder); folder = FileOperations.GetDefaultFolderForExportFilePath(); } return(folder); }
private static bool ValidateXmlDocument(ConnectionData connectionData, IWriteToOutput iWriteToOutput, XDocument doc) { ContentComparerHelper.ClearRoot(doc); XmlSchemaSet schemas = new XmlSchemaSet(); { var schemasResources = AbstractDynamicCommandXsdSchemas.GetXsdSchemas(AbstractDynamicCommandXsdSchemas.WebResourceDependencyXmlSchema); 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.WebResourceDependencyXmlSchema); 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 void UpdateStatus(string format, params object[] args) { string message = format; if (args != null && args.Length > 0) { message = string.Format(format, args); } _iWriteToOutput.WriteToOutput(_service.ConnectionData, message); this.stBIStatus.Dispatcher.Invoke(() => { this.stBIStatus.Content = message; }); }
private void WriteProgressMessage() { double proc = _total > 0 ? (double)_current * 100 / _total : 0; if (proc >= _level) { _writeToOutput.WriteToOutput(null, Properties.OutputStrings.ProgressReporterStep, this._procedureName, _level.ToString("D2")); _level += _percentStep; } }
public ProgressReporter(IWriteToOutput _writeToOutput, int total, int percentStep, string procedureName) { this._writeToOutput = _writeToOutput; this._total = total; this._procedureName = procedureName; this._percentStep = percentStep; if (total > 0) { _writeToOutput.WriteToOutput(null, Properties.OutputStrings.ProgressReporterHeader, this._procedureName, total); } }
public async Task ExecuteShowingSystemUserExplorer(string selection, ConnectionData connectionData, CommonConfiguration commonConfig) { if (connectionData == null) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.NoCurrentCRMConnection); return; } string operation = string.Format(Properties.OperationNames.OpeningSystemUsersExplorerFormat1, connectionData?.Name); this._iWriteToOutput.WriteToOutputStartOperation(connectionData, operation); try { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectingToCRM); this._iWriteToOutput.WriteToOutput(connectionData, connectionData.GetConnectionDescription()); // Подключаемся к CRM. var service = await QuickConnection.ConnectAsync(connectionData); if (service == null) { _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return; } this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CurrentServiceEndpointFormat1, service.CurrentServiceEndpoint); WindowHelper.OpenSystemUsersExplorer(this._iWriteToOutput, service, commonConfig, selection); } catch (Exception ex) { this._iWriteToOutput.WriteErrorToOutput(connectionData, ex); } finally { this._iWriteToOutput.WriteToOutputEndOperation(connectionData, operation); } }
protected void SetCurrentConnection(IWriteToOutput iWriteToOutput, ConnectionData connectionData) { if (connectionData == null || connectionData.ConnectionConfiguration == null) { return; } if (connectionData.ConnectionConfiguration.CurrentConnectionData?.ConnectionId == connectionData.ConnectionId) { return; } connectionData.ConnectionConfiguration.SetCurrentConnection(connectionData.ConnectionId); connectionData.ConnectionConfiguration.Save(); iWriteToOutput.WriteToOutput(null, Properties.OutputStrings.CurrentConnectionFormat1, connectionData.Name); }
private async Task DeleteSolution(IWriteToOutput iWriteToOutput, Solution solution) { if (solution.Id == Guid.Empty) { return; } try { iWriteToOutput.WriteToOutput(_service.ConnectionData, Properties.OutputStrings.DeletingSolutionFormat1, solution.UniqueName); await _service.DeleteAsync(solution.LogicalName, solution.Id); solution.Id = Guid.Empty; } catch (Exception ex) { iWriteToOutput.WriteErrorToOutput(_service.ConnectionData, ex, Properties.OutputStrings.DeletingSolutionFailedFormat1, solution.UniqueName); } }
private async Task ComparingAssemblyAndCrmSolution(ConnectionData connectionData, CommonConfiguration commonConfig, string projectName, string defaultOutputFilePath) { if (connectionData == null) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.NoCurrentCRMConnection); return; } if (string.IsNullOrEmpty(projectName)) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.AssemblyNameIsEmpty); return; } this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectingToCRM); this._iWriteToOutput.WriteToOutput(connectionData, connectionData.GetConnectionDescription()); // Подключаемся к CRM. var service = await QuickConnection.ConnectAsync(connectionData); if (service == null) { _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return; } this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CurrentServiceEndpointFormat1, service.CurrentServiceEndpoint); var repositoryAssembly = new PluginAssemblyRepository(service); var assembly = await repositoryAssembly.FindAssemblyAsync(projectName); if (assembly == null) { assembly = await repositoryAssembly.FindAssemblyByLikeNameAsync(projectName); } if (assembly == null) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.PluginAssemblyNotFoundedByNameFormat1, projectName); WindowHelper.OpenPluginAssemblyWindow( this._iWriteToOutput , service , commonConfig , projectName ); 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(); } string filePath = await CreateFileWithAssemblyComparing(commonConfig.FolderForExport, service, assembly.Id, assembly.Name, defaultOutputFilePath); this._iWriteToOutput.PerformAction(service.ConnectionData, filePath); }
private async Task CheckingPluginImages(ConnectionData connectionData, CommonConfiguration commonConfig) { if (connectionData == null) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.NoCurrentCRMConnection); return; } StringBuilder content = new StringBuilder(); content.AppendLine(this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectingToCRM)); content.AppendLine(this._iWriteToOutput.WriteToOutput(connectionData, connectionData.GetConnectionDescription())); // Подключаемся к CRM. var service = await QuickConnection.ConnectAsync(connectionData); if (service == null) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return; } content.AppendLine(this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CurrentServiceEndpointFormat1, service.CurrentServiceEndpoint)); var repository = new PluginSearchRepository(service); var search = await repository.FindAllAsync(null, string.Empty, string.Empty, string.Empty); var querySteps = search.SdkMessageProcessingStep .OrderBy(ent => ent.EventHandler?.Name ?? "Unknown") .ThenBy(ent => ent.PrimaryObjectTypeCodeName) .ThenBy(ent => ent.SdkMessageId?.Name ?? "Unknown", new MessageComparer()) .ThenBy(ent => ent.Stage.Value) .ThenBy(ent => ent.Mode.Value) .ThenBy(ent => ent.Rank) .ThenBy(ent => ent.Name) ; int stepNumber = 1; bool hasInfo = false; foreach (var step in querySteps) { var queryImage = from image in search.SdkMessageProcessingStepImage where image.SdkMessageProcessingStepId != null where image.SdkMessageProcessingStepId.Id == step.Id orderby image.ImageType.Value, image.CreatedOn, image.Name select image; var preImages = queryImage.Where(im => im.ImageType.Value == 0 || im.ImageType.Value == 2); var postImages = queryImage.Where(im => im.ImageType.Value == 1 || im.ImageType.Value == 2); var preImagesByEntityAlias = preImages.GroupBy(im => im.EntityAlias).Where(gr => gr.Count() > 1); var preImagesByName = preImages.GroupBy(im => im.EntityAlias).Where(gr => gr.Count() > 1); var postImagesByEntityAlias = postImages.GroupBy(im => im.EntityAlias).Where(gr => gr.Count() > 1); var postImagesByName = postImages.GroupBy(im => im.EntityAlias).Where(gr => gr.Count() > 1); var hasDuplicatesPreImagesByEntityAlias = preImagesByEntityAlias.Count() > 0; var hasDuplicatesPreImagesByName = preImagesByName.Count() > 0; var hasDuplicatesPostImagesByEntityAlias = postImagesByEntityAlias.Count() > 0; var hasDuplicatesPostImagesByName = postImagesByName.Count() > 0; if (hasDuplicatesPreImagesByEntityAlias || hasDuplicatesPreImagesByName || hasDuplicatesPostImagesByEntityAlias || hasDuplicatesPostImagesByName ) { if (content.Length > 0) { content.AppendLine().AppendLine(); } hasInfo = true; content.AppendFormat("{0}. {1}", stepNumber, step.EventHandler?.Name ?? "Unknown").AppendLine(); content.AppendFormat("Entity '{0}', Message '{1}', Stage '{2}', Rank {3}, Statuscode {4}" , step.PrimaryObjectTypeCodeName , step.SdkMessageId?.Name ?? "Unknown" , SdkMessageProcessingStepRepository.GetStageName(step.Stage.Value, step.Mode.Value) , step.Rank.ToString() , step.FormattedValues[SdkMessageProcessingStep.Schema.Attributes.statuscode] ).AppendLine(); DescribeImages(content, stepNumber, hasDuplicatesPreImagesByEntityAlias, preImagesByEntityAlias, "Pre images duplicates by EntityAlias:"); DescribeImages(content, stepNumber, hasDuplicatesPreImagesByName, preImagesByName, "Pre images duplicates by Name:"); DescribeImages(content, stepNumber, hasDuplicatesPostImagesByEntityAlias, postImagesByEntityAlias, "Post images duplicates by EntityAlias:"); DescribeImages(content, stepNumber, hasDuplicatesPostImagesByName, postImagesByName, "Post images duplicates by Name:"); stepNumber++; } } if (!hasInfo) { content.AppendLine(this._iWriteToOutput.WriteToOutput(connectionData, "No duplicates were found.")); } string fileName = string.Format("{0}.Checking Plugin Images Duplicates at {1}.txt", connectionData.Name, DateTime.Now.ToString("yyyy.MM.dd HH-mm-ss")); 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(); } string filePath = Path.Combine(commonConfig.FolderForExport, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllText(filePath, content.ToString(), new UTF8Encoding(false)); this._iWriteToOutput.WriteToOutput(connectionData, "Created file with Checking Plugin Images Duplicates: {0}", filePath); this._iWriteToOutput.PerformAction(service.ConnectionData, filePath); }
private async Task UpdateContentAndPublish(List <SelectedFile> selectedFiles, ConnectionData connectionData) { if (connectionData == null) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.NoCurrentCRMConnection); return; } if (connectionData.IsReadOnly) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionIsReadOnlyFormat1, connectionData.Name); return; } this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectingToCRM); this._iWriteToOutput.WriteToOutput(connectionData, connectionData.GetConnectionDescription()); // Подключаемся к CRM. var service = await QuickConnection.ConnectAsync(connectionData); if (service == null) { _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return; } this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CurrentServiceEndpointFormat1, service.CurrentServiceEndpoint); // Менеджер для публикации в CRM. PublishManager publishHelper = new PublishManager(this._iWriteToOutput, service); // Репозиторий для работы с веб-ресурсами WebResourceRepository webResourceRepository = new WebResourceRepository(service); bool allForOther = false; var groups = selectedFiles.GroupBy(sel => sel.Extension); foreach (var gr in groups) { var names = gr.Select(sel => sel.FriendlyFilePath).ToArray(); var dict = webResourceRepository.FindMultiple(gr.Key, names); foreach (var selectedFile in gr) { if (File.Exists(selectedFile.FilePath)) { this._iWriteToOutput.WriteToOutput(connectionData, "Try to find web-resource by name: {0}. Searching...", selectedFile.Name); string key = selectedFile.FriendlyFilePath.ToLower(); var contentFile = Convert.ToBase64String(File.ReadAllBytes(selectedFile.FilePath)); var webresource = WebResourceRepository.FindWebResourceInDictionary(dict, key, gr.Key); if (webresource != null) { var webName = webresource.Name; this._iWriteToOutput.WriteToOutput(connectionData, "WebResource founded by name. WebResourceId: {0} Name: {1}", webresource.Id, webName); } else { this._iWriteToOutput.WriteToOutput(connectionData, "WebResource not founded by name. FileName: {0}. Open linking dialog...", selectedFile.Name); Guid?webId = connectionData.GetLastLinkForFile(selectedFile.FriendlyFilePath); bool?dialogResult = null; Guid?selectedWebResourceId = null; var t = new Thread(() => { try { var form = new Views.WindowWebResourceSelectOrCreate(this._iWriteToOutput, service, connectionData, selectedFile, webId); form.ShowCreateButton(allForOther); dialogResult = form.ShowDialog(); allForOther = form.ForAllOther; selectedWebResourceId = form.SelectedWebResourceId; } catch (Exception ex) { DTEHelper.WriteExceptionToOutput(connectionData, ex); } }); t.SetApartmentState(ApartmentState.STA); t.Start(); t.Join(); if (string.IsNullOrEmpty(connectionData?.LastSelectedSolutionsUniqueName?.FirstOrDefault())) { allForOther = false; } connectionData.Save(); if (dialogResult.GetValueOrDefault()) { if (selectedWebResourceId.HasValue) { webresource = await webResourceRepository.GetByIdAsync(selectedWebResourceId.Value); } else { this._iWriteToOutput.WriteToOutput(connectionData, "!Warning. WebResource not linked. name: {0}.", selectedFile.Name); } } else { this._iWriteToOutput.WriteToOutput(connectionData, "Updating Content and Publishing was cancelled."); return; } } if (webresource != null) { // Запоминается файл connectionData.AddMapping(webresource.Id, selectedFile.FriendlyFilePath); publishHelper.Add(new ElementForPublish(selectedFile, webresource)); } } else { this._iWriteToOutput.WriteToOutput(connectionData, "File not founded: {0}", selectedFile.FilePath); } } } //Сохранение настроек после публикации connectionData.Save(); publishHelper.UpdateContentAndPublish(); }
private async Task <string> TrasnferAudit() { StringBuilder content = new StringBuilder(); await _comparerSource.InitializeConnection(_iWriteToOutput, content, "Connection CRM Source.", "Connection CRM Target."); string operation = string.Format(Properties.OperationNames.TransferingAuditFormat2, ConnectionSource.Name, ConnectionTarget.Name); content.AppendLine(_iWriteToOutput.WriteToOutputStartOperation(null, operation)); var repositorySource = new EntityMetadataRepository(_comparerSource.Service1); var repositoryTarget = new EntityMetadataRepository(_comparerSource.Service2); var taskSource = repositorySource.GetEntitiesWithAttributesForAuditAsync(); var taskTarget = repositoryTarget.GetEntitiesWithAttributesForAuditAsync(); var listEntityMetadataSource = await taskSource; content.AppendLine(_iWriteToOutput.WriteToOutput(null, "Entities in {0}: {1}", ConnectionSource.Name, listEntityMetadataSource.Count())); var listEntityMetadataTarget = await taskTarget; content.AppendLine(_iWriteToOutput.WriteToOutput(null, "Entities in {0}: {1}", ConnectionTarget.Name, listEntityMetadataTarget.Count())); var commonEntityMetadata = new List <LinkedEntities <EntityMetadata> >(); foreach (var entityMetadata1 in listEntityMetadataSource.OrderBy(e => e.LogicalName)) { { var entityMetadata2 = listEntityMetadataTarget.FirstOrDefault(e => string.Equals(e.LogicalName, entityMetadata1.LogicalName, StringComparison.InvariantCultureIgnoreCase)); if (entityMetadata2 != null) { commonEntityMetadata.Add(new LinkedEntities <EntityMetadata>(entityMetadata1, entityMetadata2)); continue; } } } HashSet <string> entitiesToPublish = new HashSet <string>(); var entitiesToEnableAudit = commonEntityMetadata.Where( e => e.Entity1.IsAuditEnabled != null && e.Entity1.IsAuditEnabled.Value && e.Entity2.IsAuditEnabled != null && e.Entity2.IsAuditEnabled.CanBeChanged && e.Entity2.IsAuditEnabled.Value == false ).ToList(); if (entitiesToEnableAudit.Any()) { content .AppendLine() .AppendFormat("Enabling Audit on Entities: {0}", entitiesToEnableAudit.Count) .AppendLine(); foreach (var entityLink in entitiesToEnableAudit.OrderBy(e => e.Entity1.LogicalName)) { content.AppendLine(_tabSpacer + entityLink.Entity1.LogicalName); entitiesToPublish.Add(entityLink.Entity1.LogicalName); try { entityLink.Entity2.IsAuditEnabled.Value = true; await repositoryTarget.UpdateEntityMetadataAsync(entityLink.Entity2); } catch (Exception ex) { var desc = DTEHelper.GetExceptionDescription(ex); content.AppendLine(desc); } } } bool first = true; foreach (var entityLink in commonEntityMetadata.OrderBy(e => e.Entity1.LogicalName)) { var query = from source in entityLink.Entity1.Attributes join target in entityLink.Entity2.Attributes on source.LogicalName equals target.LogicalName where source.IsAuditEnabled != null && string.IsNullOrEmpty(source.AttributeOf) && string.IsNullOrEmpty(target.AttributeOf) && source.IsAuditEnabled.Value && target.IsAuditEnabled != null && target.IsAuditEnabled.CanBeChanged && target.IsAuditEnabled.Value == false orderby target.LogicalName select target; foreach (var attribute in query) { if (first) { content .AppendLine() .AppendLine("Enabling Audit on Attributes:") .AppendLine(); first = false; } content .AppendFormat(_tabSpacer + "{0}.{1}", attribute.EntityLogicalName, attribute.LogicalName) .AppendLine(); entitiesToPublish.Add(attribute.EntityLogicalName); try { attribute.IsAuditEnabled.Value = true; await repositoryTarget.UpdateAttributeMetadataAsync(attribute); } catch (Exception ex) { var desc = DTEHelper.GetExceptionDescription(ex); content.AppendLine(desc); } } } if (entitiesToPublish.Any()) { content .AppendLine() .AppendFormat("Publish Entities: {0}", entitiesToPublish.Count) .AppendLine(); foreach (var item in entitiesToPublish.OrderBy(s => s)) { content.AppendLine(_tabSpacer + item); } var repositoryPublish = new PublishActionsRepository(_comparerSource.Service2); try { await repositoryPublish.PublishEntitiesAsync(entitiesToPublish); } catch (Exception ex) { var desc = DTEHelper.GetExceptionDescription(ex); content.AppendLine(desc); } } content.AppendLine().AppendLine().AppendLine(_iWriteToOutput.WriteToOutputEndOperation(null, operation)); string fileName = string.Format("OrgTransfer Audit from {0} to {1} at {2}.txt" , this.ConnectionSource.Name , this.ConnectionTarget.Name , DateTime.Now.ToString("yyyy.MM.dd HH-mm-ss")); string filePath = Path.Combine(_folder, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllText(filePath, content.ToString(), new UTF8Encoding(false)); return(filePath); }
public static void CheckingFilesEncoding(IWriteToOutput iWriteToOutput, ConnectionData connectionData, IEnumerable <SelectedFile> selectedFiles, out List <SelectedFile> filesWithoutUTF8Encoding) { filesWithoutUTF8Encoding = new List <SelectedFile>(); int countWithUTF8Encoding = 0; List <string> listNotExistsOnDisk = new List <string>(); List <string> listNotHaveBOM = new List <string>(); List <string> listWrongEncoding = new List <string>(); List <string> listMultipleEncodingHasUTF8 = new List <string>(); List <string> listMultipleEncodingHasNotUTF8 = new List <string>(); foreach (var selectedFile in selectedFiles) { if (File.Exists(selectedFile.FilePath)) { var arrayFile = File.ReadAllBytes(selectedFile.FilePath); var encodings = ContentCoparerHelper.GetFileEncoding(arrayFile); if (encodings.Count > 0) { if (encodings.Count == 1) { if (encodings[0].CodePage == Encoding.UTF8.CodePage) { countWithUTF8Encoding++; } else { listWrongEncoding.Add(string.Format("{0} has encoding {1}", selectedFile.FriendlyFilePath, encodings[0].EncodingName)); filesWithoutUTF8Encoding.Add(selectedFile); } } else { filesWithoutUTF8Encoding.Add(selectedFile); bool hasUTF8 = false; StringBuilder str = new StringBuilder(); foreach (var enc in encodings) { if (enc.CodePage == Encoding.UTF8.CodePage) { hasUTF8 = true; } if (str.Length > 0) { str.Append(", "); str.Append(enc.EncodingName); } } if (hasUTF8) { listMultipleEncodingHasUTF8.Add(string.Format("{0} has encoding {1}", selectedFile.FriendlyFilePath, str.ToString())); } else { listMultipleEncodingHasNotUTF8.Add(string.Format("{0} has encoding {1}", selectedFile.FriendlyFilePath, str.ToString())); } } } else { listNotHaveBOM.Add(selectedFile.FriendlyFilePath); filesWithoutUTF8Encoding.Add(selectedFile); } } else { listNotExistsOnDisk.Add(selectedFile.FilePath); } } if (listNotHaveBOM.Count > 0) { iWriteToOutput.WriteToOutput(connectionData, string.Empty); iWriteToOutput.WriteToOutput(connectionData, "File does not have encoding: {0}", listNotHaveBOM.Count); listNotHaveBOM.Sort(); listNotHaveBOM.ForEach(item => iWriteToOutput.WriteToOutput(connectionData, item)); } if (listWrongEncoding.Count > 0) { iWriteToOutput.WriteToOutput(connectionData, string.Empty); iWriteToOutput.WriteToOutput(connectionData, "File has wrong Encoding: {0}", listWrongEncoding.Count); listWrongEncoding.Sort(); listWrongEncoding.ForEach(item => iWriteToOutput.WriteToOutput(connectionData, item)); } if (listMultipleEncodingHasUTF8.Count > 0) { iWriteToOutput.WriteToOutput(connectionData, string.Empty); iWriteToOutput.WriteToOutput(connectionData, "File complies multiple Encoding with UTF8 in list: {0}", listMultipleEncodingHasUTF8.Count); listMultipleEncodingHasUTF8.Sort(); listMultipleEncodingHasUTF8.ForEach(item => iWriteToOutput.WriteToOutput(connectionData, item)); } if (listMultipleEncodingHasNotUTF8.Count > 0) { iWriteToOutput.WriteToOutput(connectionData, string.Empty); iWriteToOutput.WriteToOutput(connectionData, "File complies multiple Encoding WITHOUT UTF8 in list: {0}", listMultipleEncodingHasNotUTF8.Count); listMultipleEncodingHasNotUTF8.Sort(); listMultipleEncodingHasNotUTF8.ForEach(item => iWriteToOutput.WriteToOutput(connectionData, item)); } if (listNotExistsOnDisk.Count > 0) { iWriteToOutput.WriteToOutput(connectionData, string.Empty); iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.FileNotExistsFormat1, listNotExistsOnDisk.Count); listNotExistsOnDisk.Sort(); listNotExistsOnDisk.ForEach(item => iWriteToOutput.WriteToOutput(connectionData, item)); } if (countWithUTF8Encoding > 0) { if (countWithUTF8Encoding == selectedFiles.Count()) { iWriteToOutput.WriteToOutput(connectionData, string.Empty); iWriteToOutput.WriteToOutput(connectionData, "All Files has UTF8 Encoding: {0}", countWithUTF8Encoding); } else { iWriteToOutput.WriteToOutput(connectionData, string.Empty); iWriteToOutput.WriteToOutput(connectionData, "Files has UTF8 Encoding: {0}", countWithUTF8Encoding); } } }
private async Task CheckingEntitiesOwnership(ConnectionData connectionData, CommonConfiguration commonConfig) { if (connectionData == null) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.NoCurrentCRMConnection); return; } StringBuilder content = new StringBuilder(); content.AppendLine(this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectingToCRM)); content.AppendLine(this._iWriteToOutput.WriteToOutput(connectionData, connectionData.GetConnectionDescription())); // Подключаемся к CRM. var service = await QuickConnection.ConnectAsync(connectionData); if (service == null) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return; } content.AppendLine(this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CurrentServiceEndpointFormat1, service.CurrentServiceEndpoint)); EntityMetadataRepository repositoryEntity = new EntityMetadataRepository(service); var allEntities = await repositoryEntity.GetEntitiesDisplayNameAsync(); var groups = allEntities.GroupBy(ent => ent.OwnershipType).OrderBy(gr => gr.Key); foreach (var gr in groups) { content.AppendLine(); int count = gr.Count(); string name = "Null"; if (gr.Key.HasValue) { name = gr.Key.Value.ToString(); } content.AppendFormat("Entities with Ownership {0}: {1}", name, count).AppendLine(); gr.OrderBy(ent => ent.LogicalName).ToList().ForEach(ent => content.AppendLine(tabSpacer + ent.LogicalName)); } string fileName = string.Format("{0}.Entities with Ownership at {1}.txt", connectionData.Name, DateTime.Now.ToString("yyyy.MM.dd HH-mm-ss")); 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(); } string filePath = Path.Combine(commonConfig.FolderForExport, FileOperations.RemoveWrongSymbols(fileName)); File.WriteAllText(filePath, content.ToString(), new UTF8Encoding(false)); this._iWriteToOutput.WriteToOutput(connectionData, "Created file with Entities with Ownership: {0}", filePath); this._iWriteToOutput.PerformAction(service.ConnectionData, filePath); }
private async Task CreatingLastLinkReport(SelectedFile selectedFile, ConnectionData connectionData) { if (connectionData == null) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.NoCurrentCRMConnection); return; } if (!File.Exists(selectedFile.FilePath)) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.FileNotExistsFormat1, selectedFile.FilePath); return; } this._iWriteToOutput.WriteToOutput(connectionData, connectionData.GetConnectionDescription()); // Подключаемся к CRM. var service = await QuickConnection.ConnectAsync(connectionData); if (service == null) { _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return; } this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CurrentServiceEndpointFormat1, service.CurrentServiceEndpoint); Guid?idLastLink = connectionData.GetLastLinkForFile(selectedFile.FriendlyFilePath); bool?dialogResult = null; Guid?selectedReportId = null; string selectedPath = string.Empty; var t = new Thread((ThreadStart)(() => { try { var form = new Views.WindowReportSelect(this._iWriteToOutput, service, selectedFile, idLastLink); dialogResult = form.ShowDialog(); selectedReportId = form.SelectedReportId; } catch (Exception ex) { DTEHelper.WriteExceptionToOutput(connectionData, ex); } })); t.SetApartmentState(ApartmentState.STA); t.Start(); t.Join(); if (dialogResult.GetValueOrDefault()) { if (selectedReportId.HasValue) { ReportRepository reportRepository = new ReportRepository(service); this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ReportIsSelected); var webresource = await reportRepository.GetByIdAsync(selectedReportId.Value); connectionData.AddMapping(webresource.Id, selectedFile.FriendlyFilePath); connectionData.Save(); } else { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ReportNotFoundedByNameFormat1, selectedFile.Name); } } else { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CreatingLastLinkWasCanceled); return; } }
private async Task OpeningWebResourceExplorer(ConnectionData connectionData, CommonConfiguration commonConfig, string selection) { if (connectionData == null) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.NoCurrentCRMConnection); return; } this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectingToCRM); this._iWriteToOutput.WriteToOutput(connectionData, connectionData.GetConnectionDescription()); // Подключаемся к CRM. var service = await QuickConnection.ConnectAsync(connectionData); if (service == null) { _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return; } this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CurrentServiceEndpointFormat1, service.CurrentServiceEndpoint); WindowHelper.OpenWebResourceExplorerWindow(this._iWriteToOutput, service, commonConfig, selection); }
public async Task InitializeConnection(IWriteToOutput writeToOutput, StringBuilder content, string messageConnection1 = null, string messageConnection2 = null) { bool service1IsNull = this.Service1 == null; bool service2IsNull = this.Service2 == null; { var mess1 = messageConnection1; if (string.IsNullOrEmpty(mess1)) { mess1 = Properties.OutputStrings.ConnectingToCRM; } var mess2 = Connection1.GetConnectionDescription(); if (service1IsNull) { writeToOutput.WriteToOutput(null, mess1); writeToOutput.WriteToOutput(null, mess2); this.Service1 = await QuickConnection.ConnectAsync(Connection1); } var mess3 = string.Format(Properties.OutputStrings.CurrentServiceEndpointFormat1, this.Service1.CurrentServiceEndpoint); if (service1IsNull) { writeToOutput.WriteToOutput(null, mess3); } if (content != null) { content.AppendLine(mess1); content.AppendLine(mess2); content.AppendLine(mess3); } } if (service1IsNull) { writeToOutput.WriteToOutput(null, string.Empty); } if (content != null) { content.AppendLine(); } { var mess1 = messageConnection2; if (string.IsNullOrEmpty(mess1)) { mess1 = Properties.OutputStrings.ConnectingToCRM; } var mess2 = Connection2.GetConnectionDescription(); if (service2IsNull) { writeToOutput.WriteToOutput(null, mess1); writeToOutput.WriteToOutput(null, mess2); this.Service2 = await QuickConnection.ConnectAsync(Connection2); } var mess3 = string.Format(Properties.OutputStrings.CurrentServiceEndpointFormat1, this.Service2.CurrentServiceEndpoint); if (service2IsNull) { writeToOutput.WriteToOutput(null, mess3); } if (content != null) { content.AppendLine(mess1); content.AppendLine(mess2); content.AppendLine(mess3); } } if (content != null) { content.AppendLine(); } }
private async Task DifferenceWebResources(SelectedFile selectedFile, bool isCustom, ConnectionData connectionData, CommonConfiguration commonConfig) { if (connectionData == null) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.NoCurrentCRMConnection); return; } if (!File.Exists(selectedFile.FilePath)) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.FileNotExistsFormat1, selectedFile.FilePath); return; } this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectingToCRM); this._iWriteToOutput.WriteToOutput(connectionData, connectionData.GetConnectionDescription()); // Подключаемся к CRM. var service = await QuickConnection.ConnectAsync(connectionData); if (service == null) { _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return; } this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CurrentServiceEndpointFormat1, service.CurrentServiceEndpoint); // Репозиторий для работы с веб-ресурсами WebResourceRepository webResourceRepository = new WebResourceRepository(service); WebResource webresource = null; if (isCustom) { Guid?webId = connectionData.GetLastLinkForFile(selectedFile.FriendlyFilePath); bool?dialogResult = null; Guid?selectedWebResourceId = null; string selectedPath = string.Empty; var t = new Thread(() => { try { var form = new Views.WindowWebResourceSelectOrCreate(this._iWriteToOutput, service, connectionData, selectedFile, webId); dialogResult = form.ShowDialog(); selectedWebResourceId = form.SelectedWebResourceId; } catch (Exception ex) { DTEHelper.WriteExceptionToOutput(connectionData, ex); } }); t.SetApartmentState(ApartmentState.STA); t.Start(); t.Join(); if (dialogResult.GetValueOrDefault() == false) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.DifferenceWasCancelled); return; } if (selectedWebResourceId.HasValue) { this._iWriteToOutput.WriteToOutput(connectionData, "Custom Web-resource is selected."); webresource = await webResourceRepository.GetByIdAsync(selectedWebResourceId.Value); connectionData.AddMapping(webresource.Id, selectedFile.FriendlyFilePath); connectionData.Save(); } else { this._iWriteToOutput.WriteToOutput(connectionData, "!Warning. WebResource not exists. name: {0}.", selectedFile.Name); } } else { webresource = await webResourceRepository.FindByNameAsync(selectedFile.FriendlyFilePath, selectedFile.Extension); if (webresource != null) { this._iWriteToOutput.WriteToOutput(connectionData, "Web-resource founded by name."); connectionData.AddMapping(webresource.Id, selectedFile.FriendlyFilePath); connectionData.Save(); } else { Guid?webId = connectionData.GetLastLinkForFile(selectedFile.FriendlyFilePath); if (webId.HasValue) { webresource = await webResourceRepository.GetByIdAsync(webId.Value); } if (webresource != null) { this._iWriteToOutput.WriteToOutput(connectionData, "Web-resource not founded by name. Last link web-resource is selected for difference."); connectionData.AddMapping(webresource.Id, selectedFile.FriendlyFilePath); connectionData.Save(); } else { this._iWriteToOutput.WriteToOutput(connectionData, "Web-resource not founded by name and has not Last link."); this._iWriteToOutput.WriteToOutput(connectionData, "Starting Custom Web-resource selection form."); bool?dialogResult = null; Guid?selectedWebResourceId = null; string selectedPath = string.Empty; var t = new Thread(() => { try { var form = new Views.WindowWebResourceSelectOrCreate(this._iWriteToOutput, service, connectionData, selectedFile, webId); dialogResult = form.ShowDialog(); selectedWebResourceId = form.SelectedWebResourceId; } catch (Exception ex) { DTEHelper.WriteExceptionToOutput(connectionData, ex); } }); t.SetApartmentState(ApartmentState.STA); t.Start(); t.Join(); if (dialogResult.GetValueOrDefault()) { if (selectedWebResourceId.HasValue) { this._iWriteToOutput.WriteToOutput(connectionData, "Custom Web-resource is selected."); webresource = await webResourceRepository.GetByIdAsync(selectedWebResourceId.Value); connectionData.AddMapping(webresource.Id, selectedFile.FriendlyFilePath); connectionData.Save(); } else { this._iWriteToOutput.WriteToOutput(connectionData, "!Warning. WebResource not exists. name: {0}.", selectedFile.Name); } } else { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.DifferenceWasCancelled); return; } } } } if (webresource == null) { this._iWriteToOutput.WriteToOutput(connectionData, "Web-resource not founded in CRM: {0}", selectedFile.FileName); return; } string filePath1 = selectedFile.FilePath; string fileTitle1 = selectedFile.FileName; string filePath2 = string.Empty; string fileTitle2 = string.Empty; { var contentWebResource = webresource.Content ?? string.Empty; var array = Convert.FromBase64String(contentWebResource); filePath2 = FileOperations.GetNewTempFilePath(webresource.Name, selectedFile.Extension); File.WriteAllBytes(filePath2, array); fileTitle2 = connectionData.Name + "." + selectedFile.FileName + " - " + filePath2; } this._iWriteToOutput.ProcessStartProgramComparer(filePath1, filePath2, fileTitle1, fileTitle2); }
private async Task UpdatingReport(SelectedFile selectedFile, ConnectionData connectionData, CommonConfiguration commonConfig) { if (connectionData == null) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.NoCurrentCRMConnection); return; } if (connectionData.IsReadOnly) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionIsReadOnlyFormat1, connectionData.Name); return; } this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectingToCRM); this._iWriteToOutput.WriteToOutput(connectionData, connectionData.GetConnectionDescription()); // Подключаемся к CRM. var service = await QuickConnection.ConnectAsync(connectionData); if (service == null) { _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return; } this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CurrentServiceEndpointFormat1, service.CurrentServiceEndpoint); bool isconnectionDataDirty = false; // Репозиторий для работы с веб-ресурсами ReportRepository reportRepository = new ReportRepository(service); if (File.Exists(selectedFile.FilePath)) { Report reportEntity = null; reportEntity = await reportRepository.FindAsync(selectedFile.FileName); if (reportEntity != null) { this._iWriteToOutput.WriteToOutput(connectionData, "Report founded by name."); isconnectionDataDirty = true; connectionData.AddMapping(reportEntity.Id, selectedFile.FriendlyFilePath); } else { Guid?lastReportId = connectionData.GetLastLinkForFile(selectedFile.FriendlyFilePath); this._iWriteToOutput.WriteToOutput(connectionData, "Starting Custom Report selection form."); bool?dialogResult = null; Guid?selectedReportId = null; string selectedPath = string.Empty; var t = new Thread((ThreadStart)(() => { try { var form = new Views.WindowReportSelect(this._iWriteToOutput, service, selectedFile, lastReportId); dialogResult = form.ShowDialog(); selectedReportId = form.SelectedReportId; } catch (Exception ex) { DTEHelper.WriteExceptionToOutput(connectionData, ex); } })); t.SetApartmentState(ApartmentState.STA); t.Start(); t.Join(); if (dialogResult.GetValueOrDefault()) { if (selectedReportId.HasValue) { this._iWriteToOutput.WriteToOutput(connectionData, "Custom report is selected."); reportEntity = await reportRepository.GetByIdAsync(selectedReportId.Value); isconnectionDataDirty = true; connectionData.AddMapping(reportEntity.Id, selectedFile.FriendlyFilePath); } else { this._iWriteToOutput.WriteToOutput(connectionData, "!Warning. Report not exists. name: {0}.", selectedFile.Name); } } else { this._iWriteToOutput.WriteToOutput(connectionData, "Updating was cancelled."); return; } } if (reportEntity != null) { var update = new Entity(Report.EntityLogicalName); update.Id = reportEntity.Id; update.Attributes[Report.Schema.Attributes.bodytext] = File.ReadAllText(selectedFile.FilePath); await service.UpdateAsync(update); this._iWriteToOutput.WriteToOutput(connectionData, "Report updated in CRM: {0} - {1} - {2}", reportEntity.Name, reportEntity.FileName, reportEntity.ReportNameOnSRS); } else { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ReportNotFoundedInConnectionFormat2, connectionData.Name, selectedFile.FileName); } } else { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.FileNotExistsFormat1, selectedFile.FilePath); } if (isconnectionDataDirty) { //Сохранение настроек после публикации connectionData.Save(); } }
> > FindFilesNotExistsInCrm( IWriteToOutput _iWriteToOutput , List <SelectedFile> selectedFiles , ConnectionData connectionData) { if (connectionData == null) { _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.NoCurrentCRMConnection); return(null); } _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectingToCRM); _iWriteToOutput.WriteToOutput(connectionData, connectionData.GetConnectionDescription()); // Подключаемся к CRM. var service = await QuickConnection.ConnectAsync(connectionData); if (service == null) { _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return(null); } _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CurrentServiceEndpointFormat1, service.CurrentServiceEndpoint); bool isconnectionDataDirty = false; var listNotFoundedInCrmNoLink = new List <SelectedFile>(); var listNotFoundedInCrmWithLink = new List <Tuple <SelectedFile, WebResource> >(); List <string> listNotExistsOnDisk = new List <string>(); // Репозиторий для работы с веб-ресурсами WebResourceRepository webResourceRepository = new WebResourceRepository(service); var groups = selectedFiles.GroupBy(sel => sel.Extension); foreach (var gr in groups) { var names = gr.Select(sel => sel.FriendlyFilePath).ToArray(); var dict = webResourceRepository.FindMultiple(gr.Key, names , new ColumnSet( WebResource.Schema.EntityPrimaryIdAttribute , WebResource.Schema.Attributes.name , WebResource.Schema.Attributes.webresourcetype )); foreach (var selectedFile in gr) { if (!File.Exists(selectedFile.FilePath)) { listNotExistsOnDisk.Add(selectedFile.FilePath); continue; } string name = selectedFile.FriendlyFilePath.ToLower(); var webresource = WebResourceRepository.FindWebResourceInDictionary(dict, name, gr.Key); if (webresource != null) { // Запоминается файл isconnectionDataDirty = true; connectionData.AddMapping(webresource.Id, selectedFile.FriendlyFilePath); } else { Guid?webId = connectionData.GetLastLinkForFile(selectedFile.FriendlyFilePath); if (webId.HasValue) { webresource = await webResourceRepository.GetByIdAsync(webId.Value, new ColumnSet(true)); if (webresource != null) { listNotFoundedInCrmWithLink.Add(Tuple.Create(selectedFile, webresource)); isconnectionDataDirty = true; connectionData.AddMapping(webresource.Id, selectedFile.FriendlyFilePath); } else { connectionData.RemoveMapping(selectedFile.FriendlyFilePath); listNotFoundedInCrmNoLink.Add(selectedFile); } } else { listNotFoundedInCrmNoLink.Add(selectedFile); } } } } if (isconnectionDataDirty) { //Сохранение настроек после публикации connectionData.Save(); } var tabSpacer = " "; if (listNotFoundedInCrmNoLink.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "File NOT FOUNDED in CRM: {0}", listNotFoundedInCrmNoLink.Count); listNotFoundedInCrmNoLink.Sort(); listNotFoundedInCrmNoLink.ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (listNotFoundedInCrmWithLink.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "File NOT FOUNDED in CRM, but has Last Link: {0}", listNotFoundedInCrmWithLink.Count); FormatTextTableHandler tableLastLinkDifferent = new FormatTextTableHandler(); tableLastLinkDifferent.SetHeader("FriendlyFilePath", "WebResourceName"); listNotFoundedInCrmWithLink.ForEach(i => tableLastLinkDifferent.AddLine(i.Item1.FriendlyFilePath, i.Item2.Name)); tableLastLinkDifferent.GetFormatedLines(true).ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (listNotExistsOnDisk.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.FileNotExistsFormat1, listNotExistsOnDisk.Count); listNotExistsOnDisk.Sort(); listNotExistsOnDisk.ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (listNotFoundedInCrmNoLink.Count + listNotFoundedInCrmWithLink.Count == 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "No files not exists in Crm"); } return(Tuple.Create(service, listNotFoundedInCrmNoLink, listNotFoundedInCrmWithLink)); }
> > ComparingFilesAndWebResources( IWriteToOutput _iWriteToOutput , List <SelectedFile> selectedFiles , ConnectionData connectionData , bool withDetails) { if (connectionData == null) { _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.NoCurrentCRMConnection); return(null); } var dictFilesEqualByTextNotContent = new List <Tuple <SelectedFile, WebResource> >(); var dictFilesNotEqualByText = new List <Tuple <SelectedFile, WebResource, ContentCopareResult> >(); _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectingToCRM); _iWriteToOutput.WriteToOutput(connectionData, connectionData.GetConnectionDescription()); // Подключаемся к CRM. var service = await QuickConnection.ConnectAsync(connectionData); if (service == null) { _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.ConnectionFailedFormat1, connectionData.Name); return(null); } _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.CurrentServiceEndpointFormat1, service.CurrentServiceEndpoint); bool isconnectionDataDirty = false; List <string> listNotExistsOnDisk = new List <string>(); List <string> listNotFoundedInCRMNoLink = new List <string>(); int countEqualByContent = 0; FormatTextTableHandler tableEqualByText = new FormatTextTableHandler(); tableEqualByText.SetHeader("FriendlyFilePath", "WebResourceName"); FormatTextTableHandler tableDifferent = new FormatTextTableHandler(); if (withDetails) { tableDifferent.SetHeader("FriendlyFilePath", "WebResourceName", "+Inserts", "(+Length)", "-Deletes", "(-Length)"); } else { tableDifferent.SetHeader("FriendlyFilePath", "WebResourceName"); } FormatTextTableHandler tableDifferentOnlyInserts = new FormatTextTableHandler(); tableDifferentOnlyInserts.SetHeader("FriendlyFilePath", "WebResourceName", "+Inserts", "(+Length)"); FormatTextTableHandler tableDifferentOnlyDeletes = new FormatTextTableHandler(); tableDifferentOnlyDeletes.SetHeader("FriendlyFilePath", "WebResourceName", "-Deletes", "(-Length)"); FormatTextTableHandler tableDifferentComplexChanges = new FormatTextTableHandler(); tableDifferentComplexChanges.SetHeader("FriendlyFilePath", "WebResourceName", "+Inserts", "(+Length)", "-Deletes", "(-Length)"); FormatTextTableHandler tableDifferentMirror = new FormatTextTableHandler(); tableDifferentMirror.SetHeader("FriendlyFilePath", "WebResourceName", "+Inserts", "(+Length)", "-Deletes", "(-Length)"); FormatTextTableHandler tableDifferentMirrorWithInserts = new FormatTextTableHandler(); tableDifferentMirrorWithInserts.SetHeader("FriendlyFilePath", "WebResourceName", "+Inserts", "(+Length)", "-Deletes", "(-Length)"); FormatTextTableHandler tableDifferentMirrorWithDeletes = new FormatTextTableHandler(); tableDifferentMirrorWithDeletes.SetHeader("FriendlyFilePath", "WebResourceName", "+Inserts", "(+Length)", "-Deletes", "(-Length)"); FormatTextTableHandler tableLastLinkEqualByContent = new FormatTextTableHandler(); tableLastLinkEqualByContent.SetHeader("FriendlyFilePath", "WebResourceName"); FormatTextTableHandler listLastLinkEqualByText = new FormatTextTableHandler(); listLastLinkEqualByText.SetHeader("FriendlyFilePath", "WebResourceName"); FormatTextTableHandler tableLastLinkDifferent = new FormatTextTableHandler(); if (withDetails) { tableLastLinkDifferent.SetHeader("FriendlyFilePath", "WebResourceName", "+Inserts", "(+Length)", "-Deletes", "(-Length)"); } else { tableLastLinkDifferent.SetHeader("FriendlyFilePath", "WebResourceName"); } FormatTextTableHandler tableLastLinkDifferentOnlyInserts = new FormatTextTableHandler(); tableLastLinkDifferentOnlyInserts.SetHeader("FriendlyFilePath", "WebResourceName", "+Inserts", "(+Length)"); FormatTextTableHandler tableLastLinkDifferentOnlyDeletes = new FormatTextTableHandler(); tableLastLinkDifferentOnlyDeletes.SetHeader("FriendlyFilePath", "WebResourceName", "-Deletes", "(-Length)"); FormatTextTableHandler tableLastLinkDifferentComplexChanges = new FormatTextTableHandler(); tableLastLinkDifferentComplexChanges.SetHeader("FriendlyFilePath", "WebResourceName", "+Inserts", "(+Length)", "-Deletes", "(-Length)"); FormatTextTableHandler tableLastLinkDifferentMirror = new FormatTextTableHandler(); tableLastLinkDifferentMirror.SetHeader("FriendlyFilePath", "WebResourceName", "+Inserts", "(+Length)", "-Deletes", "(-Length)"); FormatTextTableHandler tableLastLinkDifferentMirrorWithInserts = new FormatTextTableHandler(); tableLastLinkDifferentMirrorWithInserts.SetHeader("FriendlyFilePath", "+Inserts", "(+Length)", "-Deletes", "(-Length)"); FormatTextTableHandler tableLastLinkDifferentMirrorWithDeletes = new FormatTextTableHandler(); tableLastLinkDifferentMirrorWithDeletes.SetHeader("FriendlyFilePath", "WebResourceName", "+Inserts", "(+Length)", "-Deletes", "(-Length)"); // Репозиторий для работы с веб-ресурсами WebResourceRepository webResourceRepository = new WebResourceRepository(service); var groups = selectedFiles.GroupBy(sel => sel.Extension); foreach (var gr in groups) { var names = gr.Select(sel => sel.FriendlyFilePath).ToArray(); var dict = webResourceRepository.FindMultiple(gr.Key, names , new ColumnSet( WebResource.Schema.EntityPrimaryIdAttribute , WebResource.Schema.Attributes.name , WebResource.Schema.Attributes.webresourcetype , WebResource.Schema.Attributes.content )); foreach (var selectedFile in gr) { if (!File.Exists(selectedFile.FilePath)) { listNotExistsOnDisk.Add(selectedFile.FilePath); continue; } string urlShowDifference = string.Format("{0}:///{1}?ConnectionId={2}", UrlCommandFilter.PrefixShowDifference, selectedFile.FilePath.Replace('\\', '/'), connectionData.ConnectionId.ToString()); string name = selectedFile.FriendlyFilePath.ToLower(); var webresource = WebResourceRepository.FindWebResourceInDictionary(dict, name, gr.Key); if (webresource != null) { // Запоминается файл isconnectionDataDirty = true; connectionData.AddMapping(webresource.Id, selectedFile.FriendlyFilePath); var contentWebResource = webresource.Content ?? string.Empty; var arrayFile = File.ReadAllBytes(selectedFile.FilePath); var contentFile = Convert.ToBase64String(arrayFile); if (string.Equals(contentFile, contentWebResource)) { countEqualByContent++; } else { var arrayWebResource = Convert.FromBase64String(contentWebResource); var nameWebResource = webresource.Name; var compare = ContentCoparerHelper.CompareByteArrays(selectedFile.Extension, arrayFile, arrayWebResource, withDetails); if (compare.IsEqual) { tableEqualByText.AddLine(selectedFile.UrlFriendlyFilePath, nameWebResource); dictFilesEqualByTextNotContent.Add(Tuple.Create(selectedFile, webresource)); } else { dictFilesNotEqualByText.Add(Tuple.Create(selectedFile, webresource, compare)); if (withDetails) { string[] values = new string[] { selectedFile.UrlFriendlyFilePath, nameWebResource , string.Format("+{0}", compare.Inserts) , string.Format("(+{0})", compare.InsertLength) , string.Format("-{0}", compare.Deletes) , string.Format("(-{0})", compare.DeleteLength) , urlShowDifference }; tableDifferent.AddLine(values); if (compare.IsOnlyInserts) { tableDifferentOnlyInserts.AddLine(selectedFile.UrlFriendlyFilePath , string.Format("+{0}", compare.Inserts) , string.Format("(+{0})", compare.InsertLength) , urlShowDifference ); } if (compare.IsOnlyDeletes) { tableDifferentOnlyDeletes.AddLine(selectedFile.UrlFriendlyFilePath , string.Format("-{0}", compare.Deletes) , string.Format("(-{0})", compare.DeleteLength) , urlShowDifference ); } if (compare.IsComplexChanges) { tableDifferentComplexChanges.AddLine(values); } if (compare.IsMirror) { tableDifferentMirror.AddLine(values); } if (compare.IsMirrorWithInserts) { tableDifferentMirrorWithInserts.AddLine(values); } if (compare.IsMirrorWithDeletes) { tableDifferentMirrorWithDeletes.AddLine(values); } } else { tableDifferent.AddLine(selectedFile.UrlFriendlyFilePath, nameWebResource, urlShowDifference); } } } } else { Guid?webId = connectionData.GetLastLinkForFile(selectedFile.FriendlyFilePath); if (webId.HasValue) { webresource = await webResourceRepository.GetByIdAsync(webId.Value); if (webresource != null) { // Запоминается файл isconnectionDataDirty = true; connectionData.AddMapping(webresource.Id, selectedFile.FriendlyFilePath); var contentWebResource = webresource.Content ?? string.Empty; var nameWebResource = webresource.Name; var arrayFile = File.ReadAllBytes(selectedFile.FilePath); var contentFile = Convert.ToBase64String(arrayFile); if (string.Equals(contentFile, contentWebResource)) { tableLastLinkEqualByContent.AddLine(selectedFile.UrlFriendlyFilePath, nameWebResource); } else { var arrayWebResource = Convert.FromBase64String(contentWebResource); var compare = ContentCoparerHelper.CompareByteArrays(selectedFile.Extension, arrayFile, arrayWebResource); if (compare.IsEqual) { listLastLinkEqualByText.AddLine(selectedFile.UrlFriendlyFilePath, nameWebResource); dictFilesEqualByTextNotContent.Add(Tuple.Create(selectedFile, webresource)); } else { dictFilesNotEqualByText.Add(Tuple.Create(selectedFile, webresource, compare)); if (withDetails) { string[] values = new string[] { selectedFile.UrlFriendlyFilePath, nameWebResource , string.Format("+{0}", compare.Inserts) , string.Format("(+{0})", compare.InsertLength) , string.Format("-{0}", compare.Deletes) , string.Format("(-{0})", compare.DeleteLength) , urlShowDifference }; tableLastLinkDifferent.AddLine(values); if (compare.IsOnlyInserts) { tableLastLinkDifferentOnlyInserts.AddLine(selectedFile.UrlFriendlyFilePath, nameWebResource , string.Format("+{0}", compare.Inserts) , string.Format("(+{0})", compare.InsertLength) , urlShowDifference ); } if (compare.IsOnlyDeletes) { tableLastLinkDifferentOnlyDeletes.AddLine(selectedFile.UrlFriendlyFilePath, nameWebResource , string.Format("-{0}", compare.Deletes) , string.Format("(-{0})", compare.DeleteLength) , urlShowDifference ); } if (compare.IsComplexChanges) { tableLastLinkDifferentComplexChanges.AddLine(values); } if (compare.IsMirror) { tableLastLinkDifferentMirror.AddLine(values); } if (compare.IsMirrorWithInserts) { tableLastLinkDifferentMirrorWithInserts.AddLine(values); } if (compare.IsMirrorWithDeletes) { tableLastLinkDifferentMirrorWithDeletes.AddLine(values); } } else { tableLastLinkDifferent.AddLine(selectedFile.UrlFriendlyFilePath, nameWebResource, urlShowDifference); } } } } else { connectionData.RemoveMapping(selectedFile.FriendlyFilePath); listNotFoundedInCRMNoLink.Add(selectedFile.UrlFriendlyFilePath); } } else { listNotFoundedInCRMNoLink.Add(selectedFile.UrlFriendlyFilePath); } } } } if (isconnectionDataDirty) { //Сохранение настроек после публикации connectionData.Save(); } var tabSpacer = " "; if (tableDifferent.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "File and web-resource are DIFFERENT by content: {0}", tableDifferent.Count); tableDifferent.GetFormatedLines(true).ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (tableDifferentOnlyInserts.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "File and web-resource are DIFFERENT by content WITH ONLY INSERTS: {0}", tableDifferentOnlyInserts.Count); tableDifferentOnlyInserts.GetFormatedLines(true).ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (tableDifferentOnlyDeletes.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "File and web-resource are DIFFERENT by content WITH ONLY DELETES: {0}", tableDifferentOnlyDeletes.Count); tableDifferentOnlyDeletes.GetFormatedLines(true).ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (tableDifferentComplexChanges.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "File and web-resource are DIFFERENT by content WITH COMPLEX CHANGES: {0}", tableDifferentComplexChanges.Count); tableDifferentComplexChanges.GetFormatedLines(true).ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (tableDifferentMirror.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "File and web-resource are DIFFERENT by content WITH MIRROR CHANGES: {0}", tableDifferentMirror.Count); tableDifferentMirror.GetFormatedLines(true).ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (tableDifferentMirrorWithInserts.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "File and web-resource are DIFFERENT by content WITH MIRROR CHANGES AND INSERTS: {0}", tableDifferentMirrorWithInserts.Count); tableDifferentMirrorWithInserts.GetFormatedLines(true).ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (tableDifferentMirrorWithDeletes.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "File and web-resource are DIFFERENT by content WITH MIRROR CHANGES AND DELETES: {0}", tableDifferentMirrorWithDeletes.Count); tableDifferentMirrorWithDeletes.GetFormatedLines(true).ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (listNotFoundedInCRMNoLink.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "File NOT FOUNDED in CRM: {0}", listNotFoundedInCRMNoLink.Count); listNotFoundedInCRMNoLink.Sort(); listNotFoundedInCRMNoLink.ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (tableLastLinkDifferent.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "File NOT FOUNDED in CRM, but has Last Link, files DIFFERENT: {0}", tableLastLinkDifferent.Count); tableLastLinkDifferent.GetFormatedLines(true).ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (tableLastLinkDifferentOnlyInserts.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "File NOT FOUNDED in CRM, but has Last Link, files DIFFERENT WITH ONLY INSERTS: {0}", tableLastLinkDifferentOnlyInserts.Count); tableLastLinkDifferentOnlyInserts.GetFormatedLines(true).ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (tableLastLinkDifferentOnlyDeletes.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "File NOT FOUNDED in CRM, but has Last Link, files DIFFERENT WITH ONLY DELETES: {0}", tableLastLinkDifferentOnlyDeletes.Count); tableLastLinkDifferentOnlyDeletes.GetFormatedLines(true).ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (tableLastLinkDifferentComplexChanges.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "File NOT FOUNDED in CRM, but has Last Link, files DIFFERENT WITH COMPLEX CHANGES: {0}", tableLastLinkDifferentComplexChanges.Count); tableLastLinkDifferentComplexChanges.GetFormatedLines(true).ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (tableLastLinkDifferentMirror.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "File NOT FOUNDED in CRM, but has Last Link, files DIFFERENT WITH MIRROR CHANGES: {0}", tableLastLinkDifferentMirror.Count); tableLastLinkDifferentMirror.GetFormatedLines(true).ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (tableLastLinkDifferentMirrorWithInserts.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "File NOT FOUNDED in CRM, but has Last Link, files DIFFERENT WITH MIRROR CHANGES AND INSERTS: {0}", tableLastLinkDifferentMirrorWithInserts.Count); tableLastLinkDifferentMirrorWithInserts.GetFormatedLines(true).ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (tableLastLinkDifferentMirrorWithDeletes.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "File NOT FOUNDED in CRM, but has Last Link, files DIFFERENT WITH MIRROR CHANGES AND DELETES: {0}", tableLastLinkDifferentMirrorWithDeletes.Count); tableLastLinkDifferentMirrorWithDeletes.GetFormatedLines(true).ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (listLastLinkEqualByText.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "File NOT FOUNDED in CRM, but has Last Link, files EQUALS BY TEXT: {0}", listLastLinkEqualByText.Count); listLastLinkEqualByText.GetFormatedLines(true).ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (tableLastLinkEqualByContent.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "File NOT FOUNDED in CRM, but has Last Link, files EQUALS BY CONTENT: {0}", tableLastLinkEqualByContent.Count); tableLastLinkEqualByContent.GetFormatedLines(true).ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (listNotExistsOnDisk.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.FileNotExistsFormat1, listNotExistsOnDisk.Count); listNotExistsOnDisk.Sort(); listNotExistsOnDisk.ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (tableEqualByText.Count > 0) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "File and web-resource EQUALS BY TEXT: {0}", tableEqualByText.Count); tableEqualByText.GetFormatedLines(true).ForEach(item => _iWriteToOutput.WriteToOutput(connectionData, tabSpacer + item)); } if (countEqualByContent > 0) { if (countEqualByContent == selectedFiles.Count) { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "All files and web-resources EQUALS BY CONTENT: {0}", countEqualByContent); } else { _iWriteToOutput.WriteToOutput(connectionData, string.Empty); _iWriteToOutput.WriteToOutput(connectionData, "File and web-resource EQUALS BY CONTENT: {0}", countEqualByContent); } } return(Tuple.Create(service, dictFilesEqualByTextNotContent, dictFilesNotEqualByText)); }
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); } }
public async Task <string> GetRibbonDiffXmlAsync(IWriteToOutput iWriteToOutput, EntityMetadata entityMetadata, RibbonCustomization ribbonCustomization) { if (entityMetadata == null && ribbonCustomization == null) { throw new ArgumentException("entityMetadata or ribbonCustomization"); } 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(null); } } 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 { var repositorySolutionComponent = new SolutionComponentRepository(_service); if (entityMetadata != null) { iWriteToOutput.WriteToOutput(_service.ConnectionData, Properties.OutputStrings.InConnectionAddingInSolutionEntityFormat3, _service.ConnectionData.Name, solutionUniqueName, entityMetadata.LogicalName); 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); 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); } var repositoryExportSolution = new ExportSolutionHelper(_service); var solutionBodyBinary = await repositoryExportSolution.ExportSolutionAndGetBodyBinaryAsync(solutionUniqueName); string ribbonDiffXml = null; if (entityMetadata != null) { ribbonDiffXml = ExportSolutionHelper.GetRibbonDiffXmlForEntityFromSolutionBody(entityMetadata.LogicalName, solutionBodyBinary); } else if (ribbonCustomization != null) { ribbonDiffXml = ExportSolutionHelper.GetApplicationRibbonDiffXmlFromSolutionBody(solutionBodyBinary); } return(ribbonDiffXml); } finally { var task = DeleteSolution(iWriteToOutput, solution); } }