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

关注本人微信和易信公众号: 微软动态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的时间执行程序的时候须要 将执行上下文做为第一个参数传递 这个选中。
 
发布之后看到的效果以下:
 
 
 
相关文章
相关标签/搜索