Javascript 覆盖CRM网格中双击事件调用的标准方法。

Javascript 覆盖CRM网格中双击事件调用的标准方法。,javascript,events,grid,dynamics-crm,dynamics-crm-2011,Javascript,Events,Grid,Dynamics Crm,Dynamics Crm 2011,CRM 2011中的以下情况:我的目标是在一个网格中显示多个实体。因此,我们制作了一个包装器实体,它链接到真实实体(包装器实体到实体a、B、C)。当在A、B或C中创建一个项目时,插件也会创建一个包装器实体项目。 像这样,我可以有一个网格,“混合”所有实体,而实际上只显示包装器实体的项 但当然,如果我在这个网格中双击或右键单击->打开,我不想打开包装器实体项目,我直接想打开实体a项目的窗口。顺便说一句,功能区按钮没有问题 到目前为止,我遵循了两条路线: a) 链接替换:加载网格后,我遍历DOM,用

CRM 2011中的以下情况:我的目标是在一个网格中显示多个实体。因此,我们制作了一个包装器实体,它链接到真实实体(包装器实体到实体a、B、C)。当在A、B或C中创建一个项目时,插件也会创建一个包装器实体项目。 像这样,我可以有一个网格,“混合”所有实体,而实际上只显示包装器实体的项

但当然,如果我在这个网格中双击或右键单击->打开,我不想打开包装器实体项目,我直接想打开实体a项目的窗口。顺便说一句,功能区按钮没有问题

到目前为止,我遵循了两条路线:

a) 链接替换:加载网格后,我遍历DOM,用(真实)目标项(实体a、B或C)的值替换oid、otype和otypename。这种想法有两个缺点:第一,何时执行替换例程(仅加载不足以在以后排序、筛选或翻转页面)。第二个问题是功能区按钮。我想删除包装器实体项,而不是它后面的发票。当我替换所有的ID时,事情变得混乱了。我必须用定制按钮替换所有按钮

b) 方法/事件替换:只替换调用item detail窗口的事件将是一种优雅的选择。不幸的是,我还没有弄清楚事件是如何在CRM中实现的,我希望取消附加事件并用我的事件替换它,但这似乎是一个隐藏的秘密。CRMWeb_static_grid\AppGrid_DefaultData.htc有dblclick事件,但我不知道这是否是我正在寻找的事件以及如何取消连接

有没有人尝试过替换crm网格中的事件处理程序,或者知道它是如何工作的

希望你明白我的意思


非常感谢您的建议。

您能通过将A连接到B和A连接到C来显示这些数据吗?这三个实体有何关联?A到B和A到C?A到B到C

我这样问是因为您应该能够通过视图提供的标准连接功能实现您的目标,并避免完全覆盖业务。如果您必须仅为此视图在实体之间设置一些关系,那么它可能比包装器实体更可取


(我更愿意添加这一点作为评论…我认为我没有足够的声誉)

界面中的事件处理方式与IE处理所有事件的方式相同(请参见SO问题中的一个示例)

覆盖默认双击操作的功能可以按如下方式启动:

函数加载(){
var grid=document.getElementById(“myGridName”);
grid.ondblclick=双击操作;
}
函数DoubleClickAction(){
变量id,url;
//获取双击行中实体的id
id=GetId();
//生成实体表单url
url=GetUrl();
//打开记录窗口
OpenRecordWindow(url);
}
函数OpenRecordWindow(url){
var-url;
if(Xrm.Page.context.isOutlookClient()){
openStdWin(url,“你的标题”,“宽度=1024,高度=768,状态=1”);
}
否则{
窗口打开(url);
}
}

Edit:根据您的评论,您正在对DOM进行一些非常认真的定制。每当网格刷新时,必须更改网格中每一行的
dblclick
事件,因为右键单击事件基于该行的
dblclick
事件。因此,您必须找到网格,并将
refresh
事件附加到网格,该网格将
dblclick
事件附加到任何找到的行


要获得网格的id和任何行的潜在id,您可以使用IE的F12开发工具浏览/搜索HTML。

好的,它们是不同的表,因此在视图中只能从其他表加载字段。好吗?a、B和C之间可能存在某种关系,但不一定存在这种关系。例如,A知道B的id,B知道C的id,但A当然不直接知道C的id。它们主要是通过包装器实体链接的。好吧,我不知道ondblclick会覆盖旧事件。因此,我不必特别删除旧事件,只需附加新事件,这很好。然而,我仍然很难找到合适的地点来举办这次活动。该事件在htc文件(“AppGrid_DefaultData.htc”)中定义,然后通过类(“ms crm列表数据”)绑定到gridBodyTable。我将阅读一些有关htc文件的文章,然后写下我的结论。谢谢在网格右键单击中的“打开”事件中调用父行的双击事件:onclick=“if(!disabled){parentRow.firefevent('ondblclick');parentPopup.hide();}”因此,希望在双击被替换后,不需要进行任何更改来覆盖标准函数。我希望您知道这将是一个不受支持的自定义。是的,我知道,但我看不到任何方法可以以受支持的方式实现这一点。这最好通过创建一个显示“包装器”实体的web资源来实现,但是使链接指向正确的形式。这将得到完全支持。