Microsoft Dynamics CRM 快速指南



Microsoft Dynamics CRM - 概述

客户关系管理 (CRM) 是一个用于管理公司与其现有和潜在客户互动关系的系统。它通常涉及使用技术来组织、自动化和同步销售、营销、客户服务和技术支持。通过组织和自动化培养客户满意度和忠诚度的业务流程,CRM 可以帮助降低成本并提高盈利能力。

Microsoft Dynamics CRM

Microsoft Dynamics CRM 是由微软开发的客户关系管理软件包,专注于增强任何组织的客户关系。产品本身主要侧重于销售、营销和客户服务领域,尽管微软一直在将 Dynamics CRM 作为 XRM 平台进行营销,并一直鼓励合作伙伴使用其专有的(基于 .NET)框架对其进行定制。近年来,它也作为由 CRM 驱动的分析平台发展壮大。

CRM 解决方案可用于提升组织的销售效率和营销效果,处理完整的客户支持链,并提供社交洞察、商业智能以及许多其他开箱即用的功能和特性。作为一款产品,Microsoft Dynamics CRM 还提供完整的移动支持,以便在手机和平板电脑上使用 CRM 应用。

在撰写本教程时,CRM 的最新版本是 CRM 2016。但是,在本教程中,我们将使用 CRM 2015 在线版,因为它是最新稳定版本,并且在许多组织中经常使用。即便如此,即使您使用的是其他任何版本的 CRM,教程中的所有概念仍然适用。

产品服务

Microsoft Dynamics CRM 提供两类产品:

CRM 在线版

CRM 在线版是 Microsoft Dynamics CRM 的基于云的服务,所有后端流程(例如应用程序服务器、设置、部署、数据库、许可等)都在 Microsoft 服务器上进行管理。CRM 在线版是基于订阅的服务,对于那些不想管理 CRM 实施中涉及的所有技术细节的组织来说是理想的选择。您可以在几天内(而不是几周、几个月或几年)开始设置您的系统,并通过浏览器访问它。

CRM 本地版

CRM 本地版是 Microsoft Dynamics CRM 功能更强大、更自定义的服务,其中 CRM 应用程序和数据库将部署在您的服务器上。此服务允许您控制所有数据库、自定义项、部署、备份、许可以及其他网络和硬件设置。通常,希望获得自定义 CRM 解决方案的组织更喜欢本地部署,因为它提供了更好的集成和自定义功能。

从功能角度来看,两种服务都提供类似的功能;但是,它们在实施方面存在很大差异。差异总结在下表中。

CRM 在线版 CRM 本地版
这是 Microsoft 提供的基于云的解决方案,其中所有服务器和数据库都由 Microsoft 管理。 这是 Microsoft 提供的本地解决方案,其中服务器和数据库由客户管理。
您可以在几天内开始使用在线服务。您按需支付用户和已使用空间的费用。 设置本地服务需要技术技能以及足够的时间来设置 CRM 实例并使其运行。
它支持相对较少的自定义和扩展。 它支持相对较多的自定义和扩展。
由于数据库托管在 Microsoft 服务器上,因此 CRM 在线版无法执行手动数据备份和还原操作。但是,Microsoft 会每天对数据库进行备份。 CRM 本地版提供了完全管理数据库的能力。
CRM 在线版根据数据存储限制(例如 5GB、20 GB 等)提供各种方案。 CRM 本地版对存储大小没有任何此类限制,因为数据存在于您自己的服务器上。
CRM 在线版具有洞察、社交聆听、分析等功能的内置功能。 CRM 本地版需要为这些功能支付额外费用。
CRM 在线版支持自动更新到未来版本。 CRM 本地版更新需要由管理员安装。

访问 CRM

可以通过以下任何选项访问 Microsoft Dynamics CRM:

  • 浏览器
  • 手机和平板电脑
  • Outlook

产品竞争对手

Microsoft Dynamics CRM 无疑是 CRM 领域顶级产品之一。但是,以下是与 Microsoft Dynamics CRM 竞争的其他产品。

  • Salesforce.com
  • Oracle
  • SAP
  • Sage CRM
  • Sugar CRM
  • NetSuite

产品版本

Microsoft Dynamics CRM 从 2003 年的 1.0 版本开始发展至今。最新版本(截至撰写本文时)为 2015。以下是按时间顺序排列的版本列表:

  • Microsoft CRM 1.0
  • Microsoft CRM 1.2
  • Microsoft Dynamics CRM 3.0
  • Microsoft Dynamics CRM 4.0
  • Microsoft Dynamics CRM 2011
  • Microsoft Dynamics CRM 2013
  • Microsoft Dynamics CRM 2015
  • Microsoft Dynamics CRM 2016

Microsoft Dynamics CRM - 环境

让我们从设置 CRM 环境开始。我们将使用 CRM 2015 在线版,因为在线版提供一个月的免费试用访问权限。这样,您就不需要购买任何许可证来学习 CRM。

注意 - 由于 Microsoft Dynamics CRM 是一款不断发展的产品,因此当您学习本教程时,可能会有更新的产品版本。在这种情况下,应用程序的外观可能与本教程屏幕截图中的外观不完全相同。但是,产品的核心概念保持不变。产品的外观和导航可能会发生变化,但是,在大多数情况下,您将能够轻松地浏览并找到所需的选项。

设置 Microsoft Dynamics CRM 在线帐户

步骤 1 - 导航到以下 URL:

https://www.microsoft.com/en-us/dynamics365/home

如果您将来通过此链接没有看到试用版的选项,只需在 Google 上搜索“Microsoft Dynamics CRM 免费试用”即可。

步骤 2 - 点击“免费试用”按钮。这将启动一个三步注册流程,如下图所示。在三步注册的步骤 1 中,填写必填信息,例如姓名、电子邮件和语言。

Mscrm Online Registration Step 2_1

步骤 3 - 点击“免费试用”按钮。这将启动一个三步注册流程,如下图所示。在三步注册的步骤 1 中,填写必填信息,例如姓名、电子邮件和语言。

Mscrm Online Registration Step 3

步骤 4 - 在三步注册的步骤 3 中,Microsoft 将验证您指定的手机号码。为此,您可以提供您的手机号码并点击“给我发短信”。然后它将向您的手机发送一个 OTP,您可以使用它来继续设置。

Mscrm Online Registration Step 4

步骤 5 - 您的 Office 365 用户 ID 将被创建。您可以保存此用户 ID 信息以供以后访问。

Mscrm Online Registration Step 5

设置帐户后,它将打开您的 CRM 仪表板,其外观如下所示。

Mscrm Online Registration Step 6

再次强调一下,上面的屏幕截图可能会随着未来版本的更新而改变,但是设置环境将是一个非常简单的过程。

下载 CRM SDK

Microsoft Dynamics CRM 的软件开发工具包 (SDK) 包含重要的代码示例,包括服务器端代码、客户端代码、扩展、插件、Web 服务、工作流、安全模型等。基本上,SDK 包含您开始使用 CRM 所需的每个开发资源。无论您是计划设置新的插件项目还是为 CRM 设置 Web 服务项目,SDK 都提供了从简单到高级的体系结构和示例,以帮助您开始。我们现在将介绍下载和安装 SDK 的步骤。

步骤 1 - 每个版本的 Microsoft Dynamics CRM 都有其自己的 SDK 版本。获取正确 SDK 版本的最佳方法是在 Google 上搜索您相应的 CRM 版本。例如,如果您的 CRM 版本是 2015,则尝试搜索“Microsoft Dynamics CRM 2015 SDK”。

步骤 2 - 下载完成后,运行 exe 安装程序。点击“继续”。

步骤 3 - 它将要求您选择 SDK 应解压到的位置。选择任何合适的位置以保存参考 SDK。

步骤 4 - 打开您解压到的文件夹。您可以从此处访问所有 SDK 内容。

结论

在本节中,我们通过创建 CRM 在线帐户来设置我们的环境。然后,我们下载了 CRM SDK,它将在本教程的后续章节中使用。请务必记下您设置帐户时使用的凭据,因为下次登录时您将需要这些凭据。

功能模块

整个 Microsoft Dynamics CRM 是围绕以下功能模块设计的。

  • 销售
  • 市场营销
  • 服务管理

这些功能模块通常称为工作区

了解 CRM 功能模块

整个 CRM 应用程序按功能划分为不同类型的用户和团队。因此,如果一个组织使用 CRM 来管理其流程,则销售团队的用户将使用销售模块下的功能,而市场营销团队的用户将使用市场营销模块下的功能。

所有这三个功能模块共同驱动获得新客户(市场营销)、向他们销售服务(销售)和维护现有客户(服务管理)的整个生命周期。

Mscrm Sales Marketing Customer Service

为了更好地理解此流程,请考虑一家向客户销售信用卡的银行。向客户销售信用卡的典型生命周期如下。在此生命周期的每个步骤中,您将看到销售、市场营销和服务模块如何发挥其作用。

销售与市场营销 − 银行的呼叫中心办公室主管接收潜在客户的数据;在CRM中通常称为潜在客户 (Leads)。这些潜在客户通过市场营销活动、销售驱动、推荐等方式捕获到CRM系统中。

销售 − 呼叫中心主管通过电话/电子邮件等方式与这些潜在客户沟通。如果客户对信用卡产品感兴趣,则潜在客户记录将转换为商机记录(已赢得的潜在客户)。

服务 − 一旦客户成为系统的一部分,公司将协助他/她进行支付、账单、退款等。每当客户有任何疑问或疑虑时,他们都会致电呼叫中心并提出工单。主管将跟进以解决此问题,目标是为客户提供优质服务。这些任务属于CRM服务管理。

导航CRM工作区

步骤1 − 打开CRM主页。

步骤2 − 默认情况下,您将看到选中“销售”工作区。

Mscrm Work Areas

步骤3 − 要更改工作区,请单击“显示工作区”选项。您将看到选择“销售”、“服务”和“市场营销”的选项。

Mscrm Work Areas Show

步骤4 − 单击“销售”。这将显示您所有属于销售的实体,例如账户、联系人、潜在客户、商机、竞争对手等。这些实体都按其业务流程进行分类,例如我的工作、客户、销售、辅助材料等。

Mscrm Sales

步骤5 − 同样,如果您单击“市场营销”工作区,您将看到与市场营销业务功能相关的所有实体。

Mscrm Marketing

销售模块

CRM的销售模块旨在推动新客户的整个销售生命周期。销售模块包含以下子模块:

潜在客户 (Leads) − 代表将来可能成为公司潜在客户的个人或组织。这是将潜在客户纳入系统的第一步。

商机 (Opportunities) − 代表客户的潜在销售。一旦潜在客户对产品表示兴趣,它就会转换为商机。商机将最终被赢得或失去。

账户 (Accounts) − 代表组织与其有关系的公司。一旦商机赢得,它将转换为账户或联系人。

联系人 (Contacts) − 代表个人或组织与其有关系的任何个人。大多数这些联系人都是组织的客户(例如,银行的所有信用卡客户)。一旦商机赢得,它将转换为账户或联系人。

竞争对手 (Competitors) − 管理组织的所有市场竞争对手。

产品 (Products) − 管理组织向其客户提供的所有产品(例如,所有信用卡计划)。

报价 (Quotes) − 向潜在客户发送的以特定价格提出的产品或服务的正式报价(例如,发送给客户的特定信用卡计划的年度价格)。

订单 (Orders) − 客户接受的报价将变成订单(例如,在组织提供给您的所有计划中,您可能会选择6个月的订阅)。

发票 (Invoices) − 已开票的订单会生成发票。

市场营销模块

CRM的市场营销模块旨在推动组织为其现有和潜在客户开展的整个市场营销流程。市场营销模块包含以下子模块:

市场营销列表 (Marketing Lists) − 提供一种方法来对您的联系人、账户和潜在客户进行分组,并通过发送促销电子邮件、活动详细信息、新闻通讯以及其他与目标客户相关的更新与他们互动。您可以定义创建市场营销列表的条件(例如,年龄在25岁到35岁之间的联系人)。

活动 (Campaigns) − 活动旨在衡量有效性并取得特定成果,例如推出新产品或提高市场份额,并且可能包括各种沟通渠道,例如电子邮件、报纸广告、YouTube广告等。

快速活动 (Quick Campaigns) − 快速活动类似于活动,但它只能与一种类型的活动相关联。

所有上述市场营销模块都与销售模块紧密协作。

服务管理模块

CRM的服务管理模块旨在关注、管理和跟踪组织的客户服务运营,例如支持基于事件的服务、使用服务调度支持客户等。

服务管理模块涵盖以下子模块:

  • 工单 (Cases/Incidents) − 支持通过工单/案例跟踪任何客户请求、问题或投诉。工单遵循问题解决流程的各个阶段,然后最终得到解决并关闭。

  • 知识库 (Knowledge Base) − 维持所有客户经常提出的常见问题和答案的主存储库。

  • 合同 (Contracts) − 合同与工单一起使用,指示客户拥有的所有有效合同。

  • 资源/资源组 (Resources/Resource Groups) − 代表用于提供服务的人员、工具、房间或设备。这些资源可用于解决特定客户问题。

  • 服务 (Services) − 代表组织向客户提供的所有服务。

  • 服务日历 (Service Calendar) − 用于安排在组织中工作的用户的上班时间和日程安排。

活动管理

上面解释的所有模块都使用CRM的活动管理模块。活动代表与客户的任何类型的互动,例如电话、电子邮件、信件等。这些活动可以与前面解释的任何实体相关联,例如账户、联系人、潜在客户、工单等。默认情况下,CRM开箱即用地提供以下类型的活动:

  • 电话
  • 电子邮件
  • 任务
  • 预约
  • 定期预约
  • 信函
  • 传真
  • 活动响应
  • 活动
  • 服务活动
  • 自定义活动

结论

在本节中,我们学习了CRM的三个主要模块——销售、市场营销和服务管理。我们了解了CRM中工作区的组织方式以及整个CRM组织的生命周期是如何运作的。我们还研究了CRM的活动管理模块,该模块允许创建电话、电子邮件、传真和其他类型的客户互动活动。

实体和记录

既然我们已经对所有CRM模块有了功能概述,让我们学习并了解CRM中的实体和表单。

什么是实体?

实体用于在CRM中建模和管理业务数据。联系人、工单、账户、潜在客户、商机、活动等都是保存数据记录的实体。从概念上讲,CRM实体相当于数据库表。例如,“联系人”实体将保存联系人记录,“工单”实体将保存工单记录,依此类推。

您可以同时拥有:开箱即用的实体(默认情况下随CRM一起提供)和自定义实体(您可以通过自定义创建)。例如,假设您正在维护客户阅读的书籍数据。为此,您将使用开箱即用的“联系人”实体存储客户数据,但是您将把书籍数据存储在哪里?您没有任何可以存储书籍数据的实体。在这种情况下,您将创建一个名为“书籍”的新自定义实体,并将其与现有的“联系人”实体关联。

对于本教程,让我们以在CRM中存储雇主和雇员为例。考虑到这个例子,开箱即用的CRM提供了“联系人”实体,您可以在其中理想地存储所有雇员。它还提供了一个“账户”实体,您可以在其中存储所有雇主。但为了学习实体,我们将创建一个名为“雇主”(而不是使用现有的“账户”实体)的新自定义实体。

创建新实体

步骤1 − 单击顶部功能区按钮,然后单击“设置”选项。从“自定义”部分单击“自定义”选项(参见下图)。

Mscrm Create Entity Step 1

步骤2 − 现在单击“自定义系统”选项。

Mscrm Create Entity Step 2

这将打开“默认解决方案”窗口。您将在后面的章节中了解有关CRM解决方案的更多信息,但现在您将使用默认的CRM解决方案。

Mscrm Create Entity Step 2_2

步骤3 − 从左侧面板展开“实体”选项。

Mscrm Create Entity Step 3

步骤4 − 现在单击“新建”→“实体”。

Mscrm Create Entity Step 4

步骤5 − 在“实体”表单中,将“显示名称”输入为“雇主”,将“复数名称”输入为“雇主”。在“显示此实体的区域”部分,选中“销售”、“服务”和“市场营销”。选中这些选项将在CRM的“销售”、“服务”和“市场营销”选项卡中显示新创建的实体。

Mscrm Create Entity Step 5

步骤6 − 单击“保存并关闭”图标。这将在后台创建CRM数据库中的新实体。

Mscrm Create Entity Step 6

步骤7 − 在“默认解决方案”父窗口中,您将看到新创建的“雇主”实体。

Mscrm Create Entity Step 7

步骤8 − 单击顶部功能区中的“发布所有自定义”选项。这将发布(也称为提交)我们到目前为止所做的所有更改。您可以通过单击“保存并关闭”来关闭此窗口。

Mscrm Create Entity Step 8

创建记录

CRM就是关于在您的系统中管理宝贵数据。在本节中,我们将学习如何在CRM中创建、打开、读取和删除记录。我们将继续使用上一节中创建的雇主实体。

步骤1 − 通过“显示工作区”→“销售”→“扩展”→“雇主”导航到“雇主”实体记录网格。

Mscrm Access Entity Step 3

步骤2 − 单击“新建”图标。

Mscrm Create Records Step 1

这将打开默认的新雇主表单。您可以看到此默认表单中只有一个可编辑字段“名称”。在“名称”字段中输入“雇主1”。单击“保存并关闭”。

Mscrm Create Records Step 2

步骤3 − 在“活动雇主”视图中,您可以看到新创建的雇主记录。

Mscrm Create Records Step 3

访问记录

要访问CRM中已创建的记录,请转到该实体页面。在本例中,导航到“显示工作区”→“销售”→“扩展”→“雇主”。您将在网格中看到那里存在的记录列表。单击任何雇主记录以访问它。

Mscrm Create records Step 3

更新记录

打开记录后,您可以直接编辑表单中的任何详细信息。默认情况下,CRM 2015 具有自动保存选项,会在更改后 30 秒自动保存对表单所做的任何更改。或者,您可以点击 Ctrl+S。

Mscrm Edit Records

如果您想禁用自动保存功能,请转到设置 → 管理 → 系统设置 → 启用所有表单的自动保存,然后选择“否”。

Mscrm Disable Auto Save

删除记录

步骤 1 - 选择要删除的一条或多条记录,然后单击删除按钮。

Mscrm Delete Records.jpg

步骤 2 - 单击删除确认删除记录。

Mscrm Delete Records Confirmation

结论

如上例所示,默认的雇主表单只有一个字段。但是,在实际场景中,表单上会有许多自定义字段。例如,如果您查看一个示例联系人记录(这是一个现成的 CRM 实体),它将包含许多字段来存储联系信息,例如全名、电子邮件、电话、地址、案例等。

Mscrm Create Records Step 4

在接下来的章节中,您将学习如何编辑此默认表单并在其上添加不同类型的字段。

Microsoft Dynamics CRM - 字段

在学习如何向 CRM 表单添加自定义字段之前,让我们先了解一下 CRM 支持哪种类型的字段。

字段类型

CRM 原生提供 11 种可放置在表单上的数据字段类型 -

  • 单行文本
  • 选项集(下拉列表)
  • 两个选项(单选按钮)
  • 图像
  • 整数
  • 浮点数
  • 小数
  • 货币
  • 多行文本
  • 日期和时间
  • 查找

下表列出了每种类型的简要说明。

序号 字段类型和说明
1

单行文本

此字段存储最多 4000 个字符的文本。您还可以将格式指定为以下之一:电子邮件、文本、文本区域、URL、股票代码和电话。您可以为每个设置最大长度和输入法模式。

2

选项集(下拉列表)

此字段存储一组选项,每个选项都有一个数值和标签。换句话说,它是 CRM 中的下拉字段。您还可以定义可在多个表单中使用的全局选项集。

3

两个选项(单选按钮)

此字段为用户提供两个选项供选择(0 或 1)。换句话说,它是一个单选按钮字段。

4

图像

当实体具有图像字段时,可以将其配置为在应用程序中显示记录的图像。

5

整数

此字段存储 -2,147,483,648 到 2,147,483,647 之间的整数值。它支持将格式指定为无、持续时间、时区和语言。您也可以设置最小值和最大值。

6

浮点数

此字段存储最多 5 位小数的浮点数,精度范围在 0.00 到 1,000,000,000.00 之间。您也可以设置最小值和最大值。

7

小数

此字段存储最多 10 位小数,数值范围在 -100,000,000,000.00 到 100,000,000,000.00 之间。

8

货币

此字段用于存储 922,337,203,685,477.0000 到 922,337,203,685,477.0000 范围内的任何货币值。您还可以将精度指定为价格小数、货币精度或 0 到 4 之间的任何值。

9

多行文本

这是一个滚动文本框。您可以为此字段设置最大字符数。

10

日期和时间

此字段用于在 CRM 中存储与日期相关的数据,并支持两种格式:仅日期和日期和时间。您还可以将行为指定为用户本地、仅日期和时区无关。

11

查找

您可以使用已创建但尚未与另一个查找字段一起使用的实体关系来创建查找字段。如果您在实体表单中创建查找字段,则会自动生成关系。查找字段创建为关系字段。

Microsoft Dynamics CRM - 表单

在过去的两个章节中,您学习了创建新实体、创建新记录以及 CRM 中可用字段的类型。在本节中,您将学习如何在 CRM 表单上添加新字段。

在上一章节学习的 11 种数据字段类型中,您将在雇主表单上使用三种类型的字段:选项集(下拉列表)、多行文本和日期时间。选项集字段将用于存储雇主类型,多行文本将用于存储雇主的简要描述,日期时间字段将用于存储公司成立日期。注意:您的表单上已经有一个名称字段,它是单行文本类型。

在表单上添加字段

步骤 1 - 单击顶部功能区按钮,然后单击设置选项。从自定义部分单击自定义选项(参见下面的屏幕截图)。

Mscrm Create Entity Step 1

步骤 2 - 现在单击自定义系统选项。

Mscrm Create Entity Step 2

这将打开 DefaultSolution 窗口。您将在后面的章节中学习更多关于 CRM 解决方案的内容,但现在您将使用默认的 CRM 解决方案。

Mscrm Create Entity Step 2_2

步骤3 − 从左侧面板展开“实体”选项。

Mscrm Create Entity Step 3

步骤 4 - 从展开的实体中选择雇主。这将在右侧窗口打开实体的详细信息。从左侧面板展开雇主选项,您将能够看到表单、视图、图表、字段和其他几个选项。

Mscrm Add New Field Step 4

步骤 5 - 单击字段。它将打开一个网格,显示创建此实体时默认附带的所有字段。

Mscrm Add New Field Step 5

步骤 6 - 单击新建按钮。在新打开的窗口中,输入以下详细信息 -

显示名称 - 雇主类型

名称 - 此字段将根据您选择的显示名称自动填充。但是,如果您想更改它,可以这样做。

数据类型 - 选项集。一旦您选择数据类型为选项集,它就会显示选项面板。单击加号 (+) 图标将创建一个新的选项集项目,默认标签为项目,默认值为 100,000,000。您可以更改此项目的标签以添加四个代表雇主类型的选项:私营、政府、跨国和公共。

Mscrm Add New Field Step 6

步骤 7 - 单击顶部功能区的保存并关闭。您已成功创建雇主类型字段。

步骤 8 - 与您刚刚为添加雇主类型字段所做的类似,添加其他三个字段,如下面的屏幕截图中所述和所示 -

员工人数 - 这将是一个整数字段。

成立日期 - 这将是一个日期时间字段。

雇主描述 - 这将是一个多行文本字段。

Mscrm Add New Field Whole Number

Mscrm Add New Field Date Time

Mscrm Add New Multiple Lines of Text

步骤 9 - 现在将这些新字段添加到雇主表单中。为此,请单击雇主实体下左侧导航中的表单。这将显示两个名为信息的表单。默认情况下,CRM 会创建两个表单 – 主表单和移动简易表单。单击主表单。

Mscrm Add New Field Step 9

步骤 10 - 您可以在右侧的字段资源管理器面板中看到新添加的字段。

Mscrm Add New Field Step 10

步骤 11 - 将这些字段拖放到常规选项卡中。

Mscrm Add New Field Step 11

步骤 12 - 单击保存,然后单击发布。

步骤 13 - 您现在可以使用更新后的字段创建雇主记录。导航到 CRM 主页 → 销售 → 雇主 → 新建。这次打开的新表单将包含您在本节中添加的所有新字段。您可以填写一些详细信息,然后单击保存并关闭。

Mscrm Add New Field Step 13

结论

在本节中,我们学习了使用 CRM 表单以及如何通过在其上放置各种类型的字段来自定义它们。我们还学习了如何在任何表单上添加任意数量的字段,并根据业务需求使用各种选项卡和部分对其进行排列。

Microsoft Dynamics CRM - 搜索

Microsoft Dynamics CRM 是一款庞大的产品,多年来发展显著。该产品具有许多内置于系统中的现成功能。您无需编写任何代码即可使用这些功能。其中一个重要的现成功能是 CRM 的搜索功能,因为它支持高级查询和过滤功能。

快速搜索

默认情况下,CRM 中每个实体的网格视图都支持使用右上角的搜索栏进行快速搜索。以下是联系人实体快速搜索的屏幕截图。

Mscrm Quick Search Bar

您可以尝试输入类似“Robert”的搜索字符串,它将返回所有匹配的记录。

您可以为搜索关键词添加前缀 *(星号)以执行通配符搜索。

注意 - 使用 Microsoft Dynamics CRM 的 Web 客户端版本时,快速搜索始终搜索所有活动记录,而不管选择的视图如何。

您可以自定义快速搜索(例如自定义任何其他视图)以修改筛选条件、配置排序、添加视图列、添加查找列和更改其他属性。

高级搜索

高级搜索允许您搜索 CRM 中任何实体的记录。它是 CRM 原生提供的最强大和最有用的功能之一。高级搜索图标出现在 Microsoft Dynamics CRM 的顶部功能区栏上,无论您处于哪个屏幕。

Mscrm Advanced Search Bar

单击高级查找图标以打开高级查找窗口。此窗口允许您选择要搜索其记录的实体,应用筛选和分组条件,并将高级查找视图保存为个人视图。

让我们举个例子。假设您想搜索所有 FirstName 包含 Robert 且已离婚的联系人。为此 -

步骤 1 - 从查找下拉列表中选择联系人。此下拉列表将包含系统中存在的所有实体。

步骤 2 - 输入如下面的屏幕截图所示的搜索条件。您可以添加任意数量的搜索查询参数。您甚至可以使用组参数对这些条件进行分组。例如,如果您想搜索所有名字为 Robert 或 Mark 的联系人,您可以添加两个搜索条件并使用 GroupOR 对其进行分组。

Mscrm Advanced Find Query Results Group

步骤 3 - 单击结果按钮。它将在新选项卡中显示匹配的记录。

Mscrm Advanced Find Query Results

步骤 4 − 您还可以点击“编辑列”来编辑您希望在搜索结果中看到的列。例如,我们当前的网格仅包含两列——全名和办公电话。但是,如果您希望在此网格中添加一列电子邮件 ID,可以使用此选项。

保存自定义视图

在此阶段,如果您想保存此搜索条件以及筛选器和已编辑的列,可以点击“保存”按钮。保存后,您可以在该实体页面上使用此保存的视图。

Mscrm Save Custom View

例如,假设您作为客户主管服务两种类型的客户:普通客户和高级客户。因此,您可以使用这些相应的类别创建一个高级筛选器,并将它们保存为“分配给我的普通联系人”和“分配给我的高级联系人”。然后,您可以直接从联系人实体页面快速访问这些视图,而无需每次使用系统时都进行快速搜索或高级查找搜索。

Microsoft Dynamics CRM - 网页资源

CRM 中的网页资源是存储在 CRM 数据库中的虚拟网页文件,用于在 CRM 中实现网页功能。这些文件可以是 HTML、JScript、Silverlight 或任何其他受支持的类型。

CRM 作为一个产品,具有一套广泛的功能。但是,大多数情况下,您需要扩展这些现有功能以满足您的自定义需求。扩展这些功能通常有两种方式:

  • 客户端扩展 − 使用网页资源和表单脚本。

  • 服务器端扩展 − 插件、工作流和 Web 服务(我们将在接下来的章节中学习这部分内容)。

网页资源的用途

如上所述,在客户端扩展 CRM 的地方,网页资源就派上用场了。为了清楚地理解这一点,请考虑以下用例:

  • 您有一个包含某些字段的 CRM 表单。CRM 提供了开箱即用的基本验证功能,例如必填字段、字段长度等。但是,如果您想要更复杂的验证,例如验证输入的电话号码格式是否正确,或者验证输入的地址是否实际存在,或者输入的社会安全号码是否正确,该怎么办?

  • CRM 提供了开箱即用的 UI 自定义功能,例如在表单上创建节和选项卡、重新排列字段等。但是,如果客户想要构建一个自定义页面,该页面显示来自其其他 ERP 系统的所有客户信息,该怎么办?

  • CRM 带有一个标准功能区栏,其中包含所有按钮和选项。如果您想添加自己的功能区按钮,该怎么办?

  • 假设您已经有一个 ERP 系统。如果您想从此 ERP 系统打开一些 CRM 屏幕,该怎么办?

  • 您始终可以在服务器端插件代码中调用任何外部 Web 服务。但是,如果您想在客户端调用任何外部 Web 服务,该怎么办?

所有这些“怎么办”问题的答案都是网页资源。每个网页资源都可以通过其唯一的 URL 访问。您可以上传网页资源文件,或者对于基于代码的资源(例如 HTML、Jscript 等),您甚至可以直接在 CRM 中编辑它们。由于网页资源存储在 CRM 中,因此它们可以轻松地与任何 CRM 自定义项一起从一个环境迁移到另一个环境。

网页资源的类型

网页资源类型 CRM 中的示例应用程序
网页 (HTML) 您可能希望创建任何自定义 HTML 页面,例如地图、自定义应用程序页面等,并将其放置在您的 CRM 表单中。
样式表 (CSS) 任何将与 HTML 文件一起使用的 CSS 文件。
脚本 (JScript) 任何客户端逻辑,例如验证、操作字段值等。
数据 (XML) 可用于存储任何静态设置或配置数据。
图像 (PNG、JPG、GIF、ICO) 应用程序中使用的任何图像,例如功能区按钮、图标、表单等。
Silverlight (XAP) 嵌入到 CRM 中的任何自定义 Silverlight 应用程序。
样式表 (XSL) 用于转换 XML 数据。

在所有这些类型的网页资源中,我们将在后续章节中学习最重要的两种类型的网页资源——HTML 网页资源和 JScript 网页资源。

访问任何实体的网页资源

可以访问 CRM 中数据库中存储的所有网页资源。以下是涉及的步骤:

步骤 1 − 转到设置 → 自定义 → 自定义系统。

步骤 2 − 从左侧导航中选择网页资源。目前,您将看不到任何网页资源,因为我们尚未创建任何资源。

Mscrm Access Web Resource Step 1

我们将在接下来的章节中介绍如何创建网页资源。

JScript 网页资源

JScript 网页资源可能是您将与 Microsoft Dynamics CRM 一起使用的最重要类型的网页资源。

JavaScript 在 CRM 中的应用

表单事件编程

表单事件编程用于处理客户端行为,例如用户打开表单、更改某些数据、在选项卡之间移动等时会发生什么。为了实现这种客户端交互,您将编写 JavaScript 代码并将其作为 JScript 网页资源添加到 CRM 中。但是,您将编写的 JavaScript 代码必须使用 Dynamic CRM 的 Xrm.Page 模型,而不是标准的 JavaScript DOM。使用 Xrm.Page 模型是 Microsoft 的编码方式,它确保使用此模型编写的任何代码都将与 CRM 的任何未来版本兼容。

网页资源

除了用于表单事件编程之外,JavaScript 还用于 CRM 的其他应用程序,例如:

  • 使用唯一的 URL 打开表单、视图和对话框。

  • 使用 OData 和 SOAP 端点与 Web 服务交互。

  • 在其他网页资源(例如 HTML 网页资源)中引用 JavaScript 代码。

在这种情况下,您将编写 JavaScript 代码(使用 Xrm.Page 模型)并将其作为 JScript 网页资源添加到 CRM 中,然后可以通过唯一的 URI 在任何地方引用它。

功能区自定义

最后,JavaScript 的另一个常见用途是处理功能区自定义,例如:

  • 基于某些逻辑显示/隐藏功能区按钮
  • 基于某些逻辑启用/禁用功能区按钮
  • 处理单击某个功能区按钮时会发生什么

为了处理这种情况,您将编写 JavaScript 逻辑(使用 Xrm.Page 模型),然后将其作为 JScript 网页资源添加。然后,可以在功能区按钮的 XML 中引用此网页资源,并且我们可以指定要调用的 JScript 文件中的哪个方法来检查是否应显示/隐藏或启用/禁用功能区按钮或处理单击事件。

Xrm.Page 对象模型

以下是 Xrm.Page 对象的层次结构,显示了可用的命名空间、对象及其集合。在编写 JScript 代码时,您将使用这些属性。

XRM Page Object Model

命名空间

序号 对象和说明
1

Context

提供方法来检索特定于上下文的相关信息,例如组织详细信息、登录用户详细信息或作为查询字符串传递给表单的参数。

2

Data

提供访问实体数据以及管理表单中和业务流程流控制中的数据的方法。

3

UI

包含用于检索有关用户界面的信息的方法,以及表单的几个子组件的集合。

对象

序号 对象和说明
1

Entity

提供方法来:

  • 检索记录信息
  • 保存方法
  • 集合属性
2

Process

用于检索业务流程属性的方法。

3

Navigation

使用 items 集合访问导航项。

4

FormSelector

使用 Items 集合访问用户可用的表单。还使用导航方法来关闭和打开表单。

5

Stages

每个流程都有一个可以使用 process 的 getStages 方法访问的阶段集合。

6

Steps

每个阶段包含可以使用 stage 的 getSteps 方法访问的各种步骤。

集合

序号 集合和说明
1

Attributes

提供对表单上可用的实体属性的访问。

2

Controls

ui.controls − 提供对表单上存在的每个控件的访问。

attribute.controls − 提供对属性内所有控件的访问。

section.controls − 提供对节内所有控件的访问。

3

Items

提供对表单上所有导航项的访问。

4

Tabs

提供对表单上所有选项卡的访问。

5

Sections

提供对表单上所有节的访问。

表单编程中支持的事件

使用 Xrm.Page 模型的表单编程允许您处理以下表单事件:

  • onLoad
  • onSave
  • onChange
  • TabStateChange
  • OnReadyStateComplete
  • PreSearch
  • 业务流程流控制事件

表单编程示例

在此示例中,我们将根据用户选择的 PreferredMethodofCommunication 在联系人表单上进行一些验证。因此,如果用户选择其首选方法为电子邮件,则电子邮件字段应成为必填字段,类似地,电话和传真字段也是如此。

步骤 1 − 创建一个名为contacts.js的 JavaScript 文件并复制以下代码。

function validatePreferredMethodOfCommunication() { 

   //get the value of Preffered Method of Communication code 
   var prefferedContactMethodCode = 
      Xrm.Page.getAttribute('preferredcontactmetho dcode').getValue();  
   
   //if Preferred Method = Any, make all fields as non-mandatory 
   
   //else if Preferred Method = Phone, make Mobile Phone field mandatory 
   //and all other fields as non-mandatory 
   
   //else if Preferred Method = Fax, make Fax field mandatory 
   //and all other fields as non-mandatory 
   
   if(prefferedContactMethodCode == 1) { 
      clearAllMandatoryFields(); 
   }  
   if(prefferedContactMethodCode == 2) { 
      clearAllMandatoryFields(); 
      Xrm.Page.getAttribute('emailaddress1').setRequiredLevel('required'); 
   } else if(prefferedContactMethodCode == 3) { 
      clearAllMandatoryFields(); 
      Xrm.Page.getAttribute('mobilephone').setRequiredLevel('required'); 
   } else if(prefferedContactMethodCode == 4) { 
      clearAllMandatoryFields(); 
      Xrm.Page.getAttribute('fax').setRequiredLevel('required'); 
   } 
} 
function clearAllMandatoryFields() { 
   
   //clear all mandatory fields 
   Xrm.Page.getAttribute('emailaddress1').setRequiredLevel('none'); 
   Xrm.Page.getAttribute('mobilephone').setRequiredLevel('none'); 
   Xrm.Page.getAttribute('fax').setRequiredLevel('none'); 
}

步骤 2 − 通过导航到设置 → 自定义 → 自定义系统 → 联系人实体 → 表单 → 主表单来打开联系人实体表单。

步骤 3 − 点击表单属性。

Form Programming Form Properties

步骤 4 − 在表单属性窗口中,点击添加。

Form Programming Add Form Library

步骤 5 − 在下一个查找网页资源记录窗口中,点击新建,因为我们正在创建一个新的网页资源。

Form Programming Add Form Library New

步骤 6 − 在新建网页资源窗口中,输入以下详细信息:

名称 − new_contacts.js

显示名称 − contacts.js

类型 − JScript

上传文件 − 从本地计算机上传您创建的 JavaScript 文件。

Form Programming Web Resource New

步骤 7 − 点击保存,然后点击发布。之后关闭窗口,您将返回到查找网页资源记录窗口。

步骤 8 − 在这里,您现在可以看到 new_contacts.js 网页资源。选择它并点击添加。您现在已成功添加一个新的网页资源并在表单上注册它。

Form Programming Web Resource Add

步骤 9 − 现在,我们将在首选通信方式字段更改时添加一个事件处理程序。此事件处理程序将调用我们刚刚编写的 JavaScript 函数。从事件处理程序部分选择以下选项。

控件 − 首选通信方式

事件 − OnChange

然后,点击添加按钮,如下图所示。

Form Programming Added New Form Library

步骤 10 − 在下一个处理程序属性窗口中,我们将指定更改事件发生时要调用的方法。

选择库为 new_contacts.js,函数为 validatePreferredMethodOfCommunication。点击确定。

Form Programming Add Handler

步骤 11 − 您现在将能够看到表单库(网页资源)和在其上注册的事件。点击确定。

Form Programming Added Library Handler

步骤 12 − 点击保存,然后点击发布。

Form Programming Publish Customizations

步骤 13 − 现在打开任何联系表单,并将首选沟通方式设置为电话。这将使手机号码字段变为必填项。如果您现在尝试在不输入任何手机号码的情况下保存此联系人,则会收到一条错误消息,提示“您必须为手机号码提供值”。

Form Programming Validation

结论

本章首先介绍了 JavaScript 在 CRM 中的三个重要应用。之后,我们探讨了 Xrm.Page 模型,并用它学习了表单编程以及一个示例。

HTML 网页资源

本章我们将学习 Microsoft Dynamics CRM 中的各种 Web 资源。

HTML Web 资源的应用

CRM 中的 HTML Web 资源可以包含任何可在浏览器上呈现的 HTML 内容。考虑以下您可能想要使用 HTML Web 资源的场景:

  • 您有一个静态 HTML 页面,希望在 CRM 屏幕内显示。

  • 您有一个自定义 HTML 页面,它需要一些输入参数,并根据这些输入参数进行呈现。例如,假设您正在从外部 API 或 Web 服务获取信息,并且希望在 CRM 中显示这些信息。

  • 您希望以与标准 CRM UI 不同的外观和风格显示一些信息。

您有一个自定义 ASPX 页面(在 CRM 应用程序外部),它根据输入参数进行呈现。由于 CRM 不允许您拥有 ASPX Web 资源,您可以创建一个 HTML Web 资源,并从此 HTML 页面调用外部 ASPX 页面。

HTML Web 资源示例

我们将创建一个非常简单的 HTML Web 资源,它将显示自定义文本“欢迎访问 TutorialsPoint”。请注意,这是一个非常简单的 HTML Web 资源示例。实际上,HTML Web 资源会比这更复杂。

步骤 1 − 创建一个名为 sampleHTMLWebResource.html 的 HTML 文件,并复制以下代码。

<!DOCTYPE html> 
<htmllang = "en"xmlns = "http://www.w3.org/1999/xhtml"> 
   <head> 
      <metacharset = "utf-8"/> 
      <title>Welcome to Tutorials Point</title> 
   </head> 
   
   <body> 
      <h1>Welcome to Tutorials Point. This is an example of HTML Web Resource.</h1> 
   </body> 
</html> 

步骤 2 − 首先,我们将创建一个新的 Web 资源,然后在联系人表单上引用它。打开 DefaultSolution 并从左侧面板导航到 WebResources 选项卡。点击新建。

HTML Web Resource Step 2

步骤 3 − 它将打开一个新的 Web 资源窗口。输入以下屏幕截图中所示的详细信息,并浏览我们在步骤 1 中创建的 HTML 文件。单击保存并发布。关闭窗口。

HTML Web Resource Step 3

步骤 4 − 您将看到新的 Web 资源添加到 Web 资源网格中。

HTML Web Resource Step 4

步骤 5 − 现在通过“设置”→“自定义”→“自定义系统”→“联系人”→“主窗体”打开联系人表单。选择“联系人信息”部分,然后从顶部功能区切换到“插入”选项卡。单击 Web 资源。

HTML Web Resource Step 5

步骤 6 − 它将打开一个“添加 Web 资源”窗口。单击此窗口中的“Web 资源查找”,这将打开“Web 资源查找记录”窗口。搜索您刚刚创建的 Web 资源 (new_sampleHTMLWebResource),从网格中选择它,然后单击“添加”。

HTML Web Resource Step 6

步骤 7 − 返回“添加 Web 资源”,输入以下屏幕截图中所示的名称和标签,然后单击“确定”。关闭窗口。

HTML Web Resource Step 7

您将在地址字段下方看到已添加的 HTML Web 资源。

HTML Web Resource Step 8

步骤 8 − 要测试它,请打开任何联系人记录,您将看到在那里显示的 HTML Web 资源内容。

HTML Web Resource Step 9

HTML Web 资源的限制

  • 不支持在 HTML Web 资源中使用服务器端代码。

  • HTML Web 资源只能接受有限数量的参数。要在 data 参数中传递多个值,您必须对参数进行编码,并在另一端包含解码逻辑。

工作流流程

CRM 中的工作流允许您自动化 CRM 中的简单和复杂业务流程。您可以使用 CRM 的开箱即用功能创建工作流,也可以使用 .NET 代码编写自定义工作流来实现复杂的工作流。工作流流程在后台或实时运行,可以选择需要用户输入。

工作流可以根据特定条件触发,也可以由用户手动启动。在内部,CRM 工作流是使用 Windows Workflow Foundation 实现的。在本章中,我们将学习配置工作流。

配置工作流包含以下主要部分(按顺序):

  • 配置工作流将在其上运行的实体
  • 配置工作流是同步运行还是异步运行
  • 配置工作流将在其上运行的消息(事件)
  • 配置工作流将在其运行的范围
  • 配置工作流的阶段和步骤(操作)

同步/异步工作流

创建工作流时,您将看到“在后台运行此工作流(推荐)”选项,该选项决定工作流是实时运行(同步)还是在后台运行(异步)。

通常,推荐的方法是在后台运行工作流,因为它们会在可用时使用系统资源。但是,您可以随时将实时工作流切换到后台工作流,反之亦然。

工作流消息

工作流可以注册到以下特定事件:

  • 创建记录时
  • 记录状态更改时
  • 分配记录时
  • 记录字段值更改时
  • 删除记录时

工作流范围

工作流允许您设置工作流将在其运行的范围。以下是支持的工作流范围:

用户 工作流仅在与工作流用户相同的用户拥有的记录上运行。
业务单元 工作流将在与工作流用户相同的业务单元的用户拥有的记录上运行。
父子业务单元 工作流将在与工作流用户相同的业务单元的用户拥有的记录上运行,以及任何子业务单元。
组织 工作流将在 CRM 中任何用户拥有的记录上运行。

工作流步骤

CRM 中的工作流是一系列步骤的组合,工作流将遵循这些步骤。您甚至可以将这些步骤划分为逻辑阶段。CRM 工作流支持以下步骤:

条件步骤
检查条件 指定逻辑“if (condition) - then”语句。
条件分支 指定逻辑“else – if – then”语句。这只能与“检查条件”一起使用。
默认操作 指定逻辑“else”语句。这只能与“检查条件”一起使用。
等待步骤
等待条件 等待满足特定条件。不适用于实时工作流。
并行等待分支 指定一个替代等待条件,以及一组可以在满足初始条件后执行的其他步骤。
操作步骤
创建记录 使用指定的默认值创建指定实体的记录。
更新记录 使用指定或动态值更新所选记录。
分配记录 将所选记录分配给用户或团队。
发送电子邮件 发送电子邮件。
执行操作 指定自定义工作流步骤(和操作)。这些自定义步骤必须由 CRM 开发人员开发。
更改状态 更改所选记录的状态。
停止工作流 停止当前工作流

工作流示例

在此示例中,我们将创建一个简单的后台运行工作流,将任何新创建的联系人记录分配给特定用户,然后向客户发送欢迎电子邮件。

步骤 1 − 转到“设置”→“流程”。

Mscrm Create Workflow Step 1

步骤 2 − 点击“新建”。

步骤 3 − 在“创建流程”窗口中,输入以下详细信息:

流程名称 − 新客户工作流(可以是您想要的任何名称)

类别 − 工作流

实体 − 联系人(这将是您创建工作流的实体。在本例中为联系人)

在后台运行此工作流(推荐) − 选中此选项,因为我们正在创建后台异步工作流。最后,单击“确定”。

Mscrm Create Workflow Step 3

步骤 4 − 在“新建流程”窗口中输入以下详细信息:

激活为 − 流程

范围 − 用户

开始于 − 创建记录时

单击添加步骤 → 分配记录。

Mscrm Create Workflow Step 4

步骤 5 − 您将看到一个新的步骤添加到工作流中。在此步骤中,我们将指定应将所有创建的联系人分配给的用户。将步骤名称输入为将记录分配给团队。分配选项将默认为我们创建工作流的实体(在本例中为联系人)。单击查找图标。

Mscrm Create Workflow Step 5

步骤 6 − 在查找窗口中,选择任何您想要的用户。您甚至可以选择一个特定的团队来分配记录。单击“添加”。

Mscrm Create Workflow Step 6

步骤 7 − 通过单击“添加步骤”→“发送电子邮件”添加另一个步骤。在此步骤中,我们将配置向客户发送电子邮件。

Mscrm Create Workflow Step 7

步骤 8 − 将添加一个新步骤。将其名称输入为“向客户发送电子邮件”。单击“设置属性”。

Mscrm Create workflow Step 8

步骤 9 − 在下一个配置电子邮件的窗口中,执行以下操作:

发件人 − 单击“发件人”字段。在右侧面板上,选择“拥有者用户”和“用户”。单击“添加”→“确定”。

收件人 − 单击“收件人”字段。在右侧面板上,选择“联系人”和“联系人”。单击“添加”→“确定”。

主题 − 输入相关的主题。

正文 − 输入相关的正文内容。

Mscrm Create Workflow Step 9

步骤 10 − 单击“保存”,然后单击“激活”。

Mscrm Create Workflow Step 10

步骤 11 − 在接下来的“流程激活确认”弹出窗口中,单击“激活”。

Mscrm Create Workflow Step 11

步骤 12 − 转到“联系人”选项卡并创建一个新的联系人。保存记录后,您将看到“所有者”字段设置为您在工作流中配置的用户。此外,如果您单击“活动”选项卡,您将看到为此联系人创建的电子邮件活动。这确认工作流已成功运行。

Mscrm Create Workflow Step 12

工作流与插件

工作流和插件都可以用来扩展和自动化 CRM 功能。在许多情况下,这两种方法可以互换使用。例如,如果您有向客户发送电子邮件的简单要求,您可以通过插件或工作流来实现。

那么,如何在创建工作流和插件之间进行选择呢?以下列表尝试解释这一点:

  • 虽然插件和工作流都可以用于运行同步和异步逻辑,但通常情况下,插件更适合同步逻辑,而工作流更适合异步逻辑。

  • 通常,为了实现复杂的业务逻辑,插件比工作流更受青睐。当您想要实现相对简单的功能(例如发送电子邮件、分配用户等)时,更倾向于使用工作流。

  • 插件需要进行代码开发,而工作流可以直接由业务用户配置,无需任何工作流知识。

  • 工作流可以按需运行。因此,如果用户需要手动运行某些逻辑,则工作流将是更好的选择。

  • 从性能影响来看,在请求频率较高的场景中,同步插件比实时工作流提供更好的性能(和吞吐量)。

结论

本章介绍了 CRM 的一个非常重要的功能——工作流。我们首先了解了同步/异步工作流、消息、范围、步骤,最后查看了创建和运行工作流的实际示例。最后,我们看到了工作流和插件之间的区别。

Microsoft Dynamics CRM - 插件

插件是一种自定义业务逻辑,它与 Microsoft Dynamics CRM 集成,以修改或扩展平台的标准行为。插件充当事件处理程序,并注册在 CRM 中的特定事件上执行。插件使用 C# 或 VB 编写,可以在同步或异步模式下运行。

一些您需要编写插件的场景:

  • 当您创建或更新 CRM 记录时,您希望执行某些业务逻辑,例如更新记录的某些字段或更新相关记录等。

  • 您希望在某些事件(例如保存或更新记录)上调用外部 Web 服务。

  • 您希望在打开任何记录时动态计算字段值。

  • 您希望自动化流程,例如在 CRM 中的某些事件上向您的客户发送电子邮件。

事件框架

CRM 中的事件处理框架通过将其传递给事件执行管道来处理同步和异步插件请求。每当事件触发插件逻辑时,就会向 CRM 组织 Web 服务发送一条消息,其他插件或平台的任何核心操作都可以读取或修改该消息。

插件管道阶段

整个插件管道分为多个阶段,您可以在这些阶段上注册您的自定义业务逻辑。指定的管道阶段指示插件执行周期的哪个阶段运行您的插件代码。在以下表格中指定的所有管道阶段中,您只能在预事件和后事件上注册自定义插件。您不能在平台核心主要操作上注册插件。

事件 阶段名称 描述
预事件 预验证 管道中用于在主要系统操作之前执行的插件的阶段。在此阶段注册的插件可以在数据库事务之外执行。
预事件 预操作 管道中用于在主要系统操作之前执行的插件的阶段。在此阶段注册的插件在数据库事务中执行。
平台核心操作 主操作 在事务中,系统的主要操作,例如创建、更新、删除等等。在此阶段无法注册自定义插件。仅供内部使用。
后事件 后操作 管道中用于在主要操作后执行的插件的阶段。在此阶段注册的插件在数据库事务中执行。

每当 CRM 应用程序调用事件(例如保存或更新记录)时,会发生以下一系列操作:

  • 该事件触发 Web 服务调用,并且执行通过事件管道阶段(预事件、平台核心操作、后事件)传递。

  • 信息在内部打包为 OrganizationRequest 消息,最终发送到内部 CRM Web 服务方法和平台核心操作。

  • OrganizationRequest 消息首先由预事件插件接收,这些插件可以在将信息传递给平台核心操作之前修改信息。平台核心操作之后,消息被打包为 OrganizationResponse 并传递给后操作插件。后操作插件可以在将信息传递给异步插件之前选择性地修改此信息。

  • 插件以上下文对象的形式接收此信息,该对象在随后进行进一步处理后传递给 Execute 方法。

  • 所有插件处理完成后,执行将传递回触发事件的应用程序。

插件消息

消息是注册插件(或业务逻辑)的事件。例如,您可以在联系人实体的创建消息上注册插件。每当创建新的联系人记录时,这都会触发业务逻辑。

对于自定义实体,以下基于实体是用户拥有的还是组织拥有的受支持的消息。

消息名称 所有权类型
分配 仅限用户拥有的实体
创建 用户拥有的和组织拥有的实体
删除 用户拥有的和组织拥有的实体
授予访问权限 仅限用户拥有的实体
修改访问权限 仅限用户拥有的实体
检索 用户拥有的和组织拥有的实体
检索多个 用户拥有的和组织拥有的实体
检索主体访问权限 仅限用户拥有的实体
检索共享主体和访问权限 仅限用户拥有的实体
撤销访问权限 仅限用户拥有的实体
设置状态 用户拥有的和组织拥有的实体
设置动态实体状态 用户拥有的和组织拥有的实体
更新 用户拥有的和组织拥有的实体

对于默认的开箱即用实体,有超过 100 条受支持的消息。其中一些消息适用于所有实体,而另一些消息则特定于某些实体。您可以在 SDK 中的 excel 文件中找到受支持消息的完整列表:SDK\Message-entity support for plug-ins.xlsx

编写插件

在本节中,我们将学习编写插件的基础知识。我们将创建一个示例插件,每当向系统添加新客户(即每当在 CRM 中创建新的联系人记录时),它都会创建一个任务活动来跟踪客户。

首先,您需要包含对Microsoft.Xrm.Sdk命名空间的引用。CRM SDK 包含所有必需的 SDK 程序集。假设您已在第 2 章中下载并安装了 SDK,请打开 Visual Studio。创建一个类型为类库的新项目。您可以将项目命名为 SamplePlugins 并单击“确定”。

Mscrm Plugin Create vs Solution

Microsoft.Xrm.Sdk程序集的引用添加到您的项目。该程序集位于SDK/Bin中。

Mscrm Plugin Add Solution Reference

现在,创建一个名为PostCreateContact.cs的类,并从IPlugin类扩展。到目前为止,您的代码将如下所示。

Mscrm Plugin Sample Code

您还需要添加对System.Runtime.Serialization的引用。添加所需的引用后,将以下代码复制到PostCreateContact类中。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Xrm.Sdk;

namespace SamplePlugins {
   public class PostCreateContact:IPlugin {
      /// A plug-in that creates a follow-up task activity when a new account is created.
      /// Register this plug-in on the Create message, account entity,
      /// and asynchronous mode.

      public void Execute(IServiceProviderserviceProvider) {
         // Obtain the execution context from the service provider.
         IPluginExecutionContext context =(IPluginExecutionContext)
            serviceProvider.GetService(typeof(IPluginExecutionContext));

         // The InputParameters collection contains all the data
            passed in the message request.

         if(context.InputParameters.Contains("Target")&&
            context.InputParameters["Target"]isEntity) {
            
            // Obtain the target entity from the input parameters.
            Entity entity = (Entity)context.InputParameters["Target"];
            try {
               
               // Create a task activity to follow up with the account customer in 7 days
               Entity followup = new Entity("task");
               followup["subject"] = "Send e-mail to the new customer.";
               followup["description"] =
                  "Follow up with the customer. Check if there are any new issues
                  that need resolution.";
               
               followup["scheduledstart"] = DateTime.Now;
               followup["scheduledend"] = DateTime.Now.AddDays(2);
               followup["category"] = context.PrimaryEntityName;

               // Refer to the contact in the task activity.
               if(context.OutputParameters.Contains("id")) {
                  Guid regardingobjectid = new Guid(context.OutputParameter
                     s["id"].ToString());
                  string regardingobjectidType = "contact";
                  followup["regardingobjectid"] = 
                     new EntityReference(rega rdingobjectidType,regardingobjectid);
               }
               
               // Obtain the organization service reference.
               IOrganizationServiceFactory serviceFactory =
                  (IOrganizationSer viceFactory)serviceProvider.GetService
                  (typeof(IOrganizationServiceFactory));
               IOrganizationService service = 
                  serviceFactory.CreateOrganizationService(context.UserId);

               // Create the followup activity
               service.Create(followup);
            } catch(Exception ex) {
               throw new InvalidPluginExecutionException(ex.Message);
            }
         }
      }
   }
}

以下是这段代码的逐步解释:

步骤 1 - 通过将IServiceProvider对象作为参数来实现Execute方法。服务提供程序包含您将在插件中使用的许多有用对象的引用。

步骤 2 - 使用IServiceProvider的GetService方法获取IPluginExecutionContext对象。

步骤 3 - 从上下文对象的InputParameters集合中获取目标实体的对象。此Entity类对象指的是我们的插件将注册其上的联系人实体记录。

步骤 4 - 然后,它创建一个任务实体对象,并设置适当的主题、描述、日期、类别和关联对象 ID。regardingobjectid 指示为哪个联系人记录创建此活动记录。您可以看到代码使用context.OutputParameters获取父联系人记录的 ID,并将其与您创建的任务实体记录关联。

步骤 5 - 使用IServiceProvider对象创建IOrganizationServiceFactory对象。

步骤 6 - 使用IOrganizationServiceFactory对象创建IOrganizationService对象。

步骤 7 - 最后,使用此服务对象的Create方法。它创建保存到 CRM 的后续活动。

签名插件程序集

本节仅适用于您首次注册插件程序集的情况。您需要使用密钥登录程序集才能部署插件。右键单击解决方案并单击“属性”。

Mscrm Plugin Solution Properties

从左侧选项中选择“签名”选项卡,然后选中“签名程序集”选项。然后,从“选择强名称密钥文件”选项中选择“新建”。

Mscrm Plugin Sign Assembly

将密钥文件名输入为 sampleplugins(可以是您想要的任何其他名称)。取消选中“使用密码保护我的密钥文件”选项,然后单击“确定”。单击“保存”。

Mscrm Plugin Sign Assembly Add Key

最后,构建解决方案。右键单击→构建。构建解决方案将生成程序集 DLL,我们将在下一章中使用它来注册此插件。

插件中的异常处理

通常情况下,您的插件逻辑需要处理运行时异常。对于同步插件,您可以返回InvalidPluginExecutionException异常,这将向用户显示一个错误对话框。错误对话框将包含您传递给异常对象的Message对象的自定义错误消息。

如果您查看我们的代码,我们会在我们catch块中抛出InvalidPluginExecutionException异常。

throw new InvalidPluginExecutionException(ex.Message); 

结论

插件对于任何自定义 CRM 实现都至关重要。在本章中,我们重点介绍了事件框架模型、管道阶段、消息和编写示例插件。在下一章中,我们将在此 CRM 中注册此插件,并从端到端场景中看到它的工作情况。

插件注册

在上一章中,我们创建了一个示例插件,用于在创建联系人记录时创建后续任务活动。在本章中,我们将了解如何使用插件注册工具在 CRM 中注册此插件。您可以在此位置找到该工具:SDK/Tools/PluginRegistration/PluginRegistration.exe。

为方便起见,插件注册过程分为三个部分:

  • 连接到服务器
  • 注册程序集
  • 注册插件

连接到服务器

步骤 1 - 从前面指定的路径运行PluginRegistration.exe。单击“创建新连接”按钮。

Mscrm Plugin Registration New Connection

步骤 2 - 在登录窗口中,选择 Office 365,因为我们使用的是 CRM 的在线版本。输入您的凭据并单击“登录”。

Mscrm Plugin Registration Login

步骤 3 - 该工具将打开,如下面的屏幕截图所示。

Mscrm Plugin Registration Assembly List

注册程序集

步骤 1 - 转到注册→注册新程序集。

Mscrm Plugin Registration Assembly

步骤 2 - 这将打开“注册新程序集”窗口。单击“导航”图标,找到您在上章中创建的插件 DLL。

Mscrm Plugin Registration Load Assembly

步骤 3 - 导航到 DLL 后,单击“加载程序集”。这将填充 SamplePlugins 程序集及其所有插件类。您可以看到下面突出显示的PostCreateContact插件类。如果您的插件程序集有 3 个插件类,则会显示列出的三个插件。

Mscrm Plugin Registration New Assembly 2

步骤 4 - 选择隔离模式为沙箱,位置为数据库,然后单击“注册选定插件”。如果注册成功,它将向您显示一条成功消息。

注册插件

现在,我们将注册各个插件将调用的特定步骤。

步骤 1 - 选择 PostCreateContact 插件。

Mscrm Plugin Step Select Plugin

步骤 2 - 单击注册→注册新步骤。

Mscrm Plugin Step Register New Step

步骤 3 - 我们将在联系人实体的创建、后操作阶段和同步模式下注册此插件。

消息 - 创建

主要实体 - 联系人

事件执行的管道阶段 - 后操作

执行模式 - 同步

保留其余选项的默认设置,然后单击“注册新步骤”。

Mscrm Plugin Step Register New Step Details

您可以看到插件中添加了一个新步骤。

MScrm Plugin Step Added Step

现在,我们将转到 CRM 并测试我们的插件是否正常工作。请注意,这些测试步骤特定于我们的示例插件。

插件测试

进入“联系人”选项卡并创建一个新记录。保存记录后,您可以看到一个新的活动被创建并与该记录关联。

Mscrm Plugin Create Contact

您可以点击该活动查看我们在代码中设置的详细信息。

Mscrm Plugin Created Activity

这确认我们的插件已成功运行。同样,您可以扩展您的插件以实现高度复杂的功能。

Microsoft Dynamics CRM - Web 服务

Microsoft Dynamics CRM 提供两种重要的 Web 服务,用于从外部应用程序访问 CRM 并调用 Web 方法以执行常见的业务数据操作,例如在 CRM 中创建、删除、更新和查找。

考虑以下场景:

  • 您有一个外部 .NET 应用程序,需要与 CRM 通信。例如,当您的外部应用程序中注册新客户时,您可能希望在 CRM 中插入一个联系人记录。

  • 或者,您可能希望在 CRM 中搜索记录并在您的外部应用程序中显示搜索结果。

在这种情况下,您可以使用 CRM 公开的 Web 服务在您的应用程序中使用它们,并在 CRM 中执行创建、删除、更新和查找操作。

IDiscoveryService Web 服务

此 Web 服务返回指定用户所属的组织列表以及每个组织的 URL 端点。

IOrganizationService Web 服务

此 Web 服务是用于访问 CRM 中的数据和元数据的主要 Web 服务。IOrganizationService 使用两个重要的程序集 – **Microsoft.Xrm.Sdk.dll** 和 **Microsoft.Crm.Sdk.Proxy.dll**。这些程序集可以在 CRM SDK 包的 **Bin** 文件夹中找到。

Microsoft.Xrm.Sdk.dll

此程序集定义了核心 xRM 方法和类型,包括用于简化与 Microsoft Dynamics CRM 连接的代理类、身份验证方法和服务契约。

Microsoft.Crm.Sdk.Proxy.dll

此程序集定义了非核心消息的请求和响应,以及与组织数据一起使用所需的枚举。以下是这两个程序集支持的命名空间。

每个程序集都支持某些消息,这些消息将用于处理存储在任何实体中的数据。它们支持的消息的完整列表可以在以下链接中找到:

**支持的 xRM 消息** - https://msdn.microsoft.com/en-us/library/gg334698.aspx

**支持的 CRM 消息** - https://msdn.microsoft.com/en-us/library/gg309482.aspx

IOrganizationService Web 服务方法

**IOrganizationService** 提供八种方法,允许您对系统和自定义实体以及组织元数据执行所有常见操作。

序号 方法和描述
1

IOrganizationService.Create

创建记录。

2

IOrganizationService.Update

更新现有记录。

3

IOrganizationService.Retrieve

检索记录。

4

IOrganizationService.RetrieveMultiple

检索记录集合。

5

IOrganizationService.Delete

删除记录。

6

IOrganizationService.Associate

创建记录之间的链接。

7

IOrganizationService.Disassociate

删除记录之间的链接。

8

IOrganizationService.Execute

用于常见的记录处理以及专门的处理,例如案例解决、重复检测等。

Web 服务示例

为了了解 Web 服务在 CRM 中的工作方式,我们将查看 CRM SDK 提供的一个示例。在这个示例中,我们将使用 CRM **IOrganizationService** Web 服务创建一个新的客户帐户记录,更新它,然后最终删除它。

**步骤 1** - 打开您解压缩 CRM SDK 的文件夹。现在通过浏览到以下位置打开 QuickStartCS.sln 解决方案:SDK\SampleCode\CS\QuickStart

Mscrm Web Service Example Step 1

**步骤 2** - 我们将探索具有“简化连接”项目的 **QuickStart**。打开此项目中的 **app.config**。默认情况下,此文件中的 **connectionStrings** 部分将被注释。

Mscrm Web Service Example Step 2

从中取消注释第一个连接字符串键并编辑以下三个详细信息:

**Url** - 指定您的 CRM 实例的 URL。在我们的案例中,由于我们使用的是 CRM 的在线版本,您必须提及该 URL。

**Username** - 您的 CRM Online 用户名。

**Password** - 您的 CRM Online 密码。

Mscrm Web Service Example Step 2 2

**步骤 3** - 打开此项目中的 **SimplifiedConnection.cs** 文件及其中的 Run 方法。

public void Run(StringconnectionString, boolpromptforDelete) {
   try {
      
      // Establish a connection to the organization web service using CrmConnection.
      Microsoft.Xrm.Client.CrmConnection connection =
         CrmConnection.Parse(connectionString);
      
      // Obtain an organization service proxy.
      // The using statement assures that the service proxy will be properly disposed.
      using(_orgService = new OrganizationService(connection)) {

         //Create any entity records this sample requires.
         CreateRequiredRecords();
         
         // Obtain information about the logged on user from the web service.
         Guid userid = ((WhoAmIResponse)_orgService.Execute(new WhoAmIRequest())).UserId;
         SystemUser systemUser = (SystemUser)_orgService.Retrieve("systemuser",userid,
            new ColumnSet(newstring[]{"firstname","lastname"}));
         
         Console.WriteLine("Logged on user is {0} {1}.",
            systemUser.FirstName,systemUser.LastName);

         // Retrieve the version of Microsoft Dynamics CRM.
         RetrieveVersionRequest versionRequest = new RetrieveVersionRequest();
         RetrieveVersionResponse versionResponse =
            (RetrieveVersionResponse)_orgService.Execute(versionRequest);
         Console.WriteLine("Microsoft Dynamics CRM version {0}.",
            versionResponse.Version);
         
         // Instantiate an account object. Note the use of option set
         enumerations defined in OptionSets.cs.
         
         // Refer to the Entity Metadata topic in the SDK documentation to
         determine which attributes must
         
         // be set for each entity.
         Account account = new Account{Name = "Fourth Coffee"};
         account.AccountCategoryCode = new OptionSetValue(
            (int)AccountAccountCateg oryCode.PreferredCustomer);
         account.CustomerTypeCode = new OptionSetValue(
            (int)AccountCustomerTypeCod e.Investor);
         
         // Create an account record named Fourth Coffee.
         _accountId = _orgService.Create(account);
         Console.Write("{0} {1} created, ",account.LogicalName,account.Name);
         
         // Retrieve the several attributes from the new account.
         ColumnSet cols = new ColumnSet(
            new String[]{"name","address1_postalcode","lastusedincampaign"});
         Account retrievedAccount =
            (Account)_orgService.Retrieve("account", _accountId, cols);
         Console.Write("retrieved, ");

         // Update the postal code attribute.
         retrievedAccount.Address1_PostalCode = "98052";

         // The address 2 postal code was set accidentally, so set it to null.
         retrievedAccount.Address2_PostalCode = null;

         // Shows use of a Money value.
         retrievedAccount.Revenue = new Money(5000000);

         // Shows use of a Boolean value.
         retrievedAccount.CreditOnHold = false;
         
         // Update the account record.
         _orgService.Update(retrievedAccount);
         Console.WriteLine("and updated.");
         
         // Delete any entity records this sample created.
         DeleteRequiredRecords(promptforDelete);
      } 
   } 
   // Catch any service fault exceptions that Microsoft Dynamics CRM throws.
   catch(FaultException<microsoft.xrm.sdk.organizationservicefault>) {

      // You can handle an exception here or pass it back to the calling method.
      throw;
   }
}

**步骤 4** - 此方法基本上演示了使用 CRM Web 服务的所有 CRUD 操作。代码首先创建一个组织实例,然后创建一个客户帐户记录,更新创建的记录,然后最终删除它。让我们看看这段代码的重要组成部分。要在此代码运行时查看 CRM 中的即时更改,您可以逐步调试此代码(如下所述),并同时查看 CRM 中的更改。

**步骤 4.1** - 使用我们在 **步骤 2** 中修改的连接字符串建立与组织的连接。

Microsoft.Xrm.Client.CrmConnection connection = CrmConnection.Parse(connectionString);

**步骤 4.2** - 获取 CRM 组织 Web 服务的代理实例。

_orgService = new OrganizationService(connection) 

**步骤 4.3** - 创建一个新的客户帐户实体对象并设置其名称、客户帐户类别代码和客户类型代码。

Account account = new Account{Name = "Fifth Coffee"}; 
account.AccountCategoryCode = new OptionSetValue(
   (int)AccountAccountCategoryCode.P referredCustomer); 
account.CustomerTypeCode = new OptionSetValue(
   (int)AccountCustomerTypeCode.Investor); 

**步骤 4.4** - 使用组织服务的 Create 方法创建新记录。

_accountId = _orgService.Create(account); 

如果您导航到 CRM,您将看到一个新创建的客户帐户记录。

Mscrm Web Service Example Step 4_4

**步骤 4.5** - 创建客户帐户后,服务将使用 Retrieve Web 服务方法从 CRM 检索记录。

ColumnSet cols = new ColumnSet(new String[]{
   "name","address1_postalcode","lastusedincampaign"}); 
Account retrievedAccount = 
   (Account)_orgService.Retrieve("account", _accountId, cols); 

**步骤 4.6** - 检索到记录后,您可以设置记录的更新值。

retrievedAccount.Address1_PostalCode = "98052"; 
retrievedAccount.Address2_PostalCode = null; 
retrievedAccount.Revenue = new Money(5000000); 
retrievedAccount.CreditOnHold = false; 

**步骤 4.7** - 设置记录的更新值后,使用 Update Web 服务方法将记录更新回 CRM 数据库。

_orgService.Update(retrievedAccount); 

如果您在 CRM 中打开该记录,您将看到这些值已在那里更新。

Mscrm Web Service Example Step 4_7

**步骤 4.8** - 最后,使用 Delete Web 服务方法删除记录。

_orgService.Delete(Account.EntityLogicalName, _accountId); 

如果您现在刷新 CRM 中的同一记录,您将看到该记录不再可用,因为它已被删除。

Mscrm Web Service Example Step 4_8

结论

在本章中,我们处理了 CRM 提供的两个重要的 Web 服务,以及如何从外部应用程序使用这些 Web 服务执行各种 CRUD 操作的工作示例。

Microsoft Dynamics CRM - 解决方案

解决方案提供了一个框架,用于打包、安装和卸载组件以匹配您的业务功能。解决方案允许自定义者和开发人员创作、打包和维护扩展 CRM 的软件单元。在 CRM 中执行的任何自定义、扩展或配置都使用解决方案进行打包、管理和分发。解决方案可以从源组织导出为 zip 文件,然后可以导入到目标组织。

为了理解这一点,请考虑以下示例场景:

  • 作为开发人员或自定义者,您已在开发环境中扩展或自定义了 CRM。现在您想打包您的更改并将其移动到下一个环境。为此,您可以创建单个解决方案并在更高环境中发布它们。

  • 作为第三方 CRM 提供商,您创建了一个 CRM 模块,该模块允许使用外部 Web 服务 API 管理 Microsoft Dynamics CRM 实体中的数据。现在,您想将此模块出售给其他客户。使用解决方案,您可以打包此模块并将其分发给其他客户,他们将能够安装此解决方案并使用您的模块提供的功能。

解决方案类型

默认系统解决方案

系统解决方案包含在 Microsoft Dynamics CRM 中定义的开箱即用的解决方案组件,没有任何自定义。系统解决方案中的许多组件都是可自定义的,并且可以在托管解决方案或非托管自定义中使用。

在本教程中,我们没有创建任何解决方案,而是自定义了默认系统解决方案。如果您还记得,我们转到“设置”→“自定义”→“自定义系统”。此选项直接自定义默认解决方案。

托管解决方案

托管解决方案是已完成并打算分发和安装的解决方案。托管解决方案可以安装在系统解决方案或其他托管解决方案之上。

**重要事项:**

  • 如果您从一个组织导出托管解决方案并将其导入另一个组织,则您无法在新的组织中编辑该解决方案。

  • 托管解决方案不会直接引用系统解决方案。

  • 卸载托管解决方案会卸载与该解决方案关联的所有自定义。

  • 默认情况下,托管解决方案无法在目标组织中自定义。但是,使用托管属性的概念,您可以定义解决方案组件是否可自定义,如果是,则一旦解决方案导出为托管解决方案,组件的哪些特定部分可自定义。

非托管解决方案

非托管解决方案是仍在开发中且不打算分发的解决方案。非托管解决方案包含 CRM 组件的所有非托管自定义,包括任何已添加、修改、删除或删除的组件。默认情况下,任何新解决方案都是非托管解决方案。但是,您可以将非托管解决方案导出为托管或非托管解决方案。

**重要事项:**

  • 如果您从一个组织导出非托管解决方案并将其导入另一个组织,则您可以在新的组织中编辑该解决方案。

  • 非托管解决方案直接引用系统解决方案。因此,对一个非托管解决方案所做的更改将应用于引用相同组件的所有非托管解决方案,包括系统解决方案。

  • 如果您从非托管解决方案中删除解决方案组件,则该组件将从系统中永久删除,并且将不再可用。如果您只想从特定的非托管解决方案中删除组件,请使用“删除”而不是“删除”。

  • 卸载非托管解决方案不会删除关联的自定义。它只是从系统中删除解决方案,但您所做的更改仍然存在。

解决方案组件

解决方案可用于打包以下组件,这些组件可以使用默认、非托管或托管解决方案进行自定义。

组件类型 组件
架构 实体
Attributes
关系
全局选项集
用户界面 应用程序功能区
站点地图
窗体
实体功能区
网页资源
分析 仪表板
报表
可视化
流程/代码 流程
对话框
工作流
插件
程序集
处理步骤
模板 邮件合并
电子邮件
合同
文章
安全性 安全角色
字段级安全配置文件

创建解决方案

**步骤 1** - 导航到“设置”→“解决方案”。单击“新建”。

Mscrm Create Solution Step 1

**步骤 2** - 在随后出现的窗口中,输入以下详细信息并单击“保存并关闭”。

**显示名称** - 示例解决方案(可以是您想要的任何名称)。

**名称** - 将根据显示名称自动设置。但是,您可以更改此名称。

**发布者** - 默认发布者。解决方案发布者提供一个通用的自定义前缀和选项值前缀。定义解决方案发布者可以控制分发后如何更新您的托管解决方案。但是,对于此示例和大多数一般情况,您可以将其设置为默认发布者。

**版本** - 使用以下格式指定版本:主版本.次版本.内部版本.修订号。例如:1.0.0.0。

Mscrm Create Solution Step 2

默认情况下,每个解决方案都作为非托管解决方案添加。添加解决方案后,您可以通过在此解决方案的上下文中创建它们或从其他解决方案添加现有组件来添加解决方案组件。例如,您可以在此新解决方案的上下文中创建新的实体、窗体等。

导出解决方案

一旦您拥有所有要打包为托管或非托管解决方案的更改,您可以按如下方式导出您的解决方案。

**步骤 1** - 打开源组织并导航到“设置”→“解决方案”。选择要导出的解决方案,然后单击“导出”按钮。

Mscrm Export Solution Step 1

步骤 2 − 在“发布自定义”窗口中,单击“发布所有自定义”,然后单击“下一步”。

Mscrm Export Solution Step 2

步骤 3 − 在接下来的窗口中,您可以选择性地选择任何系统设置(例如自动编号、日历设置等)与解决方案一起导出。目前,您可以不选择任何选项,然后单击“下一步”。

Mscrm Export Solution Step 3

步骤 4 − 在“程序包类型”窗口中,您可以选择是要将程序包导出为托管解决方案还是非托管解决方案。在本例中,我们将它导出为非托管解决方案。完成后,单击“下一步”。

Mscrm Export Solution Step 4

步骤 5 − 在下一个窗口中,您可以看到您正在使用的 CRM 源版本,并可以选择目标版本。单击“导出”。

Mscrm Export Solution Step 5

步骤 6 − 单击“导出”后,解决方案将导出为 zip 文件。将此 zip 文件保存到系统上的所需位置。

Mscrm Export Solution Step 6

导入解决方案

现在,我们将把上一节中导出的解决方案 zip 文件导入新的目标组织。

步骤 1 − 打开目标组织并导航到“设置”→“解决方案”。单击“导入”。

Mscrm import Solution Step 1

步骤 2 − 浏览您从导出步骤下载的 zip 文件,然后单击下一步

Mscrm import Solution Step 2

步骤 3 − 在下一个窗口中,您可以根据需要查看解决方案包详细信息。单击“导入”将启动解决方案导入过程。

Mscrm import Solution Step 3

步骤 4 − 导入过程完成后,将显示成功或失败状态。如果过程成功,请单击“发布所有自定义”。如果解决方案导入失败,它将提供导入过程失败步骤的详细错误日志。

Mscrm import Solution Step 4

步骤 5 − 完成。解决方案将成功导入到目标组织。单击“关闭”。

冲突解决

由于您可以有多个开发人员参与 CRM 的自定义和扩展工作,因此您将拥有多个托管和非托管解决方案。导出和导入这些解决方案有时会导致冲突情况。例如,假设“解决方案 A”包含表单上的字段,而“解决方案 B”已删除该字段,“解决方案 C”已重命名该字段。在这种情况下,最终更改是什么?在这种冲突情况下,CRM 使用两种方法。

合并 − 此方法用于用户界面组件,例如命令栏、功能区和站点地图。根据此方法,解决方案组件从底部重新计算,组织的非托管自定义是最后应用的。

最后修改优先 − 此方法用于除用户界面组件之外的所有其他冲突情况。根据此方法,最后一次更改(托管或非托管)将具有优先级并被应用。

结论

在本章中,我们介绍了解决方案的概念以及不同类型的解决方案及其组件。然后,我们学习了如何创建、导出和导入解决方案。最后,我们研究了两种冲突解决策略,当我们有多个托管和非托管解决方案影响相同的解决方案组件时,这些策略就会发生。

广告
© . All rights reserved.