这应该是一件简单的事情,但正如我很快发现CRM 2011,简单的事情几乎从来都不是......
无论如何,我有一个自定义活动类型,一个“旅行”。旅行代表服务技术人员对客户站点的单次访问。 Trips 始终与案例(事件)相关联,而从不与任何其他实体类型一起创建,因此该实体作为自定义活动存在,而不是“在活动菜单中显示” ”。这允许我将Trips的子网格放入主要的Case视图中,使其成为唯一可以创建这些东西的地方。
问题在于,当我尝试从Case表单创建一个新Trip时(通过单击子网格并从功能区中选择“Add New Trip”),“About”字段未填充Case我点击“添加”时打开了。任何“内置”活动类型都会默认其相应的字段没有问题,所以在我看来我可以在这里做同样的事情。一旦这个默认工作,该字段应该是只读的,但是我可以在创建新的Trips时设置引用,我已经使它可编辑,当然当你弹出查找时,你可以将此Trip分配给任何事情(这就是为什么我希望该字段只读首字母。)
我需要表单在Trip表单加载时默认父Case。它必须在第一次创建时存在,因为如果第一次保存时不存在,那么一些插件设置其他默认值的代码(即与同一案例可能存在或不存在的其他旅行相关的数据)将无法正常工作。
我读到了关系字段映射,你可以根据父实体的字段默认各种字段的值,但事件和我的旅程之间的关系没有被列为可以从任何一方映射,我无法想象如何使其成为可映射的。我也知道可以使用JavaScript设置默认值,但如果设置此特定行为的“自定义”方式较少,我很想知道如何。
答案 0 :(得分:3)
作为基于迈克评论的墓志铭,微软似乎确实不希望这样做。但是,它仍然可以做到。基本步骤是:
创建一个包含将打开所需表单的函数的JavaScript文件,并将您需要的信息作为参数传递。有两种方法可以指定参数;您可以在表单上定义自定义参数,也可以将Microsoft的未记录参数用于“关注”字段:
function OpenNewTripFromCase()
{
var entityId = Xrm.Page.data.entity.getId();
var entityTypeCode= Xrm.Page.context.getQueryStringParameters().etc;
var entityDisplayName = Xrm.Page.getAttribute("title").getValue();
var params = {};
params["pId"] = entityId;
params["pType"] = entityTypeCode;
params["pName"] = entityDisplayName;
Xrm.Utility.openEntityForm("cst_trip", null, params);
}
打开Ribbon Workbench并打开您使用实体和资源创建的解决方案。单击“解决方案元素”选项卡,然后找到“命令”项。右键单击并选择“添加新”。现在展开列表,找到并单击新命令。在“属性”窗格中,将命令的名称更改为更具描述性(建议您仅更改第三个“命令#”术语),然后单击“操作”字段右侧的放大镜按钮。
在弹出的窗口中,单击“添加”,然后选择“JavaScript功能操作”。新项目将添加到操作列表中。单击它,然后在右侧的属性窗格中找到包含您的函数的库,然后键入函数名称。我没有在这里获得任何类型的智能感知,所以要小心输入函数名称。如果需要,添加参数(您不需要使用上面的代码),然后单击确定
发布自定义的解决方案,如果你做的一切正确,你应该有一个新的按钮,当你选择一个子网格时,它会与“添加新的”按钮做同样的事情,但是会另外填充关于领域。