為複合屬性撰寫指令碼
發行︰ 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. 著作權所有,並保留一切權利。 著作權