<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Huimiao's Blog</title><link>http://blogs.msdn.com/liuhuimiao/default.aspx</link><description>纸上得来终觉浅，绝知此事要躬行。</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>第一个CRM 4.0程序</title><link>http://blogs.msdn.com/liuhuimiao/archive/2009/06/05/crm-4-0.aspx</link><pubDate>Fri, 05 Jun 2009 16:31:15 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9701308</guid><dc:creator>liuhuimiao</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/liuhuimiao/comments/9701308.aspx</comments><wfw:commentRss>http://blogs.msdn.com/liuhuimiao/commentrss.aspx?PostID=9701308</wfw:commentRss><description>&lt;p&gt;CRM 4.0 开发同 SharePoint Server 开发一样提供 Web Services 和 DLL 两种方式的开发接口。&lt;/p&gt;  &lt;p&gt;对于 Web Services 接口，又有两种不同的引用方式：一种是在项目中直接添加 Web 引用，把 CRM 4.0 的 Web Services（如&lt;a title="http://localhost:5555/mscrmservices/2007/CrmService.asmx" href="http://localhost:5555/mscrmservices/2007/CrmService.asmx"&gt;http://localhost:5555/mscrmservices/2007/CrmService.asmx&lt;/a&gt;）直接 Web 引用到项目中生成代理类；另一种方式，是先在 CRM 4.0 的 Settings –&amp;gt; Customization 中选择 Download Web Service Description Files，下载其中的WSDL文件，然后再在项目 Web 引用中直接直接保存在本地的WSDL文件亦可。这两种方式归根到底都是在客户端建立服务器端 Web Services 的代理类，只是做法上不同而已。对于使用 Web Services 接口开发的项目，最佳做法是在代码中通过配置或硬编码再次指定 Web Services 的 URL 地址。&lt;/p&gt;  &lt;p&gt;对于 DLL 方式，在安装好 &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=82E632A7-FAF9-41E0-8EC1-A2662AAE9DFB&amp;amp;displaylang=en" target="_blank"&gt;CRM 4.0 SDK&lt;/a&gt; 后，就直接在项目中引用 Microsoft CRM 4.0 SDK\bin 下的 microsoft.crm.sdk.dll、microsoft.crm.sdktypeproxy.dll 和 microsoft.crm.outlook.sdk.dll 三个文件即可进行开发。&lt;/p&gt;  &lt;p&gt;下面第一个 CRM 4.0 程序就是直接用 Web Services 方式的一个范例。&lt;/p&gt;  &lt;p&gt;1、新建一个Console Application，按默认命名为ConsoleApplication1。&lt;/p&gt;  &lt;p&gt;2、在该项目中添加Web引用，Web服务地址类似为：&lt;a title="http://localhost:5555/mscrmservices/2007/CrmService.asmx" href="http://localhost:5555/mscrmservices/2007/CrmService.asmx"&gt;http://localhost:5555/mscrmservices/2007/CrmService.asmx&lt;/a&gt;。其中将 localhost:5555 替换成实际 CRM 服务所在的服务器地址和端口号。把该Web引用命名为 CrmSdk。&lt;/p&gt;  &lt;p&gt;3、编辑 Program.cs 文件，其代码如下：&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="671"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="669"&gt;         &lt;p&gt;using System;            &lt;br /&gt;using System.Collections.Generic;             &lt;br /&gt;using System.Text; &lt;/p&gt;          &lt;p&gt;namespace ConsoleApplication1            &lt;br /&gt;{             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; class Program             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; static void Main(string[] args)             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // 名称是 A. Datum Corporation 的 Account 的 ID             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Guid accountId = new Guid(&amp;quot;D04D44AD-36D0-DC11-AA32-0003FF33509E&amp;quot;);             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // 根据 ID 输出该 Account 的信息             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; RetrieveAccount(accountId); &lt;/p&gt;          &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.ReadLine();            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public static void RetrieveAccount(Guid accountId)             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // 根据 Organization Name 和 Server 创建 CrmService 实例。             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // 此处 OrgName 是 MicrosoftCRM，服务器 Server 名称是 MOSS。             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CrmSdk.CrmService service = GetCrmService(&amp;quot;MicrosoftCRM&amp;quot;, &amp;quot;MOSS&amp;quot;);             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // 要显示的 Account 的 Attribute 字段。             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CrmSdk.ColumnSet cols = new CrmSdk.ColumnSet();             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cols.Attributes = new string[] { &amp;quot;name&amp;quot;, &amp;quot;telephone1&amp;quot;, &amp;quot;address1_city&amp;quot;, &amp;quot;address1_country&amp;quot; };             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; try             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // 获取该 Account 的实例             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CrmSdk.account oAccount =             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (CrmSdk.account)service.Retrieve(CrmSdk.EntityName.account.ToString(), accountId, cols);             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // 输出显示 Account 的一些属性             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;Account Name: {0}&amp;quot;, oAccount.name);             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;Main Phone: {0}&amp;quot;, oAccount.telephone1);             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;City - Country: {0} - {1}&amp;quot;, oAccount.address1_city, oAccount.address1_country);             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; catch(System.Web.Services.Protocols.SoapException ex)             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(ex.Detail.InnerText);             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;          &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public static CrmSdk.CrmService GetCrmService(string orgName, string server)            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // 创建 CrmAuthenticationToken 实例             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CrmSdk.CrmAuthenticationToken token = new CrmSdk.CrmAuthenticationToken();             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; token.AuthenticationType = 0; //AD (On-premise)             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; token.OrganizationName = orgName; &lt;/p&gt;          &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CrmSdk.CrmService service = new CrmSdk.CrmService();            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //service.Credentials = System.Net.CredentialCache.DefaultCredentials; &lt;/p&gt;          &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // If you know you are using the default credentials,            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // you can replace the service.Crendentials line with the following line             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; service.UseDefaultCredentials = true;             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; service.CrmAuthenticationTokenValue = token;             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; service.Url = string.Format(&amp;quot;&lt;a href="http://{0}:5555/mscrmservices/2007/crmservice.asmx&amp;quot;"&gt;http://{0}:5555/mscrmservices/2007/crmservice.asmx&amp;quot;&lt;/a&gt;, server); &lt;/p&gt;          &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return service;            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }             &lt;br /&gt;}&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;4、运行即可输出该 Account 的一些基本信息。&lt;/p&gt;  &lt;p&gt;根据上述编程，可以稍微发散思考下：CRM 中的 Entity 是不是很类似数据库的表，有字段，有关系。只是 CRM 通过 Web 界面直接定义结构和关系，而数据库则通过专门数据库管理工具。上述编程中从创建 CrmService 实例到获取 Entity 实例，再到最后显示其信息，是一种固定编程模式，是不是类似数据库创建连接到相应表操作。再发散下，都知道数据库表模型很重要，因此在 CRM 开发时，是不是对 Entity 的定义及其字段属性的制定都需要详细考虑。&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9701308" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/liuhuimiao/archive/tags/XRM/default.aspx">XRM</category><category domain="http://blogs.msdn.com/liuhuimiao/archive/tags/CRM/default.aspx">CRM</category></item><item><title>Office Live Add-in</title><link>http://blogs.msdn.com/liuhuimiao/archive/2009/06/05/office-live-add-in.aspx</link><pubDate>Fri, 05 Jun 2009 05:23:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9700638</guid><dc:creator>liuhuimiao</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/liuhuimiao/comments/9700638.aspx</comments><wfw:commentRss>http://blogs.msdn.com/liuhuimiao/commentrss.aspx?PostID=9700638</wfw:commentRss><description>&lt;p&gt;通过 &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=91fe0002-eb00-434b-8726-27911326d2b2" target="_blank"&gt;Office Live Add-in&lt;/a&gt;，能够将 Office 客户端与 Office Live 整合起来，利用 MS Office 强大的本地处理能力以及 Office Live 提供的在线服务，在本地用 MS Office 打开，编辑，保存 Office Live 上的文档。目前 Office Live Add-in 支持 Word、Excel 和 PowerPoint。唯一遗憾的是，Office Live 目前没有简体中文的服务。&lt;/p&gt;  &lt;p&gt;安装完 &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=91fe0002-eb00-434b-8726-27911326d2b2" target="_blank"&gt;Office Live Add-in&lt;/a&gt; 后，可以在开始菜单的所有程序中发现一个名为 Microsoft Office Live Add-in 的程序组，打开里面的 Office Live Workspace 即可利用已有的 Live 账号登录管理你的工作区。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/liuhuimiao/WindowsLiveWriter/OfficeLiveAddin_922E/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/liuhuimiao/WindowsLiveWriter/OfficeLiveAddin_922E/image_thumb.png" width="446" height="332" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;打开 Word，在下拉菜单中有两个新的项叫 Open from Office Live 和 Save to Office Live，意味着可以直接从 Office Live 中打开一个文件，也可以将目前文档直接保存到 Office Live 中相应的文件夹里。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/liuhuimiao/WindowsLiveWriter/OfficeLiveAddin_922E/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/liuhuimiao/WindowsLiveWriter/OfficeLiveAddin_922E/image_thumb_1.png" width="452" height="320" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;这样对于大部分文档工作者来说，是个非常方便的服务，省去了需要戴着移动硬盘资料的烦恼，也使得所有文档在云端都有一个可靠的版本保存，随时随地进行存取。相对于 Office Live，Google 也有 Google Docs，如果你也想把文档存在 Google Docs 里，同时拥有与 MS Office 集成的功能，或许 &lt;a href="http://offisync.com/" target="_blank"&gt;OfficeSync&lt;/a&gt; 这款软件也适合你。&lt;/p&gt;  &lt;p&gt;不管如何，这种 Software + Services 的应用以后只会越来越多，让我们既能享受客户端带给我们各种复杂却高效的处理能力，也能享受云端服务带给我们的共享便利。&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9700638" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/liuhuimiao/archive/tags/S_2B00_S/default.aspx">S+S</category><category domain="http://blogs.msdn.com/liuhuimiao/archive/tags/Office+Live/default.aspx">Office Live</category></item><item><title>Microsoft Dynamics CRM 4.0 编程 - XRM</title><link>http://blogs.msdn.com/liuhuimiao/archive/2009/05/19/microsoft-dynamics-crm-4-0-xrm.aspx</link><pubDate>Tue, 19 May 2009 17:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9627949</guid><dc:creator>liuhuimiao</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/liuhuimiao/comments/9627949.aspx</comments><wfw:commentRss>http://blogs.msdn.com/liuhuimiao/commentrss.aspx?PostID=9627949</wfw:commentRss><description>&lt;P&gt;接触了较长时间的SharePoint开发后，再接触CRM开发，确实另有一番风景。这两款产品可以说是微软未来几年里的拳头产品。细心的人或许会发现，MOSS经常被定性为两种平台的集成体：&lt;STRONG&gt;应用开发平台和解决方案平台&lt;/STRONG&gt;。所谓&lt;STRONG&gt;解决方案平台&lt;/STRONG&gt;，简单理解就是MOSS介绍里说的6大解决方案：门户、商务智能、业务流程、企业搜索、办公协作和企业内容管理。至于&lt;STRONG&gt;应用开发平台&lt;/STRONG&gt;，很多人也经常称之为“中间件”，是介于开发工具/开发框架与现成应用产品之间的，便于人们基于它快速搭建自己业务应用的平台。回归到CRM，CRM 4.0这款产品除了是字面理解上的客户关系管理系统外，微软也赋予了它“应用开发平台”的角色，并给它一个新的名词——XRM。一开始，我也被搞糊涂了，XRM到底是什么东西；它能用来做什么；它定位于“应用开发平台”的话，与MOSS这个应用开发平台又是怎样的一个关系……这些问题在进入CRM开发之前，做个大致了解将更有帮助，更能加深对CRM编程开发的理解。&lt;/P&gt;
&lt;P&gt;1、&lt;STRONG&gt;什么是XRM？&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XRM中的X表示任意一个东西，换句话说，XRM == anything relationship management，它是在微软 Dynamics CRM 4.0 产品上演化出来的一个概念，主要提供一个平台用于快速开发关系型业务系统（relational business applications）。&lt;/P&gt;
&lt;P&gt;2、&lt;STRONG&gt;XRM用来做什么？&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; XRM的理念是：&lt;STRONG&gt;One Platform, Many Applications&lt;/STRONG&gt;，它主要包含了业务系统常用公用功能块、统一完整的用户体验、共享的应用和数据服务、共享的开发运行环境和资源这四大块：&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;业务系统常用公用功能块&lt;/STRONG&gt;：涵盖用户/角色、访问安全控制、数据抓取和视图、过程自动化、功能特性、报表等几大块。主要提供许多业务系统所需要的常用公用功能模块或平台特性，以便根据业务变化快速搭建一个业务系统。 &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;统一完整的用户体验&lt;/STRONG&gt;：包括提供多语言、多币种、多设备支持等特性，同时提供的界面和操作方式保持与Office一致。&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;共享的应用和数据服务&lt;/STRONG&gt;：通过鼠标即可完成数据结构和关系的设计定义，并提供方便强大可扩展的流程定义和集成，同时提供一套丰富的Web services和数据元数据API接口，在这些基础上通过平台保证应用的高可用性、性能和可扩展性。&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;共享的开发运行环境和资源&lt;/STRONG&gt;：通过微软多种常用技术来提供一个支持多个应用独立并存的架构，以此来保证一个用户享有一个平台上的多套业务应用的使用权。这些业务应用都宿主在整个平台中，分享着整个平台的硬件软件基础架构、用户资源和各类开发维护支持。&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;3、&lt;STRONG&gt;微软如何定位 XRM 与 SharePoint/MOSS 的关系？&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; XRM 和 SharePoint 之间的关系通过下图即可一目了然。这也是为什么微软有了SharePoint应用开发平台后，还需要再推出一个XRM应用开发平台的原因。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/liuhuimiao/WindowsLiveWriter/MicrosoftDynamicsCRM4.01_150FB/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/liuhuimiao/WindowsLiveWriter/MicrosoftDynamicsCRM4.01_150FB/image_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/liuhuimiao/WindowsLiveWriter/MicrosoftDynamicsCRM4.01_150FB/image_thumb.png" width=538 height=262 mce_src="http://blogs.msdn.com/blogfiles/liuhuimiao/WindowsLiveWriter/MicrosoftDynamicsCRM4.01_150FB/image_thumb.png"&gt;&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9627949" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/liuhuimiao/archive/tags/XRM/default.aspx">XRM</category><category domain="http://blogs.msdn.com/liuhuimiao/archive/tags/CRM/default.aspx">CRM</category></item><item><title>SharePoint 贴士-1</title><link>http://blogs.msdn.com/liuhuimiao/archive/2009/03/21/sharepoint-1.aspx</link><pubDate>Sat, 21 Mar 2009 11:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9495046</guid><dc:creator>liuhuimiao</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/liuhuimiao/comments/9495046.aspx</comments><wfw:commentRss>http://blogs.msdn.com/liuhuimiao/commentrss.aspx?PostID=9495046</wfw:commentRss><description>&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 慎用AllowUnsafeUpdates，否则你的SharePoint应用将有跨站点脚本漏洞。当然，既然有AllowUnsafeUpdates属性的存在，就有它的道理，只要正确使用改属性，就可以解决你问题的同时避免产生不必要的风险。有位兄台已经就AllowUnsafeUpdates属性做了详细介绍，非常有用。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://hristopavlov.wordpress.com/2008/05/16/what-you-need-to-know-about-allowunsafeupdates/"&gt;&lt;FONT color=#669966&gt;What you need to know about AllowUnsafeUpdates (Part 1)&lt;/FONT&gt;&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://hristopavlov.wordpress.com/2008/05/21/what-you-need-to-know-about-allowunsafeupdates-part-2/"&gt;&lt;FONT color=#669966&gt;What you need to know about AllowUnsafeUpdates (Part 2)&lt;/FONT&gt;&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9495046" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/liuhuimiao/archive/tags/SharePoint/default.aspx">SharePoint</category></item></channel></rss>