Thursday, October 6, 2011

Publishers and Changing a Custom Entity Prefix in MS CRM 2011

I think this is a great new feature in CRM 2011. Please refer to the following article that describes how to do this:
http://support.microsoft.com/kb/2500602

Tuesday, October 4, 2011

Changing the Font Color of a Read-Only Field in MS CRM 2011

I recently got a request to change the font color of certain fields in CRM 2011. I used the below code to achieve this:

function setColor() {
    if (document.getElementById("new_name") != null) {
        //Add the below line if the field is disabled
        document.getElementById("new_name").disabled = false;
        //The below line changes the font color
        document.getElementById("new_name").style.color = "red";
    }
}
Note: Accessing the DOM as shown above is totally unsupported. I had to use the above method since I was not able to find any supported way of achieving this functionality

Thursday, September 1, 2011

Enabling JScript/JavaScript in Bulk Edit CRM 2011

I recently came across a situation where I had to use Jscript while Bulk Editing the records in CRM 2011. As we all know, this is not possible out of the box but thanks to Michael Höhne (http://www.stunnware.com/crm2/topic.aspx?id=BulkEdit) and Microsoft for providing with the KB article (http://support.microsoft.com/kb/949941)

Here is what we need to do:

1. Export the entity as a solution for which JScript needs to be enabled during Bulk Edit.
2. Open the customization.xml
3. Add BehaviorInBulkEditForm="Enabled" to the event handlers as shown below
 
<
event name="onchange" application="false" active="false" attribute="new_day" BehaviorInBulkEditForm="Enabled"
>

<
event name="onsave" application="false" active="false" BehaviorInBulkEditForm="Enabled"
>

4. Save and Import the solution. Your JScript code should now be triggered!

 --Srihari

Wednesday, July 6, 2011

MS CRM 2011 - Cool New Data Import Wizard

Yesterday, while trying to import some data into my dev system, I stumbled upon a cool new feature built inside the MS CRM 2011 Import Wizard - The ability to create an "Entity" and all it's attributes right during the import.
This means that I no longer have to create an entitty and then import the data into it. I can do this in one shot. Thats an AMAZING feature considering I am doing a whole bunch of mock-ups  in order to present to the client :-)

Let us walk through the steps below:

1. I have an excel sheet with some data in the following format. Let me call this "TIMETABLE"


July
Accounts
Management A/c
5
Corporate Financial reporting
Project Planning & capital budgeting
6
Corporate Restructuring
Project Planning & capital budgeting
7
Corporate Restructuring
Project Planning & capital budgeting
8
Corporate Restructuring
Project Planning & capital budgeting
9
Corporate Restructuring
Project Planning & capital budgeting
10
Consolidated Fian Stats
Project Planning & capital budgeting
11
Consolidated Fian Stats
Project Planning & capital budgeting
12
Consolidated Fian Stats
Project Planning & capital budgeting
13
Consolidated Fian Stats
Project Planning & capital budgeting
14
Consolidated Fian Stats
Leasing decisions
15
Consolidated Fian Stats
Leasing decisions
16
Consolidated Fian Stats
Leasing decisions
17
Consolidated Fian Stats
Dividend decisions
18
Consolidated Fian Stats
Dividend decisions
19
Consolidated Fian Stats
Indian capital market
20
Consolidated Fian Stats
Indian capital market
21
Consolidated Fian Stats
Indian capital market
22
Consolidated Fian Stats
Indian capital market
23
Consolidated Fian Stats
Indian capital market
24
Consolidated Fian Stats
Security Analysis
25
Consolidated Fian Stats
Security Analysis
26
Consolidated Fian Stats
Security Analysis
27
Consolidated Fian Stats
Portfolio theory
28
Consolidated Fian Stats
Portfolio theory
29
A/c & reporting of financial instruments
Portfolio theory
30
Revision
Revision
31
Revision
Revision



Now, let's use the Data Import Wizard to create and Import the Time-Table entity into CRM 2011.

2. Open CRM 2011. Click on Tools -->Import Data
3. Click on "Browse" and choose the above excel sheet which was saved in ".csv" format.

4. Click on Next.
5. Verify that the file is uploaded and click on Next again.
6. Choose the Default Automatic Mapping and click on Next

7. Now this is where the real fun begins. Choose "Create New" in the Map Record Types Screen.


8. Specify a name for this entity. In this case I call is Time Table. Click on Next


9. As you can see below, the wizard automatically recognizes the columns from the excel sheet and is asking us to specify the field names in CRM.
10. Since there are no fields yet created, I selected "Create New Field" from the dropdown list.

11. Specify the Field Name and also choose the data type for the field and then click on OK.

12. Perform the same for all the other fields that you want and then finally, click Next.
13. Verify the "Review  Mapping Summary" and click on Next.

14. Specify if you want to allow duplicates and also choose the default owner for the Imported Records. Finally click on Submit.

15. CRM will start creating the entity and the attributes for you as shown below

16. If everything is successful, it should display the screen as shown below.

17. The import job should complete successfully and after that we just need to go to the customization and customize the form and the views as per our requirement.

18. Publish the entity and voila! - we have a new Time Table entity with all the data in it.


I am going to love this feature as creating demos for customers is going to be a lot more easier from now on.

Thanks!


Tuesday, April 19, 2011

Passing the CRM_URL from Parent Record to Drill-Down records

Part 1:

I think most of us know that the CRM_URL parameter in the report allows us to open the CRM record directly from the reports. For those of you who do not know this, you can probably refer to this link: Using CRM_URL Report Parameter

Part 2:

The above feature will work if you are trying to open the CRM record from any main report. In my scenario, I had a main report called 'Contact Category'. Clicking on any category will drill down to another report called 'Contact Details'.  Now, when the user clicks on a particular contact's name, I wanted to open the respective CRM contact record. 
When I tried the steps in the above link, it did not work for me. On further investigation I found that, when we drill-down from a main report into a child report, the child report is opened within the context of the main report i.e. the URL displayed in the address bar will be of the main report and not of the child report. 
As a result, the report does not recognize the parameters that are declared in the child report. 

To resolve this issue, we need to pass the CRM_URL parameter from the main report to any of the child or drill-down reports. To do this, 
a. Create a new "Hidden"  report parameter called CRM_URL in the parent report.
b. Select "Allow null value" and "Allow Blank Value".
c. Now, navigate to the report properties where you specify which drill-down report to navigate to (In SSRS 2008, its Report Properties-->Action-->Go to Report-->Child report)
d. Add a new parameter that needs to be passed to the child report.
e. Select CRM_URL from under the "Name" drop down list
f. Type "=Parameters!CRM_URL.Value" for the value and click on OK.
g. Perform the steps specified in the above link for the child report.

Save and upload your reports. Now, every time you drill down to the child report, the CRM_URL parameter also gets passed from the parent report as a result, allowing you to open the respective CRM record.

Thats it!

Tuesday, April 5, 2011

Resizing the IFRAME in Header in CRM 2011

I was trying to add an IFRAME in the header in CRM form with a height of just 1 row. For some reason. CRM would not respect the 1 row height in the header. It would display about 6 rows always. This was very strange but after posting in the CRM Dev Forum (http://social.microsoft.com/Forums/en-US/crmdevelopment/thread/da61999c-d5e3-45a9-841c-3e09a84782d4/), it was confirmed that this seems to be a bug.
As a workaround, you an try the following code:
document.getElementById('IFRAME_Name').style.height = 35;

OR
document.getElementById("IFRAME_Test_d").parentElement.parentElement.height = 35;
Update - This issue seems to have been resolved with the Update Rollup 1 for MS CRM 2011

Friday, April 1, 2011

Making Notes non-editable after X hours

Recently, there was a requirement from my client that they wanted to ensure that the notes for all the entities be made non-editable after 8 hours from the time the note was created for a specific set of users with say "Salesperson" role.
After some thinking, I came up with the below idea.

1. I gave the "Salesperson" role only User level Write access on the Note entity.
2. Then I created the below workflow on the Note entity :


3. For demo purposes, I wait for only 1 minute after a note is created but you make it wait for as long as you need.
4. As you can see above, I check if the created by is someone other than Administrator. I then wait for a minute and then update the owner of the Note to Administrator.
5. Since a Salesperson has only User level Write access, when he tries to edit this note, he will get an error saying that he does not have sufficient privileges.

Cheers,
Srihari