关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复238或者20161127可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me 。

很多Dynamics CRM用户有个呼声,就是CRM网格中的内容能直接编辑。从Dynamics CRM 2013开始,订单产品,商机产品,报价单产品,发票产品等子网格是可以进行有限行内编辑的,可以参考我的文章 微软Dynamics CRM 2013介绍系列之Q & A ,但是不能自己进行客制化,所以其可编辑能力还是比较有限的。
Dynamics 365开始就提供了强大的可编辑的网格,我们今天来看看这个特性。首先我们需要一个可以使用的Dynamics 365环境,最快的办法是申请试用,包括中国大陆的手机号码也能申请试用了,需要试用的朋友请根据DTCC的原创技术贴 如何注册 Dynamics 365 试用账号 进行申请,没有加入DTCC的朋友赶紧加入吧,推荐人可以填写我的账号 luo.yong@hotmail.com 。我这也申请了一个试用版:https://lycrm365.crm5.dynamics.com 。
申请好Dynamics 365试用后,我们根据MSDN上的文章 Use editable grids 来看看可编辑的网格,按照官方的说法,通过浏览器访问Dynamics CRM 365的时候在列表网格(homepage grid),表单网格(form grids)和子网格(subgrids)上都支持可编辑的列表,通过移动端访问则在仪表盘和表单网格中支持可编辑的网格。
首先一个问题,所有实体都支持可编辑网格吗?NO!那哪些支持呢?MSDN上列出了如下标准,这些标准都满足才支持通过浏览器访问CRM的可编辑网格:
1. 实体是可定制的 (IsCustomizable = true)
2. 实体是刷新后的实体(IsAIRUpdated = true)或者自定义的实体(IsCustomEntity = true)
3. 实体不是子实体(IsChildEntity = false)
查看实体的元数据则可以通过导入SDK中的MetadataBrowser解决方案来查看。我们以客户实体为例:
 
可以知道客户实体是支持可编辑网格的。从条件来看,客制化的实体除了子实体以外都是支持可编辑网格的。
一个一个去看太累,MSDN上提供了代码可以导出来看看,我稍微修改下如下:
static void Main(string[] args)
{try{var crmSvc = new CrmServiceClient(ConfigurationManager.ConnectionStrings["CRM365"].ConnectionString);if (crmSvc.IsReady){//<snippetDumpEditableGridEntityInfo1>RetrieveAllEntitiesRequest request = new RetrieveAllEntitiesRequest(){EntityFilters = EntityFilters.Entity,RetrieveAsIfPublished = true};// Retrieve the MetaData.RetrieveAllEntitiesResponse response = (RetrieveAllEntitiesResponse)crmSvc.Execute(request);// Create an instance of StreamWriter to write text to a file.// The using statement also closes the StreamWriter.// To view this file, right click the file and choose open with Excel. // Excel will figure out the schema and display the information in columns.
String filename = String.Concat("EditableGridEntityInfo.xml");using (StreamWriter sw = new StreamWriter(filename)){// Create Xml Writer.XmlTextWriter metadataWriter = new XmlTextWriter(sw);// Start Xml File.
                metadataWriter.WriteStartDocument();// Metadata Xml Node.metadataWriter.WriteStartElement("Metadata");foreach (EntityMetadata currentEntity in response.EntityMetadata){// Start Entity NodemetadataWriter.WriteStartElement("Entity");bool canBeDisplayedInSitemap = currentEntity.IsCustomizable.Value;if (canBeDisplayedInSitemap){metadataWriter.WriteElementString("LogicalName", currentEntity.LogicalName);metadataWriter.WriteElementString("DisplayName", currentEntity.DisplayName.UserLocalizedLabel?.Label);metadataWriter.WriteElementString("CanEnableEditableGridWeb", (!(bool)currentEntity.IsChildEntity && ((bool)currentEntity.IsAIRUpdated || (bool)currentEntity.IsCustomEntity)).ToString());metadataWriter.WriteElementString("CanEnableEditableGridMobile", (currentEntity.IsVisibleInMobileClient.Value || currentEntity.IsVisibleInMobileClient.CanBeChanged).ToString());}// Write the Entity's Information.//End Entity Node
                    metadataWriter.WriteEndElement();}// End Metadata Xml Node
                metadataWriter.WriteEndElement();metadataWriter.WriteEndDocument();// Close xml writer.Console.WriteLine("Dumped information in the EditableGridEntityInfo.xml file");}}else{Console.WriteLine("连接CRM出错:" + crmSvc.LastCrmError);}Console.WriteLine("程序运行完成!");Console.ReadKey();}catch (FaultException ex){Console.WriteLine("程序出现异常:ex.Message=" + ex.Message);Console.ReadKey();}
}

上面程序使用的连接字符串如下:
<add name="CRM365" connectionString="AuthType=Office365;Username=crmadmmin@lycrm365.onmicrosoft.com; Password=Pasor@d1;Url=https://lycrm365.crm5.dynamics.com" />
运行完毕后生成了一个名称为EditableGridEntityInfo.xml 的文件,用Excel打开如下:
可以知道导出了143个标准实体和1个客制化实体,哪些支持哪些不支持筛选下就知道了。
下面我们来配置下客户实体的可编辑网格,首先在解决方案中加入客户实体,然后点击客户实体,选择 控件 这个tabpage,注意这个Tabpage是新增的,然后再点击 添加控件 ,如下图所示:
点击后出现界面如下,选择可编辑网格,点击添加按钮。
然后点击 添加查找功能 ,我这里做的设置如下:
最后将 可编辑网格 那行的Web列选中,保存后发布。
然后再去我的可用客户视图查看,可以看到文本列可以编辑:
查找字段列也可以编辑:
我自己创建一个个人视图,也是可以编辑的,日期时间字段的编辑效果如下:
选项集字段的编辑效果如下:
当然,可编辑网格也遵守权限控制,如果用户只有读的权限就不能编辑,也遵从字段级安全设置和业务规则的限制。我这里做个业务规则来看看,业务规则很简单就是客户名称不能包括test,可以看到Dynamics 365创建业务规则的页面变化挺大的:
激活业务规则后我去看看效果,如果我在客户名称中输入了test,则会有信息提示:

点击客户名称旁边的图标,就会将我在业务规则中设置的消息显示出来:

当然业务规则能设定规则比较简单,如果复杂的话需要写JavaScript来实现,这个也是支持的,可以参考MSDN上的文章  Editable grid objects and methods (client-side reference) 和 Execution context (client-side reference) 来做,我这里写个简单的例子,就是客户名称如果包括测试二字则提示错误不能保存,代码如下:
function accountNameOnchangeHandler(execObject) {var entityObject = execObject.getFormContext().data.entity;var nameAttr = entityObject.attributes.getByName('name');var isNameContainstest = nameAttr.getValue().indexOf('测试') === -1;// nameField will be an Xrm.Page control if invoked from a form OnChange event;// nameField will be a editable grid GridCell object if invoked from editable grid OnChange event.var nameField = nameAttr.controls.getByIndex(0);if (!isNameContainstest) {nameField.setNotification('客户名称不能包括测试二字!', 'nameNotification');}else {nameField.clearNotification('nameNotification');}
}

设置代码和可编辑网格关联的界面如下:

需要注意的是设定客户名称OnChange的时间执行程序的时候需要 将执行上下文作为第一个参数传递 这个选中。

发布以后看到的效果如下:

转载于:https://www.cnblogs.com/luoyong0201/p/Dynamics_365_New_Feature_InlineEdit.html

Dynamics 365新功能:可编辑的网格(行内编辑)相关推荐

  1. 雷林鹏分享jQuery EasyUI 数据网格 - 启用行内编辑

    可编辑的功能是最近添加到数据网格(datagrid)的.它可以使用户添加一个新行到数据网格(datagrid).用户也可以更新一个或多个行. 本教程向您展示如何创建一个数据网格(datagrid)和内 ...

  2. 雷林鹏分享:jQuery EasyUI 数据网格 - 启用行内编辑

    jQuery EasyUI 数据网格 - 启用行内编辑 可编辑的功能是最近添加到数据网格(datagrid)的.它可以使用户添加一个新行到数据网格(datagrid).用户也可以更新一个或多个行. 本 ...

  3. JQuery Datatables editor 行内编辑功能

    背景 ERP软件中,能进行行内编辑的表单是常用功能,行内编辑功能能让用户在表格中自己填写.修改.删除数据或者选择数据,可以说表格控件是ERP软件的核心控件,而行内编辑功能是核心中的关键. 本文会继续接 ...

  4. Datatables实现表格行内编辑功能

    表格行内编辑功能通过操作DOM来实现,最终实现效果如下代代码 html <table class="table table-striped table-bordered table-h ...

  5. Django项目:CRM(客户关系管理系统)--69--59PerfectCRM实现king_admin行内编辑

    1 #base_admin.py 2 3 4 # --------24PerfectCRM实现King_admin自定义操作数据-------- 5 from django.shortcuts imp ...

  6. bootstrap table 表格支持shirt 多选_bootstrap-table 表格行内编辑实现

    这篇文章向大家介绍一下如何使用bootstrap table插件实现表格的行内编辑功能. 我的web前端学习交流群点击进入1045267283,欢迎加入! 先放一张效果图: 应用场景 之前的项目也是采 ...

  7. datatables表格行内编辑的实现

    Datatables是一款jquery表格插件,它是一个高度灵活的工具,灵活就意味着很多功能需要自己去实现,比如说行内编辑功能. Datatables自己是没有行内编辑功能的,最简单的是通过modal ...

  8. python测试开发django-173.bootstrap实现table表格行内编辑

    前言 网上看了很多基于bootstrap的table表格行内编辑,需要基于bootstrap-table,bootstrap-table-edit,x-editable等插件,写的很复杂. 我想实现的 ...

  9. JS禁用页面某区域不可选中文字、及修复导致行内编辑出现某单元格不可输入的问题

    最近做了一个双击row的响应功能,不希望在双击table的row时出现文字复制的效果,影响体验,所以找到了禁用页面复制的js代码 document.onselectstart = function() ...

最新文章

  1. c++ eos智能合约开发_十分钟教你开发EOS智能合约
  2. 【网络流24题】解题报告:C、最小路径覆盖问题(有向无环图最小路径覆盖)(最大流)
  3. 安装hbas_非常详细的HBase的安装与配置
  4. 工业用微型计算机(28)-dos和bios功能调用(2)-int 21h
  5. OpenCASCADE:Modeling Algorithms模块之Sweeping: Prism, Revolution and Pipe
  6. 店招模块终于可以进行后台换图片了
  7. 国际化组件 Unicode (ICU) 函数库
  8. linux怎么安装高德导航软件,高德地图车机版如何安装?高德地图车机版安装教程...
  9. 阿里P8架构师谈:Restful、SOAP、RPC、SOA、微服务之间的区别
  10. 习题3.10 汉诺塔的非递归实现 (25分)
  11. 【论文写作】课程指导平台的开发中系统部分代码如何写
  12. jieba分词怎么操作_常用分词工具使用教程
  13. 安卓颜色标签android
  14. 终面后拿offer几率_20届网易校招失败后的经验(现已拿offer)
  15. java 车牌号识别_JAVA车牌识别(包含车牌定位及车牌内容识别)
  16. android自定义软键盘-中文与英文大小切换
  17. 虚拟机服务器ip端口映射,VMware虚拟机配置端口转发(端口映射),实现远程访问【转】...
  18. recyclerView多条目加载,点击动画事件
  19. 使用window.open打开新窗口被谷歌浏览器拦截
  20. 微信蓝牙设备开发教程之获取蓝牙设备deviceid和设备二维码(2)

热门文章

  1. php margin参数,margin参数简单介绍_html/css_WEB-ITnose
  2. java ejb3.0_初识EJB3.0 ---配置与运行篇
  3. mysql中in的用法总结_MySQL中的find_in_set()函数使用技巧心得与应用场景总结
  4. python 在主线程开线程_Python开启线程,在函数中开线程的实例
  5. java开发面试复试_java开发实习生面试经历
  6. 企业网络推广之下滴滴造车野心不减,“造车时代”想入局恐需技术先行
  7. kafka消费者如何读同一生产者消息_Kafka消费者生产者实例
  8. server 2008 mysql 报错 0xc000007b_docker插件部署项目,volumes报错invalid volume specification...
  9. python变量需要声明吗_python中可以声明变量类型吗
  10. LinearLayout测量原理解析:onMeasure(int,int)