-
Enabling Quick Find of Disabled Records
This week we discovered a requirement to allow the user to perform a Quick Search on both active and close Opportunity records. Engage Incorporated has an article on how to do this, but for some reason, when I tried their technique, it didn’t work. So, here is my alternative.
1) Export the Entity in question. In my case, it was Opportunity.
2) Locate the Quick Find view.
3) Change filter type from this:
<condition attribute="statecode" operator="eq" value="0" />
to this:
<condition attribute="statecode" operator="not-null"/>
4) Save the customizations.
5) Import and publish the customizations.
This will allow the Quick Find operation to find Opportunity records no matter what their state is ( active, canceled, closed, etc. ).
And yes, this is unsupported.
Administration, Dynamics CRM, Unsupported 794 views -
Testing Customizations as a Normal User
This will probably be old news to most of you, but for those who are just starting with CRM, you should have a methodology in place to test your customizations as a normal user.
The Basics
You should have at least one test user for each role in which normal users exist. Normal being not-CRM Administrators. This will allow you to test the functionality of your customizations and custom solutions as each type of user.
While this may not seem like a huge issue, you need to keep in mind that CRM alters the environment and the user interface based on the user’s security. This means that sometimes they will not see things you expect them to or they will have permissions issues where you least expect them.
How to Test
Prior to Windows Vista and Server 2008, you could simply right-click on the Internet Explorer icon, select Run As, then supply the credentials of whatever test user you wished.
Unfortunately, Microsoft changed that behavior and according to this article, it no longer works. Thanks guys.
A possible work-around is using the ShellRunAs commandlet found here.
It is supposed to provide this functionality but I’ve had mixed results ( probably didn’t follow the directions properly ).
So if you’re using Vista or Server 2008, should nothing else work, you can always just Switch Users and log into the machine as the test user.
What to Test
Here are the usual suspects for testing customizations within CRM:
- The Site Map ( left-hand navigation )
- ISV.Config ( buttons and menus )
- JavaScript ( does your custom JavaScript work with all users )
- Custom Solutions ( any custom ASP.NET code you have written and added to CRM )
- Processes. If you have a process that moves data through the system, test it from start to finish as the particular user or users who actually perform the work to make sure you’re covering the whole process as a “normal” user and experiencing what they experience.
Conclusion
This is, at the very least, the minimal amount of testing you need to perform on a customized system. You can get as comprehensive and complex as you desire.
If you will document your testing procedures and steps and repeat those each time a change is made, you should be able to more quickly identify problems and create solutions before your changes reach the hands of the users.
Administration, Customization, Dynamics CRM, Installation 608 views -
CRM 4.0 Hotfix Rollup 6 Released
Via Susan Bradley:
Download the rollup here.
Read the KB Article for more info.
Dynamics CRM 553 views -
CRM Customization File Best Practices
Today I thought I’d share what I think are some best practices when working with CRM’'s customization files.
Procedure
When exporting customizations for either edit (ISV.Config or Site Map ) or transport, I always save them to disk so I have a reference copy of the customizations.
Location
Pick a specific folder on your system an always store your exported customization files there. It helps to always have your customizations in a central place should you need to revert or refer back to a previous version.
File Naming Convention
Over time, I’ve developed the following convention to help me organize my export files:
[organization]-[dev/prod]-[entity]-customizations-[date].zip
Examples:
contoso-dev-sitemap-isvconfig-customizations-0820.zip
contoso-prod-all-customizations-20090820.zip
If I am exporting all customizations, I just use that for the entity name. Since I rarely export customizations for specific entities besides the SiteMap and ISV.Config, I don’t usually have to worry about having too long of a file name.
If you are working on a development team, you may also add your name ( or email alias ) to the file name so everyone knows who saved the customizations.
Unpacking
If I need to edit the exported customizations, I will first unzip them into a folder with the same name as the .zip file so that I can edit a copy of the customization file. This also gives me a reference copy of the file should I need it later.
Editing
If at all possible, use Visual Studio to edit the customization.xml file. This will prevent possible illegal formatting that will prevent CRM from reloading your customizations.
Now this is probably a duplication of effort, but the first thing that I do after opening the file in Visual Studio is perform a Save As operation, giving the new file the following name:
customizations-NEW.xml
After editing, this is the file that will, of course, be re-imported into CRM.
Conclusion
Well, that’s about it for today. While most of what I’ve shared is pretty much common sense, I thought I’d write about it so that people just starting have a starting point when working with customizations.
If you have your own best practices, I’d love to hear them.
Customization, Dynamics CRM 800 views -
Free Utility: Run CRM Deletion Service
Shortly after CRM 4.0 was released I discovered a need to have a utility to run the CRM Deletion service on-demand and not wait for it to automatically cycle.
This functionality is extremely useful when perfecting data import processes where you are supplying the IDs of the item being imported.
So, I wrote a utility that would call the internal CRM Deletion Service function to run the service against a specific CRM organization.
You will find this utility in the Free Utilities section.
Caveats
This utility utilizes and internal and undocumented CRM function call.
Undocumented translates to unsupported by Microsoft so you will be using this utility at your own risk.
That being said, I’ve used this utility for well over 18 months and have never had an issue. It’s a fairly binary equation: it runs the deletion service or it doesn’t.
I’m finally publishing it because I continue to run into situations where i need this functionality and I figure that if I need it, other people might as well.
Alternatives
If the above statements make you a little uncomfortable, you can always download the CRM 4 ScaleGroup Job Editor. Which can perform roughly the same functionality as this utility.
Administration, Dynamics CRM 1,220 views -
Thought of the day ( August 8th, 2009 )
I passed a guy on the freeway yesterday in an early 90’s model Toyota van missing a hub-cap on the front-left rim and doing just a hair over 70mph.
With the windows down and an outside temperature of 96 degrees, I’m sure the A/C was out and that he wasn’t just going for a nice quiet ride in the country.
Wearing a faded baseball cap and smoking a Marlboro, the two-handed death grip he had on the wheel rather led me to believe that he was going to ride her down to the end – whenever and wherever that might be.
Meanderings 308 views -
Changing CRM’s Customization Navigation
If you’re like me and spend much of your day importing, exporting, and publishing customizations, you’re probably a bit tired of some of the excess clicking required to accomplish those processes.
I dedicated a bit of time yesterday researching how I could move the main Customize, Export, and Import functions from the Customization page to the left-hand navigation so that these functions could be accessed with a single click. Here’s what I came up with:
This is all done using modifications to the CRM Site Map.
Step 1
The first step in this process is modifying the Settings area and adding the ShowGroups option, as shown below:
<Area Id="Settings"
ResourceId="Area_Settings"
Icon="/_imgs/settings_24x24.gif"
DescriptionResourceId="Settings_Area_Description"
ShowGroups="true">
Step 2:
We need to add a new Group containing the new navigation items. It should look something like this:
<Group Id="m3_customizations"> <Titles> <Title LCID="1033" Title="Customizations"/> </Titles> <Descriptions> <Description LCID="1033" Description="CRM Customization Functions"/> </Descriptions> <SubArea Id="m3_customize" Icon="/_imgs/SystemCustomization/ico_entityManagement.gif" Url="http://crm/contoso/tools/systemcustomization/systemcustomization.aspx?pid=01" AvailableOffline="false"> <Titles> <Title LCID="1033" Title="Customize Entitites"/> </Titles> <Descriptions> <Description LCID="1033" Description="Customize Entities"/> </Descriptions> </SubArea> <SubArea Id="m3_exportcustomizations" Icon="/_imgs/SystemCustomization/ico_exportCustomizations.gif" Url="http://crm/contoso/tools/systemcustomization/systemcustomization.aspx?pid=02" AvailableOffline="false"> <Titles> <Title LCID="1033" Title="Export Customizations"/> </Titles> <Descriptions> <Description LCID="1033" Description="Export Customizations"/> </Descriptions> </SubArea> <SubArea Id="m3_importcustomizations" Icon="/_imgs/SystemCustomization/ico_importCustomizations.gif" Url="http://crm/contoso/tools/systemcustomization/systemcustomization.aspx?pid=03" AvailableOffline="false"> <Titles> <Title LCID="1033" Title="Import Customizations"/> </Titles> <Descriptions> <Description LCID="1033" Description="Import Customizations"/> </Descriptions> </SubArea> </Group>
The new Customizations Group contains three subareas: Customize, Export and Import. Each points to the URL that handles that specific function within CRM. This is the same URL that CRM uses, we’ve just moved it into the navigation structure.
Caveats
The only real issue that I have with this solution is you must specify the full URL to these sites. I tried a relative path but it would not display properly. This is an issue if you are moving customizations between servers and/or organizations but it’s not a huge issue to overcome.
You’ll also notice that I only moved three of the six items on the Customization page. The other three items are used so infrequently that they don’t warrant occupying space within the navigation structure.
Customization, Dynamics CRM 966 views -
JavaScript: Get a value from a parent form
It is not an uncommon requirement to pull data for from the parent entity of the current record. In many cases, this child entity is only created from its parent so we can simply just reference the window.opener object to get a reference to the parent form.
An example would be creating a new Contact or Order from inside the Account form.
I got tired of writing this code over and over so yesterday I set down to attempt a solution that would be dynamic and I could just call from the Form’s OnLoad event. Here’s my solution:
function GetParentFormFieldValue(fieldName){var retVar = null;
if ((window.opener != null) &&(window.opener.parent != null) &&(window.opener.parent.document != null) &&(window.opener.parent.document.crmForm != null))
{eval("retVar = window.opener.parent.document.crmForm.all." + fieldName + ".DataValue");
}
return retVar;}
It is used like this:
crmForm.all.name.DataValue = "New order for " + GetParentFormFieldValue("name");
Customization, Dynamics CRM 1,501 views -
CRMJavaScript Export Updated (v1.2)
I made a small addition to the JavaScript export tool this week. It will now create a text file in .CSV format with a list of all of the JavaScript events it finds:
Entity Attribute Event I found that I needed this list as I was reviewing the CRM system at one of my customers. This file can be imported into Microsoft Excel and used as a checklist to determine your progress as your review, clean up, or make changes to any events within the system.
Dynamics CRM 494 views -
Free Utility: CRM Export
Based on the conversations I had with people after releasing the JavaScript Export utility, I decided to go ahead and release a second utility I created that will export all customizations from a specified CRM entity.
CRM Export is a command-line tool that allows you to specify connection and configuration information as parameters. This will allow you to execute the utility in an automated manner using Windows Scheduler.
You will find CRM Export in the Free Utilities section.
Customization, Dynamics CRM 655 views





