通过 Microsoft Dynamics 365 使用 JavaScript

 

发布日期: 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 资源获取 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.PageXrm.Utility 库。 如果您决定使用 jQuery 中对于 Microsoft Dynamics 365 而言十分有用且能够使用 $.ajax 的其余功能,则请考虑以下几点:

    • 为了获得最佳性能,如果不需要 jQuery,则请勿在页面中加载 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:支持的 Web 浏览器

如果您使用的浏览器或浏览器版本不受支持,且您只键入了服务器名称或含有组织的服务器名称作为 URL,则您将会重定向至 适用于手机的 Microsoft Dynamics 365 页。适用于手机的 Dynamics 365 页预计可在大多数浏览器上正常运行,如用于移动设备中且功能有限的浏览器。

JavaScript 编程最佳实践

以下部分介绍了在您使用 JavaScript 与 Microsoft Dynamics 365时的最佳实践。

避免使用系统不支持的方法

在 Internet 上,您能找到介绍您使用系统不支持的方法的许多示例或建议。 这些也许包括利用未记录的内部函数进行页面控制。 这些方法可能有用,但因为它们不受系统支持,因而您不能认为它们会在 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 客户端的用户可以在没有 Internet 连接的情况下离线工作。 如果您依赖于 Internet 连接以运行您的 JavaScript 库,您的代码将发生故障。

  • 有些组织将限制雇员的 Internet 访问。 除非他们配置这个网络以允许员工访问 CDN 库站点,否则您的代码也许无法用于那些组织。

使用 CDN 库的备选是创建脚本 (JavaScript) Web 资源,其中含有库的内容。 由于 Web 资源是组织负责的实体,因此他们将在 带脱机访问功能的 Microsoft Dynamics 365 for Outlook 用户脱机时同步。 由于这些 web 资源现在属于应用程序,因此它们在组织限制访问 Internet 时也不会受阻。

编写用于多个浏览器的函数时,请使用功能检测

既使当您使用一个跨浏览器库,例如 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-flaghttps://xhr.spec.whatwg.org/#the-open()-method

调试 Microsoft Dynamics 365 中的 JavaScript

每个浏览器提供某种调试扩展。Internet Explorer 提供可在 Microsoft Dynamics 365 中调试脚本的开发人员工具。 在使用 Internet Explorer 查看页面时,可以通过按 F12 打开 Internet Explorer 开发人员工具。 有关详细信息,请参阅使用 F12 开发人员工具

对于 Google Chrome,则按 F12 打开开发人员工具。Firebug 是流行的浏览器扩展名,用于使用 Mozilla Firefox 进行 Web 开发。 对于 Apple Safari,您必须先在“高级偏好设置”中选择“在菜单栏显示开发菜单”。 然后您可以从“开发”菜单中选择“显示 Web 检测程序”。

您还可以使用 Microsoft Visual Studio 执行以下操作。 有关详细信息,请参阅如何调试 Microsoft Dynamics CRM 2011 中的 JScript

当您在 Microsoft Dynamics 365 使用 JavaScript 库时,您的库将加载网页。 有时,在调试环境里可能很难隔离您的特定库。 使用调试程序选项卡上的Microsoft Edge中的调试工具时,单击左上角的文件夹图标,展开可用脚本并查找具有对应于 JavaScript Web 资源的名称的脚本,例如下面所示的 new_myCustomJavaScript.js Web 资源。 您还可以通过在搜索框中键入文件名搜索您的 JavaScript 库。

调试 JavaScript

另一个浏览器的调试工具具有类似的功能。 一旦您找到您的库,就可以设置一个断点,并重新创建使您的代码运行的事件。

在新 交互式服务中心客户端(在Dynamics 365中进行了介绍),Dynamics 365 动态地注入您的 JavaScript 库的内容,而不是与页面一起加载。 这意味着您不能在您的代码中设置断点,因为每次加载页面时,您的代码会被注入到一个动态库中,将阻止匹配断点。 在这种情况下,必须使用一些其他技术调试您的代码。详细信息:博客:使用浏览器开发人员工具在 CRM 中调试 JavaScript 代码

向控制台编写邮件

在调试 JavaScript 仍是应用程序中排查代码问题的常用方法时,使用 window.alert 方法。 但现在,所有现代浏览器都提供调试工具,这不是最佳实践,特别是当其他人可能使用您正在调试的应用程序。

考虑编写自己的邮件到控制台。 以下是您可以向自己的库添加的一个小函数,您可以使用它将任何想看的消息发送到开放时的控制台。

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

与使用警报不同,如果您忘记删除使用该函数的任何代码,使用应用程序的用户将不能看到您的邮件。

另请参阅

在客户端上扩展 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。 保留所有权利。 版权