Dynamics 365 CRM 开发架构简介
Dynamics 365 CRM提供了多种编程模型,你可以灵活地按需选用最佳模式。
本文是对Dynamics 365 CRM编程模型的综述。
概览
下图表明了Dynamics 365 CRM的主要可编程场景。请根据整体解决方案选择合适的模型。

从扩展的角度来看,你可以在Dynamics 365中实现以下附加功能:
- 应用于PC或移动设备的控制台应用程序或者WPF(Windows Presentation Foundation),即图中上方.Net下的绿框。
- 处理Dynamics的Web表单的扩展,即图中右侧web application部分。
- 处理Dynamics服务端的扩展,即图中左侧.NET plug-ins和workflows下方的绿色方框。
其中1和2属于客户端扩展,3属于服务端扩展。
名词解释
上图中部分名词的基本概念。
Web resources:存储在Dynamics 365 CRM数据库中的虚拟文件,比如图片,网页,XML等,可以通过URL访问。
Forms scripts:Dynamics 365 CRM中的一种常见的Javascript应用方式,使用场景包括通过自定义代码对表单输入内容校验、或进行其它自动化处理等。(参考:Form Scripts)
Ribbon commands:Ribbon的的定义见微软文档。
Workflow:通过Workflow可以创建和管理自动化的业务过程,它也提供了定制和扩展标准流程的机制。
Plug-ins:一种事件处理程序,通过它可以修改或扩充标准的业务流程。
Organization service:客户端连接服务端的一种方式,适用于.Net客户端。
Web API:客户端连接服务端的一种方式,拥有良好的平台兼容性,适用于各种客户端。
Service Contracts:Dynamics中的一种单据类型,和本文主题无关。
本文链接:https://www.cnblogs.com/hhelibeb/p/10718080.html
转载请注明
连接到Dynamics 365 CRM
客户端要访问Dynamics 365 CRM中的数据,有2种方案可以选择:使用Web API或者organization service。
Web API
Web API在2016年11月的系统更新中被引入,它提供了跨编程语言、跨平台和跨设备的开发体验。Web API实现了OData (Open Data Protocol) v4。OData是一个用于构建和消费RESTfulAPIs的OASIS标准。
使用Web API时,可以选择由社区支持的支持OData V4标准的库。你也可以选择写代码直接使用HTTP。
相关内容:使用Dynamics 365 CRM Web API。
连接Dynamics 365 CRM时,可以使用Azure AD Authentication Libraries (ADAL)以启用支持多语言/多平台的认证。
相关内容:通过Web API进行身份认证。
Organization service
如果你是位.Net开发者,那么你既可以使用Web API,也可以使用organization service。通过organization service可以使用组件和工具生成强类型类,包含已经被添加到Dynamics 365 CRM实例中的自定义实体和属性。
通过SDK组件和工具, 你可以使用OrganizationServiceContext,通过这个类可以跟踪变更、管理身份和关系。它也提供了访问Dynamics 365 CRM中的LINQ的入口。当你使用代码生成工具的时候,会得到当前已定义的实体和属性的强类型类,它们被称为早绑定类(early-bound classes)。
更多信息:在代码中使用早绑定实体类
当代码需要处理生成代码时尚不知道的实体和属性时,你可以在代码中使用允许指定实体和属性的实体类。这种晚绑定(late-bound)的代码风格提供了更大的灵活性,但是不允许完整的编译期类型检查,因此不会出现隐式转换。在晚绑定下,只有在对象创建或者对类型执行操作的时候才会检查类型。需要显式指定实体类的类型,以避免隐式转换。
相关内容:在代码中使用晚绑定
如果要创建Windows客户端或者使用Windows PoweShell,可以使用Xrm.Tolling。它提供了一套API,通过使用SDK组件来提供额外的功能和资源,用于Windows客户端的开发。
选择 - Web API vs. Organization service

注:organization service目前使用的是过时的2011 SOAP Endpoint,未来它的内部实现会迁移到Web API。
扩展服务端
可以编写监听事件的代码,并应用自定义业务逻辑来修改或扩充平台的标准行为。 这种代码仅可使用.NET托管代码编写,开发人员的体验基于SDK组件中定义的相同对象。你可以使用organization service操作Dynamics 365 CRM中的数据。
相关信息: 写插件来扩展业务处理
可以基于Windows Workflow Foundation编程模型创建自定义流程。可以创建多种不同的处理,多数时候通过使用workflow设计器来实现功能。但是设计器有一些做不到的事情,此时可以通过代码来定义。
相关信息:写Workflow来自动化业务处理
扩展应用端
Dynamics 365 CRM提供的每个客户端应用都具备定制和部署到不同类型客户端的能力。Web应用、Dynamics 365 for Outlook、Dynamics 365 for 平板、and Dynamics 365 for 电话——都提供了自定义导航和命令的能力,也提供了Xrm对象模型和Xrm.Utility功能,可以通过使用Javascript为客户端提供响应式体验。
在客户端中,可以通过URL访问Web resource,比如Javascript库、HTML页面、图像,或其它文件。
相关内容:在CRM app中使用Javascript,Dynamics 365 CRM中的Web Resource
当你需要访问在Javascript上下文中不可用的Dynamics 365 CRM数据时,可以调用服务器获取数据。可以使用organization service,但使用JSON格式的Web API会比基于XML的organization service更简单,因为JS运行在应用上下文中,会自动获得身份认证。
相关内容:Dynamics 365 CRM Web API入门 (客户端JavaScript)
参考:Programming models for Dynamics 365 for Customer Engagement apps
Microsoft Dynamics 365: Custom Extensions and Data Import
Dynamics 365 CRM 开发架构简介的更多相关文章
- Dynamics 365 CRM large instance copy
使用CRM 大家想必都做过copy. 从一个instance 复制到另外一个instance. 如果你是Dynamics 365 CRM 用户, 并且你的instance超过500GB,甚至1TB+的 ...
- Dynamics 365 CRM Free up storage 清理Dynamics 365 CRM的空间
Dynamics 365 CRM 的空间是要买的. 但是很多情况下用户可以去清理CRM从而达到给空间减重的方法 两大使用DB空间大的功能 1. Audit log 审计记录 审计记录是用来记录各个fi ...
- Dynamics 365 CRM 部署 Connected Field Service
微软 Connected Field Service 是一个提供Azure IoT 和 Dynamics 365 连接的这样一个框架 有两种方式部署CFS, 一种是用IoT Hub PaaS, 一种是 ...
- 创建一个dynamics 365 CRM online plugin (九) - Context.Depth
让我们来看看官方文档是怎么讲的 https://docs.microsoft.com/en-us/previous-versions/dynamicscrm-2016/developers-guide ...
- Dynamics 365中开发和注册插件介绍
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- ASP.NET Core 企业级开发架构简介及框架汇总
企业开发框架包括垂直方向架构和水平方向架构.垂直方向架构是指一个应用程序的由下到上叠加多层的架构,同时这样的程序又叫整体式程序.水平方向架构是指将大应用分成若干小的应用实现系统功能的架构,同时这样的系 ...
- ASP.NET Core 企业级开发架构简介及框架汇总 (转载)
ASP.NET Core 企业开发架构概述 企业开发框架包括垂直方向架构和水平方向架构.垂直方向架构是指一个应用程序的由下到上叠加多层的架构,同时这样的程序又叫整体式程序.水平方向架构是指将大应用分成 ...
- Dynamics 365 CRM On premise Unable to Load plug-in assembly
背景介绍: 本地部署Microsoft Dynamics CRM 9.0正常可用,后打补丁到9.0.16.7,打开系统quote报 “ Unable to Load plug-in assembly” ...
- Dynamics 365 CRM Connected Field Service 自动发送command
上期降到了怎样部署connected field service(CFS) 我们假设现在IoT 设备是温度监控器, 当温度触发我们之前预设的温度值, IoT会通过IoT Hub 发送IoT Alert ...
随机推荐
- Spring中bean实例化的三种方式
之前我已经有好几篇博客介绍Spring框架了,不过当时我们都是使用注解来完成注入的,具体小伙伴可以参考这几篇博客(Spring&SpringMVC框架案例).那么今天我想来说说如何通过xml配 ...
- Django项目开发
1.django中Form验证.CSRF.Cookie.Session.Model操作数据库 2.django介绍&快速实现简单留言系统 3.django开发在线教育网站
- Java基础11:Java泛型详解
本文对java的泛型的概念和使用做了详尽的介绍. 本文参考https://blog.csdn.net/s10461/article/details/53941091 具体代码在我的GitHub中可以找 ...
- Unity实现c#热更新方案探究(二)
转载请标明出处:http://www.cnblogs.com/zblade/ 一.IOS对DLL热更新的禁止 紧接上文,继续对C#热更新的研究.上文中,已经说了如何基于appDomain来实现对DLL ...
- 【WCF系列】(四)WCF客户端怎么消费服务
WCF客户端怎么消费服务 获取服务绑定协议.绑定和地址:实现方式 SvcUtil方式:SvcUtil.exe是一个命令行工具,位于:C:\Program Files (x86)\Microsoft S ...
- linux下sh脚本/bin/bash^M问题解决
如果是在windows下编辑的脚本,到了linux下运行时会报出这样的错误/bin/bash^M:bad interpreter: No such file or directory这时因为编码的问题 ...
- ES6躬行记(13)——类型化数组
类型化数组(Typed Array)是一种处理二进制数据的特殊数组,它可像C语言那样直接操纵字节,不过得先用ArrayBuffer对象创建数组缓冲区(Array Buffer),再映射到指定格式的视图 ...
- Data Source与数据库连接池简介 JDBC简介(八)
DataSource是作为DriverManager的替代品而推出的,DataSource 对象是获取连接的首选方法. 起源 为何放弃DriverManager DriverManager负责管理驱动 ...
- ZooKeeper的三种典型应用场景
引言 ZooKeeper是中典型的pub/sub模式的分布式数据管理与协调框架,开发人员可以使用它进行分布式数据的发布与订阅.另外,其丰富的数据节点类型可以交叉使用,配合Watcher事件通知机制,可 ...
- 使用LR编写HTTP协议Json报文格式接口脚本实战
最近在做HTTP协议接口压测时,遇到一些编写脚本方面的问题,在这里总结记录下,以便以后温习,也希望能帮助到和我有同样困惑的朋友吧. //实战代码如下所示:Action() { lr_start_tra ...