1

这应该是一件简单的事情,但正如我在 CRM 2011 中很快发现的那样,简单的事情几乎从来都不是……

无论如何,我有一个自定义活动类型,一个“旅行”。一次旅行代表服务技术人员对客户站点的一次访问。旅行总是与案例(事件)相关联而不是任何其他实体类型创建,因此实体作为自定义活动存在,不会“在活动菜单中显示”。这允许我将 Trips 的子网格放入主 Case 视图,使其成为唯一可以创建这些东西的地方。

问题是,当我尝试从“案例”表单创建新旅行时(通过单击子网格并从功能区中选择“添加新旅行”),“关于”字段没有填充我当时所在的案例我点击了“添加”。任何“内置”活动类型都将默认它们对应的字段没有问题,所以在我看来,我可以在这里做同样的事情。一旦这个默认值起作用,该字段应该是只读的,但是我可以在创建新旅行时设置参考,我已经使它可编辑,当然当您弹出查找时,您可以将此旅行分配给任何东西(这就是为什么我首先希望该字段只读)。

当 Trip 表单加载时,我需要表单来默认父 Case。它必须在第一次创建时就存在,因为如果它在第一次保存时不存在,那么一些设置其他默认值的插件代码(即与同一案例可能存在或不存在的其他旅行相关的数据)将获胜不能正常工作。

我读到了关系字段映射,您可以在其中根据父实体的字段默认各种字段的值,但是事件和我的旅行之间的关系没有从任何一方列为可映射的,我不知道如何使其可映射。我也知道可以使用 JavaScript 设置默认值,但是如果有一种不那么“自定义”的方式来设置这个特定的行为,我很想知道如何。

4

1 回答 1

3

作为基于迈克评论的墓志铭,微软似乎确实不希望这样做。但是,它仍然可以做到。基本步骤是:

  • 下载 Ribbon Workbench 解决方案并将其导入 CRM。
  • 创建一个新的解决方案,其中包含您希望能够自定义的一个或多个实体。
  • 创建一个 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);
    }
    
  • 将此 JavaScript 文件作为 Web 资源导入,并将其添加到解决方案中,以便 Ribbon Workbench 可以使用它。
  • 打开 Ribbon Workbench 并打开您使用实体和资源创建的解决方案。单击解决方案元素选项卡,然后找到“命令”项。右键单击并选择“添加新”。现在展开列表,找到并单击您的新命令。在“属性”窗格中,将命令的名称更改为更具描述性(建议您只更改第三个“Command#”术语),然后单击“操作”字段右侧的放大镜按钮。

  • 在弹出的窗口中,单击“添加”,然后选择“JavaScript 函数操作”。一个新项目将添加到操作列表中。单击它,然后在右侧的属性窗格中,找到包含您的函数的库,然后输入函数名称。我在这里没有得到任何类型的 IntelliSense,所以要小心输入函数名称。如果需要,请添加参数(您不需要使用上面的代码),然后单击 OK

  • 现在单击 Ribbon Workbench 的实体列表中的自定义活动实体,然后在功能区布局右上角的下拉列表中,选择 SubGrid 功能区。在此功能区中创建一个按钮,为其提供所需的图标和文本,然后在“属性”窗格中,将命令设置为您刚刚创建的命令。

发布定制的解决方案,如果你做的一切都正确,你应该有一个新按钮,当你选择一个子网格时,它会与“添加新”按钮做同样的事情,但会另外填充相关字段。

于 2013-02-20T15:55:16.597 回答