private async Task UpdateWebResourceDependencyXml(IOrganizationServiceExtented service, CommonConfiguration commonConfig, XDocument doc, string filePath, WebResource webResource) { { string fieldTitle = WebResource.Schema.Headers.dependencyxml; string dependencyXml = webResource.DependencyXml; if (!string.IsNullOrEmpty(dependencyXml)) { commonConfig.CheckFolderForExportExists(this._iWriteToOutput); string fileNameBackUp = EntityFileNameFormatter.GetWebResourceFileName(service.ConnectionData.Name, webResource.Name, fieldTitle + " BackUp", FileExtension.xml); string filePathBackUp = Path.Combine(commonConfig.FolderForExport, FileOperations.RemoveWrongSymbols(fileNameBackUp)); try { dependencyXml = ContentComparerHelper.FormatXmlByConfiguration( dependencyXml , commonConfig , XmlOptionsControls.WebResourceDependencyXmlOptions , schemaName: AbstractDynamicCommandXsdSchemas.WebResourceDependencyXmlSchema , webResourceName: webResource.Name ); File.WriteAllText(filePathBackUp, dependencyXml, new UTF8Encoding(false)); this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.InConnectionEntityFieldExportedToFormat5, service.ConnectionData.Name, WebResource.Schema.EntityLogicalName, webResource.Name, fieldTitle, filePathBackUp); } catch (Exception ex) { this._iWriteToOutput.WriteErrorToOutput(service.ConnectionData, ex); } } else { this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.InConnectionEntityFieldIsEmptyFormat4, service.ConnectionData.Name, WebResource.Schema.EntityLogicalName, webResource.Name, fieldTitle); this._iWriteToOutput.ActivateOutputWindow(service.ConnectionData); } } var newText = doc.ToString(SaveOptions.DisableFormatting); var updateEntity = new WebResource { Id = webResource.Id }; updateEntity.Attributes[WebResource.Schema.Attributes.dependencyxml] = newText; await service.UpdateAsync(updateEntity); var repositoryPublish = new PublishActionsRepository(service); _iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.InConnectionPublishingWebResourceFormat2, service.ConnectionData.Name, webResource.Name); await repositoryPublish.PublishWebResourcesAsync(new[] { webResource.Id }); service.TryDispose(); }
private async Task UpdateSiteMapXml(IOrganizationServiceExtented service, CommonConfiguration commonConfig, XDocument doc, string filePath, SiteMap siteMap) { string fieldTitle = SiteMap.Schema.Headers.sitemapxml; { string siteMapXml = siteMap.SiteMapXml; if (!string.IsNullOrEmpty(siteMapXml)) { commonConfig.CheckFolderForExportExists(this._iWriteToOutput); string fileNameBackUp = EntityFileNameFormatter.GetSiteMapFileName(service.ConnectionData.Name, siteMap.SiteMapNameUnique, siteMap.Id, fieldTitle + " BackUp", FileExtension.xml); string filePathBackUp = Path.Combine(commonConfig.FolderForExport, FileOperations.RemoveWrongSymbols(fileNameBackUp)); try { siteMapXml = ContentComparerHelper.FormatXmlByConfiguration( siteMapXml , commonConfig , XmlOptionsControls.SiteMapXmlOptions , schemaName: AbstractDynamicCommandXsdSchemas.SiteMapXmlSchema , siteMapUniqueName: siteMap.SiteMapNameUnique ?? string.Empty ); File.WriteAllText(filePathBackUp, siteMapXml, new UTF8Encoding(false)); this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.InConnectionEntityFieldExportedToFormat5, service.ConnectionData.Name, SiteMap.Schema.EntityLogicalName, siteMap.SiteMapNameUnique, fieldTitle, filePathBackUp); } catch (Exception ex) { this._iWriteToOutput.WriteErrorToOutput(service.ConnectionData, ex); } } else { this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.InConnectionEntityFieldIsEmptyFormat4, service.ConnectionData.Name, SiteMap.Schema.EntityLogicalName, siteMap.SiteMapNameUnique, fieldTitle); this._iWriteToOutput.ActivateOutputWindow(service.ConnectionData); } } var newText = doc.ToString(SaveOptions.DisableFormatting); var updateEntity = new SiteMap { Id = siteMap.Id }; updateEntity.Attributes[SiteMap.Schema.Attributes.sitemapxml] = newText; await service.UpdateAsync(updateEntity); _iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.InConnectionPublishingSiteMapFormat3, service.ConnectionData.Name, siteMap.SiteMapName, siteMap.Id.ToString()); var repositoryPublish = new PublishActionsRepository(service); await repositoryPublish.PublishSiteMapsAsync(new[] { siteMap.Id }); service.TryDispose(); }
public async Task <Guid> UpsertAsync(Entity entity, Action <string> updateStatus) { Guid entityId = entity.Id; if (entity.Attributes.ContainsKey(PluginAssembly.EntityPrimaryIdAttribute) && entity.Attributes[PluginAssembly.EntityPrimaryIdAttribute] != null && entity.Attributes[PluginAssembly.EntityPrimaryIdAttribute] is Guid tempId ) { entityId = tempId; } if (entityId == Guid.Empty) { return(await _service.CreateAsync(entity)); } else { entity.Id = entityId; var exists = await GetByIdAsync(entityId, ColumnSetInstances.None); if (exists != null) { var updateAssembly = await GetAssemblyByIdRetrieveRequestAsync(entityId, ColumnSetInstances.AllColumns); foreach (var attribute in entity.Attributes) { updateAssembly.Attributes[attribute.Key] = attribute.Value; } updateAssembly.Id = entityId; updateAssembly.PluginAssemblyId = entityId; await _service.UpdateAsync(updateAssembly); return(entityId); } else { return(await _service.CreateAsync(entity)); } } }
private async Task UpdateSavedQueryXml(IOrganizationServiceExtented service, CommonConfiguration commonConfig, XDocument doc, string filePath, SavedQuery savedQuery) { string fieldName = SavedQueryRepository.GetFieldNameByXmlRoot(doc.Root.Name.ToString()); string fieldTitle = SavedQueryRepository.GetFieldTitleByXmlRoot(doc.Root.Name.ToString()); if (string.Equals(fieldName, SavedQuery.Schema.Attributes.layoutxml, StringComparison.InvariantCulture) && !string.IsNullOrEmpty(savedQuery.ReturnedTypeCode) ) { var entityData = service.ConnectionData.GetEntityIntellisenseData(savedQuery.ReturnedTypeCode); if (entityData != null && entityData.ObjectTypeCode.HasValue) { XAttribute attr = doc.Root.Attribute("object"); if (attr != null) { attr.Value = entityData.ObjectTypeCode.ToString(); } } } { string xmlContent = savedQuery.GetAttributeValue <string>(fieldName); if (!string.IsNullOrEmpty(xmlContent)) { commonConfig.CheckFolderForExportExists(this._iWriteToOutput); string fileNameBackUp = EntityFileNameFormatter.GetSavedQueryFileName(service.ConnectionData.Name, savedQuery.ReturnedTypeCode, savedQuery.Name, fieldTitle + " BackUp", FileExtension.xml); string filePathBackUp = Path.Combine(commonConfig.FolderForExport, FileOperations.RemoveWrongSymbols(fileNameBackUp)); try { xmlContent = ContentComparerHelper.FormatXmlByConfiguration( xmlContent , commonConfig , XmlOptionsControls.SavedQueryXmlOptions , schemaName: AbstractDynamicCommandXsdSchemas.FetchSchema , savedQueryId: savedQuery.Id , entityName: savedQuery.ReturnedTypeCode ); File.WriteAllText(filePathBackUp, xmlContent, new UTF8Encoding(false)); this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.InConnectionEntityFieldExportedToFormat5, service.ConnectionData.Name, SavedQuery.Schema.EntityLogicalName, savedQuery.Name, fieldTitle, filePathBackUp); } catch (Exception ex) { this._iWriteToOutput.WriteErrorToOutput(service.ConnectionData, ex); } } else { this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.InConnectionEntityFieldIsEmptyFormat4, service.ConnectionData.Name, SavedQuery.Schema.EntityLogicalName, savedQuery.Name, fieldTitle); this._iWriteToOutput.ActivateOutputWindow(service.ConnectionData); } } var newText = doc.ToString(SaveOptions.DisableFormatting); if (string.Equals(fieldName, SavedQuery.Schema.Attributes.fetchxml, StringComparison.InvariantCulture)) { try { _iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.ExecutingValidateSavedQueryRequest); var request = new ValidateSavedQueryRequest() { FetchXml = newText, QueryType = savedQuery.QueryType.GetValueOrDefault() }; service.Execute(request); } catch (Exception ex) { this._iWriteToOutput.WriteErrorToOutput(service.ConnectionData, ex); } } _iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.SavingEntityFormat1, savedQuery.LogicalName); _iWriteToOutput.WriteToOutputEntityInstance(service.ConnectionData, savedQuery.LogicalName, savedQuery.Id); var updateEntity = new SavedQuery { Id = savedQuery.Id, }; updateEntity.Attributes[fieldName] = newText; await service.UpdateAsync(updateEntity); _iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.SavingEntityCompletedFormat1, savedQuery.LogicalName); _iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.InConnectionPublishingEntitiesFormat2, service.ConnectionData.Name, savedQuery.ReturnedTypeCode); { var repositoryPublish = new PublishActionsRepository(service); await repositoryPublish.PublishEntitiesAsync(new[] { savedQuery.ReturnedTypeCode }); } service.TryDispose(); }
private async Task UpdateSystemFormXml(IOrganizationServiceExtented service, CommonConfiguration commonConfig, XDocument doc, string filePath, SystemForm systemForm) { { string fieldTitle = SystemForm.Schema.Headers.formxml; string formXml = systemForm.FormXml; if (!string.IsNullOrEmpty(formXml)) { commonConfig.CheckFolderForExportExists(this._iWriteToOutput); string fileNameBackUp = EntityFileNameFormatter.GetSystemFormFileName(service.ConnectionData.Name, systemForm.ObjectTypeCode, systemForm.Name, fieldTitle + " BackUp", FileExtension.xml); string filePathBackUp = Path.Combine(commonConfig.FolderForExport, FileOperations.RemoveWrongSymbols(fileNameBackUp)); try { formXml = ContentComparerHelper.FormatXmlByConfiguration( formXml , commonConfig , XmlOptionsControls.FormXmlOptions , schemaName: AbstractDynamicCommandXsdSchemas.FormXmlSchema , formId: systemForm.Id , entityName: systemForm.ObjectTypeCode ); File.WriteAllText(filePathBackUp, formXml, new UTF8Encoding(false)); this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.InConnectionEntityFieldExportedToFormat5, service.ConnectionData.Name, SystemForm.Schema.EntitySchemaName, systemForm.Name, fieldTitle, filePathBackUp); } catch (Exception ex) { this._iWriteToOutput.WriteErrorToOutput(service.ConnectionData, ex); } } else { this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.InConnectionEntityFieldIsEmptyFormat4, service.ConnectionData.Name, SystemForm.Schema.EntitySchemaName, systemForm.Name, fieldTitle); this._iWriteToOutput.ActivateOutputWindow(service.ConnectionData); } } var newText = doc.ToString(SaveOptions.DisableFormatting); var updateEntity = new SystemForm { Id = systemForm.Id, }; updateEntity.Attributes[SystemForm.Schema.Attributes.formxml] = newText; await service.UpdateAsync(updateEntity); var repositoryPublish = new PublishActionsRepository(service); _iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.InConnectionPublishingSystemFormFormat3, service.ConnectionData.Name, systemForm.ObjectTypeCode, systemForm.Name); await repositoryPublish.PublishDashboardsAsync(new[] { systemForm.Id }); if (systemForm.ObjectTypeCode.IsValidEntityName()) { _iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.InConnectionPublishingEntitiesFormat2, service.ConnectionData.Name, systemForm.ObjectTypeCode); await repositoryPublish.PublishEntitiesAsync(new[] { systemForm.ObjectTypeCode }); } service.TryDispose(); }
private async Task UpdateWorkflowXaml(IOrganizationServiceExtented service, CommonConfiguration commonConfig, XDocument doc, string filePath, Workflow workflow) { string fieldTitle = Workflow.Schema.Headers.xaml; { string workflowXaml = workflow.Xaml; if (!string.IsNullOrEmpty(workflowXaml)) { commonConfig.CheckFolderForExportExists(this._iWriteToOutput); string fileNameBackUp = EntityFileNameFormatter.GetWorkflowFileName(service.ConnectionData.Name, workflow.PrimaryEntity, workflow.FormattedValues[Workflow.Schema.Attributes.category], workflow.Name, fieldTitle + " BackUp", FileExtension.xml); string filePathBackUp = Path.Combine(commonConfig.FolderForExport, FileOperations.RemoveWrongSymbols(fileNameBackUp)); try { workflowXaml = ContentComparerHelper.FormatXmlByConfiguration( workflowXaml , commonConfig , XmlOptionsControls.WorkflowXmlOptions , workflowId: workflow.Id ); File.WriteAllText(filePathBackUp, workflowXaml, new UTF8Encoding(false)); this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.InConnectionEntityFieldExportedToFormat5, service.ConnectionData.Name, Workflow.Schema.EntityLogicalName, workflow.Name, fieldTitle, filePathBackUp); } catch (Exception ex) { this._iWriteToOutput.WriteErrorToOutput(service.ConnectionData, ex); } } else { this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.InConnectionEntityFieldIsEmptyFormat4, service.ConnectionData.Name, Workflow.Schema.EntityLogicalName, workflow.Name, fieldTitle); this._iWriteToOutput.ActivateOutputWindow(service.ConnectionData); } } if (workflow.StateCodeEnum == Workflow.Schema.OptionSets.statecode.Activated_1) { this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.InConnectionDeactivatingWorkflowFormat2, service.ConnectionData.Name, workflow.Name); await service.ExecuteAsync <SetStateResponse>(new SetStateRequest() { EntityMoniker = workflow.ToEntityReference(), State = new OptionSetValue((int)Workflow.Schema.OptionSets.statecode.Draft_0), Status = new OptionSetValue((int)Workflow.Schema.OptionSets.statuscode.Draft_0_Draft_1), }); } this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.InConnectionUpdatingFieldFormat2, service.ConnectionData.Name, Workflow.Schema.Headers.xaml); var newText = doc.ToString(SaveOptions.DisableFormatting); var updateEntity = new Workflow { Id = workflow.Id, }; updateEntity.Attributes[Workflow.Schema.Attributes.xaml] = newText; await service.UpdateAsync(updateEntity); if (workflow.StateCodeEnum == Workflow.Schema.OptionSets.statecode.Activated_1) { this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.InConnectionActivatingWorkflowFormat2, service.ConnectionData.Name, workflow.Name); await service.ExecuteAsync <SetStateResponse>(new SetStateRequest() { EntityMoniker = workflow.ToEntityReference(), State = new OptionSetValue((int)Workflow.Schema.OptionSets.statecode.Activated_1), Status = new OptionSetValue((int)Workflow.Schema.OptionSets.statuscode.Activated_1_Activated_2), }); } service.TryDispose(); }
private async Task BuildProjectUpdatePluginAssembly( ConnectionData connectionData , CommonConfiguration commonConfig , IOrganizationServiceExtented service , PluginAssemblyRepository repositoryAssembly , PluginTypeRepository repositoryType , EnvDTE.Project project , bool registerPlugins ) { var assembly = await repositoryAssembly.FindAssemblyAsync(project.Name); if (assembly == null) { assembly = await repositoryAssembly.FindAssemblyByLikeNameAsync(project.Name); } if (assembly == null) { this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.PluginAssemblyNotFoundedByNameFormat1, project.Name); WindowHelper.OpenPluginAssemblyExplorer( this._iWriteToOutput , service , commonConfig , project.Name ); return; } this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.BuildingProjectFormat1, project.Name); var buildResult = await _iWriteToOutput.BuildProjectAsync(project); if (buildResult != 0) { this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.BuildingProjectFailedFormat1, project.Name); return; } this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.BuildingProjectCompletedFormat1, project.Name); string defaultOutputFilePath = PropertiesHelper.GetOutputFilePath(project); if (!File.Exists(defaultOutputFilePath)) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.FileNotExistsFormat1, defaultOutputFilePath); return; } this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.LoadingAssemblyFromPathFormat1, defaultOutputFilePath); AssemblyReaderResult assemblyLoad = null; using (var reader = new AssemblyReader()) { assemblyLoad = reader.ReadAssembly(defaultOutputFilePath); } if (assemblyLoad == null) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.LoadingAssemblyFromPathFailedFormat1, defaultOutputFilePath); return; } assemblyLoad.Content = File.ReadAllBytes(defaultOutputFilePath); var crmPlugins = new HashSet <string>(StringComparer.InvariantCultureIgnoreCase); var crmWorkflows = new HashSet <string>(StringComparer.InvariantCultureIgnoreCase); var pluginTypes = await repositoryType.GetPluginTypesAsync(assembly.Id); foreach (var item in pluginTypes.Where(e => !e.IsWorkflowActivity.GetValueOrDefault()).Select(e => e.TypeName)) { crmPlugins.Add(item); } foreach (var item in pluginTypes.Where(e => e.IsWorkflowActivity.GetValueOrDefault()).Select(e => e.TypeName)) { crmWorkflows.Add(item); } HashSet <string> assemblyPlugins = new HashSet <string>(assemblyLoad.Plugins, StringComparer.InvariantCultureIgnoreCase); HashSet <string> assemblyWorkflows = new HashSet <string>(assemblyLoad.Workflows, StringComparer.InvariantCultureIgnoreCase); var pluginsOnlyInCrm = crmPlugins.Except(assemblyPlugins, StringComparer.InvariantCultureIgnoreCase).ToList(); var workflowOnlyInCrm = crmWorkflows.Except(assemblyWorkflows, StringComparer.InvariantCultureIgnoreCase).ToList(); if (pluginsOnlyInCrm.Any() || workflowOnlyInCrm.Any()) { if (pluginsOnlyInCrm.Any()) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.PluginTypesExistsOnlyInCRMFormat1, pluginsOnlyInCrm.Count); foreach (var item in pluginsOnlyInCrm.OrderBy(s => s)) { this._iWriteToOutput.WriteToOutput(connectionData, _tabspacer + item); } } if (workflowOnlyInCrm.Any()) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.WorkflowTypesExistsOnlyInCRMFormat1, workflowOnlyInCrm.Count); foreach (var item in workflowOnlyInCrm.OrderBy(s => s)) { this._iWriteToOutput.WriteToOutput(connectionData, _tabspacer + item); } } this._iWriteToOutput.WriteToOutput(service.ConnectionData, Properties.OutputStrings.CannotUpdatePluginAssemblyFormat1, assembly.Name); return; } string workflowActivityGroupName = string.Format("{0} ({1})", assemblyLoad.Name, assemblyLoad.Version); service.ConnectionData.AddAssemblyMapping(assemblyLoad.Name, assemblyLoad.FilePath); service.ConnectionData.Save(); this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.UpdatingPluginAssemblyFormat1, service.ConnectionData.Name); assembly.Content = Convert.ToBase64String(assemblyLoad.Content); try { await service.UpdateAsync(assembly); if (registerPlugins) { var pluginsOnlyInLocalAssembly = assemblyPlugins.Except(crmPlugins, StringComparer.InvariantCultureIgnoreCase); var workflowOnlyInLocalAssembly = assemblyWorkflows.Except(crmWorkflows, StringComparer.InvariantCultureIgnoreCase); if (pluginsOnlyInLocalAssembly.Any() || workflowOnlyInLocalAssembly.Any()) { int totalCount = pluginsOnlyInLocalAssembly.Count() + workflowOnlyInLocalAssembly.Count(); var assemblyRef = assembly.ToEntityReference(); this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.RegisteringNewPluginTypesFormat2, service.ConnectionData.Name, totalCount); await RegisterNewPluginTypes(service, pluginsOnlyInLocalAssembly, assemblyRef, false, workflowActivityGroupName); await RegisterNewPluginTypes(service, workflowOnlyInLocalAssembly, assemblyRef, true, workflowActivityGroupName); this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.RegisteringNewPluginTypesCompletedFormat2, service.ConnectionData.Name, totalCount); } } } catch (Exception ex) { this._iWriteToOutput.WriteToOutput(connectionData, Properties.OutputStrings.UpdatingPluginAssemblyFailedFormat1, service.ConnectionData.Name); _iWriteToOutput.WriteErrorToOutput(service.ConnectionData, ex); _iWriteToOutput.ActivateOutputWindow(service.ConnectionData); } }