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 解决方案的处理:将实体加入解决方案、导出解决方案
记得收藏并关注,掌握更多相关知识!!!