Passing Exam MB2-631 Microsoft Dynamics CRM 4.0 Customization and Configuration

Hi,

Last week I took this exam and passed with a score of 98. For preparation I used the following training material.

Course 8912: Customization and Configuration in Microsoft Dynamics CRM 4.0 and Working with Microsoft Dynamics CRM 4.0 (Microsoft Press).

I felt the course 8912 training material is more than enough for passing the exam.

(Chapter 11: Introduction to Advanced Customizations :- There weren’t any questions from this chapter it’s just there for our own understanding).

Bye….

Advertisements

Customization Import failed. Error: OrganizationUI With Id =…… Does Not Exist or Failure: new_…: The requested record was not found or you do not have sufficient permissions to view it.

I was getting this error when i was trying to import customization for one of our custom entity from our development server to test server.

The way i resolved was

1) Opened the customization.xml file i was trying to import.

2) Search for the organization id which was mentioned in the event log as one not existing. (OrganizationUI With Id = 42467170-73ec-4b39-8eca-309ab0daece9 Does Not Exist)

3) I found the id in the  <FormXml id=”{42467170-73ec-4b39-8eca-309ab0daece9}”> tag.

4) I exported the customization for the same entity from my test server.

5) In the customization file(test server) i found out it had different id for FormXml.

6) Replace the id value for FormXml in the development server’s customization with id i found at the test server for the same entity.

7) Than i tried importing this newly modified file and it imported without giving any error.

Bye…

PreEntity and PostEntity Images in CRM 4.0

Hi ,

When writing callouts for CRM 3.0, we were provided with PreEntityImageXml and PostEntityImageXml as a parameter to methds being overrided by us.

We could specify the fields for the same in the callout.config as prevalue and postvalue tag.

But the things have changed a bit in CRM 4.0.

Here we have to implement the Execute method found in the interface IPlugin.

public void Execute(IPluginExecutionContext context)

Here first we will register our assembly using Plugin Registration Tool

Than we will register a new step and specify the message against which we want to run our plugin.

After this comes the step where we will Register  new image.

In Register New Image dialog box

We can specify Pre Image and Post Image depending upon pre or post event. (Only for post event we can have both pre and post image)

Parameters -Here we can either specify certain fields or can select all attributes.

Entity Alias – Give a name to our image which we will refer in our code. (eg. say we gave LeadImage)

Now to access these values within our plugin we need  to do the following:-

Cast it into a DynamicEntity
DynamicEntity preLead = (DynamicEntity)context.PreEntityImages[“LeadImage”];
DynamicEntity postLead = (DynamicEntity)context.PostEntityImages[“LeadImage”];

For getting the id of the entity ( unlike crm 3.0 we don;t have entity context over here )

Key keyLeadId = (Key)postLead.Properties[“leadid”];
string leadId = keyLeadId.Value.ToString();

For lookup field use this line of code

Lookup lkpLobPre = (Lookup)preLead.Properties[“new_linesofbusinessid”];
strPreLobGuid = lkpLobPre.Value.ToString();
Lookup lkpLobPost = (Lookup)postLead.Properties[“new_linesofbusinessid”];
strPostLobGuid = lkpLobPost .Value.ToString();

For owner field

Owner ownerLead = (Owner)postLead.Properties[“ownerid”];
strPostOwnerGuid = ownerLead.Value.ToString();

For money field

CrmMoney estimatedvalue = (CrmMoney)postLead[“new_expectedrevenue”];
strExpectedRevenue = estimatedvalue.Value.ToString();

For string field

String geoName = (String)postLead[“new_geographyidname”];

For picklist field

Picklist leadqualitycode = (Picklist)postLead[“leadqualitycode”];
strRating = leadqualitycode.name;

Bye

CRM 4.0 – Exception: Unhandled Exception: System.Net.WebException: The request failed with HTTP status 401: Unauthorized.

Hi,

I was facing this error when i was writing a plugin that was using CrmService.

After searching on internet i found out this

The problem was because Friendly name and Organization name were different.

The solution for it was

1. Launch Deployment Manager on the Web server
2. Select the Organization, Right Click -> Disable
3. RightClick Again and Click Edit Organization
4. Change the Organization Name and FriendlyName to be the same
5. Click Next and Finish.

solution

Bye

Invalid action error-Microsoft Dynamics CRM 4.0

I was getting the Invalid Action error when trying to open Microsoft CRM 4.0.

And in the event log i could see the following entry.

Event Type:    Error
Event Source:    MSCRMKeyGenerator
Event Category:    None
Event ID:    18949
Date:        6/11/2008
Time:        4:59:35 PM
User:        N/A
Computer:    D-4526
Description:
Current active key (KeyType : CrmWRPCTokenKey) is expired.  This can indicate that a key is not being regenerated properly.  Current Active Key : CrmKey(Id:6e254808-b21d-dd11-9041-001d7d22e1af, ScaleGroupId:00000000-0000-0000-0000-000000000000, KeyType:CrmWRPCTokenKey, Expired:True, ValidOn:05/09/2008 10:23:58, ExpiresOn:06/11/2008 10:23:58, CreatedOn:05/09/2008 10:23:58, CreatedBy:NT AUTHORITY\NETWORK SERVICE.  Key Setting :

Starting the Microsoft CRM Asynchronous Processing Service on the server solved the problem for me!!!

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly ‘Microsoft.Crm.Sdk….’

I created a simple plugin and when I was trying to register the plugin through the plugin registration tool I was getting the follwing error

Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly ‘Microsoft.Crm.Sdk, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ or one of its dependencies. The system cannot find the file specified.

at System.Reflection.Assembly._GetExportedTypes()

at System.Reflection.Assembly.GetExportedTypes()

at PluginRegistrationTool.AssemblyReader.RetrievePluginsFromAssembly(String path) in C:\Documents and Settings\arvinds1\Desktop\PluginRegistration\AssemblyReader.cs:line 59

at PluginRegistrationTool.AssemblyReader.RetrievePluginsFromAssembly(String path)

at PluginRegistrationTool.RegistrationHelper.RetrievePluginsFromAssembly(String pathToAssembly) in C:\Documents and Settings\arvinds1\Desktop\PluginRegistration\RegistrationHelper.cs:line 49

at PluginRegistrationTool.PluginRegistrationForm.btnLoadAssembly_Click(Object sender, EventArgs e) in C:\Documents and Settings\arvinds1\Desktop\PluginRegistration\PluginRegistrationForm.cs:line 127

 

The way I resolved the issue was by adding the microsoft.crm.sdk.dll to my machine’s GAC !!

I hope it works for others as well !!!

Many to many relationship in CRM 4.0 and Fetch XML

We have a custom entity called line of business (lob) for different line of business’s in our organization.

In CRM 3.0 there was no way we could have associated the lob custom entity with the system entity Team as there was no way of creating relationship between them.

But in CRM 4.0 we can now create a many to many relationship between the two.

Creating a many to many relationship between the two creates a new entity

new_team_new_lineofbusiness

Now say we want to write a custom code to retrieve all the teams associated with a given line of business, we can write something like below ( If we use query expression and retrieve multiple request it gives the error message saying that RetrieveMultiple is not supported on this entity)

This is the custom code for that

// setting the authentication token

CrmAuthenticationToken token = new CrmAuthenticationToken();

// 0- refers active directory

token.AuthenticationType = 0;

token.OrganizationName = “organizationname”;

 

CrmService crmService = new CrmService();

crmService.Url = http://servername/mscrmservices/2007/CrmService.asmx&#8221;;

crmService.Credentials = System.Net.CredentialCache.DefaultCredentials;

crmService.CrmAuthenticationTokenValue = token;

 

string fetch2= @”<fetch mapping=’logical’>

<entity name=’new_team_new_lineofbusiness’>

<attribute name=’teamid’ />

<filter>

<condition attribute=’new_lineofbusinessid’ operator=’eq’ value=’C4BE129E-9B3C-DB11-8CBA-001185E68627′ />

</filter>

</entity>

</fetch>”;

 

// Fetch the results.

try

{

String result2 = crmService.Fetch(fetch2);

MessageBox.Show(result2);

XmlDocument doc = new XmlDocument();

doc.LoadXml(result2);

XmlNodeList xnodlist = doc.GetElementsByTagName(“teamid”);

string teamID = “”;

if (xnodlist.Count != 0)

{

for (int i = 0; i < xnodlist.Count; i++)

{

XmlNode xnodRoot = xnodlist.Item(i);

teamID = xnodRoot.InnerText;

}

}

}

catch (SoapException ex)

{

MessageBox.Show(ex.Detail.InnerText);

}

Bye