private static void DeleteViewDependencyRecuricive(XmlRequest request, List <ClsViiewItemsChecked> checkedItems, TaskCompletedCallBack taskCompletedCallBack)
 {
     if (checkedItems.Any(c => c.CheckItemProcessed == false))
     {
         var objListItem = checkedItems.FirstOrDefault(c => c.CheckItemProcessed == false);
         if (objListItem == null)
         {
             return;
         }
         {
             var objEnt = (Entity)objListItem.CheckedItem.Tag;
             if (request.IsUserView)
             {
                 ((CrmServiceClient)request.ServiceProxy).CallerId = ((EntityReference)objEnt.Attributes["ownerid"]).Id;
             }
             var objResult = InternalDeleteViewDependency(request.OldAttributeName, objListItem.CheckedItem);
             objResult.OldFetchXml = (string)objEnt["fetchxml"];
             if (objResult.LayoutXml != string.Empty)
             {
                 objEnt["layoutxml"] = objResult.LayoutXml;
             }
             if (objResult.FetchXml != string.Empty)
             {
                 objEnt["fetchxml"] = objResult.FetchXml;
             }
             request.ObjPlugin.WorkAsync(new WorkAsyncInfo
             {
                 Message = "Deleting Dependency View  " + objListItem.CheckedItem.Text + " for Attribute Name " + request.OldAttributeName,
                 Work    = (bw, e) =>
                 {
                     try
                     {
                         request.ServiceProxy.Update(objEnt);
                     }catch (Exception exc)
                     {
                         MessageBox.Show(request.ObjPlugin.ParentForm, exc.Message, @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                     }
                 },
                 PostWorkCallBack = e =>
                 {
                     if (e.Error != null)
                     {
                         MessageBox.Show(request.ObjPlugin.ParentForm, e.Error.Message, @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                     }
                     else
                     {
                         objListItem.CheckItemProcessed = true;
                         DeleteViewDependencyRecuricive(request, checkedItems, taskCompletedCallBack);
                         if (checkedItems.Any(c => c.CheckItemProcessed == false))
                         {
                             return;
                         }
                         if (!request.IsUserView)
                         {
                             PublishEntity(request.ObjPlugin, request.ServiceProxy, request.Objentity);
                         }
                         taskCompletedCallBack?.Invoke(request);
                     }
                 }
             });
         }
     }
 }
        public static void DeleteViewDependency(XmlRequest request, TaskCompletedCallBack taskCompletedCallBack)
        {
            var checkedItemsProcess = ConvertListViweItems(request.CheckedItemsViews);

            DeleteViewDependencyRecuricive(request, checkedItemsProcess, taskCompletedCallBack);
        }
        private static void ReplaceFormDependencyRecuricive(XmlRequest request, IReadOnlyCollection <ClsViiewItemsChecked> checkedItems, TaskCompletedCallBack taskCompletedCallBack)
        {
            if (checkedItems.All(c => c.CheckItemProcessed))
            {
                return;
            }
            {
                var objListItem = checkedItems.FirstOrDefault(c => c.CheckItemProcessed == false);
                if (objListItem == null)
                {
                    return;
                }
                {
                    var objEnt = (Entity)objListItem.CheckedItem.Tag;
                    if (!objEnt.Attributes.Contains("formxml"))
                    {
                        return;
                    }
                    var layoutXml = (string)objEnt["formxml"];
                    if (layoutXml.IndexOf(request.OldAttributeName, StringComparison.Ordinal) < 0)
                    {
                        return;
                    }
                    var doc = new XmlDocument();
                    doc.LoadXml(layoutXml);
                    var allControls = doc.GetElementsByTagName("control");
                    var control     = allControls.Cast <XmlNode>().FirstOrDefault(p => p.Attributes != null && p.Attributes["id"].InnerText == request.OldAttributeName);
                    if (control == null)
                    {
                        return;
                    }
                    {
                        var controlParentCell = control.ParentNode;
                        var labelNode         = controlParentCell?.SelectNodes(@"labels//label");
                        if (labelNode != null && labelNode.Count > 0)
                        {
                            var xmlAttributeCollection = labelNode[0].Attributes;
                            if (xmlAttributeCollection != null)
                            {
                                xmlAttributeCollection["description"].InnerText = request.ObjAttDataReplace.DisplayName
                                                                                  .LocalizedLabels.FirstOrDefault(l => l.LanguageCode == 1033)
                                                                                  ?.Label ?? string.Empty;
                            }
                        }
                        var     findSimilerAttribute = request.Objentity.Attributes.Where(k => k.AttributeType == request.ObjAttDataReplace.AttributeType);
                        XmlNode similerClassControl  = null;
                        foreach (var attSimilierControl in findSimilerAttribute)
                        {
                            similerClassControl = allControls.Cast <XmlNode>().FirstOrDefault(p => p.Attributes != null && p.Attributes["id"].InnerText == attSimilierControl.LogicalName);
                            if (similerClassControl != null)
                            {
                                break;
                            }
                        }
                        if (similerClassControl != null)
                        {
                            if (control.Attributes != null)
                            {
                                control.Attributes["id"].InnerText = request.ReplaceAttributeName;
                                if (similerClassControl.Attributes != null)
                                {
                                    control.Attributes["classid"].InnerText =
                                        similerClassControl.Attributes["classid"].InnerText;
                                    control.Attributes["datafieldname"].InnerText = request.ReplaceAttributeName;
                                }
                            }

                            objEnt["formxml"] = doc.InnerXml;
                            request.ObjPlugin.WorkAsync(new WorkAsyncInfo
                            {
                                Message = "Replacing Dependency Form  " + objListItem.CheckedItem.Text + "\n Old Attribute Name " + request.OldAttributeName + " with New Attribute Name: " + request.ReplaceAttributeName,
                                Work    = (bw, e) =>
                                {
                                    try
                                    {
                                        request.ServiceProxy.Update(objEnt);
                                    }
                                    catch (Exception exc)
                                    {
                                        MessageBox.Show(request.ObjPlugin.ParentForm, exc.Message, @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    }
                                },
                                PostWorkCallBack = e =>
                                {
                                    if (e.Error != null)
                                    {
                                        MessageBox.Show(request.ObjPlugin.ParentForm, e.Error.Message, @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    }
                                    else
                                    {
                                        objListItem.CheckItemProcessed = true;
                                        ReplaceFormDependencyRecuricive(request, checkedItems, taskCompletedCallBack);
                                        if (checkedItems.Any(c => c.CheckItemProcessed == false))
                                        {
                                            return;
                                        }
                                        if (request.IsViewDependency)
                                        {
                                            ReplaceViewDependency(request, taskCompletedCallBack);
                                        }
                                        else
                                        {
                                            PublishEntity(request.ObjPlugin, request.ServiceProxy, request.Objentity);
                                            taskCompletedCallBack?.Invoke(request);
                                        }
                                    }
                                }
                            });
                        }
                        else
                        {
                            MessageBox.Show(@"Replace Attribute data type shold be same or same datatype control should be availbale on from : " + objListItem.CheckedItem.Text);
                        }
                    }
                }
            }
        }
 private static void DeleteFormDependencyRecuricive(XmlRequest request, List <ClsViiewItemsChecked> checkedItems, TaskCompletedCallBack taskCompletedCallBack)
 {
     if (checkedItems.All(c => c.CheckItemProcessed))
     {
         return;
     }
     {
         var objListItem = checkedItems.FirstOrDefault(c => c.CheckItemProcessed == false);
         if (objListItem == null)
         {
             return;
         }
         {
             var objEnt = (Entity)objListItem.CheckedItem.Tag;
             if (!objEnt.Attributes.Contains("formxml"))
             {
                 return;
             }
             var layoutXml = (string)objEnt["formxml"];
             var objResult = PerformXmlOperation(layoutXml, request.OldAttributeName, "control", "id", "row");
             objEnt["formxml"] = objResult.PublishXml;
             request.ObjPlugin.WorkAsync(new WorkAsyncInfo
             {
                 Message = "Deleting Dependency from  " + objListItem.CheckedItem.Text + " for Attribute Name " + request.OldAttributeName,
                 Work    = (bw, e) =>
                 {
                     try
                     {
                         request.ServiceProxy.Update(objEnt);
                     }
                     catch (Exception exc)
                     {
                         MessageBox.Show(request.ObjPlugin.ParentForm, exc.Message, @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                     }
                 },
                 PostWorkCallBack = e =>
                 {
                     if (e.Error != null)
                     {
                         MessageBox.Show(request.ObjPlugin.ParentForm, e.Error.Message, @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                     }
                     else
                     {
                         objListItem.CheckItemProcessed = true;
                         DeleteFormDependencyRecuricive(request, checkedItems, taskCompletedCallBack);
                         if (checkedItems.Any(c => c.CheckItemProcessed == false))
                         {
                             return;
                         }
                         if (request.IsViewDependency)
                         {
                             DeleteViewDependency(request, taskCompletedCallBack);
                         }
                         else
                         {
                             PublishEntity(request.ObjPlugin, request.ServiceProxy, request.Objentity);
                             taskCompletedCallBack?.Invoke(request);
                         }
                     }
                 }
             });
         }
     }
 }
        public static void ReplaceFormDependency(XmlRequest request, TaskCompletedCallBack taskCompletedCallBack)
        {
            var checkedItemsProcess = ConvertListViweItems(request.CheckedFromItems);

            ReplaceFormDependencyRecuricive(request, checkedItemsProcess, taskCompletedCallBack);
        }