Dynamics CRM 365 通过代码的方式,移除实体窗体里面的JS脚本或者往窗体上追加JS脚本

在某些场景,您想把所有实体的某个JS脚本移除,或者您想大量实体上追加某个JS脚本的时候,那这篇博客就能给你最好的启示。

 1.我们分析一下,JS脚本是挂在窗体上的,那是否在窗体表能查到信息呢。于是我查了表systemform,发现了FormXml保存和窗体的很多内容:

 

 

2.然后我们把其中的一个FormXml格式化后,发现js的引用是挂在formLibraries节里面的

 

 

3.那我们有2个思路,A.通过SQL处理;B.通过C#处理,查询实体systemform的FormXml字段,然后转换为对象,处理完后转XML重新更新回去。这里介绍第二种方法:

           var adminServiceVi = getorgan();

            #region 移除所有实体的JS脚本
            var list = CrmHelper.GetAllEntity(adminServiceVi);
            int count = list.Count;
            Console.WriteLine($"总共【{count}】个实体");
            int i = 0;
            foreach (var item in list)
            {
                var formList = CrmHelper.GetEntityForm(adminServiceVi, item.ObjectTypeCode.Value);
                foreach (var viewEn in formList.Entities)
                {
                    string formxml = viewEn.GetAttributeValue<string>("formxml");
                    if (formxml.Contains("<formLibraries>") && formxml.Contains("</formLibraries>"))
                    {
                        int iStrat = formxml.IndexOf("<formLibraries>");
                        int iEnd = formxml.IndexOf("</formLibraries>");
                        string delStr = formxml.Substring(iStrat, iEnd - iStrat + 16);
                        formxml = formxml.Replace(delStr, "");
                        Entity upForm = new Entity("systemform", viewEn.Id);
                        upForm["formxml"] = formxml;
                        adminServiceVi.Update(upForm);
                    }
                }
                Console.WriteLine($"已完成{i++}/{count}");
            }

            #endregion

注:上面的getorgan函数和GetEntityForm在另外一篇博客:Dynamics CRM 365 解决方案的处理:将实体加入解决方案、导出解决方案

 

posted @ 2022-08-18 14:55  溜溜球_小钢wan  阅读(114)  评论(0编辑  收藏  举报