Welcome to MSDN Blogs Sign in | Join | Help

第一个CRM 4.0程序

CRM 4.0 开发同 SharePoint Server 开发一样提供 Web Services 和 DLL 两种方式的开发接口。

对于 Web Services 接口,又有两种不同的引用方式:一种是在项目中直接添加 Web 引用,把 CRM 4.0 的 Web Services(如http://localhost:5555/mscrmservices/2007/CrmService.asmx)直接 Web 引用到项目中生成代理类;另一种方式,是先在 CRM 4.0 的 Settings –> Customization 中选择 Download Web Service Description Files,下载其中的WSDL文件,然后再在项目 Web 引用中直接直接保存在本地的WSDL文件亦可。这两种方式归根到底都是在客户端建立服务器端 Web Services 的代理类,只是做法上不同而已。对于使用 Web Services 接口开发的项目,最佳做法是在代码中通过配置或硬编码再次指定 Web Services 的 URL 地址。

对于 DLL 方式,在安装好 CRM 4.0 SDK 后,就直接在项目中引用 Microsoft CRM 4.0 SDK\bin 下的 microsoft.crm.sdk.dll、microsoft.crm.sdktypeproxy.dll 和 microsoft.crm.outlook.sdk.dll 三个文件即可进行开发。

下面第一个 CRM 4.0 程序就是直接用 Web Services 方式的一个范例。

1、新建一个Console Application,按默认命名为ConsoleApplication1。

2、在该项目中添加Web引用,Web服务地址类似为:http://localhost:5555/mscrmservices/2007/CrmService.asmx。其中将 localhost:5555 替换成实际 CRM 服务所在的服务器地址和端口号。把该Web引用命名为 CrmSdk。

3、编辑 Program.cs 文件,其代码如下:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // 名称是 A. Datum Corporation 的 Account 的 ID
            Guid accountId = new Guid("D04D44AD-36D0-DC11-AA32-0003FF33509E");
            // 根据 ID 输出该 Account 的信息
            RetrieveAccount(accountId);

            Console.ReadLine();
        }
        public static void RetrieveAccount(Guid accountId)
        {
            // 根据 Organization Name 和 Server 创建 CrmService 实例。
            // 此处 OrgName 是 MicrosoftCRM,服务器 Server 名称是 MOSS。
            CrmSdk.CrmService service = GetCrmService("MicrosoftCRM", "MOSS");
            // 要显示的 Account 的 Attribute 字段。
            CrmSdk.ColumnSet cols = new CrmSdk.ColumnSet();
            cols.Attributes = new string[] { "name", "telephone1", "address1_city", "address1_country" };
            try
            {
                // 获取该 Account 的实例
                CrmSdk.account oAccount =
                    (CrmSdk.account)service.Retrieve(CrmSdk.EntityName.account.ToString(), accountId, cols);
                // 输出显示 Account 的一些属性
                Console.WriteLine("Account Name: {0}", oAccount.name);
                Console.WriteLine("Main Phone: {0}", oAccount.telephone1);
                Console.WriteLine("City - Country: {0} - {1}", oAccount.address1_city, oAccount.address1_country);
            }
            catch(System.Web.Services.Protocols.SoapException ex)
            {
                Console.WriteLine(ex.Detail.InnerText);
            }
        }

        public static CrmSdk.CrmService GetCrmService(string orgName, string server)
        {
            // 创建 CrmAuthenticationToken 实例
            CrmSdk.CrmAuthenticationToken token = new CrmSdk.CrmAuthenticationToken();
            token.AuthenticationType = 0; //AD (On-premise)
            token.OrganizationName = orgName;

            CrmSdk.CrmService service = new CrmSdk.CrmService();
            //service.Credentials = System.Net.CredentialCache.DefaultCredentials;

            // If you know you are using the default credentials,
            // you can replace the service.Crendentials line with the following line
            service.UseDefaultCredentials = true;
            service.CrmAuthenticationTokenValue = token;
            service.Url = string.Format("http://{0}:5555/mscrmservices/2007/crmservice.asmx", server);

            return service;
        }
    }
}

4、运行即可输出该 Account 的一些基本信息。

根据上述编程,可以稍微发散思考下:CRM 中的 Entity 是不是很类似数据库的表,有字段,有关系。只是 CRM 通过 Web 界面直接定义结构和关系,而数据库则通过专门数据库管理工具。上述编程中从创建 CrmService 实例到获取 Entity 实例,再到最后显示其信息,是一种固定编程模式,是不是类似数据库创建连接到相应表操作。再发散下,都知道数据库表模型很重要,因此在 CRM 开发时,是不是对 Entity 的定义及其字段属性的制定都需要详细考虑。

Posted by liuhuimiao | 0 Comments
Filed under: ,

Office Live Add-in

通过 Office Live Add-in,能够将 Office 客户端与 Office Live 整合起来,利用 MS Office 强大的本地处理能力以及 Office Live 提供的在线服务,在本地用 MS Office 打开,编辑,保存 Office Live 上的文档。目前 Office Live Add-in 支持 Word、Excel 和 PowerPoint。唯一遗憾的是,Office Live 目前没有简体中文的服务。

安装完 Office Live Add-in 后,可以在开始菜单的所有程序中发现一个名为 Microsoft Office Live Add-in 的程序组,打开里面的 Office Live Workspace 即可利用已有的 Live 账号登录管理你的工作区。

image

打开 Word,在下拉菜单中有两个新的项叫 Open from Office Live 和 Save to Office Live,意味着可以直接从 Office Live 中打开一个文件,也可以将目前文档直接保存到 Office Live 中相应的文件夹里。

image 

这样对于大部分文档工作者来说,是个非常方便的服务,省去了需要戴着移动硬盘资料的烦恼,也使得所有文档在云端都有一个可靠的版本保存,随时随地进行存取。相对于 Office Live,Google 也有 Google Docs,如果你也想把文档存在 Google Docs 里,同时拥有与 MS Office 集成的功能,或许 OfficeSync 这款软件也适合你。

不管如何,这种 Software + Services 的应用以后只会越来越多,让我们既能享受客户端带给我们各种复杂却高效的处理能力,也能享受云端服务带给我们的共享便利。

Posted by liuhuimiao | 0 Comments
Filed under: ,

Microsoft Dynamics CRM 4.0 编程 - XRM

接触了较长时间的SharePoint开发后,再接触CRM开发,确实另有一番风景。这两款产品可以说是微软未来几年里的拳头产品。细心的人或许会发现,MOSS经常被定性为两种平台的集成体:应用开发平台和解决方案平台。所谓解决方案平台,简单理解就是MOSS介绍里说的6大解决方案:门户、商务智能、业务流程、企业搜索、办公协作和企业内容管理。至于应用开发平台,很多人也经常称之为“中间件”,是介于开发工具/开发框架与现成应用产品之间的,便于人们基于它快速搭建自己业务应用的平台。回归到CRM,CRM 4.0这款产品除了是字面理解上的客户关系管理系统外,微软也赋予了它“应用开发平台”的角色,并给它一个新的名词——XRM。一开始,我也被搞糊涂了,XRM到底是什么东西;它能用来做什么;它定位于“应用开发平台”的话,与MOSS这个应用开发平台又是怎样的一个关系……这些问题在进入CRM开发之前,做个大致了解将更有帮助,更能加深对CRM编程开发的理解。

1、什么是XRM?

     XRM中的X表示任意一个东西,换句话说,XRM == anything relationship management,它是在微软 Dynamics CRM 4.0 产品上演化出来的一个概念,主要提供一个平台用于快速开发关系型业务系统(relational business applications)。

2、XRM用来做什么?

    XRM的理念是:One Platform, Many Applications,它主要包含了业务系统常用公用功能块、统一完整的用户体验、共享的应用和数据服务、共享的开发运行环境和资源这四大块:

  • 业务系统常用公用功能块:涵盖用户/角色、访问安全控制、数据抓取和视图、过程自动化、功能特性、报表等几大块。主要提供许多业务系统所需要的常用公用功能模块或平台特性,以便根据业务变化快速搭建一个业务系统。
  • 统一完整的用户体验:包括提供多语言、多币种、多设备支持等特性,同时提供的界面和操作方式保持与Office一致。
  • 共享的应用和数据服务:通过鼠标即可完成数据结构和关系的设计定义,并提供方便强大可扩展的流程定义和集成,同时提供一套丰富的Web services和数据元数据API接口,在这些基础上通过平台保证应用的高可用性、性能和可扩展性。
  • 共享的开发运行环境和资源:通过微软多种常用技术来提供一个支持多个应用独立并存的架构,以此来保证一个用户享有一个平台上的多套业务应用的使用权。这些业务应用都宿主在整个平台中,分享着整个平台的硬件软件基础架构、用户资源和各类开发维护支持。

3、微软如何定位 XRM 与 SharePoint/MOSS 的关系?

    XRM 和 SharePoint 之间的关系通过下图即可一目了然。这也是为什么微软有了SharePoint应用开发平台后,还需要再推出一个XRM应用开发平台的原因。

image

Posted by liuhuimiao | 1 Comments
Filed under: ,

SharePoint 贴士-1

    慎用AllowUnsafeUpdates,否则你的SharePoint应用将有跨站点脚本漏洞。当然,既然有AllowUnsafeUpdates属性的存在,就有它的道理,只要正确使用改属性,就可以解决你问题的同时避免产生不必要的风险。有位兄台已经就AllowUnsafeUpdates属性做了详细介绍,非常有用。

Posted by liuhuimiao | 0 Comments
Filed under:
 
Page view tracker