protected override void ConnectionDetailsUpdated(NotifyCollectionChangedEventArgs ee) { ConnectButton.Visible = false; ConnectionLabel.Visible = true; ConnectionLabel.Text = $"Connected to {AdditionalConnectionDetails.First().ConnectionName}"; CompareMenu.Enabled = true; ShowMode.Enabled = true; }
private void TsbTransferDupeRulesClick(object sender, EventArgs e) { if (lvDedupeRules.SelectedItems.Count > 0 && AdditionalConnectionDetails.Count > 0) { var selectedRules = lvDedupeRules.SelectedItems.Cast <ListViewItem>().Select(item => (IGrouping <Guid, Entity>)item.Tag).ToList(); lbLogs.Items.Clear(); tsbLoadDupeRules.Enabled = false; tsbTransferDupeRules.Enabled = false; btnSelectTarget.Enabled = false; Cursor = Cursors.WaitCursor; var worker = new BackgroundWorker(); worker.DoWork += (s, evt) => { var selections = (List <IGrouping <Guid, Entity> >)evt.Argument; var total = selections.Count; var current = 0; var targetService = AdditionalConnectionDetails.First().GetCrmServiceClient(); foreach (var ruleGroup in selections) { current++; string name = ruleGroup.First().GetAttributeValue <string>("name"); SendMessageToStatusBar(this, new StatusBarMessageEventArgs(current * 100 / total, "Processing rule '" + name + "'...")); try { var ruleToTransfer = new Entity(ruleGroup.First().LogicalName); foreach (var attribute in ruleGroup.First().Attributes) { // skip related condition records if (!attribute.Key.StartsWith("condition.")) { ruleToTransfer[attribute.Key] = attribute.Value; } } // Delete existing conditions (or delete entire rule) Guid existingId = _drManager.DedupeRuleExists(targetService, name); if (existingId != Guid.Empty) { ruleToTransfer["duplicateruleid"] = existingId; targetService.Delete(ruleToTransfer.LogicalName, existingId); } existingId = targetService.Create(ruleToTransfer); ruleToTransfer["duplicateruleid"] = existingId; // iterate conditions and apply those foreach (var condition in ruleGroup) { var dedupeCondition = new Entity("duplicaterulecondition") { ["regardingobjectid"] = new EntityReference(ruleToTransfer.LogicalName, existingId) }; foreach (var attribute in condition.Attributes) { // only use related condition records if (attribute.Key.StartsWith("condition.") && !attribute.Key.EndsWith(".duplicateruleconditionid")) { dedupeCondition[attribute.Key.Replace("condition.", String.Empty)] = ((AliasedValue)attribute.Value).Value; } } targetService.Create(dedupeCondition); } // publish if source as also pubished if (ruleGroup.First().GetAttributeValue <OptionSetValue>("statecode").Value == 1) // active { PublishDuplicateRuleRequest publishReq = new PublishDuplicateRuleRequest { DuplicateRuleId = existingId }; targetService.Execute(publishReq); } Log(name, true); } catch (Exception error) { Log(name, false, error.Message); } } }; worker.ProgressChanged += (s, evt) => { SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs(0, evt.UserState.ToString())); }; worker.RunWorkerCompleted += (s, evt) => { if (evt.Error != null) { MessageBox.Show(ParentForm, @"An error has occured while transferring dedupe rules: " + evt.Error.Message, @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } tsbLoadDupeRules.Enabled = true; tsbTransferDupeRules.Enabled = true; btnSelectTarget.Enabled = true; Cursor = Cursors.Default; SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs(string.Empty)); }; worker.WorkerReportsProgress = true; worker.RunWorkerAsync(selectedRules); } else { MessageBox.Show(@"You have to select at least one source dedupe rule and a target organisation to continue.", @"Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); } }
private void TsbTransfertTemplatesClick(object sender, EventArgs e) { if (lvTemplates.SelectedItems.Count > 0 && AdditionalConnectionDetails.Count > 0) { var selectedTemplates = lvTemplates.SelectedItems.Cast <ListViewItem>().Select(item => (Entity)item.Tag).ToList(); lbLogs.Items.Clear(); tsbLoadTemplates.Enabled = false; tsbTransfertTemplates.Enabled = false; btnSelectTarget.Enabled = false; Cursor = Cursors.WaitCursor; var worker = new BackgroundWorker(); worker.DoWork += (s, evt) => { List <Entity> templates = (List <Entity>)evt.Argument; var total = templates.Count; var current = 0; var targetService = AdditionalConnectionDetails.First().GetCrmServiceClient(); foreach (var template in templates) { current++; string etc = template.GetAttributeValue <string>("associatedentitytypecode"); string name = template.GetAttributeValue <string>("name"); SendMessageToStatusBar(this, new StatusBarMessageEventArgs(current * 100 / total, "Processing template '" + name + "'...")); try { int?oldEtc = tManager.GetEntityTypeCode(Service, etc); int?newEtc = tManager.GetEntityTypeCode(targetService, etc); tManager.ReRouteEtcViaOpenXML(template, name, etc, oldEtc, newEtc); var templateToTransfer = new Entity(template.LogicalName); foreach (var attribute in template.Attributes) { templateToTransfer[attribute.Key] = attribute.Value; } templateToTransfer["associatedentitytypecode"] = newEtc; Guid existingId = tManager.TemplateExists(targetService, name); if (existingId != null && existingId != Guid.Empty) { templateToTransfer["documenttemplateid"] = existingId; targetService.Update(templateToTransfer); } else { targetService.Create(templateToTransfer); } Log(name, true); } catch (Exception error) { Log(name, false, error.Message); } } }; worker.ProgressChanged += (s, evt) => { SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs(0, evt.UserState.ToString())); }; worker.RunWorkerCompleted += (s, evt) => { if (evt.Error != null) { MessageBox.Show(ParentForm, @"An error has occured while transferring templates: " + evt.Error.Message, @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } tsbLoadTemplates.Enabled = true; tsbTransfertTemplates.Enabled = true; btnSelectTarget.Enabled = true; Cursor = Cursors.Default; SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs(string.Empty)); }; worker.WorkerReportsProgress = true; worker.RunWorkerAsync(selectedTemplates); } else { MessageBox.Show(@"You have to select at least one source template and a target organization to continue.", @"Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); } }
private void ComparePluginsButton_Click(object sender, EventArgs ee) { SourceIdColumn.DisplayIndex = 0; OtherIdColumn.DisplayIndex = 1; SourceSizeColumn.DisplayIndex = 2; OtherSizeColumn.DisplayIndex = 3; NameColumn.DisplayIndex = 4; SourceVersionColumn.DisplayIndex = 5; ResultColumn.DisplayIndex = 6; OtherVersionColumn.DisplayIndex = 7; SourceIdColumn.Width = 0; OtherIdColumn.Width = 0; SourceSizeColumn.Width = 0; OtherSizeColumn.Width = 3; NameColumn.Width = 300; SourceVersionColumn.Width = 60; ResultColumn.Width = 40; OtherVersionColumn.Width = 60; ResultList.Items.Clear(); var otherConnection = AdditionalConnectionDetails.First(); var otherService = otherConnection.GetCrmServiceClient(); WorkAsync(new WorkAsyncInfo { Message = "Compare Plug-ins...", Work = (w, e) => { var retrieveSourceAssembliesTask = Task.Run(() => RetrieveAssemblies(Service)); var retrieveOtherAssembliesTask = Task.Run(() => RetrieveAssemblies(otherService)); Task.WaitAll(retrieveSourceAssembliesTask, retrieveOtherAssembliesTask); var sourceAssemblies = retrieveSourceAssembliesTask.Result; var otherAssemblies = retrieveOtherAssembliesTask.Result; var items = new List <ListViewItem>(); foreach (var sourceAssembly in sourceAssemblies) { var name = sourceAssembly.GetAttributeValue <string>("name"); var version = sourceAssembly.GetAttributeValue <string>("version"); var versionParts = version.Split('.'); var versionPattern = $"{versionParts[0]}.{versionParts[1]}."; var otherAssembly = otherAssemblies.FirstOrDefault(a => a.GetAttributeValue <string>("name") == name && a.GetAttributeValue <string>("version").StartsWith(versionPattern)); if (otherAssembly == null) { items.Add(new AssemblyComparerItem(name, sourceAssembly.Id, version, null, null) { Group = ResultList.Groups["PluginsGroup"] }); } else { items.Add(new AssemblyComparerItem(name, sourceAssembly.Id, version, otherAssembly.Id, otherAssembly.GetAttributeValue <string>("version")) { Group = ResultList.Groups["PluginsGroup"] }); otherAssemblies.Remove(otherAssembly); } } foreach (var otherAssembly in otherAssemblies) { items.Add(new AssemblyComparerItem(otherAssembly.GetAttributeValue <string>("name"), null, null, otherAssembly.Id, otherAssembly.GetAttributeValue <string>("version")) { Group = ResultList.Groups["PluginsGroup"] }); } e.Result = items.OrderBy(lvi => lvi.Name).ToArray(); }, PostWorkCallBack = e => { _items = (ListViewItem[])e.Result; ShowMode_SelectedIndexChanged(null, null); }, MessageWidth = 340, MessageHeight = 150 }); }
private void CompareWebResources(string resourveName, int[] resourceTypes) { SourceIdColumn.DisplayIndex = 0; OtherIdColumn.DisplayIndex = 1; SourceVersionColumn.DisplayIndex = 2; OtherVersionColumn.DisplayIndex = 3; NameColumn.DisplayIndex = 4; SourceSizeColumn.DisplayIndex = 5; ResultColumn.DisplayIndex = 6; OtherSizeColumn.DisplayIndex = 7; SourceIdColumn.Width = 0; OtherIdColumn.Width = 0; SourceVersionColumn.Width = 0; OtherVersionColumn.Width = 0; NameColumn.Width = 300; SourceSizeColumn.Width = 60; ResultColumn.Width = 40; OtherSizeColumn.Width = 60; ResultList.Items.Clear(); var otherConnection = AdditionalConnectionDetails.First(); var otherService = otherConnection.GetCrmServiceClient(); WorkAsync(new WorkAsyncInfo { Message = $"Compare {resourveName} Web Resources...", Work = (w, e) => { var retrieveSourceResourcesTask = Task.Run(() => RetrieveWebResources(Service, resourceTypes)); var retrieveOtherResourcesTask = Task.Run(() => RetrieveWebResources(otherService, resourceTypes)); Task.WaitAll(retrieveSourceResourcesTask, retrieveOtherResourcesTask); var sourceResources = retrieveSourceResourcesTask.Result; var otherResources = retrieveOtherResourcesTask.Result; var items = new List <ListViewItem>(); foreach (var sourceResource in sourceResources) { var name = sourceResource.GetAttributeValue <string>("name"); var content = sourceResource.GetAttributeValue <string>("content"); var otherResource = otherResources.FirstOrDefault(a => a.GetAttributeValue <string>("name") == name); if (otherResource == null) { items.Add(new WebResourceComparerItem(name, sourceResource.Id, content, null, null)); } else { items.Add(new WebResourceComparerItem(name, sourceResource.Id, content, otherResource.Id, otherResource.GetAttributeValue <string>("content"))); otherResources.Remove(otherResource); } } foreach (var otherResource in otherResources) { items.Add(new WebResourceComparerItem(otherResource.GetAttributeValue <string>("name"), null, null, otherResource.Id, otherResource.GetAttributeValue <string>("content"))); } e.Result = items.OrderBy(lvi => lvi.Name).ToArray(); }, PostWorkCallBack = e => { _items = (ListViewItem[])e.Result; ShowMode_SelectedIndexChanged(null, null); }, MessageWidth = 400, MessageHeight = 150 }); }