Posts Tagged ‘CRM 4.0’

CRM Jargon in Chinese

The background:

This is a way overdue post from earlier this year when I delivered some training courses in Mandarin Chinese in China.

Fact is, I had to translate over 300 pages of PPT slides from English to Chinese. So I picked up a lot of CRM jargons in Chinese in a very short period of time. The training courses I delivered were Business Action World Tour in Beijing and Shanghai, which was a 200 level, 4 hours session on xRM with various other MSFT technologies. And Business Action Training Tour, a 300 level 2 day full on training course diving deep on BAWT contents in Guangzhou.

The irony: – 恶补中文!(惡補中文!)

“But aren’t you a native Chinese speaker?” I hear you ask, and “yes” is the answer. However I can articulate these terms well in English since I learnt them in English, but I really had to learn what they are in Chinese as some of them are quite technical.

It’s rather ironic. When my Dad decided that I should become a shepherd and sent me to New Zealand 10 years ago, I had to learn the language – Engrish – pretty much from ground up. The only language that I did know was Chinese, so you’d see Chinese translations scribbled all over the English text I’d have been given to study. This time around, you still see Chinese translations of the English words all over my PPTs. But I was learning Chinese this time rather than English…

The content:

So I’ve compiled a list of these terms from my recollection and I will amend it as I remember more. Some are really simple, others are pretty technical.

English (en-nz) Simplified Chinese (zh-cn) Traditional Chinese
(zh-tw)
CRM 客户关系管理 客戶關係管理
Seamless integration 无缝集成 無縫集成
Multi-currency 多币种 多弊種
Multi-language 多语言 多語言
Marketing Analysis 市场营销分析 市場營銷分析
Data Cleansing 数据清理 數據清理
Opportunity 商业机会,市场机会 商業機會,市場機會
Lead 潜在客户,潜在顾客 潛在客戶,潛在顧客
Contact 联系人,关联者 聯繫人,關連人
Cost 成本 成本
Profit 利润 利潤
Revenue 收入 收入
Sunk cost 沉没成本 沉沒成本
Liability 负债 負債
Equity 所有者权益 所有者權益
Capital 资本 資本
Asset 资产 資產
Marketing Campaign 市场活动 市場活動
Marketing campaign response 市场活动响应 市場活動響應
Mail merge template 邮件合并模板 郵件合併模板
Lead qualification 潜在客户验证 潛在客戶驗證
Customer Loyalty 客户忠诚度 客戶忠誠度
Return on Investment (ROI) 投资回报 投資回報
Service Level Agreement (SLA) 服务级别协议 服務及別協議
Business process 业务流程 業務流程
Real time communication 实时交流 實時交流
Marketing channels 商业渠道 商業渠道
Response rate 响应率 響應率
Sales target 销售指标 銷售指標
Trending analysis 趋势分析 趨勢分析
Up sale 升级销售 升級銷售
Cross sale 交叉销售 交叉銷售
Workflow customization 工作流定义 工作流定義
Workflow rule 工作流规则 工作流規則
Dashboard 监控看板 監控看板
Online marketing 在线营销 在線營銷
Telemarketing 电话营销 電話營銷
Custom UI 自定义用户界面 資定義用戶界面
Support call 支持请求 支持請求
Support case 支持案例 支持案例
Case management 案例管理 案例管理
Customer satisfaction 客户满意度 客戶滿意度
Customer experience 客户体验 客戶體驗
Self service web portal 自助网站 自助網站
Communication channel 交互渠道 交互渠道
Knowledge base 知识库 知識庫
Consistent customer service experience 始终如一的客服体验 始終如一的客戶體驗
Client side scripting 代理脚本 代理腳本
Call centre 呼叫服务中心 呼叫服務中心
Knowledge base article (KBA) 知识库文章 知識庫文章
Third party integration 第三方集成 第三方集成
Quote, sales order, contracts 报价,订单,合同 報價, 訂單, 合同
Offline access 脱机访问 託機訪問
Sales cycle 销售周期 銷售周期
Line of business application (LOB) 商业应用系统 商業應用系統
Follow up process 跟踪流程 跟蹤流程
Lead routing 分派潜在客户 分派潛在客戶
Win rate 成交率 成交率
Wizard driven 向导驱动 嚮導驅動
Customer interactions 客户交互 客戶交互
Open proposal 未决报价 未決報價
From proposal to invoice 从报价到开票 從報價到開票
Close sales 成交 成交
Sales literature 销售宣传资料 銷售宣傳資料
Sales metrics 销售度量 銷售度量
Performance indicator 业绩指标 業績指標
Product catalog 产品目录 產品目錄
Sales pipeline 销售来源 銷售來源
Customer retention 客户保留 客戶保留
Scalability 可伸展性 可伸展性
Software as a Service (SaaS) 软件即服务 軟件即服務
On-Premise deployment 内部部署 內部部署
Custom development 二次开发 二次開發
Plugins 插件 插件
Data visualization 数据可视化 數據可視化
Mobile development 嵌入式开发 嵌入式開發
Vector-based composition 基于矢量的组成 基於矢量的組成
Extensibility 扩展性 擴展性
databinding 数据绑定 數據綁定
Full trust application 全信托应用程序 全信託應用程序
Business productivity 商业效率 商業效率
Business intelligence 商业智能 商業知能
Unified communication 统一通讯 統一通訊
Enterprise search 企业搜索 企業搜索
Office Business Application (OBA) 办公商业应用 辦公商業應用
Web Portal 门户网站 門戶網站
Enterprise Content Management (ECM) 企业内容管理 企業內容管理
Workspace 工作空间 工作空間
Instant messaging 即时通讯 即時通訊
Enterprise Service Bus (ESB) 企业服务总线 企業服務總線
Partner hosted deployment 合作伙伴托管部署 合作夥伴託管部署
Authentication, authorization 认证,授权 認證, 授權
Transaction 事务 事務
Access control 访问控制 訪問控制
Metering, billing 计量,计费 計量, 計費
Platform providers 平台提供商 平台提供商
Industry solution providers 行业解决方案供应商 行業解決方案提供商
Independent Software Vendor (ISV) 软件开发商 軟件開發商
Value Added Resellers (VARs) 增值经销商 增值經銷商
System Integrators (SIs) 系统集成商 系統集成商
Distributors 分销商 分銷商
Multi-tenancy 多托管者架构 多托管者架構
Hosting provider 托管商 托管商
Tenant 托管者 托管者
Database failover 数据库切换 數據庫切換
Downtime 中断时间 中斷時間
Advertisements

Troubleshooting CRM Data Connector

The background:

So, I was called in to troubleshoot a CRM Reporting issue a client had, they had CRM Server front end, SQL Server 2008 + SSRS on the backend server – simple setup.

First thing first, CRM Data Connector is just another name (the real name) for Microsoft Dynamics CRM 4.0 Connector for SQL Reporting Services.

A quick revision and the purpose of the Data Connector

From Barry Givens’ post:

  1. Reports in CRM 4.0 are running out of this thing called “SQL Reporting Services Report Viewer” which is plainly an ASP.Net control that runs on the CRM 4.0 Web server. So when users view reports in CRM 4.0, they are hitting up a URL on the CRM 4.0 Web Server.
  2. Because of this, CRM 4.0 reports are always run in a delegated mode, the CRM and SSRS integration has to handle security. This requires us to use integrated authentication and configure trust for delegation between the CRM server, the SSRS server and the SQL server with the CRM database. [Refer to HOW TO: Configure Kerberos authentication for Microsoft CRM 3.0 and Microsoft SQL Server Reporting Services and Microsoft CRM 3.0: Additional Setup Tasks Required if Reporting Services Is Installed on Different Server.]
  3. MSFT decided to make our life less miserable by shipping this Data Connector with CRM 4.0. It is essentially an SSRS Data Processing Extension and handles all of the delegation for us so that we no longer have to fiddle around Kerberos etc, which wasn’t an option in version 3.0.

Right, back to our problem at hand;

The symptoms:

1. When users try to run a SSRS report via CRM Web App, they get a 401.

[{date time}] Process: w3wp |Organization:{Org Guid}
|Thread: 5
|Category: Application
|User: 00000000-0000-0000-0000-000000000000
|Level: Error
| ErrorInformation.LogError
>MSCRM Error Report:
--------------------------------------------------------------------------------------------------------
Error: Exception of type 'System.Web.HttpUnhandledException' was thrown.
Error Number: 0x80040494
Error Message: The request failed with HTTP status 401: Unauthorized.
Error Details: The request failed with HTTP status 401: Unauthorized.
Source File: Not available
Line Number: Not available
Request URL: http://{IPAddress}:5555/{OrgName}/CRMReports/rsviewer/reportviewer.aspx
Stack Trace Info: [WebException: The request failed with HTTP status 401: Unauthorized.]
at Microsoft.SqlServer.ReportingServices2005.Execution.RSExecutionConnection.GetSecureMethods()
at Microsoft.SqlServer.ReportingServices2005.Execution.RSExecutionConnection.IsSecureMethod(String methodname)
at Microsoft.SqlServer.ReportingServices2005.Execution.RSExecutionConnection.LoadReport(String Report, String HistoryID)
at Microsoft.Reporting.WebForms.ServerReport.GetExecutionInfo()
at Microsoft.Reporting.WebForms.ServerReport.SetParameters(IEnumerable`1 parameters)
at Microsoft.Crm.Web.Reporting.SrsReportViewer.ConfigurePage()
[CrmReportingException: The request failed with HTTP status 401: Unauthorized.]
at Microsoft.Crm.Web.Reporting.SrsReportViewer.ConfigurePage()
at Microsoft.Crm.Application.Controls.AppUIPage.OnPreRender(EventArgs e)
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
[HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown.]
at System.Web.UI.Page.HandleError(Exception e)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest()
at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
at System.Web.UI.Page.ProcessRequest(HttpContext context)
at ASP.{OrgName}_crmreports_rsviewer_reportviewer_aspx.ProcessRequest(HttpContext context)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

2. However, users can directly run the reports via report server URL.

3. When user click on the Preview arrow to the left of each report, like the one shown below;

image

They are greeted with the following error message;

“Reports cannot be run because the Connector for Microsoft SQL Server Reporting Services, a required component for reporting, is not installed on the server that is running Microsoft SQL Server Reporting Services.”

image

4. This is accompanied by the following error message in the CRM Web trace;

[{Date & Time}] Process: w3wp
|Organization:{Org Guid}
|Thread: 6
|Category: Application
|User: 00000000-0000-0000-0000-000000000000
|Level: Error
| ErrorInformation.LogError
>MSCRM Error Report:
--------------------------------------------------------------------------------------------------------
Error: Exception of type 'System.Web.HttpUnhandledException' was thrown.
Error Number: 0x80040492
Error Message: MSCRM Data Connector Not Installed
Error Details: MSCRM Data Connector Not Installed
Source File: Not available
Line Number: Not available
Request URL: http://{IPAddress}:5555/{OrgName}/_grid/preview.aspx?type=9100&id={Report Guid}
Stack Trace Info: [CrmException: MSCRM Data Connector Not Installed]
at Microsoft.Crm.ObjectModel.ReportService.GetReportServer(ExecutionContext context, Boolean verifyAndConfigDataConnector)
at Microsoft.Crm.ObjectModel.ReportService.ListSnapshots(Guid reportId, ExecutionContext context, String[]& HistoryIds, DateTime[]& CreatedDates)
[TargetInvocationException: Exception has been thrown by the target of an invocation.]
at Microsoft.Crm.Application.Utility.Util.RaiseXMLError(Exception exception)
at Microsoft.Crm.Application.Pages.Grids.PreviewPage.ConfigurePage()
at Microsoft.Crm.Application.Controls.AppUIPage.OnPreRender(EventArgs e)
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
[HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown.]
at System.Web.UI.Page.HandleError(Exception e)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest()
at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
at System.Web.UI.Page.ProcessRequest(HttpContext context)
at ASP.{OrgName}__grid_preview_aspx.ProcessRequest(HttpContext context)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Diagnosis and resolution:

The fact that users are able to browse to the reports via report server and getting a 401 via CRM Web application, suggests the Data Connector is playing up. The second error message about Data Connector confirms this assumption. So we decided to reinstall Data Connector. The steps we did this in are the following;

1. Uninstall Data Connector from Add and Remove Programs.

2. Reinstall Data Connector from command line and the following configuration file.

3. Restart SSRS.

4. Recycle CRM AppPool or IISRESET.

5. Verify it works by firing up new IE and run up the reports.

6. Ask for your managers for a pay rise.

IMPORTANT points to remember when installing CRM Data Connector:

  1. Data Connector must be installed on the same server as the SQL Server Reporting Services instance that your CRM Server is using!
  2. If CRM is using a SQL Server 2008 backend, we must download an installer update file (.msp) from this KB article [How to obtain the setup updates for Microsoft Dynamics CRM 4.0] and install it via command line and a XML configuration file. (Refer to page 97 of the Install Guide for details.)
  3. If there are more than more SQL Server Reporting Services instances on the same server, the Reporting Server Uri and the instance name must be specified in the configuration file. (Like the one shown below.)
  4. Always remember to restart SSRS and IISRESET the CRM Web application before verify this has worked.

<crmsetup>
<srsdataconnector>
<configdbserver></configdbserver>
<autoupdateconfigdb>1</autoupdateconfigdb>
<reportserverurl>http://servername/reportserver_SSRS2008</reportserverurl>
<autogroupmanagementoff>0</autogroupmanagementoff>
<instancename>SSRS2008</instancename>
<configsku>OnPremise</configsku>
<!-- Set enabled = true for DB webstore integration.  Set configdb="true" for config db webstore integration-->
<webstore enabled="false" configdb="false" />
<monitoring>
<!-- Monitoring service account name and password. It can not be local system or network service account -->
<serviceaccountname></serviceaccountname>
<serviceaccountpassword></serviceaccountpassword>
</monitoring>
</srsdataconnector>
</crmsetup>

There you go, happy CRM’in 🙂

Failure: The SQL Server ‘{0}’ is unavailable

The Background:

I’ve started working with Microsoft Dynamics CRM since early days of version 3.0 and have done “quite a few” installations over the years. However, this is a new one to me…

This particular setup has a front end CRM Server and a SQL Server 2008 and SSRS backend. It was for a client in the banking industry that runs  mission critical applications, as a result their IT infrastructure is very much locked down and they have M to the power of N layers of firewall in between the CRM Server and their SQL Server; with *everything* enforced via group policies.

The Problem:

When we install CRM on the CRM server, on the very last check list dialog it one warning and one error that prevented the installation from going ahead;

The warning message:

|Warning| Check SqlServerAgentValidator : Warning: Setup was unable to verify that SQL Server Agent (SqlAgent$crm) was running.

The error message:

|  Error| Check CrmSqlDomainValidator : Failure: The SQL Server ‘{0}’ is unavailable.

And sure enough, we saw the following details getting logged in the server setup log.

09:11:50|Verbose| Calling BaseGroup.Validate
09:12:11|Warning| Check SqlServerAgentValidator : Warning: Setup was unable to verify that SQL Server Agent (SqlAgent$crmdev) was running.
09:12:11| Info| Check SqlInstanceNameValidator: Success
09:12:11| Error| Check CrmSqlDomainValidator : Failure: The SQL Server '{0}' is unavailable.
09:12:11| Info| Check SqlServerValidator: Success
09:12:11| Info| Check SysAdminValidator: Success
09:12:11| Info| Check WordBreakerValidator: Success
09:12:11| Info| Check FullTextInstalledValidator: Success
09:12:11| Info| Check FullTextRunningValidator: Success
09:12:11| Info| Check ConfigDatabaseFilesValidator: Success
09:12:12| Info| Check CrmDatabaseFilesValidator: Success
09:12:12|Verbose| BaseGroup.Validate completed

Diagnosis:

Judging from the warning and error messages, we initially suspected the following causes:

  • The SQL Agent window services wasn’t running on the SQL server.
  • The SQL Server instance itself wasn’t running.
  • The user account used to install CRM wasn’t a Local Admin on the SQL server.
  • The user account used to install CRM wasn’t a System Admin on the SQL Server instance.

After checking with the system administrator and the DBA, all of these have been configured correctly.

But, we were quite adamant that the CRM installer was, in one way or another, unable to access SQL Server. So, we ran a SQL profile trace to see if the responsible SQL Server instance was getting a reaction from the CRM installer. To our surprise, it did execute a bunch of scripts against the SQL server instance. (FYI: The sort of stuff that the CRM installer does to the SQL Server is beyond sanity… Try to run a SQL profile trace on the CRM installer and you’ll know exactly what I mean.)

Then we started digging deeper around how else does CRM interact with SQL Server apart from TCP port 1433 for SQL Server Sockets service… With help from the support team from Microsoft Australia, we found out that there is a whole raft of other ports that the CRM Web Application and  the Data Connector require to connect to the SQL Server.

Resolution:

In our case, we needed a burn through the M to the power of N layers of firewalls on TCP port 445 between CRM Server and the SQL Server. After this firewall burn, the CRM installation was completed successfully.

“So, ” I hear you ask, “what the hell is TCP port 445 used for?” – Microsoft Directory Services (Microsoft-DS), and I quote, “Active Directory service required for Active Directory access and authentication”.

Your inevitable second question is, “what other ports does CRM use?” Here is an exhaustive list of Network ports used for Microsoft Dynamics CRM 4.0.

Network ports used for the Microsoft Dynamics CRM Web application

The following table lists the ports used for a server that is running a full-server installation of Microsoft Dynamics CRM. Moreover, with the exception of the Microsoft SQL Server server role, and the Microsoft Dynamics CRM Connector for Microsoft SQL Server Reporting Services server role, all server roles are installed on the same computer.

Protocol Port Number Description Explanation
TCP 80 HTTP Default Web application port. This port may be different as it can be changed during Microsoft Dynamics CRM Setup. For new Web sites, the default port number is 5555.
TCP 135 MSRPC RPC endpoint resolution
TCP 139 *NETBIOS-SSN NETBIOS session service
TCP 443 HTTPS Default secure HTTP port. The port number may be different from the default port. This secure network transport must be manually configured. Although this port is not required to run Microsoft Dynamics CRM, it is strongly recommended. For information about how to configure HTTPS for Microsoft Dynamics CRM, see the article “Make Microsoft Dynamics CRM 4.0 client-to-server network communications more secure.”
TCP 445 Microsoft-DS Active Directory service required for Active Directory access and authentication
UDP 123 *NTP Network Time Protocol
UDP 137 *NETBIOS-NS NETBIOS name service
UDP 138 *NETBIOS-dgm NETBIOS datagram service
UDP 445 Microsoft-DS Active Directory required for Active Directory access and authentication
UDP 1025 *Blackjack DCOM, used as an RPC listener

Network ports used by SQL Server running the Microsoft Dynamics CRM Connector for Microsoft SQL Server Reporting Services server roles

The following table lists the ports that are used for a computer that is running SQL Server and has only SQL Server and the Microsoft Dynamics CRM Connector for Microsoft SQL Server Reporting Services server roles installed.

Protocol Port Number Description Explanation
TCP 135 MSRPC RPC endpoint resolution
TCP 139 NETBIOS-SSN NETBIOS session service
TCP 445 Microsoft-DS Active Directory service required for Active Directory access and authentication
TCP 1433 ms-sql-s SQL Server sockets service. This port is required for access to SQL Server. Note that, this number may be different if you have configured your SQL Server to use a different port number.
UDP 123 *NTP Network Time Protocol
UDP 137 *NETBIOS-NS NETBIOS name service
UDP 138 *NETBIOS-dgm NETBIOS datagram service
UDP 445 Microsoft-DS Active Directory required for Active Directory access and authentication
UDP 1025 *Blackjack DCOM, used as an RPC listener

* This port and service are not strictly used by Microsoft Dynamics CRM but may be required for the various underlying platform components, such as Windows or Active Directory.

There are a couple of source for this information.

1. http://rc.crm.dynamics.com/rc/regcont/en_us/op/articles/crmports.aspx  (Don’t worry, I totally knew where to find this page by heart… NOT!)

2. Page 60 of the Planning Guide in the Implementation Guide, I should have known this one better.

WEB 304 Building Silverlight Application for Microsoft Dynamics CRM 4.0

This is the second session I delivered in Tech Ed 2009 Australia. It went bloody well I reckon, heaps better than my first session in terms of delivery and time management, and evaluations have rightfully reflected on this as well.

The following is a link the source code I used for this demo.

clip_image001

Note:

1. I originally developed this code sample for Business Action Training Tour (BATT) that happened around the world in May/June 2009.

2. This is Silverlight 3.0 code.

3. It uses a charting control from Silverlight 3.0 Control Toolkit, July 2009 version.

4. It will be published on MSDN as a HOL by DPE Corp.

5. As I mentioned earlier, I’m allowed to distribute my Tech Ed decks freely. Sorry about that folk, but you can always email me and ask questions about it. 🙂

DYN330 SharePoint Strategies for Microsoft Dynamics CRM

This is my first session at Tech Ed 2009, Australia. In fact, this is my first time presenting at Tech Ed ever. It was nerve-wracking presenting in front of hundreds of people. Thanks to the folks who came to this session. I got 6 more twitter followers as a result of that!!! I hope you got something out of it, as much as I intended to deliver 🙂

So here is source code that I used in today’s session.

clip_image001

Note:

1. This code includes:
    a. Chromeless SharePoint site definition
    b. CRM Workflow for creating the SharePoint site
    c. CRM Plugin assembly that upload CRM email attachment to SharePoint site
    d. Business Data Catalog application definition for CRM
        (This is based on the Analytics Accelerator)

2. The SharePoint site definition was built with WSP Builder v1.0.6, the latest at the time of this post. The CRM solution was built with CRM Developer Toolkit v1.1. You might want to download and install these tools to build the code.

3. Apologies that I can’t provide the slide decks for download as they are only available for Tech Ed 2009 attendees from CommNet.

Enjoy!!!

Virtual PC Management for MS CRM Consultants

The Blab:

I don’t particularly enjoy being deprived of sleep, and things like attending a live LiveMeeting session running 9:00AM – 10:00AM on Pacific Time (meaning waking up  at 3:00AM on our NZ Time) doesn’t really appeal to me a great deal.

NEVER FEAR, MY FELLOW COMRADES!!!

– Long live LiveMeeting On-Demand!!! 🙂

So, I was watching a MSFT Partner on-demand LiveMeeting training “Launching Your Microsoft Dynamics™ CRM Practice: Tools for Microsoft Dynamics™ CRM Consultants” hosted by Val Draper, a CRM PTS out from the States somewhere.

Ok, getting to my point of this post. There was a few polling questions Val started his session on, one was “Do you use Differencing disks on the Microsoft Dynamics CRM VPC image”. I was in complete AWE when I heard what the response was – “100% of the attendants are NOT using differencing disks” and these are MSFT Gold partners around the globe we are talking about here…

In this post, I write about what differencing disks are, why I use differencing disks and how I use it with Microsoft Dynamics CRM VPC Image.

Issue #1: “I need more disk space for my VPCs!!!”

I’m a MSCRM Specialist and I work with different clients on their MSCRM implementations day in and day out. Just like most(?) other MSCRM Specialists out there, I do ANYTHING and EVERYTHING in the Microsoft Dynamics CRM VPC Image. If it had a 2 bedrooms apartment with a heat pump and a sea view, I’d live in it.

The two OOTB .VHD files come with this VPC image are 15.6 GB in size. Imagine I get pimped out to work on 15+ clients’ implementations over a course of 6 months time (which is insanely realistic). To keep different clients IP (customisations, codes, third party add-ons etc) separate from each other, I’ll need to have 15 copies of the VPC image on my laptop.

So Let me pull up the calculator: 15.6 GB x 15 = 234 GB and let’s assume client specific changes we make are 3GB each 3GB x 15 = 45GB. All up I need 234GB + 45GB = 279GB of disk space just for my VPC storage.

Soon I’ll be crying out loud for more disk space… 

image

Introducing Microsoft Virtual PC Differencing Disks

This is a really simple concept, a differencing disk is simply a VHD file that’s created based on another VHD file. Let’s call this base VHD “Parent VHD” and the differencing disk “Child VHD” for the moment and they work like this,

1. A “Child VHD” can be created with Virtual Disk Wizard in Microsoft Virtual PC using “mouse-point-and-click”, the “Child VHD” keeps a reference to “Parent VHD”.

2. When we create a Virtual Machine using Microsoft VPC, we can directly point the VM to the “Child VHD”. So in the VMC file there is no reference to the “Parent VHD”.

3. When we commit “Saved states” (a.k.a. any changes we made to a VM) to Hard Disk, it is saved to the “Child VHD” instead of “Parent VHD”. We essentially write all the differences we made to the Child VHD, hence the name “differencing disk”.

4. “Parent VHD” file can be and should be permanently marked “Read Only” via file properties at OS level. (explained further down this post)

How is differencing disk helping us with VPC disk spaces?

In our context, the “Parent VHD” is the “CRM-SRV-01 2009.vhd” that comes Microsoft Dynamics CRM VPC Image, and I create a child VHD for each of the 15 clients I have. Since we are not writing our changes to the “Parent VHD”, it remains client independent. Therefore, we can share this parent VHD across all of our clients, and assuming that our client “Child VHD” are 3 GB on average as well. Which means I only need 3GB x 15 + 15.6GB x (15 – 14) = 60.6GB of disk space comparing to 279 GB. This is a total saving of 279GB – 60.6GB = 218.4GB and 78.3% (218.4/ 279) of disk space comparing the the previous approach.

image

“So, how exactly do I create a Differencing Disk for MS CRM VPC Image” – I hear you ask?

Here is a step to step instructions on the HOW-TO…

  1. Download Microsoft Dynamics CRM 4.0 Virtual PC Image (April 2009).
    (*Note: you will need to have MBS Partner access, this image expires on 12/08/2010)image
  2. Double click on “MSCRM 40 2009 Demonstration VPC.part01.exe” to extract its content. When the extraction completes, you will see three files.image 
    “CRM-SRV-01 2009.vmc” – Fist thing to do is to delete this file, because, this is the VM that directly references the “Parent VHD” (CRM-SRV-012009.vhd). This is not what we want. What we want is to create a “Child VHD” (Differencing Disk) that reference this “Parent VHD”, THEN, create a VM (a vmc file) based on the “Child VHD”.

    “CRM-SRV-012009.vhd” – This is our main guy, it contains the Operating System, all software installed etc. This will be the “Parent VHD” for our clients Differencing Disks. You notice that I’ve made this file read only. This is because if I make changes to this file after creating Differencing Disks based on it, the Differencing Disks will become invalid.

    ”CRM-SRV-01 2009 Extrax v1.vhd” – This vhd contains a whole bunch of additional utilities like the accelerators etc. When mounted to a VM, this shows as a separate drive.

  3. Open Microsoft Virtual PC 2007 SP1.

    image
  4. File | Virtual Disk Wizard
    image
  5. Next | Select “Create a new virtual disk” | Next | Select to create “A virtual hard disk” | NextimageHere are a few rationales that I chose the above location for this differencing disk; 
            a. I store all my client project work under %Drive%:\Projects\ 
            b. I name the folder the client’s name – in this case, I have “Client 15” 
            c. I explicitly name the differencing disk “client name” + Diff
             Disk.vhd
    , so that even if it does get out of the folder context I know
               exactly what it is for. I sometime add the “project name” to it too 
               if there are more than one crm project going on with one particular
               client. 
           d. The reason I don’t include the “Parent VHD” name in this diff name is 
               because, when I do get to created a new VM based on this Diff Disk, 
               and it loses its references to the “Parent VHD”, it will show me the
               Parent VHD’s name and ask me to link to it.
  6. Next | select “Differencing” | Nextimage
  7. Browse to the “CRM-SRV-01 2009.vhd” file that we extracted earlier.imageNote: It warms us that we shouldn’t do any changes to this parent vhd. This 
             is why I made it read only in step 2.
  8. Finish | Congratulations!!! You have now successfully created a Differencing Disk based on the Microsoft Dynamics CRM VPC Image.image
  9. Now we will create a Virtual Machine based on this Differencing Disk.
    File | New Virtual Machine Wizard.
    image

10. Next | select “Create a virtual machine” | Nextimage 11. Browse to a location and enter the name for the vm | Nextimage      Note: I personally prefer to store the vmc files alongside referenced vhd file. 
               In this case, it’s %Drive%”:\Projects\Client 15\Client 15.vmc

12. Select Windows Server 2003 for OS as is the Microsoft Dynamics CRM 4.0
      Virtual PC Image (April 2009)
| Next.image

13. Allocate 2GB of memory to the VM | Nextimage

14.  Select “An existing virtual hard disk” | Nextimage
15. Select the vhd file location, check Enable undo disks | Next.image     Note: This is the differencing disk we created earlier, the “Child VHD”. 
              I always check Enable undo disks, I think it should default to checked.

16.  Finish | Woila!!! You have successfully create a Virtual Machine that’s based 
       a differencing disk! and you can go about using the newly created VM.image

Issue #2: “My VM is running too slow, how can I improve its performance?”

One other benefit of using difference disks, apart from saving disk space, is it can greatly improve your VM performance by running the Base (parent) VHD on a separate physical disk (not just separate disk partitions), yet better, run it on a USB stick or a separate Solid State Drive (SSD). Here are the reasons;

1. By creating a differencing disk, we are introducing an additional file for Virtual
    PC Process to perform Disk Operations on. This is on top of the Parent VHD
    and the saved states files. So, having the Parent VHD separate from the
    Differencing Disk and saved states files on a different physical disk, we are
    offloading competing Disk Operations on one single disk.

2. This Parent VHD is read only and we are only doing ONLY Read Disk Operation
    on it, SSDs and USB drives are fantastic in performing read disk operations.
    (and shit in doing writes). So the set up is illustrated in the diagram below;

image

3. Taking this setup one step further, I have these 32GB USB drives, I put two
    different Parents.vhd files on them, create two diff disks and two VMs pointing
    to each of them respectively, give them 1.5 GB of RAM each, leaving 1GB of my
    Windows 7 64 bit host OS. AND run two VMs on one single laptop!!! It works
    like a charm!!!IMG_0245 If you are really up to it and have these 8GB onboard RAM laptops lying around, you can try to run 3 VMs at the same time, give them 2GB each and see how they go 🙂

TO SUM UP:

1. As a CRM Specialist, we have multiple VMs catering for different clients. 
    Differencing Disk is a very space efficient approach to manage these VMs.

2. You can host the base Microsoft Dynamics CRM VPC VHD on a USB drive for 
    your VMs to improve their performance.

3. You can take this concept one step further and run two VMs (perhaps more if 
    you have one of those 8GB RAM laptops) at the same time without taking much 
    toll on the performance.

4. These concepts don’t just apply to CRM  peeps, it really applies to anyone that
    use multiple VMs, check out Andrew Connell, a SharePoint MVP, a virtualization
    maniac, how he has taken SharePoint development VMs to the extreme.

Happy VM’ing everyone!!!

I’m taking BATT to China

image

If you don’t know what BATT is, read this earlier post. Over the past week and a bit I’ve been busy localizing some of the training material for our Chinese audience and I’ll be taking it to China for my follow countrymen and women later this month (June 2009)

This training tour is a two full day training course that focuses on building Line of Business applications with Microsoft Dynamics CRM 4.0. There are 6 modules;

1. Using Microsoft Dynamics CRM 4.0 with Windows Presentation Foundation
2. Using Microsoft Dynamics CRM 4.0 with Silverlight
3. Microsoft Office Client Integration with Microsoft Dynamics CRM 4.0
4. Using Microsoft Dynamics CRM 4.0 with Unified Communication
5. Introduction to Azure Services Platform with Microsoft Dynamics CRM 4.0
6. Microsoft Dynamics CRM 4.0 with Windows Azure

Each module consist of one hour of ppt and demos, followed by another hour of 300 level deep code dive hands on labs.

Details:

Date & Time: 24th & 25th June 2009, Start from 9:00am each day
日期和时间:2009年6月24,25号。 每天早上9点开始。

Location:  7th Floor, Tianjun International, No.365 Tianhe Road, Guangzhou, China
地址: 广州市天河区天河路365号天俊国际大厦七楼

Cost: FREE!!!  免费!!!

Registration:

There are VERY limited spaces available as this will be the ONLY BATT course for the ENTIRE China, a country with 1.6 billion population (yeah, go figure.)

So, to register email Liping on v-lipz@microsoft.com with your details!

See you all there!!! (Oh, it will be delivered in Mandarin Chinese BTW 😉

So I’ll be hitting the road again 22nd – 28th June WLG – AKL – HKG – CAN – TAO – HKG – CHC – WLG (looking forwards to seeing my folks again @TAO) 🙂