复合字段在MSCRM 2013中

时间:2014-02-11 13:03:58

标签: dynamics-crm dynamics-crm-2013

我对复合属性的主题有疑问,如果你能帮助我,我将不胜感激。 我之前在其他问题博客上发布了这个,但没有得到任何回复我很满意。

我正在编写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();

由于以下原因,我不喜欢这个:

  1. 这是一个黑客,因为它没有使用完成按钮的系统功能来写入数据。
  2. 你没有得到完成按钮所获得的系统格式,虽然这会在保存表单时完成,所以它不是那么糟糕。
  3. 将来如果允许客户添加自己的复合字段,可能会导致问题,因为字段名称可能不同。
  4. 它要求我为每个具有复合的表单编写额外的代码,该复合具有不同模式名称的字段。例如。我必须使用ShipTo和BillTo地址为表单编写不同的代码,因为帐户表单的代码不起作用。
  5. 另一个想法是在对复合材料内的任何字段进行更改后,将焦点设置为复合字段。

    Xrm.Page.data.entity.attributes.get("address1_composite").controls.get(0).setFocus(); 
    

    这是最好的主意,但它远非完美。这会强制用户按下完成按钮,因此将写入字段。我希望有更自动化的东西。

    我的问题: 如果有一种方法可以在JavaScript中单击复合完成按钮,那将会是多么美妙。这将为我提供完成按钮的格式和我需要的自动化。

    更新 - 2014年4月14日 自发布此问题以来,我一直与Microsoft联系,他们说没有支持的方式通过程序点击完成按钮。

1 个答案:

答案 0 :(得分:1)

如果字段被锁定,CRM JavaScript不会将数据发送回服务器进行更新。另一种方法是:

  1. 使用JavaScript执行更新(因此用户可以看到更改);和
  2. plugin事件中使用服务器端Update,以便保留值。