private void bw_DoWork(object sender, DoWorkEventArgs e) { QueryExpression qe; if (!string.IsNullOrEmpty(query)) { qe = ((FetchXmlToQueryExpressionResponse)service.Execute(new FetchXmlToQueryExpressionRequest { FetchXml = query })).Query; } else { var searchTerm = e.Argument.ToString(); qe = new QueryExpression("systemuser"); qe.ColumnSet = new ColumnSet(new[] { "systemuserid", "fullname", "businessunitid" }); qe.Criteria = new FilterExpression(LogicalOperator.And) { Filters = { new FilterExpression(LogicalOperator.Or) { Conditions = { new ConditionExpression("fullname", ConditionOperator.BeginsWith, searchTerm.Replace("*", "%")), new ConditionExpression("domainname", ConditionOperator.BeginsWith, searchTerm.Replace("*", "%")), new ConditionExpression("firstname", ConditionOperator.BeginsWith, searchTerm.Replace("*", "%")), new ConditionExpression("lastname", ConditionOperator.BeginsWith, searchTerm.Replace("*", "%")) } }, new FilterExpression { Conditions ={ new ConditionExpression("isdisabled", ConditionOperator.Equal, false) } } } }; } qe.PageInfo = new PagingInfo { Count = 250, PageNumber = 1, ReturnTotalRecordCount = true }; EntityCollection result; var results = new List <Entity>(); InformationPanel.ChangeInformationPanelMessage(loadingPanel, "Retrieving users..."); do { result = service.RetrieveMultiple(qe); results.AddRange(result.Entities); qe.PageInfo.PageNumber++; } while (result.MoreRecords); e.Result = results; }
private void buttonCDSComboRetrieve_Click(object sender, EventArgs e) { // var infoPanel = InformationPanel.GetInformationPanel(this, "CDS Combo Box Retrieve Example", 340, 150); infoPanel.BringToFront(); Refresh(); textBoxCDSComboProgress.Text = ""; cdsDataComboRetrieve.RetrieveMultiple(xmlViewerFetchCDSCombo.Text, (string message) => { textBoxCDSComboProgress.Text += $"{message}{Environment.NewLine}"; InformationPanel.ChangeInformationPanelMessage(infoPanel, message); Refresh(); }, (int itemCount, Entity FirstItem) => { // Thread.Sleep(2000); textBoxCDSComboProgress.Text += $"Count: {itemCount}{Environment.NewLine}"; InformationPanel.ChangeInformationPanelMessage(infoPanel, $"Count: {itemCount}, Entity: {FirstItem?.Attributes.First().ToString()}"); Refresh(); // Thread.Sleep(2000); if (Controls.Contains(infoPanel)) { infoPanel.Dispose(); Controls.Remove(infoPanel); } }); }
private void buttonSaveAs_Click(object sender, EventArgs e) { Entity newformXml = formXml; string newFormXmlName = ITLec.CRMFormXml.AppCode.Common.ShowDialog("New FormXml Name:", "FormXml Name", txtName.Text + " - COPY"); if (!string.IsNullOrEmpty(newFormXmlName)) { newformXml["name"] = newFormXmlName; newformXml["description"] = txtDescription.Text; // newformXml["datadescription"] = tecDataDescription.Text; newformXml["formxml"] = tecVisualizationDescription.Text; newformXml.Attributes.Remove(newformXml.LogicalName + "id"); /* newformXml.Id = Guid.NewGuid(); * * if (newformXml.Attributes.Contains("savedqueryvisualizationid")) * { * newformXml["savedqueryvisualizationid"] = newformXml.Id; * } * else * { * newformXml["userqueryvisualizationid"] = newformXml.Id; * }*/ infoPanel = InformationPanel.GetInformationPanel(this, "Save As formXml...", 350, 150); var worker = new BackgroundWorker { WorkerReportsProgress = true }; worker.DoWork += (w, evt) => { service.Create((Entity)evt.Argument); }; worker.ProgressChanged += (w, evt) => { InformationPanel.ChangeInformationPanelMessage(infoPanel, evt.UserState.ToString()); }; worker.RunWorkerCompleted += (w, evt) => { if (evt.Error != null) { MessageBox.Show(this, evt.Error.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { HasUpdatedContent = true; } Controls.Remove(infoPanel); infoPanel.Dispose(); this.Close(); }; worker.RunWorkerAsync(newformXml); } }
private void bw_DoWork(object sender, DoWorkEventArgs e) { var searchTerm = e.Argument.ToString(); var qe = new QueryExpression("systemuser"); qe.ColumnSet = new ColumnSet(new[] { "systemuserid", "fullname", "businessunitid" }); qe.PageInfo = new PagingInfo { Count = 250, PageNumber = 1, ReturnTotalRecordCount = true }; qe.Criteria = new FilterExpression(LogicalOperator.And) { Filters = { new FilterExpression(LogicalOperator.Or) { Conditions = { new ConditionExpression("fullname", ConditionOperator.BeginsWith, searchTerm.Replace("*", "%")), new ConditionExpression("domainname", ConditionOperator.BeginsWith, searchTerm.Replace("*", "%")), new ConditionExpression("firstname", ConditionOperator.BeginsWith, searchTerm.Replace("*", "%")), new ConditionExpression("lastname", ConditionOperator.BeginsWith, searchTerm.Replace("*", "%")) } }, new FilterExpression { Conditions ={ new ConditionExpression("isdisabled", ConditionOperator.Equal, false) } } } }; EntityCollection result; var results = new List <Entity>(); do { result = service.RetrieveMultiple(qe); results.AddRange(result.Entities); InformationPanel.ChangeInformationPanelMessage(loadingPanel, string.Format("Retrieving users ({0} %)...", qe.PageInfo.PageNumber * qe.PageInfo.Count / result.TotalRecordCount * 100)); qe.PageInfo.PageNumber++; } while (result.MoreRecords); e.Result = results; }
private void btnUpdate_Click(object sender, EventArgs e) { chart["name"] = txtName.Text; chart["description"] = txtDescription.Text; chart["datadescription"] = tecDataDescription.Text; chart["presentationdescription"] = tecVisualizationDescription.Text; infoPanel = InformationPanel.GetInformationPanel(this, "Updating chart...", 350, 150); var worker = new BackgroundWorker { WorkerReportsProgress = true }; worker.DoWork += (w, evt) => { service.Update((Entity)evt.Argument); ((BackgroundWorker)w).ReportProgress(0, "Publishing entity..."); service.Execute(new PublishXmlRequest { ParameterXml = $@"<importexportxml><entities><entity>{chart.GetAttributeValue<string>("primaryentitytypecode") }</entity></entities><nodes/><securityroles/><settings/><workflows/></importexportxml>" }); }; worker.ProgressChanged += (w, evt) => { InformationPanel.ChangeInformationPanelMessage(infoPanel, evt.UserState.ToString()); }; worker.RunWorkerCompleted += (w, evt) => { if (evt.Error != null) { MessageBox.Show(this, evt.Error.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { HasUpdatedContent = true; } Controls.Remove(infoPanel); infoPanel.Dispose(); }; worker.RunWorkerAsync(chart); }
private void buttonDeleteEmailTemplate_Click(object sender, EventArgs e) { var confirmResult = MessageBox.Show("Are you sure to delete this emailTemplate ??", "Confirm Delete!!", MessageBoxButtons.YesNo); if (confirmResult == DialogResult.Yes) { infoPanel = InformationPanel.GetInformationPanel(this, "Deleting emailTemplate...", 350, 150); var worker = new BackgroundWorker { WorkerReportsProgress = true }; worker.DoWork += (w, evt) => { service.Delete(((Entity)evt.Argument).LogicalName, ((Entity)evt.Argument).Id); }; worker.ProgressChanged += (w, evt) => { InformationPanel.ChangeInformationPanelMessage(infoPanel, evt.UserState.ToString()); }; worker.RunWorkerCompleted += (w, evt) => { if (evt.Error != null) { MessageBox.Show(this, evt.Error.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { HasUpdatedContent = true; } Controls.Remove(infoPanel); infoPanel.Dispose(); this.Close(); }; worker.RunWorkerAsync(emailTemplate); } }
private void btnUpdate_Click(object sender, EventArgs e) { emailTemplate["title"] = txtName.Text; emailTemplate["description"] = txtDescription.Text; emailTemplate["subjectpresentationxml"] = tecDataDescription.Text; emailTemplate["presentationxml"] = tecVisualizationDescription.Text; infoPanel = InformationPanel.GetInformationPanel(this, "Updating emailTemplate...", 350, 150); var worker = new BackgroundWorker { WorkerReportsProgress = true }; worker.DoWork += (w, evt) => { service.Update((Entity)evt.Argument); }; worker.ProgressChanged += (w, evt) => { InformationPanel.ChangeInformationPanelMessage(infoPanel, evt.UserState.ToString()); }; worker.RunWorkerCompleted += (w, evt) => { if (evt.Error != null) { MessageBox.Show(this, evt.Error.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { HasUpdatedContent = true; } Controls.Remove(infoPanel); infoPanel.Dispose(); }; worker.RunWorkerAsync(emailTemplate); }
private void ImportAttributes() { if (cmbEntities.SelectedItem == null) { MessageBox.Show("You must select an entity", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (string.IsNullOrEmpty(txtTemplatePath.Text)) { MessageBox.Show("You must select a template file", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } ManageWorkingState(true); informationPanel = InformationPanel.GetInformationPanel(this, "Loading template...", 340, 150); SendMessageToStatusBar(this, new StatusBarMessageEventArgs("Loading template...")); var entityItem = (EntityItem)cmbEntities.SelectedItem; var items = new List <ListViewItem>(); var bwTransferData = new BackgroundWorker { WorkerReportsProgress = true }; bwTransferData.DoWork += (sender, e) => { var attributes = (List <ListViewItem>)e.Argument; var entityitem = entityItem; var errors = new List <Tuple <string, string> >(); var nrOfCreates = 0; var nrOfUpdates = 0; var nrOfDeletes = 0; try { using (FileStream stream = File.Open(txtTemplatePath.Text, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) using (SpreadsheetDocument document = SpreadsheetDocument.Open(stream, false)) { var sheet = document.WorkbookPart.Workbook.Sheets.Cast <Sheet>().Where(s => s.Name == entityitem.LogicalName).FirstOrDefault(); if (sheet == null) { errors.Add(new Tuple <string, string>(entityitem.LogicalName, "Entity sheet is not found in the template!")); } else { var sheetid = sheet.Id; var sheetData = ((WorksheetPart)document.WorkbookPart.GetPartById(sheetid)).Worksheet.GetFirstChild <SheetData>(); var templaterows = sheetData.ChildElements.Cast <Row>().ToArray(); // For shared strings, look up the value in the shared strings table. var stringTable = document.WorkbookPart.GetPartsOfType <SharedStringTablePart>().FirstOrDefault()?.SharedStringTable; // Check all existing attributes foreach (var item in attributes) { var row = templaterows.Where(r => TemplateHelper.GetCellValue(r, 0, stringTable) == item.SubItems[1].Text).FirstOrDefault(); var attributeMetadataRow = AttributeMetadataRow.FromListViewItem(item); attributeMetadataRow.UpdateFromTemplateRow(row, stringTable); var listViewItem = attributeMetadataRow.ToListViewItem(); listViewItem.Tag = item.Tag; items.Add(listViewItem); if (attributeMetadataRow.Action == "Update") { nrOfUpdates++; listViewItem.ForeColor = ColorUpdate; } else if (attributeMetadataRow.Action == "Delete") { nrOfDeletes++; listViewItem.ForeColor = ColorDelete; } else { listViewItem.ForeColor = System.Drawing.Color.Black; } InformationPanel.ChangeInformationPanelMessage(informationPanel, string.Format("Processing new attribute {0}...", item.Text)); } // Check new attributes for (int i = 1; i < templaterows.Length; i++) { var row = templaterows[i]; var logicalname = TemplateHelper.GetCellValue(row, 0, stringTable); if (!string.IsNullOrEmpty(logicalname)) { var attribute = attributes.Select(a => (AttributeMetadata)a.Tag).Where(a => a.LogicalName == logicalname).FirstOrDefault(); if (attribute == null) { InformationPanel.ChangeInformationPanelMessage(informationPanel, string.Format("Processing new attribute {0}...", logicalname)); var attributeMetadataRow = AttributeMetadataRow.FromTableRow(row, stringTable); attributeMetadataRow.Action = "Create"; var listViewItem = attributeMetadataRow.ToListViewItem(); listViewItem.BackColor = ColorCreate; items.Add(listViewItem); nrOfCreates++; } } } } } SendMessageToStatusBar(this, new StatusBarMessageEventArgs(string.Format("{0} create; {1} update; {2} delete", nrOfCreates, nrOfUpdates, nrOfDeletes))); } catch (FaultException <OrganizationServiceFault> error) { errors.Add(new Tuple <string, string>(entityitem.LogicalName, error.Message)); SendMessageToStatusBar(this, new StatusBarMessageEventArgs(string.Empty)); } e.Result = errors; }; bwTransferData.RunWorkerCompleted += (sender, e) => { lvAttributes.BeginUpdate(); // Add attributes here to avoid accessing lvAttributes across threads. lvAttributes.Items.Clear(); foreach (var item in items) { lvAttributes.Items.Add(item); } lvAttributes.EndUpdate(); Controls.Remove(informationPanel); informationPanel.Dispose(); ManageWorkingState(false); var errors = (List <Tuple <string, string> >)e.Result; if (errors.Count > 0) { var errorDialog = new ErrorList((List <Tuple <string, string> >)e.Result); errorDialog.ShowDialog(ParentForm); } }; bwTransferData.ProgressChanged += (sender, e) => { InformationPanel.ChangeInformationPanelMessage(informationPanel, e.UserState.ToString()); SendMessageToStatusBar(this, new StatusBarMessageEventArgs(e.UserState.ToString())); }; bwTransferData.RunWorkerAsync(lvAttributes.Items.Cast <ListViewItem>().ToList()); }
private void ExportAttributes() { if (cmbEntities.SelectedItem == null) { MessageBox.Show("You must select an entity", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } ManageWorkingState(true); var selectedLogicalName = (EntityItem)cmbEntities.SelectedItem; var saveFileDlg = new SaveFileDialog() { Title = "Save the entity template", Filter = "Excel Workbook|*.xlsx", FileName = string.Format("{0}_attributeeditor.xlsx", selectedLogicalName?.LogicalName) }; saveFileDlg.ShowDialog(); // If the file name is not an empty string open it for saving. if (!string.IsNullOrEmpty(saveFileDlg.FileName)) { informationPanel = InformationPanel.GetInformationPanel(this, "Exporting attributes...", 340, 150); SendMessageToStatusBar(this, new StatusBarMessageEventArgs("Initializing attributes...")); var bwTransferData = new BackgroundWorker { WorkerReportsProgress = true }; bwTransferData.DoWork += (sender, e) => { var attributes = (List <AttributeMetadata>)e.Argument; var entityitem = selectedLogicalName; var errors = new List <Tuple <string, string> >(); try { using (SpreadsheetDocument document = SpreadsheetDocument.Create(saveFileDlg.FileName, SpreadsheetDocumentType.Workbook)) { WorkbookPart workbookPart; Sheets sheets; SheetData sheetData; TemplateHelper.InitDocument(document, out workbookPart, out sheets); TemplateHelper.CreateSheet(workbookPart, sheets, entityitem.LogicalName, out sheetData); #region Header var headerRow = new Row(); foreach (var field in AttributeMetadataRow.GetColumns()) { headerRow.AppendChild(TemplateHelper.CreateCell(field.Type, field.Header)); } sheetData.AppendChild(headerRow); #endregion #region Data foreach (var attribute in attributes) { if (attribute == null) { continue; } var attributeType = EntityHelper.GetAttributeFromTypeName(attribute.AttributeType.Value.ToString()); if (attributeType == null) { continue; } attributeType.LoadFromAttributeMetadata(attribute); var metadataRow = attributeType.ToAttributeMetadataRow(); sheetData.AppendChild(metadataRow.ToTableRow()); } #endregion workbookPart.Workbook.Save(); } } catch (FaultException <OrganizationServiceFault> error) { errors.Add(new Tuple <string, string>(entityitem.LogicalName, error.Message)); } e.Result = errors; }; bwTransferData.RunWorkerCompleted += (sender, e) => { Controls.Remove(informationPanel); informationPanel.Dispose(); SendMessageToStatusBar(this, new StatusBarMessageEventArgs(string.Empty)); ManageWorkingState(false); var errors = (List <Tuple <string, string> >)e.Result; if (errors.Count > 0) { var errorDialog = new ErrorList((List <Tuple <string, string> >)e.Result); errorDialog.ShowDialog(ParentForm); } }; bwTransferData.ProgressChanged += (sender, e) => { InformationPanel.ChangeInformationPanelMessage(informationPanel, e.UserState.ToString()); SendMessageToStatusBar(this, new StatusBarMessageEventArgs(e.UserState.ToString())); }; bwTransferData.RunWorkerAsync(lvAttributes.Items.Cast <ListViewItem>().Select(v => (AttributeMetadata)v.Tag).ToList()); } }
private void btnUpdatePublish_Click(object sender, EventArgs e) { formXml["name"] = txtName.Text; formXml["description"] = txtDescription.Text; // formXml["datadescription"] = tecDataDescription.Text; formXml["formxml"] = tecVisualizationDescription.Text; infoPanel = InformationPanel.GetInformationPanel(this, "Updating formXml...", 350, 150); string objectType = formXml.GetAttributeValue <string>("objecttypecode"); string paramXml = ""; string xmlType = "Entity"; if (objectType == "none") { xmlType = "Dashboard"; var dashboardId = formXml.Id; paramXml = string.Format(@"<importexportxml> <dashboards> <dashboard>{0}</dashboard> </dashboards> </importexportxml>", dashboardId); } else { paramXml = string.Format(" <importexportxml><entities><entity>{0}</entity></entities><nodes/><securityroles/><settings/><workflows/></importexportxml>", objectType); } var worker = new BackgroundWorker { WorkerReportsProgress = true }; worker.DoWork += (w, evt) => { service.Update((Entity)evt.Argument); ((BackgroundWorker)w).ReportProgress(0, "Publishing " + xmlType + "..."); service.Execute(new PublishXmlRequest { ParameterXml = paramXml }); }; worker.ProgressChanged += (w, evt) => { InformationPanel.ChangeInformationPanelMessage(infoPanel, evt.UserState.ToString()); }; worker.RunWorkerCompleted += (w, evt) => { if (evt.Error != null) { MessageBox.Show(this, evt.Error.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { HasUpdatedContent = true; } Controls.Remove(infoPanel); infoPanel.Dispose(); }; worker.RunWorkerAsync(formXml); }
private void bwReplaceFilters_ProgressChanged(object sender, ProgressChangedEventArgs e) { InformationPanel.ChangeInformationPanelMessage(loadingPanel, e.UserState.ToString()); }
private void TransferAssociations(bool preview) { if (lvAssociations.SelectedItems.Count == 0) { MessageBox.Show("You must select at least one relationship to be transfered", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } ManageWorkingState(true); informationPanel = InformationPanel.GetInformationPanel(this, "Transfering records...", 340, 150); SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs(0, "Start associating records...")); var transfermode = RelationRecord.TransferMode.None; if (preview) { transfermode |= RelationRecord.TransferMode.Preview; } if (cbCreate.Checked) { transfermode |= RelationRecord.TransferMode.Create; } if (cbDelete.Checked) { transfermode |= RelationRecord.TransferMode.Delete; } var bwTransferData = new BackgroundWorker { WorkerReportsProgress = true }; bwTransferData.DoWork += (sender, e) => { var worker = (BackgroundWorker)sender; var associations = (List <ManyToManyRelationshipMetadata>)e.Argument; var errors = new List <Item <string, string> >(); for (int i = 0; i < associations.Count; i++) { var entitymeta = associations[i]; var ass = new AppCode.RelationRecord(entitymeta, transfermode, this.Service, targetService); worker.ReportProgress((i / associations.Count), string.Format("{1} relation '{0}'...", ass.Name, (preview ? "Previewing" : "Transfering"))); try { ass.Mappings = settings[organisationid].Mappings; ass.OnStatusMessage += Transfer_OnStatusMessage; ass.Transfer(); errors.AddRange(ass.Messages.Select(m => new Item <string, string>(ass.Name, m))); } catch (FaultException <OrganizationServiceFault> error) { errors.Add(new Item <string, string>(ass.Name, error.Message)); } } e.Result = errors; }; bwTransferData.RunWorkerCompleted += (sender, e) => { Controls.Remove(informationPanel); informationPanel.Dispose(); //SendMessageToStatusBar(this, new StatusBarMessageEventArgs(string.Empty)); // keep showing transfer results afterwards ManageWorkingState(false); var errors = (List <Item <string, string> >)e.Result; if (errors.Count > 0) { var errorDialog = new ErrorList((List <Item <string, string> >)e.Result); errorDialog.ShowDialog(ParentForm); } }; bwTransferData.ProgressChanged += (sender, e) => { InformationPanel.ChangeInformationPanelMessage(informationPanel, e.UserState.ToString()); SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs(e.ProgressPercentage * 100, e.UserState.ToString())); }; bwTransferData.RunWorkerAsync(lvAssociations.SelectedItems.Cast <ListViewItem>().Select(v => (ManyToManyRelationshipMetadata)v.Tag).ToList()); }
private void TransferEntities(bool preview) { if (lvEntities.SelectedItems.Count == 0) { MessageBox.Show("You must select at least one entity to be transfered", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } // Good time to save the attributes SaveUnmarkedAttributes(); if (!preview && cbDelete.Checked) { foreach (ListViewItem entityitem in lvEntities.SelectedItems) { if (entityitem != null && entityitem.Tag != null) { var entity = (EntityMetadata)entityitem.Tag; if (!string.IsNullOrEmpty(settings[organisationid][entity.LogicalName].Filter)) { var msg = string.Format("You have a filter applied on \"{0}\" and checked the \"Delete\" flag. All records on the target environment which don't match the filtered soure set will be deleted! Are you sure you want to continue?", entity.LogicalName); var result = MessageBox.Show(msg, "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (result.Equals(DialogResult.No)) { return; } } } } } ManageWorkingState(true); informationPanel = InformationPanel.GetInformationPanel(this, "Transfering records...", 340, 150); SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs(0, "Start transfering records...")); var transfermode = EntityRecord.TransferMode.None; if (preview) { transfermode |= EntityRecord.TransferMode.Preview; } if (cbCreate.Checked) { transfermode |= EntityRecord.TransferMode.Create; } if (cbUpdate.Checked) { transfermode |= EntityRecord.TransferMode.Update; } if (cbDelete.Checked) { transfermode |= EntityRecord.TransferMode.Delete; } var bwTransferData = new BackgroundWorker { WorkerReportsProgress = true }; bwTransferData.DoWork += (sender, e) => { var worker = (BackgroundWorker)sender; var entities = (List <EntityMetadata>)e.Argument; var errors = new List <Item <string, string> >(); var manualMappings = settings[organisationid].Mappings; var autoMappings = new List <Item <EntityReference, EntityReference> >(); if (cbBusinessUnit.Checked) { SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs(1, "Retrieving root Business Units...")); // Add BU mappings var sourceBU = GetRootBusinessUnit(this.Service); var targetBU = GetRootBusinessUnit(targetService); if (sourceBU != null && targetBU != null) { autoMappings.Add(new Item <EntityReference, EntityReference>(sourceBU, targetBU)); } } if (cbTransactionCurrency.Checked) { SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs(1, "Retrieving default transaction currencies...")); // Add BU mappings var sourceTC = GetDefaultTransactionCurrency(this.Service); var targetTC = GetDefaultTransactionCurrency(targetService); if (sourceTC != null && targetTC != null) { autoMappings.Add(new Item <EntityReference, EntityReference>(sourceTC, targetTC)); } } if (cbSystemUserEntityReferences.Checked) { SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs(1, "Retrieving systemuser mappings...")); // Add BU mappings var sourceUsers = GetSystemUsers(this.Service); var targetUsers = GetSystemUsers(targetService); foreach (var su in sourceUsers) { var domainname = su.GetAttributeValue <string>("domainname"); // Make sure we have a domain name if (!string.IsNullOrEmpty(domainname)) { var tu = targetUsers.Where(u => u.GetAttributeValue <string>("domainname") == domainname).FirstOrDefault()?.ToEntityReference(); // Do we have a target user? if (tu != null) { autoMappings.Add(new Item <EntityReference, EntityReference>(su.ToEntityReference(), tu)); } } } } for (int i = 0; i < entities.Count; i++) { var entitymeta = entities[i]; var attributes = lvAttributes.CheckedItems.Cast <ListViewItem>().Select(v => (AttributeMetadata)v.Tag).ToList(); var entity = new AppCode.EntityRecord(entitymeta, attributes, transfermode, this.Service, targetService); worker.ReportProgress((i / entities.Count), string.Format("{1} entity '{0}'...", entity.Name, (preview ? "Previewing" : "Transfering"))); try { entity.Filter = settings[organisationid][entitymeta.LogicalName].Filter; entity.Mappings = autoMappings; entity.Mappings.AddRange(manualMappings); entity.OnStatusMessage += Transfer_OnStatusMessage; entity.Transfer(); errors.AddRange(entity.Messages.Select(m => new Item <string, string>(entity.Name, m))); // Show preview window if (preview) { var prvwDialog = new Preview(entity.PreviewList); prvwDialog.ShowDialog(ParentForm); } } catch (FaultException <OrganizationServiceFault> error) { errors.Add(new Item <string, string>(entity.Name, error.Message)); } } e.Result = errors; }; bwTransferData.RunWorkerCompleted += (sender, e) => { Controls.Remove(informationPanel); informationPanel.Dispose(); //SendMessageToStatusBar(this, new StatusBarMessageEventArgs(string.Empty)); // keep showing transfer results afterwards ManageWorkingState(false); var errors = (List <Item <string, string> >)e.Result; if (errors.Count > 0) { var errorDialog = new ErrorList((List <Item <string, string> >)e.Result); errorDialog.ShowDialog(ParentForm); } }; bwTransferData.ProgressChanged += (sender, e) => { InformationPanel.ChangeInformationPanelMessage(informationPanel, e.UserState.ToString()); SendMessageToStatusBar?.Invoke(this, new StatusBarMessageEventArgs(e.ProgressPercentage * 100, e.UserState.ToString())); }; bwTransferData.RunWorkerAsync(lvEntities.SelectedItems.Cast <ListViewItem>().Select(v => (EntityMetadata)v.Tag).ToList()); }
private void Transfer() { // Good time to save the attributes SaveUnmarkedAttributes(); if (service == null || targetService == null) { MessageBox.Show("You must select both a source and a target organization", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (lvEntities.SelectedItems.Count == 0) { MessageBox.Show("You must select at least one entity to be transfered", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (!(cbCreate.Checked || cbUpdate.Checked || cbDelete.Checked)) { MessageBox.Show("You must select at least one setting for transporting the data", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (cbDelete.Checked) { foreach (ListViewItem entityitem in lvEntities.SelectedItems) { if (entityitem != null && entityitem.Tag != null) { var entity = (EntityMetadata)entityitem.Tag; if (!string.IsNullOrEmpty(settings[organisationid][entity.LogicalName].Filter)) { var msg = string.Format("You have a filter applied on \"{0}\" and checked the \"Delete\" flag. All records on the target environment which don't match the filtered soure set will be deleted! Are you sure you want to continue?", entity.LogicalName); var result = MessageBox.Show(msg, "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (result.Equals(DialogResult.No)) { return; } } } } } ManageWorkingState(true); informationPanel = InformationPanel.GetInformationPanel(this, "Transfering records...", 340, 150); SendMessageToStatusBar(this, new StatusBarMessageEventArgs("Start transfering records...")); var transfermode = EntityRecord.TransferMode.None; if (cbCreate.Checked) { transfermode |= EntityRecord.TransferMode.Create; } if (cbUpdate.Checked) { transfermode |= EntityRecord.TransferMode.Update; } if (cbDelete.Checked) { transfermode |= EntityRecord.TransferMode.Delete; } var bwTransferData = new BackgroundWorker { WorkerReportsProgress = true }; bwTransferData.DoWork += (sender, e) => { var worker = (BackgroundWorker)sender; var entities = (List <EntityMetadata>)e.Argument; var errors = new List <Item <string, string> >(); for (int i = 0; i < entities.Count; i++) { var entitymeta = entities[i]; var attributes = lvAttributes.CheckedItems.Cast <ListViewItem>().Select(v => (AttributeMetadata)v.Tag).ToList(); var entity = new AppCode.EntityRecord(entitymeta, attributes, transfermode, service, targetService); worker.ReportProgress((i / entities.Count), string.Format("Transfering entity '{0}'...", entity.Name)); try { entity.Filter = settings[organisationid][entitymeta.LogicalName].Filter; entity.Mappings = settings[organisationid].Mappings; entity.OnStatusMessage += Entity_OnStatusMessage; entity.Transfer(); errors.AddRange(entity.Messages.Select(m => new Item <string, string>(entity.Name, m))); } catch (FaultException <OrganizationServiceFault> error) { errors.Add(new Item <string, string>(entity.Name, error.Message)); } } e.Result = errors; }; bwTransferData.RunWorkerCompleted += (sender, e) => { Controls.Remove(informationPanel); informationPanel.Dispose(); //SendMessageToStatusBar(this, new StatusBarMessageEventArgs(string.Empty)); // keep showing transfer results afterwards ManageWorkingState(false); var errors = (List <Item <string, string> >)e.Result; if (errors.Count > 0) { var errorDialog = new ErrorList((List <Item <string, string> >)e.Result); errorDialog.ShowDialog(ParentForm); } }; bwTransferData.ProgressChanged += (sender, e) => { InformationPanel.ChangeInformationPanelMessage(informationPanel, e.UserState.ToString()); SendMessageToStatusBar(this, new StatusBarMessageEventArgs(e.UserState.ToString())); }; bwTransferData.RunWorkerAsync(lvEntities.SelectedItems.Cast <ListViewItem>().Select(v => (EntityMetadata)v.Tag).ToList()); }
private void Transfer() { if (service == null || targetService == null) { MessageBox.Show("You must select both a source and a target organization", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (lvSourceDashboards.SelectedItems.Count == 0) { MessageBox.Show("You must select at least one dashboard to be transfered", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } ManageWorkingState(true); informationPanel = InformationPanel.GetInformationPanel(this, "Transfering dashboards...", 340, 150); SendMessageToStatusBar(this, new StatusBarMessageEventArgs("Transfering dashboards...")); var bwTransferDashboards = new BackgroundWorker { WorkerReportsProgress = true }; bwTransferDashboards.DoWork += (sender, e) => { var dashboards = (List <Entity>)e.Argument; var errors = new List <Tuple <string, string> >(); foreach (var dbEntity in dashboards) { var name = dbEntity.GetAttributeValue <string>("name"); var worker = (BackgroundWorker)sender; worker.ReportProgress(0, "Transfering dashboard '" + name + "'..."); try { var dashboard = new AppCode.Dashboard(dbEntity, service, targetService); dashboard.Transfer(); } catch (FaultException <OrganizationServiceFault> error) { if (error.HResult == -2146233087) { errors.Add(new Tuple <string, string>(name, "The dashboard you tried to transfer already exists but you don't have read access to it. Get access to this dashboard on the target organization to update it")); } else { errors.Add(new Tuple <string, string>(name, error.Message)); } } } e.Result = errors; }; bwTransferDashboards.RunWorkerCompleted += (sender, e) => { Controls.Remove(informationPanel); informationPanel.Dispose(); SendMessageToStatusBar(this, new StatusBarMessageEventArgs("")); ManageWorkingState(false); var errors = (List <Tuple <string, string> >)e.Result; if (errors.Count > 0) { var errorDialog = new ErrorList((List <Tuple <string, string> >)e.Result); errorDialog.ShowDialog(ParentForm); } }; bwTransferDashboards.ProgressChanged += (sender, e) => { InformationPanel.ChangeInformationPanelMessage(informationPanel, e.UserState.ToString()); SendMessageToStatusBar(this, new StatusBarMessageEventArgs(e.UserState.ToString())); }; bwTransferDashboards.RunWorkerAsync(lvSourceDashboards.SelectedItems.Cast <ListViewItem>().Select(v => (Entity)v.Tag).ToList()); }
private void SaveChanges() { if (cmbEntities.SelectedItem == null) { MessageBox.Show("You must select an entity", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } ManageWorkingState(true); informationPanel = InformationPanel.GetInformationPanel(this, "Processing entity...", 340, 150); var entityitem = (EntityItem)cmbEntities.SelectedItem; var itemsToProcess = lvAttributes.Items .Cast <ListViewItem>() .Where(i => !string.IsNullOrEmpty(i.SubItems[0].Text) && !string.IsNullOrEmpty(i.Text)) // Only get items where action is filled .Select(i => new { Action = i.SubItems[0].Text, Metadata = AttributeMetadataRow.FromListViewItem(i) }) .ToList(); var bwTransferData = new BackgroundWorker { WorkerReportsProgress = true }; bwTransferData.DoWork += (sender, e) => { var errors = new List <Tuple <string, string> >(); var helper = new EntityHelper(entityitem.LogicalName, entityitem.LanguageCode, service); for (int i = 0; i < itemsToProcess.Count; i++) { // TODO: Validate each row //if (item.SubItems.Count == 6) //{ var item = itemsToProcess[i]; var attributeMetadata = item.Metadata; InformationPanel.ChangeInformationPanelMessage(informationPanel, string.Format("Processing attribute {0}...", attributeMetadata.LogicalName)); SendMessageToStatusBar(this, new StatusBarMessageEventArgs(string.Format("{0}/{1}", i + 1, itemsToProcess.Count))); try { var attribute = EntityHelper.GetAttributeFromTypeName(attributeMetadata.AttributeType); if (attribute == null) { errors.Add(new Tuple <string, string>(attributeMetadata.DisplayName, $"The Attribute Type \"{attributeMetadata.AttributeType}\" is not yet supported.")); continue; } attribute.LoadFromAttributeMetadataRow(attributeMetadata); attribute.Entity = entityitem.LogicalName; switch (item.Action) { case "Create": if (cbCreate.Checked) { attribute.CreateAttribute(service); } break; case "Update": if (cbUpdate.Checked) { attribute.UpdateAttribute(service); } break; case "Delete": if (cbDelete.Checked) { attribute.DeleteAttribute(service); } break; } } catch (FaultException <OrganizationServiceFault> error) { errors.Add(new Tuple <string, string>(attributeMetadata.DisplayName, error.Message)); } //} //else //{ // errors.Add(new Tuple<string, string>(item.Name, string.Format("Invalid row! Unexpected subitems count [{0}]", item.SubItems.Count))); //} } helper.Publish(); e.Result = errors; }; bwTransferData.RunWorkerCompleted += (sender, e) => { Controls.Remove(informationPanel); informationPanel.Dispose(); SendMessageToStatusBar(this, new StatusBarMessageEventArgs(string.Empty)); ManageWorkingState(false); var errors = (List <Tuple <string, string> >)e.Result; if (errors.Count > 0) { var errorDialog = new ErrorList((List <Tuple <string, string> >)e.Result); errorDialog.ShowDialog(ParentForm); } PopulateAttributes(); }; bwTransferData.ProgressChanged += (sender, e) => { InformationPanel.ChangeInformationPanelMessage(informationPanel, e.UserState.ToString()); SendMessageToStatusBar(this, new StatusBarMessageEventArgs(e.UserState.ToString())); }; bwTransferData.RunWorkerAsync(); }
void bwApplyDefault_ProgressChanged(object sender, ProgressChangedEventArgs e) { InformationPanel.ChangeInformationPanelMessage(loadingPanel, e.UserState.ToString()); }
void bwCreateFilterFromView_ProgressChanged(object sender, ProgressChangedEventArgs e) { InformationPanel.ChangeInformationPanelMessage(loadingPanel, e.UserState.ToString()); }
private void WorkerProgressChanged(object sender, ProgressChangedEventArgs e) { InformationPanel.ChangeInformationPanelMessage(infoPanel, e.UserState.ToString()); }
private void SaveChanges() { if (cmbEntities.SelectedItem == null) { MessageBox.Show("You must select an entity", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } ManageWorkingState(true); informationPanel = InformationPanel.GetInformationPanel(this, "Processing entity...", 340, 150); var bwTransferData = new BackgroundWorker { WorkerReportsProgress = true }; bwTransferData.DoWork += (sender, e) => { var worker = (BackgroundWorker)sender; var entityitem = (EntityItem)cmbEntities.SelectedItem; var errors = new List <Tuple <string, string> >(); var helper = new EntityHelper(entityitem.LogicalName, entityitem.LanguageCode, service); foreach (var item in lvAttributes.Items.Cast <ListViewItem>()) { if (item.SubItems.Count == 6) { var action = item.SubItems[5].Text; if (!string.IsNullOrEmpty(action) && !string.IsNullOrEmpty(item.Text)) { InformationPanel.ChangeInformationPanelMessage(informationPanel, string.Format("Processing attribute {0}...", item.Text)); try { switch (action) { case "Create": if (cbCreate.Checked) { helper.CreateAttribute(item.Text, item.SubItems[1].Text, item.SubItems[2].Text, item.SubItems[4].Text); } break; case "Update": if (cbUpdate.Checked) { helper.UpdateAttribute(item.Text, item.SubItems[1].Text, item.SubItems[4].Text); } break; case "Delete": if (cbDelete.Checked) { helper.DeleteAttribute(item.Text); } break; } } catch (FaultException <OrganizationServiceFault> error) { errors.Add(new Tuple <string, string>(item.Text, error.Message)); } } } else { errors.Add(new Tuple <string, string>(item.Name, string.Format("Invalid row! Unexpected subitems count [{0}]", item.SubItems.Count))); } } helper.Publish(); e.Result = errors; }; bwTransferData.RunWorkerCompleted += (sender, e) => { Controls.Remove(informationPanel); informationPanel.Dispose(); SendMessageToStatusBar(this, new StatusBarMessageEventArgs(string.Empty)); ManageWorkingState(false); var errors = (List <Tuple <string, string> >)e.Result; if (errors.Count > 0) { var errorDialog = new ErrorList((List <Tuple <string, string> >)e.Result); errorDialog.ShowDialog(ParentForm); } PopulateAttributes(); }; bwTransferData.ProgressChanged += (sender, e) => { InformationPanel.ChangeInformationPanelMessage(informationPanel, e.UserState.ToString()); SendMessageToStatusBar(this, new StatusBarMessageEventArgs(e.UserState.ToString())); }; bwTransferData.RunWorkerAsync(); }
private void ExecuteTransfer() { var informationPanel = InformationPanel.GetInformationPanel(this, "Starting playlist transfer...", 340, 150); btnCancel.Visible = true; bwTransferData = new BackgroundWorker { WorkerReportsProgress = true, WorkerSupportsCancellation = true }; bwTransferData.DoWork += (sender, e) => { var worker = (BackgroundWorker)sender; var errors = new List <Item <string, string> >(); var autoMappings = new List <Item <EntityReference, EntityReference> >(); #region Auto-mappings OnStatusMessage?.Invoke(this, new StatusBarMessageEventArgs(1, "Retrieving root Business Units...")); // Add BU mappings var bumapping = AutoMappings.GetRootBusinessUnitMapping(sourceService, targetService); if (bumapping != null) { autoMappings.Add(bumapping); } OnStatusMessage?.Invoke(this, new StatusBarMessageEventArgs(1, "Retrieving default transaction currencies...")); var tcmapping = AutoMappings.GetDefaultTransactionCurrencyMapping(sourceService, targetService); if (tcmapping != null) { autoMappings.Add(tcmapping); } OnStatusMessage?.Invoke(this, new StatusBarMessageEventArgs(1, "Retrieving systemuser mappings...")); var sumapping = AutoMappings.GetSystemUsersMapping(sourceService, targetService); if (sumapping != null) { autoMappings.AddRange(sumapping); } #endregion Auto-mappings for (int i = 0; i < list.Items.Count; i++) { var item = list.Items[i]; var entitymeta = sourceService.RetrieveEntity(item.Setting.LogicalName); var attributes = entitymeta.Attributes .Where(a => (a.IsValidForCreate != null && a.IsValidForCreate.Value))// || (a.IsValidForUpdate != null && a.IsValidForUpdate.Value)) .Where(a => a.IsValidForRead != null && a.IsValidForRead.Value) .Where(a => a.DisplayName != null && a.DisplayName.UserLocalizedLabel != null && !string.IsNullOrEmpty(a.DisplayName.UserLocalizedLabel.Label)) .Where(a => !item.Setting.UnmarkedAttributes.Any(ua => ua.Equals(a.LogicalName))) .ToList(); var entity = new AppCode.EntityRecord(entitymeta, attributes, item.Actions, bwTransferData, sourceService, targetService); worker.ReportProgress((i / list.Items.Count), string.Format("Transfering entity '{0}'...", entity.Name)); try { entity.Filter = item.Setting.Filter; entity.Mappings = autoMappings; entity.Mappings.AddRange(item.Setting.Mappings); entity.OnStatusMessage += OnStatusMessage; entity.Transfer(useBulk, bulkCount); errors.AddRange(entity.Messages.Select(m => new Item <string, string>(entity.Name, m))); } catch (FaultException <OrganizationServiceFault> error) { errors.Add(new Item <string, string>(entity.Name, error.Message)); } } e.Result = errors; }; bwTransferData.RunWorkerCompleted += (sender, e) => { btnCancel.Visible = false; btnCancel.Text = @"Cancel"; Controls.Remove(informationPanel); informationPanel.Dispose(); //SendMessageToStatusBar(this, new StatusBarMessageEventArgs(string.Empty)); // keep showing transfer results afterwards var errors = (List <Item <string, string> >)e.Result; if (errors.Count > 0) { var errorDialog = new ErrorList((List <Item <string, string> >)e.Result); errorDialog.ShowDialog(ParentForm); } }; bwTransferData.ProgressChanged += (sender, e) => { InformationPanel.ChangeInformationPanelMessage(informationPanel, e.UserState.ToString()); OnStatusMessage?.Invoke(this, new StatusBarMessageEventArgs(e.ProgressPercentage * 100, e.UserState.ToString())); }; bwTransferData.RunWorkerAsync(); }
private void UpdateAttributes(bool preview) { if (lvEntities.SelectedItems.Count == 0) { MessageBox.Show("You must select at least one entity to be updated", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } // Good time to save the attributes ManageWorkingState(true); informationPanel = InformationPanel.GetInformationPanel(this, "Updating records...", 340, 150); SendMessageToStatusBar(this, new StatusBarMessageEventArgs("Start updating records...")); var bwTransferData = new BackgroundWorker { WorkerReportsProgress = true }; bwTransferData.DoWork += (sender, e) => { var worker = (BackgroundWorker)sender; var entities = (List <EntityMetadata>)e.Argument; var errors = new List <Item <string, string> >(); for (int i = 0; i < entities.Count; i++) { var entitymeta = entities[i]; var attributes = grdAttributes.Rows .Cast <DataGridViewRow>() .Where(v => (bool)v.Cells[0].Value == true) .Select(v => new KeyValuePair <string, object>((string)v.Cells[2].Value, ParseValue((string)v.Cells[3].Value, (string)v.Cells[4].Value))) .ToList(); var entity = new AppCode.EntityRecord(entitymeta, attributes, service); worker.ReportProgress((i / entities.Count), string.Format("{1} entity '{0}'...", entity.Name, (preview ? "Previewing" : "Updating"))); try { entity.Filter = settings[entitymeta.LogicalName].Filter; entity.OnStatusMessage += Transfer_OnStatusMessage; entity.Update(); errors.AddRange(entity.Messages.Select(m => new Item <string, string>(entity.Name, m))); } catch (FaultException <OrganizationServiceFault> error) { errors.Add(new Item <string, string>(entity.Name, error.Message)); } } e.Result = errors; }; bwTransferData.RunWorkerCompleted += (sender, e) => { Controls.Remove(informationPanel); informationPanel.Dispose(); //SendMessageToStatusBar(this, new StatusBarMessageEventArgs(string.Empty)); // keep showing transfer results afterwards ManageWorkingState(false); var errors = (List <Item <string, string> >)e.Result; if (errors.Count > 0) { var errorDialog = new ErrorList((List <Item <string, string> >)e.Result); errorDialog.ShowDialog(ParentForm); } }; bwTransferData.ProgressChanged += (sender, e) => { InformationPanel.ChangeInformationPanelMessage(informationPanel, e.UserState.ToString()); SendMessageToStatusBar(this, new StatusBarMessageEventArgs(e.UserState.ToString())); }; bwTransferData.RunWorkerAsync(lvEntities.SelectedItems.Cast <ListViewItem>().Select(v => (EntityMetadata)v.Tag).ToList()); }