为复合属性编写脚本

 

发布日期: 2017年1月

适用于: Dynamics 365 (online),Dynamics 365 (on-premises),Dynamics CRM 2016,Dynamics CRM Online

添加到窗体的某些字段可以表示多个数据项。 这些复合属性在 Web 应用程序中显示时的行为与其他属性不同,您必须分别编写脚本才能正确使用它们。

本主题内容

复合属性

Web 应用程序中的复合属性

适用于平板电脑的 Dynamics 365 中的复合属性

减少区别

复合属性

下表列出复合属性:

实体

显示名称

逻辑名称

Contact

全名

fullname

地址 1

address1_composite

地址 2

address2_composite

Lead

全名

fullname

地址 1

address1_composite

地址 2

address2_composite

User

全名

fullname

地址

address1_composite

其他地址

address2_composite

Account

地址 1

address1_composite

地址 2

address2_composite

Quote

帐单寄往地址

billto_composite

送货地址

shipto_composite

Order

帐单寄往地址

billto_composite

送货地址

shipto_composite

Invoice

帐单寄往地址

billto_composite

送货地址

shipto_composite

Web 应用程序中的复合属性

当复合属性的字段添加到主窗体时,Web 应用程序将仅显示复合属性。 当某人编辑字段时,弹出项目会显示包含复合属性的个别属性。 尽管未显式添加到窗体编辑器中的窗体,但作为属性一部分的每个属性都可用于窗体。 虽然可以使用 getValue 读取复合值的值,但是不能使用 setValue 直接更改复合属性的值;必须设置复合属性引用的一个或多个属性。

可以访问浮出控件中显示名称的单个关系人控件。 这些控件使用下列命名约定:<composite control name>_compositionLinkControl_<constituent attribute name>。 要访问 address1_composite 控件中的 address_line1 控件,您可以使用:Xrm.Page.getControl("address1_composite_compositionLinkControl_address1_line1")。

适用于平板电脑的 Dynamics 365 中的复合属性

适用于平板电脑的 Microsoft Dynamics 365 使用用于具有复合属性的实体的相同窗体定义,但它分别解释它们。 如果在窗体定义中找到复合属性,它将在窗体的该部分中显示作为复合属性一部分的所有属性。 由于所有字段都可见,因此不需要弹出项目。 您可以编写访问每个单个属性的窗体的脚本,就像它们已分别添加到窗体一样。

但是,适用于平板电脑的 Dynamics 365 页中将不会提供实际复合控件。

减少区别

如果您要访问 Contact、Lead 或 User 实体的 fullname 字段,可以使用 **Xrm.Page.data.entity.**fbaf2e7a-db2f-448f-bd24-6b3ca1ccb28e#BKMK_getPrimaryAttributeValue 方法轻松获取此属性的值,而无需直接引用它。 此方法适用于 Web 应用程序和 适用于平板电脑的 Dynamics 365。

如果您的代码需要读取某个地址复合属性的值,为了同时用于两个客户端,您需要使用 Xrm.Page.context.client.getClient 分隔代码,如下面的函数所示,该函数在主 Web 应用程序中或相同窗体的 适用于平板电脑的 Dynamics 365 版本中使用 **Xrm.Utility.**72a66f93-92df-42b9-a8fd-b6125c7fe83b#BKMK_alertDialog 显示格式化的地址。

function showAddressDialog() {
 var address1_compositeValue;
 if (Xrm.Page.context.client.getClient() != "Mobile") {
  address1_compositeValue = Xrm.Page.getAttribute("address1_composite").getValue();
 }
 else {
  var address1_line1 = Xrm.Page.getAttribute("address1_line1").getValue();
  var address1_line2 = Xrm.Page.getAttribute("address1_line2").getValue();
  var address1_line3 = Xrm.Page.getAttribute("address1_line3").getValue();
  var address1_city = Xrm.Page.getAttribute("address1_city").getValue();
  var address1_stateorprovince = Xrm.Page.getAttribute("address1_stateorprovince").getValue();
  var address1_postalcode = Xrm.Page.getAttribute("address1_postalcode").getValue();
  var address1_country = Xrm.Page.getAttribute("address1_country").getValue();

  // Achieve equivalent formatting
  //address1_line1
  //address1_line2
  //address1_line3
  //address1_city, address1_stateorprovince address1_postalcode
  //address1_country

  var addressText = "";
  if (address1_line1 != null) {
   addressText += address1_line1 + "\n";
  }
  if (address1_line2 != null) {
   addressText += address1_line2 + "\n";
  }
  if (address1_line3 != null) {
   addressText += address1_line3 + "\n";
  }
  if (address1_city != null) {
   addressText += address1_city + ", ";
  }
  if (address1_stateorprovince != null) {
   addressText += address1_stateorprovince + " ";
  }
  if (address1_postalcode != null) {
   addressText += address1_postalcode + "\n";
  }
  addressText += address1_country;

  address1_compositeValue = addressText;
 }
 Xrm.Utility.alertDialog(address1_compositeValue);
}

另请参阅

为 Microsoft Dynamics 365 窗体编写代码
使用窗体和字段事件
使用 Xrm.Page 对象模型
编写和调试适用于手机和平板电脑的 Dynamics 365 的脚本
使用执行上下文和窗体事件管道
在窗体上使用 IFRAME 和 Web 资源控件
脚本即时引用的表单
客户端编程引用
Xrm.Page.data. 实体属性(客户端引用)

Microsoft Dynamics 365

© 2017 Microsoft。 保留所有权利。 版权