通过 Microsoft Dynamics CRM 2015 使用 JavaScript

 

发布日期: 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 资源获取 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,则请勿在页面中加载 jQuery

    • 支持使用 $.ajax 执行针对 OData 和现代应用程序 SOAP 终结点的请求,但也有备选方法。 使用 $.ajax 的替代方法是直接使用浏览器 XMLHttpRequest 对象。 jQuery $.ajax 方法是此对象的包装。 如果直接使用本机 XMLHttpRequest 对象,则不需要加载 jQuery。

      比较 SDK.REST.js 和位于 示例:将 OData 终结点与 JavaScript 一起使用来执行创建、检索、更新和删除操作示例:将 OData 终结点与 JavaScript 和 jQuery 结合使用来执行创建、检索、更新和删除操作 中的 SDK.JQuery.js 示例库。 两者执行相同的操作,但 SDK.REST.js 不需要 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 CRM 2015 和 Microsoft Dynamics CRM Online 2015 更新 支持 W3C 标准,因此使用任何现代浏览器及从支持这些标准的任何平台都将能够访问此应用程序。 但是,只能使用一组特定的浏览器和平台来测试 Microsoft Dynamics 365。 有关支持的平台和浏览器列表的详细信息,请参阅 TechNet:支持的 Web 浏览器

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

控制针对组织或解决方案的浏览器支持

尽管创建公共网站需要支持大多数现代浏览器,但很少有公共网站能够支持现存的所有浏览器。 您需要建立自己支持的浏览器。 为了节省开发和测试费用,许多商业应用程序要求用户使用特定的浏览器。

如果您是一名 ISV 且正在为任何使用 Microsoft Dynamics 365 的组织准备解决方案,则您会希望任何组织都能使用受 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 属性。

有众多不同方法可供您解决这些差别。 您使用的方法取决于您的首选项和您的代码的要求。

示例:使用 JavaScript 检索实体元数据 中包含的 SDK.MetaData.js 库使用帮助程序函数。 此库使用 SOAP 终结点获取 Web 资源,以便检索实体和属性元数据。 此库取决于从以 XMLHttpRequest 形式返回的 XML 文档中获得得解析数据。responseXML。 在此库中添加了以下帮助程序函数,这些函数用于此库中的全部其他函数中。

通过这些帮助函数,仅针对 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 终结点’。 您可以通过使用基于统一资源标识符 (URI) 的 Web 服务来使用 OData 终结点执行 HTTP 请求。 “RESTful”Web 服务很受欢迎,因为它们可以使编程更加容易。

目前,OData 终结点的实施仅限创建、检索、更新和删除操作。示例:将 OData 终结点与 JavaScript 一起使用来执行创建、检索、更新和删除操作 包括 SDK.REST.js 库,此库提供可使用 OData 终结点进行进一步简化的可重用库的示例。

OData 终结点的优点之一在于它可实施 OData 协议,从而提供查询和更新数据的方式。 在使用 JavaScript 时,您通常以 JavaScript Object Notation (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 终结点时,您必须发布 http 请求,该请求包含定义该请求的 XML,然后解析响应中返回的 XML。

Sdk.Soap.js 示例库和其他相关示例提供可与 SOAP 终结点联用的库的示例。

SDK 提供名为 SoapLogger 的 Microsoft Visual C# 解决方案,可以让您在执行 Microsoft Dynamics 365 Web 服务操作时可使用 Visual C# 捕获发送和接收到的 XML。 利用该信息,您能构建自己的 JavaScript 库。

有关详细信息,请参阅与 Web 资源一同使用现代应用程序的现代应用程序 SOAP 终结点

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 CRM for Microsoft Office Outlook with Offline Access 客户端的用户可以在没有 Internet 连接的情况下离线工作。 如果您依赖于 Internet 连接以运行您的 JavaScript 库,您的代码将发生故障。

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

使用 CDN 库的备选是创建脚本 (JavaScript) Web 资源,其中含有库的内容。 由于 Web 资源是组织负责的实体,因此他们将在 带脱机访问功能的 Microsoft Dynamics CRM 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 资源访问数据,且此资源使用 REST 或 SOAP Web 资源终结点时,务必使用经过配置可异步执行的 XMLHttpRequest。 因为浏览器是单线程运行。 如果该线程用于同步执行一个长期流程,那么该浏览器将停止反应。

调试 Microsoft Dynamics CRM 中的 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 库时,您的库添加到包含许多库的页面中。 有时,在调试环境里可能很难隔离您的特定库。 在 Internet Explorer 中使用调试工具时,在“脚本”选项卡上,展开可用脚本并查找具有对应于 JavaScript 的 Web 资源的名称的脚本,例如下面所示的 new_debugging_example_script.js Web 资源。

调试 JavaScript

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

向控制台编写邮件

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

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

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

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

另请参阅

编写客户端应用程序扩展
使用 Web 资源(OData 和现代应用程序 SOAP 终结点)中的 Web 服务数据
编写应用程序和服务器扩展
为 Microsoft Dynamics CRM 2015 窗体编写代码
自定义命令和功能区
Microsoft Dynamics CRM 2015 的 Web 资源
将 OData 终结点用于 Web 资源
与 Web 资源一同使用现代应用程序的现代应用程序 SOAP 终结点
使用 Xrm.Page 对象模型

© 2017 Microsoft。 保留所有权利。 版权