private void tsbAddCheckedScripts_Click(object sender, EventArgs e) { lvLogs.Items.Clear(); var scripts = crmScriptsTreeView1.GetSelectedScripts(); var forms = crmForms1.GetSelectedForms(); if (scripts.Count == 0) { MessageBox.Show(ParentForm, "Please select at least one script", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (forms.Count == 0) { MessageBox.Show(ParentForm, "Please select at least one form", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } var sod = new ScriptsOrderDialog(scripts, false) { StartPosition = FormStartPosition.CenterParent }; if (sod.ShowDialog(ParentForm) == DialogResult.Cancel) { return; } WorkAsync(new WorkAsyncInfo { Message = "Updating forms...", AsyncArgument = new object[] { sod.Scripts, sod.AddFirst, forms }, Work = (bw, evt) => { var scriptsArg = (List <Entity>)((object[])evt.Argument)[0]; var addFirstArg = (bool)((object[])evt.Argument)[1]; var formsArg = (List <Entity>)((object[])evt.Argument)[2]; var formsUpdated = new HashSet <Entity>(); if (addFirstArg) { scripts.Reverse(); } var fManager = new FormManager(Service); bool atLeastOneSuccess = false; foreach (var form in formsArg) { bw.ReportProgress(0, string.Format("Updating form '{0}' ({1})...", form.GetAttributeValue <string>("name"), form.GetAttributeValue <string>("objecttypecode"))); bool atLeastOneScriptSucess = false; foreach (var script in scriptsArg) { try { fManager.AddLibrary(form, script.GetAttributeValue <string>("name"), addFirstArg); atLeastOneScriptSucess = true; atLeastOneSuccess = true; if (!formsUpdated.Contains(form)) { formsUpdated.Add(form); } ListViewDelegates.AddItem(lvLogs, new ListViewItem { Text = form.GetAttributeValue <string>("objecttypecode"), SubItems = { new ListViewItem.ListViewSubItem { Text = form.GetAttributeValue <string>("name") }, new ListViewItem.ListViewSubItem { Text = script.GetAttributeValue <string>("name") }, new ListViewItem.ListViewSubItem { Text = "Added!" } }, ForeColor = Color.Green }); } catch (Exception error) { ListViewDelegates.AddItem(lvLogs, new ListViewItem { Text = form.GetAttributeValue <string>("objecttypecode"), SubItems = { new ListViewItem.ListViewSubItem { Text = form.GetAttributeValue <string>("name") }, new ListViewItem.ListViewSubItem { Text = script.GetAttributeValue <string>("name") }, new ListViewItem.ListViewSubItem { Text = error.Message } }, ForeColor = Color.Red }); } } if (atLeastOneScriptSucess) { fManager.UpdateForm(form); } } if (!atLeastOneSuccess) { return; } foreach (var entityToPublish in formsUpdated.Select(f => f.GetAttributeValue <string>("objecttypecode")).Distinct()) { bw.ReportProgress(0, string.Format("Publishing entity '{0}'...", entityToPublish)); fManager.PublishEntity(entityToPublish); } }, PostWorkCallBack = evt => { if (evt.Error != null) { MessageBox.Show(ParentForm, "An error occured:" + evt.Error.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }, ProgressChanged = evt => { SetWorkingMessage(evt.UserState.ToString()); } }); }