Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 4
0
        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;
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
            }
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 11
0
 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());
        }
Ejemplo n.º 14
0
        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();
        }
Ejemplo n.º 17
0
 void bwApplyDefault_ProgressChanged(object sender, ProgressChangedEventArgs e)
 {
     InformationPanel.ChangeInformationPanelMessage(loadingPanel, e.UserState.ToString());
 }
Ejemplo n.º 18
0
 void bwCreateFilterFromView_ProgressChanged(object sender, ProgressChangedEventArgs e)
 {
     InformationPanel.ChangeInformationPanelMessage(loadingPanel, e.UserState.ToString());
 }
Ejemplo n.º 19
0
 private void WorkerProgressChanged(object sender, ProgressChangedEventArgs e)
 {
     InformationPanel.ChangeInformationPanelMessage(infoPanel, e.UserState.ToString());
 }
Ejemplo n.º 20
0
        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();
        }
Ejemplo n.º 22
0
        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());
        }