為複合屬性撰寫指令碼

 

發行︰ 2017年1月

適用於: Dynamics 365 (online)、Dynamics 365 (on-premises)、Dynamics CRM 2016、Dynamics CRM Online

某些新增至表單的欄位可能代表多個資料項目。 這些「複合屬性」(Composite Attribute) 在 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.entity 屬性 (用戶端參考)

Microsoft Dynamics 365

© 2017 Microsoft. 著作權所有,並保留一切權利。 著作權