Dynamics crm 2013年MSCRM中的复合字段

Dynamics crm 2013年MSCRM中的复合字段,dynamics-crm,dynamics-crm-2013,Dynamics Crm,Dynamics Crm 2013,我有一个关于复合属性的问题,如果您能帮助我,我将不胜感激。 我以前在其他问题博客上发表过这篇文章,但没有得到我满意的回复 我正在编写JavaScript来更新复合(address1\u复合)中的字段(即address1\u line1、address1\u line2、address1\u line3、address1\u city、address1\u stateorprovince、address1\u postalcode、address1\u country)。当字段更新时,组合似乎不会

我有一个关于复合属性的问题,如果您能帮助我,我将不胜感激。 我以前在其他问题博客上发表过这篇文章,但没有得到我满意的回复

我正在编写JavaScript来更新复合(address1\u复合)中的字段(即address1\u line1、address1\u line2、address1\u line3、address1\u city、address1\u stateorprovince、address1\u postalcode、address1\u country)。当字段更新时,组合似乎不会更新。我必须打开复合材料,然后再把它合上。有没有一种方法可以在JavaScript中自动执行此操作

我尝试过以下想法:

想法1:

Xrm.Page.data.entity.save();
这是建议在 这一点都不好,因为我的客户希望在保存页面之前查看组合。另外,我不想为我的客户保存页面,因为他们不希望这样。他们希望自己决定何时这样做

想法2:

Xrm.Page.data.refresh();
这不是我真正想要的,因为我不想刷新整个页面。我只想刷新合成图。它还会弹出一个弹出窗口,警告您没有保存页面,这会让我的客户感到恼火

想法3:

将地址从地址行写入组合。 这感觉像是一个讨厌的黑客。 这样做的方法可能不止一种。我使用了这个函数

Xrm.Page.getAttribute("address1_composite")._attribute.setValueForCompositeField();
我不喜欢这样,原因如下:

  • 这是一种黑客行为,因为它没有使用“完成”按钮的系统功能来写入数据
  • 您无法获得使用“完成”按钮获得的系统格式,尽管这将在保存表单时完成,因此不会太糟糕
  • 将来,如果允许客户添加自己的复合字段,可能会导致问题,因为字段名称可能不同
  • 它要求我为每个表单编写额外的代码,这些表单具有具有不同模式名称的字段的组合。例如,我必须为带有ShipTo和BillTo地址的表单编写不同的代码,因为帐户表单的代码不起作用 另一个想法是在对合成中的任何字段进行更改后,将焦点设置到合成字段

    Xrm.Page.data.entity.attributes.get("address1_composite").controls.get(0).setFocus(); 
    
    这是迄今为止最好的想法,但还远远不够完美。这将强制用户按下“完成”按钮,因此字段将被写入。我希望有更自动化的东西

    我的问题: 如果有一种方法可以在JavaScript中单击composite done按钮,那就太好了。这将为我提供“完成”按钮的格式和所需的自动化功能。

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

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

  • 使用JavaScript执行更新(以便用户看到更改);及
  • 更新
    事件上使用服务器端
    插件
    ,以便保留该值

  • 我想我会对这个问题发表评论。我有同样的问题(截至2014年4月9日ddmmyy)。复合属性更新似乎与确认或单击弹出编辑框的操作相关联。我曾期望,只要一个相关属性发生更改(即使使用fireOnChange,而不仅仅是手动更改),复合控件就会更新。2014年4月14日发布此问题后,我一直与微软联系,他们说没有支持的方式通过程序单击“完成”按钮。我已经在上面问题的主体部分添加了这个。你决定了什么?我猜是这个

    另一个想法是在对组合中的任何字段进行更改后,将焦点设置到组合字段。Xrm.Page.data.entity.attributes.get(“address1_composite”).controls.get(0.setFocus();这是迄今为止最好的想法,但还远远不够完美。这将强制用户按下“完成”按钮,因此字段将被写入。我希望有更自动化的东西。@Oly如果您还没有找到解决方案,请告诉我。我有一个,你好。谢谢你。然而,这将有与上述想法1相同的问题。客户需要能够在将组合保存回服务器之前检查它。在这种情况下,您只能使用定制Javascript。