CRM 2013内部部署
您好,
首先,这个过程正在发挥作用,可以转向生产,但我宁愿选择一个更清晰的解决方案,而不是我所采用的解决方案。
我有自定义实体E,它有一个子网格,显示自定义实体Y的相关记录。
现在可能有时候用户想要更改,添加等相关的Y记录......但是他们没有看到他们正在看X的Y实体并且通过子网格看到Y.
所以我给了他们一个按钮,启动一个对话框,引导他们完成更改,这很好。
启动此对话框时会出现摇滚和硬盘。
单向是具有与实体X(X_Dialog)关联的“催化剂”对话框。此对话框调用与Y(Y_Dialog)关联的子对话框,并将X记录值传递给Y_Dialog。
麻烦在于,为了让我的X_Dialog“看到”Y_Dialog,我必须在X表格上有一个查找字段到Y ...更糟糕的是它必须有一个相关的记录。这迫使我创建一个“虚拟”Y记录并将其关联到每个X记录,以便可以从X_Dialog调用Y_dialog。
另一种方式是直接启动Y_Dialog,但Y_Dialog接受输入参数,我还没有读过任何可以做到这一点的事情......当然它会引发错误。
这是我喜欢的方式,因为X_Dialog没用,只能让用户点击下两次,所以我可以“启动”Y_Dialog。此外,我可以消除虚拟Y记录和查找关系。
有人认为我是我在启动对话框时传递了X记录ID。我可以获取该ID并将其发送到查找所述记录的代码,然后将所需的X记录值作为本地对话变量输出。
这个想法的一个难点是我不知道如何获取传递给对话框的ID值。我还没看过这是怎么做的。
FWIW如果它有帮助,那就是我用来启动对话框的代码:
function LaunchDialog(dialogID, typeName, SubGridName)
{
var recordId = window.parent.Xrm.Page.data.entity.getId();
var serverUri = window.parent.Mscrm.CrmUri.create('/cs/dialog/rundialog.aspx');
window.showModalDialog(serverUri + '?DialogId=%7b' + dialogID + '%7d&EntityName=' + typeName + '&ObjectId=' + recordId, null, 'width=615,height=480,resizable=1,status=1,scrollbars=1');
//refresh grid only
window.parent.RefreshFulfillmentSubGrids(SubGridName);
}
非常感谢任何输入。
答案 0 :(得分:0)
你的对话有多复杂?
如果它只是少数字段,您可以使用JCL之类的内容和自定义网络资源。然后,您可以从传入的GUID中获取字段,创建记录,最后在创建记录后刷新子网格。