Tuesday, November 29, 2011

Unable to cast object of type 'Microsoft.Xrm.Sdk.Entity' to type '....'

When you use early bound classes to query the data in CRM 2011 you will get InvalidCastException with above error message when you are missing "serviceProxy.EnableProxyTypes();" at your OrganizationServiceProxy as below.

Wednesday, August 10, 2011

Example of CCA Hosted Web Application with Bing Search

Customer Care Accelerator (CCA) introduced for Microsoft Dynamic CRM 2011 is built using robust Microsoft User Interface Integration (UII) framework and CCA is the collection of hosted applications (CRM, Case, My Dashboard, Dialer, CTI, Notepad…  ), which work together to provide desired functionality.
So we shall start with simple example application to see how powerful UII framework is.

Requirement

Add a another workflow step “Bing Search” in between existing workflow steps and when user was unable to find CRM knowledge base items, which are related to selected case to resolve case, then user should be able to do Bing Search on internet using case title.

Integration Points:

When user clicks Bing Search, CCA should automatically pick the CRM case title and trigger the Bing Search by case title as below.

Implementation

What a powerful robust UII framework, we can implement above requirement with no any custom code, but just with some configuration entiries.

Create Hosted Web Application


·         First we must create Hosted Web Application using UII Web Application project template and it will ask URL of the hosted web application.

·         Then we must inspect the web application to identify the controls, which we will deal with, using UII inspector. It generates binding, as showing in below screens, required to identify the controls. Ones you pressed the add control button on UII inspector, it will copy the binding into UII web application project.
      Note:You should edit control name, which was auto generated by Inspector, with meaningful unique name. 


·         Create workflow activity to find the case title and do the Bing Search based on title.

Microsoft.Uii.HostedApplicationToolkit.Activity provides pre-defined set of work flow activities to deal with hosed applications within CCA and following sections describe what each activity does in workflow.

Get Control Value


Get the case title from the “CRM Case” hosted web application and assign it to CaseTitle output variable.

Control Finder

Find the control “Search Text”, which will be identified by binding that was generated by inspector, at Bing Search hosted web application.

 

Set Control Value

Set Search Text as CaseTitle, which was initialized at get control value section.

Execute Control Action

This will trigger default action of search button at “Bing Search” hosted web application.

·         Configure Action.
This allows you to configure action detail on Bing Search web application, which will be deployed at CRM 2011,  using workflow we just completed.



Browse work flow we just completed.


·         Deploy web application as a hosted web application on CRM 2011.
This will deploy all configuration entries required to run the application on CCA with CRM 2011. Clicking Deploy on context menu shows the logging window to log into CRM 2011 and it will allow you to deploy hosted web application “Bing Search”.



·         Add “Bing Search” into workflow steps in CCA.

In order to add Bing Search into workflow steps at above location at CCA, you must add below two configuration entries at UII section in CRM setting area.



Then you are good to go. Have fun! We haven’t done any single line of code to do this example.


Sunday, July 17, 2011

Gallery Feature to CRM 2011

One of the requirements that you may need to deal with is, when you develop public facing CRM web portal, showing gallery of images of products, equipment and so on. So how we can add gallery feature to web portal using out of the box CRM functionality? What about if used note section of an entity to attach the images? One of the limitations of note (annotation) entity is, it is not customizable entity. Why we need to customize the note entity? Because we need to identify the attached note images, which need to be displayed on web. Otherwise web portal shows attachments, which were added for other purposes by the user. Proposed solution to handle that situation is having intermediate entity to attach images.





Download Componant

Features of the solution

• Can be plugged this with any entity with 0 code changes.

Note: When you create one to many relationship between your entity and new_Gallery, you must name the lookup field name as "<publisher prefix><entity>id". Publisher Prefix has been set to “new_” in constant class.

• There is back end plugin to copy the images, which will be added to note section of Gallery entity, into the image folder of your web portal. Plugin will remove the image from the web portal, when you removed that image from the CRM note section.

Configuration for testing


• Import CRM solution, which is located at “..\CRM2011.Galleries\CRMSolution”
• Edit EntityName and EntityId properties of the control reference at default.aspx as required.
<uc3:viewgallery id="ctrlViewGallery" entityid="C21106C1-B491-E011-8551-0800270D5292" entityname="product" runat="server"></uc3:ViewGallery>
• Edit App setting values at web.config as required.
<add value="http://localhost" key="CRMServiceUrl"></add>
<add value="OrganizationName" key="CRMOrganizationName"></add>
• Edit below app setting value as required and then add it into the app setting section of web.config of CRM 2011
<add value="C:\ MyBlog\CRM2011.Galleries\images" key="WebPortalImagePath"></add>
• Deploy plugin “CRM2011.Galleries.Plugins” using solution located at CRM2011.Galleries.Plugins\Solution
• Set AppPool to run the web application with required credential to access CRM service.
• Give read write access level permission to CRMAppPool user for the image folder of the web portal.

Then you are good to go.

--Thushara Manchanayake--
http://dynamicscrmhelper.blogspot.com

Monday, February 21, 2011

Default values of Status and Status Reason attributes

When you work with MS Dynamics CRM 4.0 SDK it is very important to know the values of state and status code associated with particular status of record. So below PDF will be very helpful at your work.

Default Values of Status and Status Reason Attributes.pdf


--Thushara Manchanayake--
http://dynamicscrmhelper.blogspot.com/

Sunday, February 20, 2011

Thursday, January 20, 2011

How to write complex quires to get the data from MS Dynamic CRM 4.0 using web service.

Traditional CRM Query Attribute cannot be used to create complex queries and get the data from many entities using joins. Query attribute has ability to join many entities, but there is no way to get the data from few entities using single query. So we should go for Fetch XML.

When we wanted to generate complex queries then fetch XML also become complex. So then we think of way to generate XML using tool. I found nice tool “Fetch XML builder”, which does everything for me. It was the first tool that I found for MS CRM 4.0 and is a very simple user friendly tool that any developer can use it without any help.

Download FetchXML Builder

--Thushara Manchanayake--

http://dynamicscrmhelper.blogspot.com/

Uploading CRM data from one CRM server to another.

Hey… another cool thing that I found in MS CRM 4.0 is this.

Problem Definition:

We need some custom entity to hold configuration data especially when you wanted to develop public facing web portal which uses MS CRM as back end. Then we should upload those configuration data to QA, Staging or Production at the deployment process. Out of the box customization import process won’t be a benefit, since it only imports entity schema, form customization, views and pick list data. And also data import tool available in out of the box CRM cannot be used, when we have complex configuration data such as XML and HTML and so on. So we should think of some custom development or a tool that handles complex data.

Solution:

There were many tools in the internet, that uses excel sheet to import and export data. They were not suitable to my requirement since I have complex data. Importing and exporting complex data from and to excel sheet (comma separated) breaks in the middle. So I thought of way to connect to CRM server and import those data into the grid and connect to the target server and export those data to target server.

I found great tool "Microsoft Dynamics CRM Bulk Update and Export tool" developed by “OrbitOne”, that has grid to hold imported data. But that tool also has no ability to import those data into the grid and connect to another server and export those data. But it has ability to load data into the grid from CRM and edit them on a tool and save back to the same server. Wow…. it was great opportunity for me to customize that in a way that it provides my requirement.

So what I did was load the data into the grid and added button “Change Connection” to launch the logging window, which has connection information to connect to CRM, to change connection to target server. Out of the box tool only has ability to load the data at edit mode. So I added another button “Get from CRM Create Mode” to load data at create mode.

Download Customized Tool (exe)

Download Customized Source Code

To download the file you must agree to the following license.
How to Import and Export CRM data:

  1. Run OrbitOne.CRMUpdater.exe
  2. Provide web service connection info to connect to your source environment.
  3. Select entity.
  4. Select view.
  5. Click "Get from CRM Create Mode".
  6. When data are loaded into the grid then click "Change Connection".
  7. Provide Connection info of CRM to where you need to upload data.
  8. When connection was successful, click “Export to CRM”.

Note: If you are exporting foreign keys, target server should have same keys in foreign key reference entity as the source server.

-Thushara Manchanayake-

http://dynamicscrmhelper.blogspot.com/

Monday, January 10, 2011

Limitation encountered in MS dynamic CRM 4.0

  • Updating CRM attribute type won’t reflect on target entity at import process on another environment.

Actually CRM won’t allow us to update existing entity attribute type and only way to do this is, drop that field from entity and add it back with new attribute type.

As example if you add property “new_field1” back to the entity “SalesOrderDetail” with Bit, where it was initially as decimal, when you import that customization to another environment(to production from development or development server to another development server,..), you will get bellow error at import process and it will log this error at event log.

Customization Import failed. Error: Column names in each table must be unique. Column name ' new_field1' in table 'SalesOrderDetailExtensionBase' is specified more than once.

In order to do this, first you must drop that column from target entity in target environment manually.

  • Some of the important entities are not customizable.

Examples:

I. ServiceAppointment (CRM 2011 allow as to customize this entity)

Many of the real world implementations of MS CRM 4.0 want to associate ServiceAppointment with sales detail or sales order since there could be some items that will be sold with service activity (example: Meeting room booking with some catering items). Since ServiceAppointment is not customizable, implementation of this requirement is not straightforward

II. Announcement (BusinessUnitNewsArticle)

You may want to display announcements on public facing CRM web portal and need to add custom attribute such as new_DisplayOnWebsite to have some control over the announcements to display on public web site. We are unable to do that, since it is not customizable entity. (This required functionality can be handled using simple custom entity something call “new_PublicAnnouncements”)

III. Est..

  • Out of the box CRM tax calculation won’t work for real environment.

Out of the box CRM is having just free form text box for tax and we need to calculate tax manually and enter it on text box at the order. It won’t allow us to manage several type of tax and need to develop new custom tax module on CRM using custom entities.

  • Alter entity won’t reflect on target environment at customization import process.

Dropping attributes (Fields) and entities won’t reflect on target environment at normal customization import process. We should do it manually or need to think about some custom development using CRM metadata web service.

  • CRM 4.0 online does not have ability to deploy plug-ins (This has been addressed by CRM 2011)

  • CRM 4.0 won’t allow us to manage conflicting scenario of customization.

Most elements of CRM customization only support last one wins resolution strategy. So customization done by some can be override by another one

These are the limitations that I have encountered and in my mind right now. So there could be few more.

--Thushara Manchanayake---

http://dynamicscrmhelper.blogspot.com/