复合字段在MSCRM 2013中

Oly*_*Oly 10 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();
Run Code Online (Sandbox Code Playgroud)

建议在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();
Run Code Online (Sandbox Code Playgroud)

这不是我想要的,因为我不想刷新整个页面.我只想刷新复合材料.此外,它还会弹出一个弹出窗口,警告您没有保存页面,这对我的客户来说会很烦人.

想法3:

将地址从地址行写入复合.这感觉就像一个讨厌的黑客.这可能不止一种方法.我用过这个功能

Xrm.Page.getAttribute("address1_composite")._attribute.setValueForCompositeField();
Run Code Online (Sandbox Code Playgroud)

我不喜欢这个,原因如下:

  1. 这是一个黑客,因为它没有使用完成按钮的系统功能来写入数据.
  2. 您没有获得使用完成按钮获得的系统格式,尽管这将在表单保存时完成,因此它不是那么糟糕.
  3. 将来,如果允许客户添加自己的复合字段,则可能会导致问题,因为字段名称可能不同.
  4. 它要求我为每个具有复合的表单编写额外的代码,该复合具有不同模式名称的字段.例如,我必须使用ShipTo和BillTo地址为表单编写不同的代码,因为帐户表单的代码将不起作用.

另一个想法是在对复合内部的任何字段进行更改后将焦点设置为复合字段.

Xrm.Page.data.entity.attributes.get("address1_composite").controls.get(0).setFocus(); 
Run Code Online (Sandbox Code Playgroud)

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

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

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

Kye*_*Kye 1

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

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