Use Social Media to connect with Customer Effective Find Customer Effective on Facebook Find Customer Effective on Linked In Find Customer Effective on Twitter View Customer Effective on YouTube

 
Subscribe in a reader

Add to Google Reader or Homepage

Enter your email address:

Delivered by FeedBurner

Customer Effective

January 30, 2012

Removing Query Data Cached by the OrganizationServiceContext in Microsoft Dynamics CRM

One of the great set of tools provided by the CRM 2011 SDK are the SDK Extensions which provide the OrganizationServiceContext for accessing data in CRM.  The OrganizationServiceContext provides a way to access CRM and provides features such as change management, exposing an IQueryable interface, implementing a LINQ query provider, and providing caching services.  It is the caching services that I would like to take a look at today.

Most of the time, the caching provided by the OrganizationServiceContext is exactly what you are looking for as a developer.  It provides faster access to the data exposed by the OrganizationService and reduces the load on the network.  However, there are times, when the retrieving data that you would like to have a current set of data rather than a set of cached data.  There are a couple of methods that can be employed if you would like to retrieve a set of current data using the OrganizationServiceContext.  One of these is to modify the configuration in the web.config or app.config file that is used to specify how the client context is initialized.  Another is to instantiate the OrganizationServiceContext yourself and pass an instance of a non-caching OrganizationService when constructing the context.

While these methods will work and have their purposes, most of the time I would like to use a caching instance of the OrganizationService but still be able to control the caching so that I can retrieve a current set of data if necessary (I like to have my cake and eat it too).  The great news is that it is possible to control the data caching of the OrganizationServiceContext to some extent if you understand the structure of the context class that is being used.

If you are using early binding and the CrmSvcUtil.exe to generate an OrganizationServiceContext to be used when accessing data in CRM, the class that gets generated derives from the CrmOrganizationServiceContext.  If you are using late binding you will more than likely be using the CrmOrganizationServiceContext directly.  The CrmOrganizationServiceContext implements the IOrganizationServiceContainer interface that exposes a Service property.  If you have not specified a type for the service to be used by the context, this object will be an instance of the CachedOrganizationService.  In addition, the CachedOrganizationService class exposes a Cache property that is an IOrganizationServiceCache instance.  It is this instance of the IOrganizationServiceCache that exposes the methods that allow items to be removed from the cached used by the context.

Now that we have an understanding of the structure of the context it is simple to write an extension method that will remove cached data items.  The following snippet of code can be used to remove entity data from the set of data cached by the context.

   1: public void RemoveCachedData(OrganizationServiceContext context, string entityLogicalName, Guid? id) {
   2:  
   3:     var serviceContainer = context as IOrganizationServiceContainer;
   4:     if (serviceContainer == null) {
   5:         return;
   6:     }
   7:     
   8:     var cachedOrgService = serviceContainer.Service as CachedOrganizationService;
   9:     if (cachedOrgService == null) {
  10:         return;
  11:     }
  12:     
  13:     var orgServiceCache = cachedOrgService.Cache as IOrganizationServiceCache;
  14:     if (orgServiceCache == null) {
  15:         return;
  16:     }
  17:     
  18:     orgServiceCache.Remove(entityLogicalName, id);
  19: }

As you can see, we simply need to cast the context to an IOrganizationServiceContainer and drill down through the object until we get at the actual OrganizationServiceCache.  Once we have an instance of the OrganizationServiceCache we can use one of the Remove methods to remove the cached data.  There are several other overloaded Remove methods that allow data to be removed and I have only shown one of them that will allow data to be removed for a specific entity.  In the snippet I have shown, if the id argument is not supplied, any cached data for the specified entity will be removed.

Now all that needs to be done is call the method to remove the cached data before executing your query to retrieve data.  If you would like to remove other pieces of cached data you can browse the CRM 2011 SDK and have a look at the Remove methods exposed by the OrganizationServiceCache class.

January 25, 2012

Transform your Business with Microsoft CRM and Cloud Computing on your Terms

Over the past few years, the financial services sector has experienced extraordinary change due to shrinking margins, mounting global competition, and increasing regulatory scrutiny. Even prior to these challenges, many firms were hindered by an unmanageable and inefficient legacy infrastructure consisting of disjointed business processes and multiple non-integrated applications. In such an evolving marketplace, financial institutions must focus on core competencies and waste-cutting without sacrificing the need to innovate and adapt. As they desperately seek out cost-effective technology solutions that can streamline their operations and offer them greater agility, flexibility, scalability, and real-time data, many firms are now turning to cloud computing.

Firms drawn to virtualization and cloud services are looking to trim capital expenditures, achieve economies of scale, and reduce time to market. IT departments that have undergone a cloud-based transformation are investing less on optimizing servers and additional hardware and capacity because they now selectively purchase additional services and scale only when needed as demand dictates. Furthermore, IT departments that have embraced the cloud are spending less time on running, patching, maintaining, and reactively supporting large data storage centers, hardware, and software. As a result, they can focus more on strategic initiatives and developing better products and applications to better support the business side’s growth and straight-through processing automation objectives. Finextra further affirms the increasing momentum of cloud computing by citing research from Gartner, which shows that 39 percent of surveyed CIOs at financial services firms “expect that more than half of all their transactions will be supported via cloud infrastructure and software as a service (SaaS) by 2015.”

With over 15 years of experience in cloud computing, “Microsoft invests over US$2 billion a year alone into the development of its Microsoft Dynamics products.” Included in its industry leading portfolio of cloud assets is Microsoft Dynamics CRM Online. Delivered over the Internet, CRM Online can be up and running quickly and cost-effectively. Also, it is easy to learn and use and it supports widespread adoption because it provides a familiar Microsoft Office user interface and experience and it even operates within the friendly confines of Outlook. Additionally, its powerful suite of marketing, sales, and customer service functionality gives organizations valuable visibility into customer, prospect, and partner information.

As a reminder, though, CRM Online is not the only deployment option for Microsoft Dynamics CRM 2011. Besides, the on-demand online cloud hosted model, firms can still opt for an on-premise software installation or a hybrid solution of both the on- and off-premise models. Unlike its competitors, Microsoft provides its customers with the power of choice and recognizes that a firm’s business needs can change. Despite offering a superior CRM cloud solution, Microsoft understands that some firms may still want to extend investments in existing infrastructure, and thus they might have a more long-term timeline for transitioning CRM and other in-house applications to the cloud. Therefore, Microsoft grants firms the freedom to switch at any time from one deployment model to the other, regardless of what option was initially selected. Overall, firms are able to use their technology on their own terms and take advantage of the cloud when they are ready.

To better navigate the Cloud with Microsoft technology and explore your CRM options, please visit www.customereffective.com.

January 24, 2012

Improve Customer Relations and Reshape the Customer Experience with Microsoft Dynamics CRM 2011

In today’s turbulent economy, corporate decision-makers are reexamining how they can consistently deliver a more memorable and differentiated customer experience that is more aligned with customers’ needs and ultimately generates profitable top-line growth. Striving to meet and exceed the expectations of the new, digitally savvy and often fickle consumer in a cost-effective manner is not easy, though. More empowered than ever before, many of today’s capricious customers want everything personalized, provided at a discounted rate, and done as quickly as possible, regardless of the channel. Up to the challenge, many top-tier companies across the globe recognize that they must refocus on the end-customer and engage in more consultative and meaningful dialogues with their clients and interested buyers across all touchpoints.

With such a growing imperative to maximize customer value and reshape the customer experience, many top-tier firms are turning to Microsoft Dynamics CRM 2011. As a fully centralized and interactive business management tool, CRM 2011 provides a complete, reliable, and integrated 360 degree view of client-related information so that companies can better identify, segment, service, and retain their customers and create a more positive customer experience in the following ways:

  • Cultivate and deepen relationships to earn client loyalty, retention, and pave the way for repeat business via upsell and cross-sell opportunities.
  • Dissect the critical information found in the client profile to develop more targeted marketing campaigns, more effective sales call plans, and more seamless, cost-efficient service delivery strategies that are relevant and tailored to the unique customer purchasing preferences and habits.
  • Glean insights on a customer’s interaction, ad response, and transaction history across various channels and touchpoints to grow company-wide awareness and knowledge of each customer’s unique needs and be better positioned to offer value-added products and services.
  • Facilitate employee and department collaboration, sharing, and communication of critical information to improve and automate front-office sales and service processes, minimize response times to client inquiries, and reduce customer frustration by not having to ask the same questions repeatedly.

The good news here is that all of the above benefits of improving the customer experience and overall client satisfaction will eventually grow customer spend, provide an incremental sales lift, and maximize the lifetime value of your more profitable clients and prospects.

To learn more about how the vast experience and expertise of Customer Effective combined with our industry specific accelerators and pre-built configuration templates can help lower your total cost of ownership, shorten your implementation timeline, and increase the return on investment of your new robust Microsoft Dynamics CRM 2011 system, please visit www.customereffective.com.

January 23, 2012

Wealth Management Firms turn to Microsoft Dynamics CRM 2011 to Amplify their Sales and Service Results

Customer Effective is poised and ready to empower wealth management firms with flexible, scalable, and security-enhanced CRM tools and integrated solutions to grow their business. Customer Effective: FinServ for Wealth Management is our pre-configured Microsoft Dynamics CRM 2011 offering consisting of a full-featured Marketing, Sales, and Service suite tailored to wealth management industry needs. Below I have highlighted some common business and operational challenges faced by investment advisory firms and how these can be overcome with the help of the Customer Effective: FinServ for Wealth Management platform:

Advisor needs more insights on Household Relationship Management and Client Acquisition Tracking

  • Link Clients to multi-generational affluent family Households and obtain consolidated 360-degree views of all Household Members, Accounts, Assets/Liabilities, Transactions, Market Values and be able to see their complete financial picture in one central location.
  • Track related 3rd Party Advisors, Qualified Plans, Employers, and Client Interests and receive the extra knowledge and background to become the go-to trusted advisor and “quarterback” for any financial situation.
  • Track Client Acquisition Prospecting efforts, RFP requests and responses, and lead conversion success rates to identify the most effective and efficient ways to win new business.

Advisor needs better recordkeeping for Compliance

  • Uphold data integrity and maintain accurate Client, Prospect, and Partner records for individuals and companies.
  • Track system and field data changes via historical Audit trail logs to meet tightening compliance requirements.
  • Track and store all Client communication and correspondence to adhere to SEC and FINRA guidelines – emails, phone calls, portfolio review meetings and notes, service inquiries, client newsletters, buy/sell recommendations, Client Monthly Statements, Financial Plans, Investment Proposals, Monte Carlo Hypos, Investor Suitability Due Diligence questionnaires, KYC/AML compliance docs, proxies, research reports, and prospectuses.

Advisor needs more timely and robust Sales Pipeline Management reporting

  • Sales, Marketing, Client Service, and Compliance Dashboards and Reports capture KPI’s and production results for each individual Advisor, Branch, Region, or the entire firm.
  • Real-Time Sales Opportunity Pipeline Management and Forecasting help focus time and resources on more profitable relationships and shorten sales cycles.
  • Target vs. Actual Goal Tracking of Closed Deals and Prospecting Activity promotes competition, instills accountability, motivates reps, and helps identify areas for improvement.

Advisor needs to automate New Client Onboarding Processes

  • CRM can be tightly integrated with Portfolio Management/Trading/Rebalancing/Custody platforms to eliminate dual entry, save time, and further streamline and automate the Client Onboarding, Account Setup, and Ongoing Service Processes.
  • Once the Onboarding Process is complete, ongoing monthly, quarterly, semi-annual, or annual Review Meetings can automatically be set up to consistently and frequently stay in touch with Clients, earn their trust, and provide superior levels of service to the competition.
  • Track and rate Referral Sources based on lead generation profitability.

Advisor needs an easier way to plan, execute, and follow up on Seminars

  • Devise quick campaigns to plan, execute, and track the success of converted leads from attendees of Retirement Planning, College Savings, Tax Minimization, and Estate Planning Seminars.

Advisor needs to reduce the time involved on Client Allocation Change and Distribution Request Processes

  • Create automatic follow-up tasks and deadlines for review of Account activity and maintenance to increase client retention and ensure consistent behavior amongst Client Service Teams.
  • Identify At-Risk Clients based on recent, frequent high-dollar withdrawals; develop and execute client outreach and retention plans.

Please visit www.customereffective.com to learn more about Customer Effective: FinServ for Wealth Management and how its pre-designed wealth management tools and templates can vastly improve your practice’s customer-centric approach and widen your competitive advantage.

January 20, 2012

Retrieving Activity Feed Post with the OrganizationService

One of the new features introduced with Update Rollup 5 for CRM 2011 was the introduction of activity feeds to CRM.  Activity Feeds give users the ability to monitor what is happening to various business entities.  The out of the box functionality includes auto posts that include activities such as status changes in business entities, and manual posts that are created by users.  Users also have the ability to post comments to posts that are created in an activity feed.  Recently, I had the need to retrieve activity feeds for various business entities in order to display a summary of interactions that had recently taken place for a set of accounts and its related entities.  While the out of the box functionality allows a user to see the record wall for an individual record, it does not give the user the ability to see activity posts for multiple records on a single wall, hence the need to retrieve the posts using the OrganizationService.

The OrganizationService provides two messages for retrieving activity posts.  These are the RetrieveRecordWallRequest and RetrievePersonalWallRequest.  These messages do exactly what you would think.  The RetrieveRecordWallRequest retrieves all of the posts that involve the specified record in CRM, while the RetrievePersonalWallRequest retrieves all of the posts for a user that they are following or in which the user is mentioned.  Let’s explore these two messages in a little more detail so that we can use the data that they expose.

In order to retrieve post to a record wall we will use the RetrieveRecordWallRequest.  The following shows an example of the service call.

   1: RetrieveRecordWallResponse recordWallResponse = null;
   2: RetrieveRecordWallRequest recordWallRequest = new RetrieveRecordWallRequest();
   3: recordWallRequest.CommentsPerPost = 50;
   4: recordWallRequest.Entity = new EntityReference("account", accountGuid);
   5: recordWallRequest.PageNumber = 1;
   6: recordWallRequest.PageSize = 100;
   7: recordWallResponse = _serviceProxy.Execute(recordWallRequest) as RetrieveRecordWallResponse;

As you can see, in this request to the service we created an instance of the RetrieveRecordWallRequest and passed it to the Execute method of the OrganizationService.  Notice in line 3 that we specified 50 for the number of CommentsPerPost and in line 6 we also specified the PageSize as 100.  Both of these are the maximum allowed values when making a request for wall posts.  This will return up to 100 posts for the record and up to 50 comments for each post.  If more posts are desired, another request can be made with the PageNumber property of the request changed to specify a different page.  Also, notice that for the record wall request that we had to specify an entity reference to the record for which we wanted posts as done in line 4.

The other request for posts that can be made is for personal wall posts.  This is done using the RetrievePersonalWallRequest message.  The following shows an example of the service call.

   1: RetrievePersonalWallResponse personalWallResponse = null;
   2: RetrievePersonalWallRequest personalWallRequest = new RetrievePersonalWallRequest();
   3: personalWallRequest.CommentsPerPost = 50;
   4: personalWallRequest.PageNumber = 1;
   5: personalWallRequest.PageSize = 100;
   6: personalWallResponse = _serviceProxy.Execute(personalWallRequest) as RetrievePersonalWallResponse;

As you can see in this example, the request is a little simpler.  In this case we still specified the CommentsPerPost, PageNumber, and PageSize, but we did not have to specify an entity reference.  This is because the RetrievePersonalWallRequest will retrieve the post corresponding to the user in context that is making the service request.  If we wanted to retrieve the wall for a different user we would have to impersonate the user for which we wanted posts when getting a reference to the OrganizationService used.

So now that we have the data, what does it look like?  Well, both of the request return a result that contains an EntityCollection property that is a collection of Post entities.  Each of the post entities will also contain data for the comments if they exist in the RelatedEntities collection of the individual entities.  The relationship to reference is the “Post_Comments” relationship.  The following diagram gives more detail as to what data is exposed.

Post Entity
Attribute Type
deleteenabled AliasedValue (bool)
organizationid EntityReference
text string
createdonbehalfby EntityReference
likecount AliasedValue (int)
followed AliasedValue (bool)
postid Guid
createdby EntityReference
source OptionSetValue
regardingobjectid EntityReference
type OptionSetValue
createdon DateTime
relativeimageurl AliasedValue (string)
commentcount AliasedValue (int)
Post Entity
Attribute Type
deleteenabled AliasedValue (bool)
createdon Datetime
createby EntityReference
postcommentid Guid
postid EntityReference
text string
organizationid EntityReference

Probably the most important piece of data in the entities is the [text] attribute.  This is the attribute that actually contains the text for the post of comment.  The text in this field is already localized for the current user, but it does contain placeholders for other records that are referenced by the post.  The format of the placeholder is [ObjectTypeCode,ID,”Display String”] for example, [1,00000000-0000-0000-0000-000000000000,”An example post or comment.”].  This placeholder will have to be replaced with the desired text if the post is going to be displayed for the end user.

Hopefully, this example will help you get the activity post data for your business requirements.  If you need more information concerning activity feeds you can check out the activity feed section of the CRM SDK here.

January 19, 2012

Customer Effective and AssureSign to present Webinar on February 15 at 2:00pm Eastern

Customer Effective and AssureSign Present: Increase Efficiency. Decrease Cost. With AssureSign for Microsoft Dynamics CRM

We are excited to announce a FREE webinar on February 15, 2012 at 2:00pm Eastern Time

The webinar will cover topics including:

  • How companies have integrated AssureSign Electronic Signature Technology into Microsoft Dynamics CRM 
  • How to merge your documents with Microsoft Dynamics CRM data fields and send them out to one or many recipients for signature using a single interface. 
  • How to track the progress of documents out for signature, send executed copies to all required recipients, and bring completed documents back into Microsoft Dynamics CRM. 
  • How to streamline your business processes by integrating electronic signatures, keeping all documents electronic, and eliminating overnight charges or delays associated with faxing

 

Visit the Events Page on our website to Register for this great Webinar

Customer Effective Announces Microsoft CRM for Health Plans Webinar Series

Customer Effective is excited to announce a Winter Webinar Series for Health Plan Providers. You will see how other Health Plan Organizations are using Microsoft Dynamics CRM to better manage their business. We will show you that CRM is not just a Sales Force Automation tool. Join us for our webinar series and learn how our team can help you leverage Microsoft CRM 2011 in your organization.

Sales & Marketing (Group and Individual) - February 2, 2012
Time: 2:00pm to 3:00pm EDT
This webinar will touch on topics including:
> Managing Quote Activity
> Outbound Marketing Campaigns
> New/Renewal Opportunity Management
> Agency Performance Management
> Reporting and Dashboards

Operations (Group Plan Administration) - February 23, 3012

Time: 2:00pm to 3:00pm EDT
In this webinar, the following topics will be covered:
> Policy Holder 360 Degree View
> Group 360 Degree View
> Underwriting
> Reporting and Dashboards

Call Center (Sales and Customer Service) - March 13, 2012

Time: 2:00pm to 3:00pm EDT
The highlights of this webinar will include:
> Group and Individual Agent Case Management
> Telephony Integration with CRM
> Knowledge Base
> Reporting and Dashboards

Please visit our website for more information on how to register for this educational webinar series!

Use Goal Management in Microsoft Dynamics CRM 2011 to Track and Improve Sales Team Performance

With the Holidays behind us, many Sales teams are in the process of receiving new comp plans for the New Year. Sales management is faced with the dilemma of devising compensation structures that not only reward top performers, but also motivate them to continue producing at a high level going forward. Besides possibly changing compensation, Sales Goals for reps and territory assignments may be altered as well. In many cases, the new Sales Goals may seem extremely challenging at first glance. Regardless of how well management clearly defines and articulates the changes based on their analysis of last year’s company results, current and future market environments, and projected growth rates, some Sales reps may wonder why the changes were necessary, and thus they may have some reservations about hitting their new lofty numbers until they start closing some deals again. Without Goals, though, businesses, Sales teams, and Sales reps have no real measure for success in place.

Microsoft Dynamics CRM 2011 recognizes how important it is for Sales executives and top producers to track and achieve Goals. For instance, CRM 2011 offers Goal tracking and management functionality that Sales reps can use to view their individual performance results and see how they stack up against their respective Revenue or Sales Volume Goals. Plus, Sales management can use Goals in CRM to chart and analyze the progress of the teams or territories they oversee and really target areas for improvement based on how much time is left in the current sales period. The Sales Goals can be for a custom time period, such as monthly, quarterly, or annually or even set to a particular Fiscal period. Moreover, tracking and managing Goals within CRM will make the overall Sales Goal maintenance, roll-up, reporting, and review process far less cumbersome and error-prone, especially compared to the extremely time-consuming and manual-intensive approach of doing the same in spreadsheets.

Furthermore, the built-in robust Goal charts are great visualization mechanisms for Sales reps to see where they stand at a given point in time against their peers and their individual Goal(s). For instance, the chart below displays a comparison of Actual and In-Progress Sales Opportunity Revenue figures versus a Quarterly Sales Goal for three individuals. It is taken from “Tracking status against goals with built-in predictability” on the Microsoft Dynamics CRM Blog, which I encourage you to reference if you want to get more insight on the use of Sales Goals in CRM 2011 and see more sample Goal charts. Being able to always refer to these instant individual Goal results via a Dashboard or an in-line visualization chart helps maintain Sales focus and momentum, instills accountability, and fuels competition amongst reps, managers, teams, and regions.

clip_image001

Additionally, I recommend watching this brief Goals tutorial video from the Microsoft Dynamics CRM Resource Center to learn more on how to create and assign parent/child roll-up Goals and Goal metrics. It actually focuses on an example of Service Case Goals, but the steps are a great primer on how to create Goals in CRM, particularly Goals with a Goal Metric based on a “Count” as opposed to a Revenue $ Amount metric. The video really can serve as a guide if you have the need to create a Sales “Count” Goal, such as number of Opportunities or Products sold per month, number of outbound dials per week, or number of leads generated from a Marketing campaign.

Lastly, if you would like to discuss further and see first-hand how Customer Effective can leverage and tailor the Goal Management functionality in CRM 2011 to optimize your Sales Department’s processes, productivity, and performance, please e-mail us at info@customereffective.com.

January 18, 2012

Microsoft Dynamics CRM 2011 Standalone Sandbox Using VirtualBox Part 2

Back to Part 1... Microsoft Dynamics CRM 2011 Standalone on VirtualBox Part 1

2: Add the ASP.NET role service:

Image17

Install CRM 2011

Great! We are ready to finish and fulfill our goal.  From the host machine unmount the SQL Server 2008 R2 and mount the Microsoft Dynamics CRM Server 2011.  When you mount Microsoft Dynamics CRM Server 2011 from the host machine go to CRMDEMO2011 and run the splash.exe from the ‘D:’ drive.

1: Select: Install Microsoft Dynamics CRM Server

2: Toggle: Get update for Microsoft Dynamics (recommended)

3: Specify the SQL Server, in this guide we are saying it is CRMDEMO2011, the local machine:

Image18

4: Specify the Organizational Unit, the Active Directory root we prompted the server to:

Image19

5: Specify what CRM services will run as, use the CRM2011NET\CRMDEMOADMIN account:

Image20

6: Specify the database name:

Image21

7: Get Excited!  Here’s your first glimpse of the URL for your new CRM environment:

Image22

8: Blast off! Click install and wait with your http://crmdemo2011 url in the clipboard to paste that sucker into IE.  But wait…make sure you allow the Microsoft Dynamices CRM Reporting Extensions Setup to run.

Login to http://crmdemo2011 with the CRMDEMOADMIN user and gloat with pride:

Image23

All-in-all, this installation should only take 3 hours or less once you have all the components downloaded and in place.  The first time can take up to 6-8 hours because you have to download all the ISOs and get familiar with VirtualBox.  But, once you make a copy of the CRMDEMO2011.VDI at a point that you consider a starting point then you can start from there to cut out more time.  Which by the way…now is a good time to back up that CRMDEMO2011.VDI file.  Looking forward, another idea from here is using the VM created to install the SharePoint and Outlook components. 

Good Luck…

Back to Part 1... Microsoft Dynamics CRM 2011 Standalone on VirtualBox Part 1

Microsoft Dynamics CRM 2011 Standalone Sandbox Using VirtualBox Part 1

One of the best approaches to learn CRM is to have a sandbox.  A lot of recommendations out there suggest having your IT administrator provide you with a CRM sandbox to play in.  That is fine and is surely a good idea, but personally creating a sandbox will certainly give you the satisfaction of getting your hands dirty and will give you a little respect with your colleagues.  So here we are going to look at getting a basic MS CRM 2011 up and running with Oracle’s VirtualBox.

So why VirtualBox?

  1. It is free
  2. Microsoft Dynamics CRM 2011 requires a 64-bit operating system to install
  3. Microsoft does not provide a desktop virtual platform that supports 64-bit guest OS.  Microsoft's 64-bit virtual platform, Hyper-V, only runs on Windows server.  Even the 64-bit version of Windows Virtual PC will not support 64-bit guest operating systems.
  4. VirtualBox can mount and run Hyper-V images, including the Microsoft provided demo VPC. (PartnerSource or Customersource login required).

So unless you have access to a server with Windows 2008 installed, VirtualBox is your best option for setting up a standalon virtual sandbox on your PC.  Note that when Windows 8 is released, Microsoft will support Hyper-V on the desktop, so our recommendation may change at that time.

The steps included in this post should be applicable to setting up a standalone sandbox in "virtually" any other virtualization platform. 

Performing the steps in order is very important to keep things easy.  Here are the brief steps we are going to perform:

This guide will enable us to create a brand new CRM environment within less than 3 hours, but there are a few prerequisites that you will want to have downloaded:

  • Windows Server 2008 - Standard or Enterprise
  • CRM 2011 Server Edition
  • SQL Server 2008 R2 (x86, x64, ia64) - Standard or Enterprise
  • Product Key for CRM 2011 Sever.  *IMPORTANT: A valid key is a must to finish the install.

Other tools needed:

  • ISO mounting tool, this guide is using MagicDisc.  Use your own ISO mounting tool if you have one more familiar to you
  • VirtualBox, which can be found at www.virtualbox.org

I am only going point out the installation steps necessary to get a very basic CRM 2011 environment up and running.  This means that if a step is not mentioned I used the default.   If you are interested in adding features please do so, as the scope here is just the bare bones.     

 

Create a VirtualBox Instance

*IMPORTANT: Hardware virtualization must be enabled in the BIOS.  This is an easy toggle and will not cause any issues to your system, but you will receive an error about VT-x/AMD-V and will not be able to boot Windows Server 2008 until this change is made.  The setting lingo varies from Bios to Bios but a common word in all will be ‘virtualization’, so look for that.

Create a new VM host; in this case CRMDEMO2011 is the name.  The defaults are fine for this example, but you may want to bump up the RAM if you are going to do some presenting or adding SharePoint, Outlook or Visual Studio.  I also strongly recommend that you bump up the disk space to a minimum of 40gigs if you are going to use SharePoint, Outlook or VisualStudio.  In any case, make sure you set the version of Windows to 8 (64 bit) or 2008 (64 bit).  Both work, but the ‘8’ version automatically sets the RAM higher which is probably better.

1: Create VM Host

  Image1

2: Mount Windows Server 2008 R2 ISO

We are going to use our mounting software from our host machine and mount the Windows Server 2008 R2 there.  Make note of the drive that the mount is using, in this case ‘I:’.

  Image2

3: Attach Drive with ISO to VM

The Windows Server 2008 R2 ISO is mapped on drive ‘I:’ from your host machine.  Attach the ISO by going to Settings -> Storage -> IDE Controller -> select Empty or create a new controller and map it to Host Drive ‘I:’ or the drive you used for the Windows Server 2008 R2 ISO.  When the VM starts the drive will be ‘D:’. 

Summary:  On host mount Windows Server 2008 R2 ISO on drive ‘I:’, on VM (CRMDEMO2011) the drive will be ‘D:’.

  Image3

4: Start VM

Starting the VM with the Windows Server 2008 ISO attached to the ‘I:’ will start the install with ease because it is now a part of the boot sequence.

Image4

 

Install Windows Server 2008 R2 Standard 64-bit

Installing a new Windows Server 2008 R2 is pretty straight forward.  Go through all the defaults.  You will want to add your product key here if you have one.  You may want to allow all the updates to happen if you have a nice network connection.  Once that is all done, it is not a bad idea to back up your CRMDEMO2011.VDI file.  That way you have a nice blank server ready to go for future use.

Two things for VirtualBox:

1:  After you are done with the server install, go ahead and install the guest additions, so you can get a nice full screen:

  Image5

2:  A very important VirtualBox command:  [RIGHT CTRL] +Delete = CTRL+ALT+DELETE for the VM…probably the only one you really need to know.  This will drive you nuts if you don’t know it…you will hate VitualBox if you don’t remember!

 

Promote Windows Server 2008 to Active Directory Domain Controller

This step is in my opinion the most daunting.  For many years I have be conditioned that installing a domain server is a one and done deal.  That two domain server on the same network is really bad.  Yes, having two or more domain controllers can be bad, but here we are going to set it up so we do not compromise our host network.  Unless you really know what you are doing, DO NOT mess around with the AD settings or the VM network settings, especially while on your corporate network without the guidance from your local neighborhood IT guru.  CRM requires a domain, and since we are going for a standalone installation, we have to promote the CRM server itself to the domain controller role.  Additionally, promoting the server before we install SQL helps avoid additional configuration steps as a result of the server’s name and user accounts changing.

Promoting a domain controller is done from the commandline by running:

c:\>dcpromo

Seven tweaks are necessary:

1: Toggle: Create a new domain in a new forest

  Image6

2: Name our network: CRM2011NET.local

  Image7

3: Change forest function level to: Windows Server 2008 R2

  Image8

You may get:

  Image9

Selecting “Yes, the computer will use an IP…” is fine and keeps you from having to look at network settings.

You may also get:

  Image10

Select ‘Yes’

 

Put in a password and you are done creating an Active Directory Domain Server…Congratulations!  You will have to reboot after dcpromo has done its thing.  The Domain we created is CRM2011NET, we will want to log back into the server using that domain. 

4: Rename computer back to original name

Making the server a domain controller renames the computer to something weird, rename computer back to CRMDEMO2011 and reboot. 

5: Create domain users

Create a few domain users is done from the commandline by running:

c:\>dsac

Create at least these users:

1: CRM2011NET\CRMDEMOADMIN

2: CRM2011NET\CRMSQLADMIN

3: CRM2011NET\Sal.Salesman

4: CRM2011NET\Mark.Marketing

 

Put the users in the ‘Users’ CN:

  Image11

Make the password the same for all users and make it so it never expires to make things easier:

  Image12

6: Make CRMDEMOADMIN and CRMSQLADMIN the administrators of CRMDEMO2011

7: Logout/Login

*IMPORTANT: Logout out as CRM2011NET/Administrator and log back in as CRM2011NET/CRMDEMOADMIN.  Installing SQL and CRM as the domain administrator will cause strange installation errors.

 

Install SQL Server 2008 R2

1: Login to CRMDEMO2011 as CRM2011NET\CRMDEMOADMIN.

2: From the host machine unmount the Windows Server 2008 R2 and mount the SQL Server 2008 R2.  When you mount SQL Server R2 from the host machine go to CRMDEMO2011 and run the SETUP.EXE from the ‘D:’ drive.

3: Install a new instance of SQL with a minimum of the following components selected:

  Image13

4: Set the service accounts to the CRMSQLADMIN user:

  Image14

5: Add CRMSQLADMIN as an administrator:

  Image15

 

Install IIS and ASP.NET

Installing IIS is accomplished by adding the Web server role to the server using the server management console. In addition to the IIS role we’ll need ASP.NET, which must be selected separately. Once these two things are selected, the installer will install them both simultaneously.  Starting the Server Manager can be started from the commandline:

C:\>ServerManager

1: Select Web Server (IIS) by selecting Roles -> Add Roles:

  Image16

Continue... Microsoft Dynamics CRM 2011 Standalone on VirtualBox Part 2

 

 

 

January 17, 2012

Sabert Corporation uses Scribe to integrate SAP ERP and Microsoft Dynamics CRM

Customer Effective customer, Sabert Corporation, is using the Scribe Data Integration Platform to connect its SAP ERP system and Microsoft CRM. Sabert is a leader in the food packing industry  and has been increasing sales productivity dramatically over the last three years with Microsoft CRM and is now seeing increased efficiency in its reporting as a result of the integration. 

Every day, Sabert pushes all of the customer data from SAP to CRM using Scribe. Sabert’s 70 field sales representatives report that they are saving hours a night per person on clerical tasks now that they can get the information they need — such as order status reports — from CRM through Outlook on their laptops.

Mike Freeman, Director of Information Technology at Sabert knew they needed a partner like Customer Effective to make their CRM project a success; "When we were evaluating CRM solution providers for sales force automation, Microsoft CRM had what we needed: a native Outlook interface, which our field sales already used on their laptops, and the ability to work offline. We knew there would be heavy integration requirements, and we didn’t want to add staff, so we turned to a trusted partner and integration platform."

Read the entire news article on Sabert's success on our Customer Effective News page

Rely on Microsoft Dynamics CRM to Satisfy Increasing Regulator Compliance Burdens and Investor Due Diligence Requests

As a result of the severe market volatility of 2011, the recent downgrade of the US debt rating, the massive shortfall and bankruptcy of MF Global, and the deepening of the Eurozone debt crisis, today’s Institutional investors are much more risk averse. Investors are clamoring for far greater transparency from their money managers, and thus are conducting more rigorous due diligence on a firm’s portfolio holdings, investment selection and allocation processes, and internal operational controls. Besides dealing with more demanding investors, Asset Managers must also be more prepared to withstand and overcome more regulatory oversight and scrutiny as a result of the landmark reform legislation of Dodd-Frank. In both cases, Asset Managers need to have in place sophisticated integrated systems and tools that can demonstrate compliance, promote transparency, and earn the confidence of investors and regulators. To provide timely, accurate, and increasingly on-demand reporting, many Asset Management firms are turning to a centralized CRM hub, such as Microsoft Dynamics CRM 2011, which can integrate with other core portfolio management systems, performance reporting engines, trading platforms, and investor portals.

With its advanced data recordkeeping, management, and business intelligence reporting capabilities, CRM 2011 enables Asset Management firms to quickly and accurately respond to the influx of inquiries from prospects, clients, partners, institutional consultants, and regulators. These Asset Managers are better equipped to reply to mounting requests for data collection and analysis because their client and portfolio data is more organized and easily searchable in one centralized location within CRM. Since Microsoft CRM 2011 offers a consolidated, comprehensive 360 degree view of client information, employees can easily filter, locate, sort, aggregate and report on data in real-time to promptly collaborate and correctly respond to all of the incoming audit, compliance, and investor due diligence requests. Additionally, Asset Management personnel can access and leverage CRM 2011 directly within their Outlook to refer to interaction history with key relationships and stakeholders, monitor capital raising pipelines, automate new fund launch marketing campaigns, track lead and referral sources, and streamline client on-boarding processes. The ensuing combination of increased employee productivity and more informed strategic business decision-making results in enhanced service levels to the firm’s client base. Therefore, the ever-increasing demanding clientele will be more satisfied with their overall investing experience with the firm, and thus be less likely to move their money down the block to a competitor. Furthermore, the firm is more agile and better positioned to adapt promptly to the more stringent regulatory environment to remain in compliance.

On the other hand, Investment Managers lacking a single core CRM system, and instead using siloed legacy applications and spreadsheets will inevitably severely lose assets and market share. Moreover, their widespread operational inefficiencies could potentially place the firm at a higher risk of being out of compliance and ultimately shut down.

Customer Effective is ready to partner with your firm to establish and successfully execute an industry-tailored CRM deployment, which can either be hosted in the cloud or installed on premise. To learn more about the operational simplicity and flexibility of Customer Effective: FinServ for Capital Markets and how we can accelerate your CRM ROI, lower your total cost of ownership, and grow your business, please visit www.customereffective.com.

January 16, 2012

Manually Setting Up Activity Feeds on Forms in Microsoft Dynamics CRM 2011

Microsoft Dynamics 2011 Activity Feeds provide real time notifications and quick sharing of information via quick, short updates. The solution is available on the Dynamics Marketplace here. If you are an online user, and you do not use multiple forms on the entities you want to highlight, simply download, import and publish the solution. You would then go to configure your post entities (step 1 below) and then you are good to go.

If you are using Microsoft Dynamics CRM and you have multiple forms configured for an entity on which you wish to display the Activity Feed wall, you will need to download, import and publish the solution, and then you will need to follow the steps below to ensure the activity feeds are visible on the forms you want to display the wall.

1. Once you have imported and published the Activity Feed Solution, you need to enable yourimage selected entities and enable wall posting. Settings > System > Activity Feeds Configuration. Note that this form uses a text field for entering the entity name (not the more common lookup) and you will need to be careful to use the logical name. Also check the “Enable walls” box. You will need to go then to the entity you enabled and publish it individually.

2. Open an entity form for the entity you want to enable for activity feeds. In this example, we are using accounts. Open the Form Editor.

    • Insert > Tab > One Column
    • Open the Tab to edit the Tab Properties > Display
      • Name= tab_recordwall
      • Label = Record Wall
      • Uncheck “Expand this tab by default”
    • Tab Properties > Events
      • Form Libraries, add msdyn_/ActivityFeeds.Form.js
      • In event handlers, Add
        • Library: msdyn_/ActivityFeeds.Form.js
        • Function: ActivityFeeds.Form.CustomizationUtils.updateRecordWallRenderingState
        • Check “Enabled.
        • Check “Pass execution context as first parameter.

image

3. Save your changes to the tab and return to the form editor. Select the section inside of the Record Wall Tab. Set to ‘One Column’.

4. Back in the Form Editor, click Insert > Web Resource

  • General Tab
    • Web resource = msdyn_/RecordWall.htm
    • Name = RecordWall
    • Visible by Defualt = checked
    • Pass record object…= checked
  • Formatting Tab
    • One column
    • 15 rows (this is flexible, but 15 is standard the standard look).
    • Display border = yes
    • Scrolling = as necessary

5. Save, publish and go!

January 13, 2012

XRM 2011 - Microsoft Dynamics CRM 2011 Style Buttons

Adding a button to a Form is a great way to add additional functionality right where the user is already focused. Today we are looking at a few different approaches to adding a button. First, we’re looking at handling the upgrade for those of you who have already used the 4.0 button inside of 2011 or if you had a 4.0 environment and are upgrading. If you have a clean 2011 environment, then feel free to skip down to the “From Scratch” section.

 

There is already some code floating around to create a 4.0 style button inside of CRM 2011. The button we’re creating will instead create a CRM 2011 style button (i.e. “Example Button”).

image

 

The CRM 2011 button starts gray and then when the user hovers over it, the button will look like:

image

 

Creating our Web Resource

First,name your Web Resource whatever you’d like. In my case, I’m planning to re-use it in various ways, so I’m throwing it in our JS root directory.

image

 

   1: // CRM 2011 Style Button 
   2: // Creates a button from a form field 
   3: // Paul Way - 1/3/2012
   4: function ConvertToButton(fldName, btnLabel, btnWidth, evt){ 
   5:    var btn = '<button id="btn_' + fldName + '" ' + 
   6:                     ' style="width:' + btnWidth + '" ' + 
   7:                     ' class="ms-crm-Button" ' + 
   8:                     ' onmouseover="Mscrm.ButtonUtils.hoverOn(this);" ' + 
   9:                     ' onmouseout="Mscrm.ButtonUtils.hoverOff(this);" ' + 
  10:                  '>' + btnLabel + '</button>'; 
  11:  
  12:    var ctrl = Xrm.Page.ui.controls.get(fldName)._control;
  13:  
  14:    // Add the new button 
  15:    ctrl.get_element().innerHTML += btn;
  16:  
  17:    // Hide the textbox 
  18:    ctrl.get_element().firstChild.style.display = 'none';
  19:  
  20:    // Hide the label (optional) 
  21:    Xrm.Page.ui.controls.get('pager').setLabel('');
  22:  
  23:    // Add Event to the newly created button 
  24:    ctrl.get_element().childNodes[1].attachEvent('onclick', evt);
  25:  
  26: }

 

Modifying our Form

To use this new function, you’ll first need to add the newly created web resource to the form. You’ll also want to have a separate JS web resource to call the ConvertToButton function. In my case, I already have a web resource for contact specific JavaScript. If I didn’t, I would need to create a new web resource and then place my contact specific code there. Here’s an example screenshot:

image

 

By having two web resources for this, you’ll have only one version of your ConvertToButton function throughout your CRM 2011 environment. Let’s say down the road you’ll need to update the function to change the label to “Button”, then you only need to modify one file. In CRM 4.0, you probably had a lot of duplicate code. With CRM 2011, your browser can cache the JavaScript for better performance and it is easier to maintain when organized appropriately.

In our other web resource, the one we setup with the OnLoad, we need the following code.

   1: function contactsOnLoad(){ 
   2:    convertToButton('pager', 'Example Button', '150px', function(){alert("test")}); 
   3: }

 

Why is this so different then the 4.0 code?

If you’ve used the CRM 4.0 code, you’ll notice the code here is a lot shorter. It’s actually pretty different as well.

  • For one, instead of modifying the input element we are actually creating a button HTML element. This just means that we can now use about any kind of field instead of just pure textboxes. Not a huge deal, but opens up the email address 3 and other attributes.
  • Both are really unsupported but the other uses the deprecated crmForm.all.
  • Finally, the button style was meant for 4.0 whereas now we have the 2011 look-n-feel.

 

From Scratch

So far we’ve mainly focused on if you already were using the 4.0 code and were upgrading. But what if you don’t have the existing code structure? I’d argue against creating a new attribute just to have a button. When adding a new attribute, you are also adding the attribute to the underlying SQL tables and views. Using an existing field isn’t really a great option either because there is always the chance you will need the field or it will overlap with an application from the MS marketplace.

Instead, I’d recommend creating a button place holder web resource and then embedding the web resource on the page. The web resource is just a JPG image like this:

image

 

We then place the image wherever we want on the form. Make sure to set the formatting to one column and one row.

image

image

 

Finally, we need a little bit of code added to the /js/formButton.js web resource:

   1: // CRM 2011 Style Button 
   2: // Creates a button from a form field 
   3: // Paul Way - 1/3/2012
   4:  
   5: function convertWebResourceToButton(fldName, btnLabel, btnWidth, leftMargin, evt){ 
   6:    var btn = '<button id="btn_' + fldName + '" ' + 
   7:                        ' style="margin-left:' + leftMargin + ';width:' + btnWidth + ';" ' + 
   8:                        ' class="ms-crm-Button" ' + 
   9:                        ' onmouseover="Mscrm.ButtonUtils.hoverOn(this);" ' + 
  10:                        ' onmouseout="Mscrm.ButtonUtils.hoverOff(this);" ' + 
  11:                      '>' + btnLabel + '</button>'; 
  12:    
  13:    var ctrl = Xrm.Page.ui.controls.get(fldName)._control.get_element().childNodes[1];
  14:  
  15:    // Replace image with buttom 
  16:    ctrl.innerHTML = btn; 
  17:    
  18:    // Add Event to the newly created button 
  19:    ctrl.firstChild.attachEvent('onclick', evt);
  20:  
  21: }

And as for our OnLoad function, we’ll need to use this instead:

   1: function contactsOnLoad(){ 
   2:    convertWebResourceToButton('WebResource_btnProfInfo', 'Another Approach', '150px', '119px', function(){alert("test2")}); 
   3: }

Notice that this will require an additional parameter for the left margin.

image

 

Summary

As you can see, there are several different approaches to adding a button onto the CRM form for 2011. With 2011, I’d opt for using the button place holder image method. No matter which approach you take, the end goal is enhancing the user’s experience. I hope you enjoy!

January 12, 2012

Track In Microsoft Dynamics CRM Or Set Regarding?

In working with users over time, we have routinely advocated the use of Set Regarding for tracking emails or appointments (or Set Parent when it comes to contacts).  Sometimes I’ll do such a good job of communicating my point that I’ll get the question of “Well why should we use Track In CRM at all?”.  It’s a fair question.

image

When it comes to adding records in CRM the difference between using Set Regarding and Track In CRM is significant.  Set Regarding allows users to file the email or appointment or task against a CRM record such as an account, an opportunity or even a custom CRM entity directly. In our case, we use CRM to track our projects in addition to our accounts or opportunities.

In this sample email, I’m going to use Set Regarding to track it directly against a project:

image

I won’t go through all the details here, but this is the start.  Now if I had just hit Track In CRM, it would be associated only to the recipients of the email as well as the senders, be they users or contacts. (These activities would also rollup to their parent records as well by default). CRM would attempt to resolve against the user or contact email addresses.  With that said, there would be no context for the email against an opportunity or account or project.  That is why Set Regarding is so nice: it does the job of Track In CRM and then some.

With that said, there is a good reason to use Track In CRM. Lets take a look at what happens with a received email before and after Track In CRM is clicked:

image  image

 

For a received email, clicking Track in CRM exposes the Convert To, Add Connection, or View in CRM.  The main point I want to focus on is the Convert To option.  As the screen shot indicates, users can convert that email to either an Opportunity, Case, or Lead. In the following example, I would convert this email to an Opportunity:

image

This allows you to quickly create the record, without a lot of clicks.  I’ve used this in the past when I received a support request from a customer as well as new business inquiries.

I’ve consciously noted that the above was a received email, and wanted to point out that sent emails have their own options of Insert Template, Insert (KB) Article, or Attach Sales Literature.

 

image

 

So in summary, Track In CRM is especially useful for creating new records in conjunction with the Convert To feature.  As a best practice use the Set Regarding, but keep this option in mind.

CRM 2011 - iFrames & Saving

After spending time on several of the CRM forums, I noticed a few people having trouble with iFrames and saving data inside of the iFrame. While a forum post is a little difficult to write a full response, I wanted to share some insight on capturing the form save event to then trigger a save event inside of your iFrame.

From a business case, this is a fantastic way to tie multiple systems together. If all you are doing is syncing data, then look first at a plugin or scribe. However, if you are looking for the user to interact with multiple systems simultaneously, then an iFrame is a wonderful way to integrated with an existing system. A good example might be where CRM is only storing the summary information and the iFrame contains the details. The user may update the details which should save both the CRM record and the details of the web site.

 

Prerequisites

First, let’s assume you have an iFrame inside an entity.

Secondly, we need to uncheck the “Restrict cross-frame scripting” check box on the iFrame properties.

image

Lastly, it’s a good idea to make sure our iFrame is using HTTPS to prevent mixed mode security warnings.

 

Talking Directly

If you try to talk directly to the iFrame via something like:

Xrm.Page.ui.controls.get('IFRAME_opp').getObject().contentWindow.document

Unless you are On-Premise, you may encounter the “Access is Denied” warning. This will show itself when dealing with URLs on a different domain (or subdomain). Cross domain scripting is a security feature within the browser. Now an easy fix is to disable the browser settings, but this isn’t a good solution.

 

Messaging

Instead of talking directly, we need send a messages to our iFrame. To send a message, we’d do something like:

Xrm.Page.ui.controls.get('IFRAME_opp').getObject().contentWindow.postMessage('test', "*")

To receive the message on the iFrame, you need to listen for the message event. Let’s take a look at the JavaScript on our example iFrame page:

   1: function receiveMessage(e) {
   2:   
   3:    if (e.origin == 'https://way.crm.dynamics.com'){
   4:  
   5:       if (e.data == 'test'){
   6:          document.getElementById('msgBox').innerHTML = 'testing...<br />' + e.origin + '<br />' + e.data; 
   7:       }
   8:  
   9:       if (e.data == 'save'){
  10:          saveForm();
  11:       }
  12:    }
  13:  
  14: }
  15:  
  16: saveForm = function() {
  17:    document.getElementById('msgBox').innerHTML = 'saving...';
  18: }
  19:  
  20: window.attachEvent("onmessage", receiveMessage);

 

It is very important to check the origin and the message if you are dealing with publicly facing sites.

If the idea of messaging is new to you, here are some additional resources:

 

The OnSave

To initiate the message from the CRM 2011 form, you need to register an OnSave event from within the “Form Properties”.

image

 

How about .NET Pages?

If your iFrame is an ASPX page, all of this still applies. The only difference is that you want to have an ASP.Net button on your page to call the server side code. Instead of the saveForm event, simply call the click event of the button.

When dealing with server side saves though, you can either post a message back to say “I’m done” which will then complete the CRM save or you can put a set timeout in the onSave on the CRM side.

 

Conclusion

Hopefully you have seen how easy it is to integrate with another web site while inside of CRM 2011. If you have had problems with iFrames in the past, I really encourage you to use iFrames for your integration needs as they can really enhance your users experience and can allow for improved data across systems. I hope you enjoy!

January 04, 2012

Auto-Creating Contacts and Duplicate Detection in Microsoft Dynamics CRM 2011

As we have mentioned in previous posts, one of the new features in CRM 2011 for Outlook is the ability to automatically create new contact records if you track an e-mail with an address that does not exist in CRM.

This feature is turned on by default, and is located toward the bottom of the “E-mail” tab of user settings in CRM for Outlook.

image

As you plan your roll-out of Microsoft Dynamics CRM, you should be aware of the default options and how they may interact with other application features.

One example that I’ve seen with this new feature, is that when you track an e-mail and the system creates a new contact, if duplicate detection is enabled, and the contact being created matches another contact in the system, the duplicate detection process will prevent the contact from being created, and also prevent the e-mail from being tracked.

If you find that periodically you are getting errors when tracking e-mails, I recommend testing with the automatic contact creation feature disabled.

Entity Relationship Diagrams in Microsoft Dynamics CRM 2011

Visual representation of entity relationships and metadata can be very useful in a CRM project. Thankfully, Microsoft has provided pre-built Entity Relationship Diagrams (ERD) for the eleven of the most important out of the box entities in CRM2011. They are available here in Visio format.

You can also create ERDs for custom entities. The generator is buried deep inside of the SDK (…\sdk\samplecode\cs\metadata\diagram ). You will need Visual Studio and Visio 2010 to run the document generator.

1. First, open the above file path and open the file MetadataDiagram.csproj in Visual Studio.
2. Next, from the toolbar, click the Build Solution icon.meta1
3. You could run the program now. However, it will map all of the entities, their attributes and their relationship to each other. This will take a very long time, but more importantly, it's complexity may render it useless to most people. What I have found useful it to map one entity at a time, or at the most two or three.
4. In order to draw one or more specific entities, click the debug tab, then enter the logical name in the Command line argument box. You can enter as many entities as you would like to map here. For instance, if you would like to map accounts, then simply enter "account". If you would like to map an custom entity then enter "new_entityname". If you would like to map the relationships between you custom entity and accounts, then enter "account new_entityname". Remember, that will map your new entity, accounts, and the relationships between them. If you want a map for accounts and another map for your custom entity, you will need to run the program twice.
5. To run the program, hit the Start Debugging button in the toolbar.
6. This will bring up a command prompt. It will ask for a CRM server and a port. It is very simply orgname.domainname.net (no https:, etc.) Then you enter your username and password just as you would if you were logging into CRM as a user.CP1
7. The program will run (usually a few minutes) and create a Visio document in the path: (..sdk\samplecode\cs\metadata\diagram\bin\Debug ). The name of the file will be simply "account.vsd". It is important to note that if you use the program to create another account diagram, and there is already a file called "account.vsd" in the Debug file, the command prompt will issue an error and the document will not be created. It is a good best practice to move your finished files from the Debug folder as you finish them.


A sample of the output is below. This is for the entity 'sharepointsite' in ootb CRM.

sp1

January 03, 2012

Microsoft Dynamics CRM 2011 – Pre-Populated Emails (Alternative Approach)

Recently, we came across the need for a single-click email feature on the ribbon of a custom entity.  The idea was to be able to share CRM data as quickly and easily as possible.  Another interesting caveat was the client wanted to have the email come directly from Outlook.

For those of you old enough to have used the internet before the iPad, you may recall that fancy-dancy “mailto” feature.  (Granted I’m only 29 but my Omron body age says I’m 50 Surprised smile).

Back to the point at hand though, CRM already has a few built in email features.  Our situation calls for something a little different.

 

What’s Installed By Default

CRM already has the feature of sending a link to the CRM entity you’re working with.

image

 

CRM also has a really nice Email Template feature.

image

 

Which can automatically mail-merge information pertaining to the entity to eliminate any of that “automated” feel.

image

What We Need

Our situation is somewhat unique, but really we want both features combined.  We want to open a new message like the link feature: inside outlook and with one click.  However, we need more than just the link.  We want to have a brief summary of the call report with a  link to it. 

Here’s an example email of what we’d like to send:

image

 

Adding the Button

The first thing we need to do is add the button to the ribbon like so:

image

If you are unfamiliar with the ribbon, Microsoft offers some really nice walkthroughs.  I’d start with http://msdn.microsoft.com/en-us/library/gg334341.aspx.

For our situation, the XML that matters is our Action

<Actions>
   <JavaScriptFunction Library="$webresource:cei_example.js"
                       FunctionName="emailContact" />
</Actions>

 

Adding our JavaScript

At this point, the button should be on the form.  From here, we need to add the JavaScript to open our populated email message.

To do this, add to the Form OnLoad events the following function:

emailContact = function() {
   if (Xrm.Page.data.entity.getId() != null) {
      var sRptID = Xrm.Page.data.entity.getId().replace('{', '').replace('}', '');
      var sLink =  "
http://paul.customereffective.com/userdefined/edit.aspx?id=" + sRptID + "&etc=10011";

      var sSubject = 'Contact - ' + Xrm.Page.getAttribute("firstname").getValue() + ' ' + Xrm.Page.getAttribute("lastname").getValue();
      var sCustomer = '';
      if (Xrm.Page.getAttribute("parentcustomerid").getValue().length > 0){
         sCustomer = Xrm.Page.getAttribute("parentcustomerid").getValue()[0].name;
      }
      var sBody = '---\n\nCustomer:\t' + sCustomer + '\n\n' + sLink + '\n\n---';
        
      var sMailTo = 'mailto:?subject=' + escape(sSubject) +
         '&body=' + escape(sBody);

      parent.location=sMailTo;

   } else {  
      alert('You must save the contact before emailing.');
   }
}

 

 

Note: If you change the name of the function, make sure it matches the name inside your Ribbon XML.

 

What about Window.Open

If you use Window.Open to trigger the email (or OpenStdWin), the user will get a blank IE page inside of Outlook. By using the parent.location for your mailto, you’ll have a consistent user experience across IE and Outlook.

 

Seeing the Final Results

Now whenever a user wants to share a call report, they can easily hit the “Email Call Report” button.  Add any of the fields you want. 

image

For our needs I ended up with the following; however, this technique can add whatever field you’d like.

image

 

Well this isn’t a tool in the toolbox I’d use daily, it can be valuable when the situation calls for it.  I hope you enjoy!

Search The Blog

  • Search the Blog
     

    WWW
    this blog

Twitter Updates

    follow me on Twitter