定制列表界面打开记录的行为以便执行自定义操作的示例
Posted luoyong0201
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了定制列表界面打开记录的行为以便执行自定义操作的示例相关的知识,希望对你有一定的参考价值。
我是微软Dynamics 365 & Power Platform方面的工程师/顾问罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),这是我的第480篇原创文章,写于2022年8月29日。
我们知道在表的列表界面(含子网格,主要列表界面)中通过如下方式会打开这条记录的表单(详情页面):
- 双击某条记录,或者点击这条记录的主字段(主字段一般显示为超链接);
- 选择某条记录,然后点击键盘上的 Enter 键;
- 在支持触摸的设备(touch-enabled device)上选择某条记录
但是有些时候我们不想打开记录的表单,想覆盖这种行为,以前做不到,现在可以了,请参考官方文档:Override the default open behavior of data rows in an entity-bound grid ,但是官方文档写得是手工修改解决方案的customization.xml文件来做,我也有写过类似文章 Dynamics CRM命令栏定制基础知识及手动编辑customization.xml实例,估计做起来稍微麻烦点,我今天也来做下,但是使用RibbonWorkbench,达到的效果是覆盖在列表界面双击或者其他方式打开表单的行为,改成打开一个侧边栏,侧边栏显示一个Custom Page,关于Custom Page可以参考我的博文:在Model-Driven App中使用自定义页面(Custom Page) 。关于列表界面添加按钮的方法可以参考我之前的博文:Dynamics 365定制:在实体的列表界面添加按钮 。
需要在实体的列表命令栏新建一个按钮,记得这个按钮的Id一定要设置为 Mscrm.OpenRecordItem :
这个按钮关联的Command自己新建,为了保险起见,我一般也命名为 Mscrm.OpenRecordItem,这里执行的操作如下:
执行的代码如下,可以参考官方文档:Navigating to a custom page using client API 。
"use strict";
var LuoYong = window.LuoYong || ;
LuoYong.TestEntity = LuoYong.TestEntity || ;
(function ()
this.OpenRecordItem = function (selectedControlSelectedItemReferences)
if (selectedControlSelectedItemReferences && selectedControlSelectedItemReferences.length === 1)
console.log(selectedControlSelectedItemReferences);
var pageInput =
pageType: "custom",
name: "ly_luoyongdemocustompageapp_b9378",
entityName: selectedControlSelectedItemReferences[0].TypeName,
recordId: selectedControlSelectedItemReferences[0].Id,
;
var navigationOptions =
target: 2,
position: 2,
width: value: 500, unit: "px" ,
title: "查看图片"
;
Xrm.Navigation.navigateTo(pageInput, navigationOptions)
.then(
function ()
// Called when the dialog closes
).catch(
function (error)
// Handle error
);
;
).call(LuoYong.TestEntity);
为了让只选择一条记录的时候才可见,我还给这个按钮加了一个Enable Rule如下:
相关资源发布以后,列表界面选择一条记录,就可以看到按钮“查看详情”了,点击就会在右侧
当然拉,通过本文开头提到的三种方法也和点击“查看详情”按钮是一样的效果。那你会问,如果我要打开这个记录的表单呢?选择记录,点击标准的 Edit 按钮即可。
你可能会问,如果我将自己新增的这个“查看详情”按钮一直隐藏,效果还会存在嘛?官方文档说 You can enable or disable the button; doing either will still override the open default behavior.,我们也去实验下。按照 Define custom actions to modify the ribbon 的建议,我添加两个互斥的Display Rule,然后导入并发布。
<DisplayRules>
<DisplayRule Id="Mscrm.HideOnModern" />
<DisplayRule Id="Mscrm.ShowOnlyOnModern" />
</DisplayRules>
但是这个做法导致按钮一直隐藏,而且双击打开记录的时候也不会用我定义的新操作代替。囧。
于是我换了一个方法,为这个按钮的增加一个一直会返回False的EntityRule。
然后可以看到,按钮虽然不见了,双击可以执行我定义的操作了,而不是打开记录表单了。
以上是关于定制列表界面打开记录的行为以便执行自定义操作的示例的主要内容,如果未能解决你的问题,请参考以下文章