分享方式:


使用 JavaScript 搭配 Microsoft Dynamics CRM 2015

 

發佈日期: 2016年11月

適用對象: Dynamics CRM 2015

Microsoft Dynamics CRM 2015 和 Microsoft Dynamics CRM Online 2015 更新 提供許多機會讓您使用 JavaScript。 用於 Microsoft Dynamics 365 的所有 JavaScript 都是透過建立 JScript Web 資源新增的。 本主題有 JavaScript 開發人員適用的資訊,以及包括 Microsoft Dynamics CRM SDK 相關主題和其他來源的連結。

本主題內容

Microsoft Dynamics CRM 中可以使用 JavaScript 的區域

使用 jQuery

撰寫支援多個瀏覽器的 JavaScript

使用 JavaScript 存取資料

JavaScript 程式設計的最佳作法

對 Microsoft Dynamics CRM 中的 JavaScript 進行偵錯

Microsoft Dynamics CRM 中可以使用 JavaScript 的區域

您可以使用 JavaScript 在表單指令碼、命令列 (功能區) 命令和 Web 資源中執行動作。

表單指令碼

Microsoft Dynamics 365 中 JavaScript 最常見的用途是新增函數做為實體表單事件的事件處理常式。 如需詳細資訊,請參閱撰寫 Microsoft Dynamics CRM 2015 表單的程式碼

命令列 (功能區) 命令

在自訂 Microsoft Dynamics 365 命令列時,您可以為新增之控制項設定命令。 這些命令包含規則,控制是否啟用控制項,以及當使用控制項時執行的動作。 如需詳細資訊,請參閱自訂命令和功能區

Web 資源

Microsoft Dynamics 365 提供組織擁有的實體,其儲存可透過 URL 存取的檔案二進位表示。 此檔案名稱為 Web 資源。 Web 資源的類型有多種。 代表 JavaScript 程式庫的 Web 資源稱為 JScript Web 資源。 您可以使用網頁 (HTML) Web 資源,以內含的 JavaScript 程式庫提供使用者介面,如同 Web 伺服器檔案一樣。 因為這些檔案是 Microsoft Dynamics 365 的一部分,存取它們的使用者已驗證。 因此,您不需要撰寫驗證使用者的程式碼,就可以使用 Microsoft Dynamics 365 Web 服務。 如需詳細資訊,請參閱Microsoft Dynamics CRM 2015 的 Web 資源

使用 jQuery

  • 搭配使用 jQuery 與 HTML Web 資源
    建議您搭配使用 jQuery 與 HTML Web 資源,以提供使用者介面,因為這是絕佳的跨瀏覽器程式庫。

    您可以利用 HTML Web 資源控制顯示的程式庫,而且 DOM 操作上沒有限制。 在您的 HTML Web 資源中,請放心使用 jQuery。

  • 在表單指令碼或功能區命令中避免使用 jQuery
    不建議在表單指令碼及功能區命令中使用 jQuery。

    jQuery 提供的最大優點是它允許簡單的 DOM 跨瀏覽器操作。 這在表單指令碼及功能區命令中明確不支援。 限制指令碼只使用表單指令碼及功能區命令中可用的 Xrm.PageXrm.Utility 程式庫。 如果您決定使用 jQuery 的其餘功能 (搭配 Microsoft Dynamics 365 時十分有用),包括使用 $.ajax 的能力,請考慮下列事項:

    • 為獲得最佳效能,不需要時請勿在頁面中載入 jQuery

    • 支援使用 $.ajax 對 OData 和現代應用程式 SOAP 端點執行要求,但是有替代方案。 除了使用 $.ajax 之外,另一個方式是直接使用瀏覽器 XMLHttpRequest 物件。 jQuery $.ajax 方法是此物件的包裝函式。 如果直接使用原生 XMLHttpRequest 物件,就不需要載入 jQuery。

      比較 範例:使用 OData 端點和 JavaScript 建立、擷取、更新及刪除範例:使用 OData 端點和 JavaScript 及 jQuery,建立、擷取、更新及刪除 中找到的 SDK.REST.js 和 SDK.JQuery.js 範例程式庫。 這兩個範例程式庫執行相同作業,但是 SDK.REST.js 不需要 jQuery。

    • 在頁面中載入各版本的 jQuery 可以是不同版本。 jQuery 不同版本有不同的行為,在相同頁面時載入 jQuery 多個版本可能會造成問題。 有補救此問題的技術,但是,這取決於編輯 jQuery 程式庫和依賴 jQuery 的任何其他程式庫。其他資訊:搭配使用 jQuery 和 jQuery UI 與 Dynamics CRM 2011 & 2013jQuery.noConflict()

      備註

      在 Microsoft Dynamics CRM Online 2015 更新 1 中,表單指令碼與應用程式使用的 jQuery 執行個體是在不同的範圍內執行。 這表示,當您的程式碼嘗試使用 jQuery.noConflict 時,可能沒有 jQuery 執行個體可使用。 如果您必須使用 jQuery,應先偵測 jQuery 執行個體是否存在,再嘗試使用 jQuery.noConflict。

撰寫支援多個瀏覽器的 JavaScript

因為您不知道哪個瀏覽器將會使用,您應確認使用的任何指令碼適用於所有支援的瀏覽器。Internet Explorer 和其他瀏覽器之間的重大差異在於 HTML 和 XML DOM 操作。 因為不支援 HTML DOM 操作,如果指令碼邏輯是只執行支援的動作以及使用 Xrm.Page API,支援其他瀏覽器所需的變更可能很小。 使用自訂程式碼驗證工具來識別只適用於 Internet Explorer 的程式碼。

跨瀏覽器程式庫如 jQuery 是開發 Web 資源的好解決方案,但不應該用於表單指令碼或功能區命令。其他資訊:使用 jQuery

其他瀏覽器支援

因為 Microsoft Dynamics CRM 2015 和 Microsoft Dynamics CRM Online 2015 更新 支援 W3C 標準,在支援這些標準的任何平台上,使用任何現代瀏覽器都可以存取應用程式。 但 Microsoft Dynamics 365 只在一組特定瀏覽器和平台進行測試。 如需支援之平台和瀏覽器的清單,請參閱 TechNet:支援的網頁瀏覽器

如果您使用的瀏覽器或瀏覽器版本不受支援,而且只輸入伺服器名稱或輸入伺服器名稱與組織為 URL,則會重新導向至 手機專用 Microsoft Dynamics CRM 頁面。電話適用的 CRM 頁面可望在大多數瀏覽器上正常運作,例如用於行動裝置的瀏覽器,但是功能有限。

控制組織或解決方案的瀏覽器支援

雖然建立公用網站需要您支援大部分的現代瀏覽器,但是只有少數公用網站支援現有的所有瀏覽器。 您必須先確定要支援哪些瀏覽器。 為了節省開發和測試成本,許多商務應用程式要求使用者使用特定瀏覽器。

如果您是為使用 Microsoft Dynamics 365 的任何組織準備解決方案的 ISV,組織可預期會使用 Microsoft Dynamics CRM 2015 和 Microsoft Dynamics CRM Online 2015 更新 支援的其中一個瀏覽器。 不過,如果您只為要求使用特定瀏覽器的組織準備自訂,沒有理由為組織不支援的瀏覽器開發並測試自訂。

網路管理員可以使用 TechNet:軟體限制原則和/或 TechNet:AppLocker,強制執行允許在網域上執行或安裝的應用程式。

剖析 XML

有許多機會您會需要使用 JavaScript 剖析 XML。 請注意,使用 Internet Explorer 和其他瀏覽器剖析 XML 有重大的差異。Internet Explorer 使用 Microsoft XML Core Services (MSXML) APIs 與 XML 文件物件互動。 這些 APIs 包括其他瀏覽器無法使用的一些 W3C DOM 擴充功能。 兩個範例如下:

  • 使用 Internet Explorer 時,從 XML 文件擷取資料的兩個常見方法為 selectNodesselectSingleNode。 這兩個方法使用 XPath 運算式做為參數,而且傳回節點或節點清單。 針對其他瀏覽器,當您想要使用 XPath 運算式時,請使用 evaluate 方法。 或者,您可以重構程式碼以瀏覽文件階層與使用 getElementsByTagNameNS 方法。

  • Internet Explorer 使用 text 屬性存取元素的文字。 其他瀏覽器使用 textContent 屬性。

有許多不同的方式可以解決這些差異。 使用的方法取決於個人喜好與程式碼的需求。

SDK.MetaData.js 中的 範例:使用 JavaScript,擷取實體中繼資料 程式庫使用 Helper 函數。 此程式庫使用 Web 資源的 SOAP 端點,擷取實體和屬性中繼資料。 此程式庫依賴從 XML 文件 (以 XMLHttpRequest.responseXML 形式傳回) 剖析資料。 在程式庫中新增下列 Helper 函數,並用於程式庫的其他函數。

對於這些 Helper 函數,原來只針對 Internet Explorer 撰寫的現有程式碼已更新,如下所示:

僅 Internet Explorer 原始程式碼

支援多個瀏覽器的新函數

node.selectNodes(XPathExpr);

SDK.MetaData._selectNodes(node,XpathExpr);

node.selectSingleNode(XPathExpr);

SDK.MetaData._selectSingleNode(node, XPathExpr);

node.selectSingleNode(ElementName).text;

SDK.MetaData._selectSingleNodeText(node, ElementName);

node.text

SDK.MetaData._getNodeText(node);

使用 JavaScript 存取資料

應用程式中有兩個 Web 服務,可用來透過 JavaScript 存取資料。

OData (REST) 端點

先前稱為「Web 資源的 REST 端點」。 您可以使用 OData 端點,透過使用以統一資源識別項 (URI) 為基礎的 Web 服務來執行 HTTP 要求。 「RESTful」Web 服務讓程式設計變得更容易,因此很常見。

OData 端點的目前實作只限於建立、擷取、更新和刪除作業。範例:使用 OData 端點和 JavaScript 建立、擷取、更新及刪除 包括 SDK.REST.js 程式庫,這個可重複使用的程式庫範例可以進一步簡化 OData 端點使用。

OData 端點的其中一個優點是,它實作 OData 通訊協定,提供查詢和更新資料的方式。 當您使用 JavaScript 時,通常擷取 JavaScript 物件標記法 (JSON) 格式的物件。 這會讓結果更容易使用。OData 端點的主要限制是,您無法使用 IOrganizationService.Execute 方法來執行訊息 (RequestResponse 類別)。 使用 Web 資源的 SOAP 端點來執行訊息。

如需詳細資訊,請參閱使用 OData 端點搭配 Web 資源

SOAP 端點

因為 REST 端點不允許執行訊息,SOAP 端點讓您執行訊息。 您也可以呼叫此 Web 服務的 Create、Retrieve、Update、Delete 和 RetrieveMultiple 方法,但是其使用並不像使用 REST 端點一樣輕鬆。

Microsoft Dynamics 365 未提供 JavaScript 程式庫促進 SOAP 端點使用。 使用 SOAP 端點時,必須張貼包含定義要求之 XML 的 http 要求,然後剖析在回應中傳回的 XML。

Sdk.Soap.js 範例程式庫和其他相關範例提供可以與 SOAP 端點搭配使用的程式庫範例。

SDK 提供 Microsoft Visual C# 解決方案,稱為 SoapLogger,可讓您擷取在使用 Visual C# 執行 Microsoft Dynamics 365 Web 服務作業時傳送和收到的 XML。 藉由這項資訊,即可建置您的 JavaScript 程式庫。

如需詳細資訊,請參閱針對具有 Web 資源的現代應用程式使用現代應用程式 SOAP 端點

JavaScript 程式設計的最佳作法

下列各節描述使用 JavaScript 與 Microsoft Dynamics 365 時的最佳作法。

避免使用不支援的方法

在網際網路上,您可以找到許多範例或建議,說明如何使用不支援的方法。 這包括使用頁面控制項的未記載內部函數。 這些方法或許可行,但是,因為它們不受支援,無法預期會在 Microsoft Dynamics 365 未來版本中持續運作。

使用自訂程式碼驗證工具來識別使用不支援之方法的程式碼。

為 HTML Web 資源使用者介面使用跨瀏覽器 JavaScript 程式庫

跨瀏覽器 JavaScript 程式庫,例如 jQuery,提供許多優點,當開發必須支援多個瀏覽器的 HTML Web 資源時。JavaScript 程式庫 (像是 jQuery) 針對 Microsoft Dynamics 365 支援的所有瀏覽器提供整合開發體驗。 當您使用 HTML Web 資源來提供使用者介面時,這些功能是適用的。JavaScript 程式庫 (像是 jQuery) 提供一致的方式與文件物件模型 (DOM) 互動。

不要在表單指令碼或命令中使用 jQuery

不建議或不支援在應用程式的任何頁面中使用 jQuery。 這包含表單指令碼及功能區命令。其他資訊:使用 jQuery。

辨識內容傳遞網路 (CDN) 程式庫的限制

內容傳遞網路 (CDN) JavaScript 程式庫對公用網站提供許多優點。 因為這些程式庫在網際網路上託管,您不需要建立包含程式庫內容的 Web 資源。 對於 Microsoft Dynamics 365,在使用 CDN JavaScript 程式庫之前,您應該先考慮下列問題。

  • Microsoft Dynamics CRM for Microsoft Office Outlook with Offline Access 用戶端使用者能夠在沒有網際網路連線的情況下離線工作。 如果您的 JavaScript 程式庫依靠網際網路連線,則程式碼會失敗。

  • 某些組織會限制員工網際網路存取。 除非這些組織設定網路允許存取 CDN 程式庫網站,否則程式碼對那些組織會失敗。

除了使用 CDN 程式庫之外,另一個方式是以程式庫的內容建立指令碼 (JavaScript) Web 資源。 由於 Web 資源是組織擁有的實體,當 Microsoft Dynamics CRM for Outlook with Offline Access 使用者離線時就會同步處理。 因為這些 Web 資源現在成為應用程式的一部分,即使組織限制網際網路存取也不會被封鎖。

撰寫支援多個瀏覽器的函數時,使用功能偵測

即使使用跨瀏覽器程式庫例如 jQuery,您需要非常留意瀏覽器之間的差異。 一般可透過查詢 navigator.useragent 屬性,偵測使用的瀏覽器。 這稱為瀏覽器偵測。 瀏覽器偵測不是大部分案例的好策略,因為它不考慮瀏覽器的新版本擁有的功能。 此外,某些瀏覽器可供修改 navigation.useragent 屬性,因此會顯示為不同的瀏覽器。

功能偵測是建議的方法。 透過偵測可用的功能,您可以建立支援之瀏覽器的程式碼路徑,而不需要正確了解使用的瀏覽器。 如需功能偵測的詳細資訊,請參閱如何偵測功能而不是瀏覽器

不要存取 DOM

JavaScript 開發人員習慣與程式碼中的文件物件模型 (DOM) 元素互動。 您可能使用 window.getElementById 方法或 jQuery 程式庫。 在您的 HTML Web 資源中可自由使用這些技術,但是,不支援使用這些元素來存取 Microsoft Dynamics 365 應用程式頁面或實體表單。 相反地,實體表單元素的存取是透過 Xrm.Page 物件模型公開。Microsoft Dynamics 365 開發團隊保留變更頁面撰寫方式的權利,包括元素的 ID 值,因此,使用 Xrm.Page 物件模型保護您的程式碼,不受頁面實作方式變更的影響。 如需詳細資訊,請參閱使用 Xrm.Page 物件模型

定義 JavaScript 函數的唯一名稱

當您是 HTML 頁面的唯一開發人員時,可以輕鬆地管理所用 JavaScript 函數的名稱。 在 Microsoft Dynamics 365,其他解決方案可以新增 JavaScript 函數到您所使用之函數的頁面。

如果在頁面的兩個 JavaScript 函數具有相同名稱,定義的第一個函數會被第二個函數覆寫。 因此,請務必定義 JavaScript 函數的唯一名稱。 如需詳細資訊,請參閱建立指令碼程式庫

使用非同步的資料存取方法

當您的資料存取是透過使用 Web 資源 REST 或 SOAP 端點的 Microsoft Dynamics 365 Web 服務時,一定要使用設定為非同步執行的 XMLHttpRequest。 原因是瀏覽器會在單一執行緒上操作。 如果該執行緒用來同步執行長時間的處理序,瀏覽器會停止回應。

對 Microsoft Dynamics CRM 中的 JavaScript 進行偵錯

每個瀏覽器都提供某種偵錯擴充功能。Internet Explorer 提供開發人員工具,您可以用來對 Microsoft Dynamics 365 中的指令碼進行偵錯。Internet Explorer 開發人員工具可在使用 Internet Explorer 檢視頁面時,藉由按 F12 開啟。 如需詳細資訊,請參閱使用 F12 開發人員工具

對於 Google Chrome,按 F12 開啟開發人員工具。Firebug 是使用 Mozilla Firefox 進行 Web 開發常用的瀏覽器擴充功能。 對於 Apple Safari,您必須先在進階的偏好設定中選擇 [在選單列中顯示 [開發] 選單]。 然後,從 [開發] 功能表中選擇 [顯示網頁檢查器]。

您也可以使用 Microsoft Visual Studio。 如需詳細資訊,請參閱如何對 Microsoft Dynamics CRM 2011 中的 JScript 進行偵錯

在 Microsoft Dynamics 365 中使用 JavaScript 程式庫時,程式庫會新增至包含許多程式庫的頁面。 有時難以在偵錯環境中找出您的特定程式庫。 在 Internet Explorer 中使用偵錯工具時,請在 [指令碼] 索引標籤上展開可用的指令碼,並尋找名稱對應於您的 JavaScript Web 資源名稱的指令碼,例如下圖所示的 new_debugging_example_script.js Web 資源。

對 JavaScript 進行偵錯

不同瀏覽器的偵錯工具有類似的功能。 當您找到您的程式庫,您可以設定中斷點及重新建立可讓您的程式碼執行的事件。

將訊息寫入主控台

當偵錯 JavaScript 時使用 window.alert 方法,仍然是疑難排解應用程式碼的常見方式。 但是,現在所有現代瀏覽器都提供偵錯工具,它並不是最佳作法,尤其是當其他人可能使用偵錯中的應用程式。

考慮將訊息寫入主控台。 下列小函數可新增至程式庫,用來將要檢視的所有訊息傳送至開啟的主控台。

function writeToConsole(message)
{
 if (typeof console != 'undefined') {
  console.log(message);
 }
}

與使用 alert 方法不同的是,如果您忘記移除使用此函數的任何程式碼,使用應用程式的人們看不到您的訊息。

另請參閱

撰寫用戶端應用程式擴充功能
在 Web 資源中使用 Web 服務資料 (OData 和現代應用程式 SOAP 端點)
撰寫應用程式和伺服器擴充功能
撰寫 Microsoft Dynamics CRM 2015 表單的程式碼
自訂命令和功能區
Microsoft Dynamics CRM 2015 的 Web 資源
使用 OData 端點搭配 Web 資源
針對具有 Web 資源的現代應用程式使用現代應用程式 SOAP 端點
使用 Xrm.Page 物件模型

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