使用 JavaScript 搭配 Microsoft Dynamics 365
發行︰ 2017年1月
適用於: Dynamics 365 (online)、Dynamics 365 (on-premises)、Dynamics CRM 2016、Dynamics CRM Online
Microsoft Dynamics 365 (線上和內部部署) 提供許多機會讓您使用 JavaScript。 用於 Microsoft Dynamics 365 的所有 JavaScript 都是透過建立 JavaScript Web 資源新增的。 本主題有 JavaScript 開發人員適用的資訊,以及包括 Microsoft Dynamics 365 SDK 相關主題和其他來源的連結。
本主題內容
Microsoft Dynamics 365 中可以使用 JavaScript 的區域
使用 jQuery
撰寫支援多個瀏覽器的 JavaScript
JavaScript 程式設計的最佳作法
對 Microsoft Dynamics 365 中的 JavaScript 進行偵錯
Microsoft Dynamics 365 中可以使用 JavaScript 的區域
您可以使用 JavaScript 在表單指令碼、命令列 (功能區) 命令和 Web 資源中執行動作。
表單指令碼
Microsoft Dynamics 365 中 JavaScript 最常見的用途是新增函數做為實體表單事件的事件處理常式。 如需詳細資訊,請參閱撰寫 Microsoft Dynamics 365 表單的程式碼。
命令列 (功能區) 命令
在自訂 Microsoft Dynamics 365 命令列時,您可以為新增之控制項設定命令。 這些命令包含規則,控制是否啟用控制項,以及當使用控制項時執行的動作。 如需詳細資訊,請參閱自訂命令和功能區。
Web 資源
Microsoft Dynamics 365 提供組織擁有的實體,其儲存可透過 URL 存取的檔案二進位表示。 此檔案名稱為 Web 資源。 Web 資源的類型有多種。 代表 JavaScript 程式庫的 Web 資源稱為 JavaScript Web 資源。 您可以使用網頁 (HTML) Web 資源,以內含的 JavaScript 程式庫提供使用者介面,如同 Web 伺服器檔案一樣。 因為這些檔案是 Microsoft Dynamics 365 的一部分,存取它們的使用者已驗證。 因此,您不需要撰寫驗證使用者的程式碼,就可以使用 Microsoft Dynamics 365 Web 服務。 如需詳細資訊,請參閱 Microsoft Dynamics 365 的 Web 資源和 使用 Web 資源處理 Dynamics 365 資料。
使用 jQuery
搭配使用 jQuery 與 HTML Web 資源
建議您搭配使用 jQuery 與 HTML Web 資源,以提供使用者介面,因為這是絕佳的跨瀏覽器程式庫。您可以利用 HTML Web 資源控制顯示的程式庫,而且 DOM 操作上沒有限制。 在您的 HTML Web 資源中,請放心使用 jQuery。
在表單指令碼或功能區命令中避免使用 jQuery
不建議在表單指令碼及功能區命令中使用 jQuery。jQuery 提供的最大優點是它允許簡單的 DOM 跨瀏覽器操作。 這在表單指令碼及功能區命令中明確不支援。 限制指令碼只使用表單指令碼及功能區命令中可用的 Xrm.Page 和 Xrm.Utility 程式庫。 如果您決定使用 jQuery 的其餘功能 (搭配 Microsoft Dynamics 365 時十分有用),包括使用 $.ajax 的能力,請考慮下列事項:
為獲得最佳效能,不需要時請勿在頁面中載入 jQuery
支援使用 $.ajax 對 Microsoft Dynamics 365 Web 服務執行要求,但有替代方案。 除了使用 $.ajax 之外,另一個方式是直接使用瀏覽器 XMLHttpRequest 物件。 jQuery $.ajax 方法是此物件的包裝函式。 如果直接使用原生 XMLHttpRequest 物件,就不需要載入 jQuery。
在頁面中載入各版本的 jQuery 可以是不同版本。 jQuery 不同版本有不同的行為,在相同頁面時載入 jQuery 多個版本可能會造成問題。 有補救此問題的技術,但是,這取決於編輯 jQuery 程式庫和依賴 jQuery 的任何其他程式庫。其他資訊:搭配使用 jQuery 和 jQuery UI 與 Dynamics CRM 2011 & 2013、jQuery.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 365 (線上和內部部署) 支援 W3C 標準,在支援這些標準的任何平台上,使用任何現代瀏覽器都可以存取應用程式。 但 Microsoft Dynamics 365 只在一組特定瀏覽器和平台進行測試。 如需支援之平台和瀏覽器的清單,請參閱 TechNet:支援的網頁瀏覽器。
如果您使用的瀏覽器或瀏覽器版本不受支援,而且只輸入伺服器名稱或輸入伺服器名稱與組織為 URL,則會重新導向至 手機專用 Microsoft Dynamics 365 頁面。行動電話用 Dynamics 365 頁面可望在大多數瀏覽器上正常運作,例如用於行動裝置的瀏覽器,但是功能有限。
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 365 for Microsoft Office Outlook with Offline Access 用戶端使用者能夠在沒有網際網路連線的情況下離線工作。 如果您的 JavaScript 程式庫依靠網際網路連線,則程式碼會失敗。
某些組織會限制員工網際網路存取。 除非這些組織設定網路允許存取 CDN 程式庫網站,否則程式碼對那些組織會失敗。
除了使用 CDN 程式庫之外,另一個方式是以程式庫的內容建立指令碼 (JavaScript) Web 資源。 由於 Web 資源是組織擁有的實體,當 Microsoft Dynamics 365 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 函數的唯一名稱。 如需詳細資訊,請參閱建立指令碼程式庫。
使用非同步的資料存取方法
當您的資料存取是透過使用 Microsoft Dynamics 365 Web 資源時,一定要使用設定為非同步執行的 XMLHttpRequest。 原因是瀏覽器會在單一執行緒上操作。 如果該執行緒用來同步執行長時間的處理序,瀏覽器會停止回應。
注意
因為會對一般使用者的體驗造成不利影響,同步的 XMLHttpRequests 已在瀏覽器的主執行緒上被取代。 偵測到這個方法時,現在有些瀏覽器會提供警告。 如果瀏覽器在未來特定時間實作規格,將會擲回 InvalidAccessError 例外狀況。其他資訊:http://www.w3.org/TR/XMLHttpRequest/#synchronous-flag 和 https://xhr.spec.whatwg.org/#the-open()-method
對 Microsoft Dynamics 365 中的 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 程式庫時,您的程式庫會載入網頁。 有時難以在偵錯環境中找出您的特定程式庫。 在 Microsoft Edge 中使用偵錯工具時,請在 [偵錯工具] 索引標籤上按一下左上角的資料夾圖示,展開可用的指令碼,並尋找名稱對應於您的 JavaScript Web 資源名稱的指令碼,例如下圖所示的 new_myCustomJavaScript.js Web 資源。 您也可以搜尋 JavaScript 程式庫,藉由在搜尋方塊中輸入檔案名稱。
不同瀏覽器的偵錯工具有類似的功能。 當您找到您的程式庫,您可以設定中斷點及重新建立可讓您的程式碼執行的事件。
在新的互動式服務中心用戶端 (在 Dynamics 365 中提供) 中,Dynamics 365 會動態插入您的 JavaScript 程式庫的內容,而不會隨頁面載入。 這表示,您無法在程式碼上設定中斷點,因為每次頁面載入時,都會在其中一個動態程式庫中插入您的程式碼,造成到達不了中斷點。 在這種情況下,您必須使用一些其他技術對您的程式碼偵錯。其他資訊:部落格:使用瀏覽器開發人員工具對 CRM 中的 JavaScript 程式碼進行偵錯
將訊息寫入主控台
當偵錯 JavaScript 時使用 window.alert 方法,仍然是疑難排解應用程式碼的常見方式。 但是,現在所有現代瀏覽器都提供偵錯工具,它並不是最佳作法,尤其是當其他人可能使用偵錯中的應用程式。
考慮將訊息寫入主控台。 下列小函數可新增至程式庫,用來將要檢視的所有訊息傳送至開啟的主控台。
function writeToConsole(message)
{
if (typeof console != 'undefined') {
console.log(message);
}
}
與使用 alert 方法不同的是,如果您忘記移除使用此函數的任何程式碼,使用應用程式的人們看不到您的訊息。
另請參閱
在用戶端上擴充 Microsoft Dynamics 365
使用 Web 資源處理 Dynamics 365 資料
在伺服器上擴充 Microsoft Dynamics 365
撰寫 Microsoft Dynamics 365 表單的程式碼
自訂命令和功能區
Microsoft Dynamics 365 的 Web 資源
開始使用 Microsoft Dynamics 365 Web API (用戶端 JavaScript)
使用 Xrm.Page 物件模型
部落格:使用瀏覽器開發人員工具對 CRM 中的 JavaScript 程式碼進行偵錯
Microsoft Dynamics 365
© 2017 Microsoft. 著作權所有,並保留一切權利。 著作權