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()); }
            });
        }