【发布时间】:2014-03-09 06:51:22
【问题描述】:
我有一个关于复合属性的问题,如果您能帮助我,我将不胜感激。 我之前在其他问题博客上发布过此内容,但没有得到我满意的回复。
我正在编写 JavaScript,它将更新复合 (address1_composite) 中的字段(即 address1_line1、address1_line2、address1_line3、address1_city、address1_stateorprovince、address1_postalcode、address1_country)。当字段更新时,复合似乎没有更新。我必须打开复合并再次关闭它。有没有办法在 JavaScript 中自动执行此操作?
我尝试了以下想法:
想法 1:
Xrm.Page.data.entity.save();
推荐http://community.dynamics.com/crm/b/magnetismsolutionscrmblog/archive/2013/10/22/working-with-dynamics-crm-2013-composite-fields-fly-out-menu.aspx 这没有任何好处,因为我的客户希望在保存页面之前查看复合材料。我也不想为我的客户保存页面,因为他们不想要这个。他们希望自己决定何时执行此操作。
想法 2:
Xrm.Page.data.refresh();
这并不是我真正想要的,因为我不想刷新整个页面。我只想刷新合成。它还会弹出一个弹出窗口,警告您没有保存该页面,这会让我的客户感到烦恼。
想法 3:
将地址行中的地址写入组合。 这感觉就像一个令人讨厌的黑客攻击。 可能有不止一种方法可以做到这一点。我使用了函数
Xrm.Page.getAttribute("address1_composite")._attribute.setValueForCompositeField();
我不喜欢这个,原因如下:
- 这是一个 hack,因为它没有使用完成按钮的系统功能来写入数据。
- 您不会获得使用完成按钮获得的系统格式,尽管这将在保存表单时完成,因此还不错。
- 将来如果允许客户添加自己的复合字段,则可能会导致问题,因为字段名称可能不同。
- 它要求我为每个具有组合的表单编写额外的代码,该组合具有具有不同模式名称的字段。例如。我必须为带有 ShipTo 和 BillTo 地址的表单编写不同的代码,因为帐户表单的代码不起作用。
另一个想法是在对组合内的任何字段进行更改后将焦点设置到组合字段。
Xrm.Page.data.entity.attributes.get("address1_composite").controls.get(0).setFocus();
这是最好的主意,但远非完美。这迫使用户按下完成按钮,因此将写入字段。我希望有更自动化的东西。
我的问题: 如果有一种方法可以在 JavaScript 中单击复合完成按钮,那就太好了。这会给我完成按钮的格式和我需要的自动化。
更新 - 2014 年 4 月 14 日 自从发布此问题以来,我一直与 Microsoft 联系,他们说不支持通过程序单击完成按钮的方式。
【问题讨论】:
-
我想我会评论这个问题。我有同样的问题(截至 14 年 9 月 4 日 ddmmyy)。看起来复合属性更新与确认或单击飞出编辑框的操作相关联。我曾期望只要相关属性之一发生更改(即使使用 fireOnChange,而不仅仅是手动更改),复合控件也会更新。可悲的是通常的 MS 东西。
-
14/04/2014 自从发布此问题以来,我一直与 Microsoft 联系,他们说不支持通过程序单击完成按钮的方式。我已将此添加到上述问题的主体中。
-
你做了什么决定?
-
我猜这个。
另一个想法是在对组合内的任何字段进行更改后将焦点设置到组合字段。 Xrm.Page.data.entity.attributes.get("address1_composite").controls.get(0).setFocus();这是最好的主意,但它远非完美。这迫使用户按下完成按钮,因此将写入字段。我希望有更自动化的东西。 -
@Oly 如果您还没有找到解决方案,请告诉我。我有一个。
标签: dynamics-crm dynamics-crm-2013