关注本人微信和易信公众号: 微软动态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 Node
metadataWriter.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的时间执行程序的时候需要 将执行上下文作为第一个参数传递 这个选中。

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

Dynamics 365新功能:可编辑的网格(行内编辑)的更多相关文章

  1. jQuery EasyUI 数据网格 - 启用行内编辑(转自http://www.runoob.com/jeasyui/jeasyui-datagrid-datagrid12.html)

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

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

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

  3. EasyUI 启用行内编辑

    创建数据网格(DataGrid) $(function(){ $('#tt').datagrid({ title:'Editable DataGrid', iconCls:'icon-edit', w ...

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

    #base_admin.py # ————————24PerfectCRM实现King_admin自定义操作数据———————— from django.shortcuts import render ...

  5. ASP.NET Aries 入门开发教程6:列表数据表格的格式化处理及行内编辑

    前言: 为了赶进度,周末也写文了! 前几篇讲完查询框和工具栏,这节讲表格数据相关的操作. 先看一下列表: 接下来我们有很多事情可以做. 1:格式化 - 键值的翻译 对于“启用”列,已经配置了格式化 # ...

  6. JS组件系列——BootstrapTable 行内编辑解决方案:x-editable

    前言:之前介绍bootstrapTable组件的时候有提到它的行内编辑功能,只不过为了展示功能,将此一笔带过了,罪过罪过!最近项目里面还是打算将行内编辑用起来,于是再次研究了下x-editable组件 ...

  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(83)-Easyui Datagrid 行内编辑扩展

    这次我们要从复杂的交互入手来说明一些用法,这才能让系统做出更加复杂的业务,上一节讲述了Datagird的批量编辑和提交本节主要演示扩展Datagrid行内编辑的属性,下面来看一个例子,我开启编辑行的时 ...

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

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

  9. [转]JS组件系列——BootstrapTable 行内编辑解决方案:x-editable

    本文转自:http://www.cnblogs.com/landeanfen/p/5821192.html 阅读目录 一.x-editable组件介绍 二.bootstrapTable行内编辑初始方案 ...

随机推荐

  1. iOS依赖库管理工具之Carthage

    在iOS开发中,我们常会用CocoaPods来进行依赖库的管理.CoaoaPods 是一套整体解决方案,我们在 Podfile 中指定好我们需要的第三方库,然后 CocoaPods 就会进行下载,集成 ...

  2. OSGi解决的问题

    osgi最明显的缺陷 bundle尽管可以为隔离的服务建立独立生命周期管理的热部署方式,以及明确的服务导出和导入依赖能力,但是其最终基于jvm,无法对bundle对应的服务实现计算资源的隔离,一个服务 ...

  3. 树的简介及Java实现

    一.树的基本知识 树是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合.把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的.它具有以下的特点:每个结 ...

  4. SH2018笔试题之成长值问题

    一.题目 详见代码 二.代码 import java.util.Scanner; /** * 3 * 1 1 5 10 * 2 3 4 * 1 4 6 -5 */ public class main4 ...

  5. Redis配置与安装

    Redis 是一个非关系型高性能的key-value数据库.在部分场合可以对关系数据库起到很好的补充作用.它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C, ...

  6. qt cef嵌入web(二)

    在qt cef嵌入web文章中已经讲述了怎么把cef页面嵌入到qt程序中,但是这样并不完美,因为如果需要在多个窗口上创建cef浏览器部件的话,在 消息监听部分没有办法做区分多个浏览器事件,在这篇文章中 ...

  7. asp.net core 系列 13 日志

    一.概述 ASP.NET Core 支持适用于各种内置和第三方日志记录, 供程序的日志记录 API,本文介绍了如何将日志记录 API 与内置提供程序一起使用.对于第三方日志记录提供程序使用,文章最后有 ...

  8. Flink生成Parquet格式文件实战

    1.概述 在流数据应用场景中,往往会通过Flink消费Kafka中的数据,然后将这些数据进行结构化到HDFS上,再通过Hive加载这些文件供后续业务分析.今天笔者为大家分析如何使用Flink消费Kaf ...

  9. 模拟实现 DBUtils 工具 , 技术原理浅析

    申明:本文采用自己 C3P0 连接池工具进行测试 自定义的 JDBCUtils 可以获取 Connection: package com.test.utils; import java.sql.Con ...

  10. Linux基础知识第五讲,远程管理关机启动网卡命令

    目录 一丶学习目标 二丶关机重启命令 三丶 查看或配置网卡信息 1.网卡与IP地址介绍 2.命令介绍 一丶学习目标 关机/重启 shutdown 查看或配置网卡信息 ifconfig ping 远程登 ...