Friday, December 21, 2007

MSCRM 4.0 Upgrade Successful

Well, we did it. We upgraded to MSCRM 4.0 internally and it is fantastic! There were a few things we had to clean up but it wasn't too bad. We are really excited to be able to use all of the enhancements in our internal system.

Hopefully your upgrade is going just as well or is already completed.

Happy Holiday's!

David Fronk
Dynamic Methods Inc.

Thursday, December 20, 2007

MSCRM 4.0 is now available for download!

Well, it's finally here. Nope, not Christmas, close (at least for all of you MSCRM fanatics out there). MSCRM 4.0 is now available for download. Go to this link to see all of the new available downloads for MSCRM:

http://www.microsoft.com/downloads/results.aspx?DisplayLang=en&nr=20&freetext=CRM&sortCriteria=date

The server bits are up along with a 90 day trail key (both 32 bit and 64 bit), the client bits, email router, documentation, and lots more.

Check it out if you're interested and get lined up for you upgrade to the latest version of MSCRM 4.0!

David Fronk
Dynamic Methods Inc.

Sunday, December 16, 2007

MSCRM 4.0 has SHIPPED

According to Michael Lu, MSCRM 4.0 has shipped. Apparently there may be a couple of days of lag for it to become available for download and for the mass production of the CD's that go out to the masses, but according to the developers, they are done. Now we're just waiting for the bits to become available and then 4.0 will be in our hands.

I hope you're as excited as I am!

David Fronk
Dynamic Methods Inc.

Friday, December 14, 2007

Unsupported Scripts that appear to upgrade

I avoid unsupported customizations as much as possible (mostly because I know I'm the one who has to come back and upgrade the system later and I don't want to have to deal with the headaches) but there are some cases where some "unsupported" customizations end up in being necessary.

Now, let me clarify one thing about unsupported customizations. To me there are 3 types of Customizations:

1. Supported
2. Unsupported "okay" - this is where scripts may not work upon upgrade but no files are changed but nothing from Microsoft is modified or broken. Microsoft support will just turn off your scripts if they give you support and they think that your scripts could be part of the problem reported.
3. Unsupported "bad" - this is where files from Microsoft get modified (ASPX, JS, etc) and everything you do will be overwritten on the next upgrade or repair. Microsoft will not support your implementation if you ever require their support.

The customizations that I am talking about in this post all fall under the #2 category. I refuse to enter into the realm of #3 because I don't want to have to deal with the headaches.

Here is a list of some scripts that I have written or found posted in groups that still work from MSCRM 3.0 to 4.0:

1. Hide a tab
2. Embed a grid in an IFRAME
3. Change the color/font of a text field
4. Hide NavBar Items
5. Hide a field or label
6. Set Field Requirement Level
7. Copy the name of a lookup (the Text version)
8. Change the value of a lookup field
9. Force the type of customer (this is for when people click on the lookup glass so that it only shows the entity type you want it to show, unfortunately it only works if you click on the lookup glass).

Some scripts that need some modification in order to work in MSCRM 4.0:

1. Changing the background color of the entire form
2. Getting the logged in user's name
3. Field Level Security

Hope this brings hope to someone else out there, and prep's anyone who has some "unsupported" scripts out there for the upgrade. It sure made me feel a lot better about upgrading my clients, seeing as the majority of the scripts were upgradeable.

David Fronk
Dynamic Methods Inc.

Tuesday, November 27, 2007

Hide Tabs Script compatible in MSCRM 4.0

One of the things that has been on my mind has been the scripting that has been floating around that modifies DHTML on a CRM form.


One of the more frequent requests that I get and end up in implementing is that of hiding a tab on a form. Below is some code that I have used in MSCRM 3.0 on the Account form to hide the Notes tab from a default set up, but technically, the 4th tab on the form.

Here's the code that I have tested in the beta system I have and my code still worked:

var oType = crmForm.all.address1_addresstypecode;
switch (oType.SelectedText)
{
case "Other":
crmForm.all.tab3Tab.style.visibility = "hidden";
crmForm.all.tab3Tab.style.position = "absolute";
break

default:
crmForm.all.tab3Tab.style.visibility = "visible";
crmForm.all.tab3Tab.style.position = "relative";
break;
}

Now, whenever the option of "Other" is selected from the Address Type field, the Notes tab will disappear.


I'll be testing more scripts to see how much scripting changes I'll be having to make when I upgrade clients to MSCRM 4.0.

David Fronk
Dynamic Methods Inc.

Enabling the Form Assistant from the GUI

In MSCRM 3.0 you do have the ability to remove Form Assistant from a form or set it to being opened or closed when you open a specific form. However, to do that you had to modify the Site Map, not always the easiest thing to modify.

However, in MSCRM 4.0 this is now included in the GUI within the Customizations section. From Customizations, open an entity, open the Form and then click on Form Properities. The first tab you will see will be:



Now changing the Form Assistant is as simple as changing a checkbox and publishing your changes.

Things are just getting easier and easier for Administrators.

David Fronk
Dynamic Methods Inc.

Tuesday, November 13, 2007

Phone Calls and Outlook in CRM 4.0

One of the biggest complaints I hear around activities is that only Appointments, Tasks and Service Activities sync with Outlook Appointment or Tasks. We were always told that since there was no equivilent activity in Outlook, CRM couldn't push the other activities into Outlook.

Well, that's all changed now. The CRM developers finally decided to forget about waiting for Outlook to comply with CRM and decided to just push things into Outlook activities.

Let me state this in big bold letters so that no one misses it:
PHONE CALLS WILL SYNC TO OUTLOOK TASKS IN CRM 4.0.

Everybody got that? I know that I have a number of clients who I talked into using a highly customized Task to accomodate Tasks and Phone Calls so that users would get reminder pop-ups from Outlook about when they needed to make a phone call. This new feature now removes that need and just makes so much more sense. Simple and yet it will make a huge difference to end users (who use activities).

Great things coming in the new version!

David Fronk
Dynamic Methods Inc.

Thursday, November 08, 2007

Duplicate Detection

Here it is, probably the number 1 most requested enhancement from customers to Microsoft: Duplicate Detection.

I have seen some posts that show how the duplicate detection works from an end user point of view and some that have described at high level what it does. My hope is to step you through setting up a duplicate detection rule and showing off the capabilities that Microsoft has put into this.


First off, there is now a new section under Settings called "Data Management." This section allows you to access:


1. Duplicate Detection Settings
a. Specifies when duplicate detection should occur
2. Duplicate Detection Rules
a. Management of the actual rules that check for duplicates in the system
3. Bulk Record Deletion
a. Keep track of large deletions from the system
4. Data Maps
a. Create and Manage Data Maps for Imports

The Duplicate Detection Settings looks like this:

This is great because you can choose whether or not you want to do duplicate checks only on a scheduled basis (to improve user performance), when users create or save records, when users come online, and/or during imports.

Once you have that set, the next step is to actually set up the rule for which you check for duplicates. When you create a new duplicate detection rule you will see the following window (without everything being filled in):

A few things to note here:
1. You can check for duplicates on the same entity OR different entities. So, if you have a fear of somone importing a bunch of names into leads that could exist in contacts or accounts, the system can be set up to check that for you.
2. You have the choice of making the rule "Case-sensitive" or not:
3. Notice that the criteria area is set up in a very similar fashion to Advanced Find. Allowing you to have as many rules as you want (to a limit of a matchcode length of 1000...I'll talk about that more later).

As you build out your criteria lines you have the options to check for:

1. Exact Match
2. Same First Characters
3. Same Last Characters

Below is a set of criteria that I set up to check against the email addresses checking for the first 10 characters on EmailAddress2 and the last 20 characters on EmailAddress3.



Note that there is a "Matchcode Length" maximum of 1000. What this means is that you can check up to 1000 characters, or data items in your duplicate check criteria. Let me give you some examples.

1. Nvarchar (textbox) with a maximum value of 100 are worth a matchcode length of 100. Meaning you could only check up to 10 textboxes that had a maximum length of 100. Even if the entire field is not used on a record it will still count as the maximum number allowed in the textbox.
2. Boolean (bit) take up 2 matchcode length values. 1 for true and 1 for false.
3. Picklist (dropdown) take up 255 matchcode length values.

From this you can see that you will have to mix and match a bit to get your rule just right but still make it under the 1000 matchcode limit. I'm sure it won't be a problem for most people but there will always be those who will hit this limit every time they create a duplicate detection rule.

The main reason that Microsoft has limited the amount of things you can check against is to make the rules manageable. The more complex the check the longer the check will take to run. Thus slowing down the user experience and making your scheduled checks take much longer.

Also, keep in mind that if you make multiple rules on the same entity you will be causing slowness to the system as well. I believe I was told that 4 or 5 rules per entity should be just fine but after that you will start to see a dip in performance. So, just be aware of that. I haven't tested this on a production server yet so I can't say one way or the other.

Once you have your rule set up you then publish the rule and it is applied to whatever your Duplicate Detection Settings are set to.

If you want to see a click through, Phillip Richardson has put up a screencast to show you what the actual check looks like. Here's the link: http://www.philiprichardson.org/blog/post/Titan-Duplicate-Detection.aspx

Great things coming. I'm real excited for CRM 4.0

David Fronk
Dynamic Methods Inc.

Friday, November 02, 2007

MS Readiness CRM 4.0

I just attended the local MSCRM 4.0 Readiness event and got a great overview of a lot of information about MSCRM 4.0.

Here are some of the highlights that I don't think you may have seen.

1. Tracked Emails will not require the Tracking Token. You can use if you want but you now have the option.
2. Through the use of Windows Communications Server you can link IM to CRM. We were told that internal IM would definitely be available but being able to IM your Contacts (using their email addresses) may not be possible. The rep's weren't 100% sure.
3. Reporting will now work while not on the domain and you can do reporting while offline using the Outlook client.
4. Pages have been reduced in size by 66% to make loads and requests faster. Also, the queries to Active Directory (AD) have been significantly reduced. MS actually admitted (finally) that they were causing a lot of chatter between CRM and AD, something they wouldn't do before CRM 4.0 was being released.
5. Security Roles are now exportable. This is great for consultants who have to recreate the same role over and over again from one client to another (it's a lot of clicking). There are actually a lot more exportable items now. Workflow for instance is exportable, which was possible in 3.0 but not from the web or Outlook interfaces. So, that has changed as well.
6. Subjects can now be linked to any entity.
7. Metadata is no longer just read-only. You can write to it and delete from it now programmatically. Great news for all the hardcore developers out there.
8. Supported Configurations
a. Anything that ends in "2000" or earlier is no longer supported (Office, Server, SQL, etc)
b. XP and Vista
c. Internet explorer 6/7
d. Office 2003 and 2007
e. Visual Studio with .NET Framework 3.0
f. Visual Studio 2005 Visual Studio 2008
g. SQL 2005 and SQL Katmai (SQL 2008)
h. Exchange 2003 and 2007
9. Improvements have been made to have CRM Server Roles to farm out functions for the CRM Server. Web App, Platform, SQL Mirroring and/or Farming, etc. Also, a lot of actions, including workflows and custom code will run asynchronously instead of synchronously. By doing this, the user experience should be faster because nearly everything gets pushed to the server to be run in the background.
10. If you have the Outlook client installed and you send an email from CRM it will appear in your Sent Items folder of Outlook. If you don't have the Outlook client installed and you send an email from CRM then it will not be placed in your Outlook Sent Items.
11. A lot of objects have been added to the CRM database, like Workflows or Security Roles, so that they are their own entity and can have reports built off of them, better security, and more flexibility. Workflow will now be much easier to manage and report on with this change. Workflow Monitor was functional but was really lacking. I don't know of any out of the box reports that are coming for Workflow, so you may have to build your own but still, that's better than what we had before.

That about does it in terms of things that were discussed that I haven't seen posted already on other blogs. Hope this helps you in seeing the growth of MSCRM and it's potential for you and your company.

David Fronk
Dynamic Methods Inc.

Typing in a LOOKUP Field 2 (additional functionality)

So, I just attended the local MSCRM 4.0 Readiness event and I actually got a lot of good info out of it. We got an idea on pricing (though it is subject to change), walked through new features, architecture, install, upgrade, etc.

One of the things that I actually posted on (Typing in a LOOKUP Field) and I had to show you what I found out. In the post I show how you can type in the lookup field and it will automatically find the record with the name that you type, assuming that the record exists, is not duplicated in the database, and you spell it right. What I found out though, is if you type part of the name and your text goes red (meaning either nothing was found or duplicates were found) you can then click on the icon next to the name and it will show you suggested records for what you typed.



Here's a picture of what I mean:





I only typed the letter "d" and when I clicked on the ! icon it shows me all the possible records that could match what I'm looking for. Also note that it is searching in both Contacts and Accounts.

A really nice feature that I didn't know about until yesterday that I thought you all might like to see.

David Fronk
Dynamic Methods Inc.

Friday, October 26, 2007

New Report Wizard

There have been a lot of changes and enhancements to reports in CRM v4.0. I'm actually really excited about the changes because security on the reports will be even better and the ease of creation has been GREATLY enhanced.
Previously, reports that end users could build have been Advanced Find queries that get exported to Excel. Good but there were limitations. Even with the Advanced Find enhancements of being able to add columns from related objects (see my previous post) people still had to know Excel pretty well to build any good looking reports. I will walk you through creating a new CRM 4.0 report from the User Interface to show just how simple report building in CRM 4.0 has become.

If you look at the Reports area closely in the new version you will see some buttons and actions that were not available to Reports previously. Specifically they are:

  • Search
  • Assign
  • New


Now technically you could add new Reports in CRM 3.0 but not with the help of a wizard. Also, the fact that you can assign Reports has a lot of implications. Let me just say that the implications that you are thinking as you read this are probably all correct in regards to what the security capabilities are for Reports. Since there are owners you can set Report access in Security Roles. You can set roles to allow users to not be able to see any reports, see only their own, see only the business unit's, see the BU's and it's children, or see all reports. I've had a lot of requests for this and there really was just no way to do it cleanly in CRM 3.0. The FilteredViews still apply so two people running the same report (with different privileges) will see different data.

So, let's get into the wizard. Click "New" and you will see:

Click on the "Report Wizard" button and you will now see that you can start from scratch or use another report as a template:

Give your report a name and choose the entity you want to run the report from. You also can choose to have the report available from 1 related object type.


After you click "Next" you will see the filter that you want to apply to the report but using Advanced Find capabilities. Note that you can utilized existing views (both system or your own saved views).


Next you choose the layout of the report. How you want the data grouped (by customer, date, etc) and pick the columns that you want to display.


The below shot is of a saved column that shows the capability to include subtotals (a summary for a column) in the report. The record type when you add a new column will allow you to select related entities and then the columns from that related entity. Then set the pixel width for each column as you see fit (default is 100 pixels).


Next you can choose the type of report to show. Table only, chart and table or a chart with a drill into the table.

Now choose the chart type (if you chose to show a chart in your report):

Set the axis for the chart to run off of and then complete summary and finish page.

Now run the report and you'll see:


Click on an item in the report for the drill down to see:



And that is the new report building in CRM 4.0. Really great functionality for end users to get the most out of their data.

Have I mentioned that I'm excited for CRM 4.0?

David Fronk
Dynamic Methods Inc.




Friday, October 19, 2007

Searching Attachments

I was recently asked about how to search Attachments in MSCRM. I assumed that Advanced Find would be up to the challenge but I had never actually tested it myself.

So, I thought I'd put Advanced Find to the test and I have to say that it did not disappoint. From Advanced Find if you search against Notes (or from whatever entity you want and then search through the related Notes) you can search the following:

File Name - searches the file name of the attachment
File Size - checks the size of the attachment (great for less than/greater than to clean up your DB)
IsDocument - this mostly tells the system whether or not there is an attachment on the Note

Pretty cool. Too bad you can't search in the document but that's a bit out there. And I guess that's what SharePoint is for. Who knows, maybe we'll see this capability show up in later versions (and no this is not included in v4.0, sorry).

David Fronk
Dynamic Methods Inc.

Multiple Lookups to One Entity on the Same Form

Microsoft has finally allowed multiple relationships from one entity to another entity. In MSCRM v3.0 you could only have 1 lookup on a form to any given entity. And if your hands were completely tied when you wanted to create your own relationship between 2 system entities.


This has all changed in MSCRM v4.0. You can create relationships between system entities, custom entities and between system and custom entities. And the greatest part is you can do it as many times as you want. This means you can have as many lookup links to Contact from the Account as you want, or even to Users.



This will create a link for you between the two entities and the best part is that it will reuse the same database. I know that I have helped a number of people copy the user or contact databases with a custom entity in MSCRM v3.0 in order to get around this issue. The solution worked but there were places where things could break and then the two databases could potentially be out of sync. With this new method that Microsoft has provided with out of the box functionality it makes a solution easy and clean.

Now, I have mentioned that you can link multiple User records to the same entity/form. While this is cool please be aware that security is still only run off of the Owner field. Meaning that just because your username is in the "Account Manager" field (a lookup that links to the User entity) that doesn't mean you get to see it. All it is, is a link, that's it. Nothing more.

Having the field on the form is much better than what users of previous versions have had so this is still a very cool improvement in my opinion. Plus with views, Advanced Find, and search capabilities you should be able to get around most of the visiability issues you run into. One other option that you have to help would be to use the new workflow to run some business logic whenever you change a lookup field. Or you could right a plug-in to automatically share the record with the secondary user field(s) so that you can work your way around security. Philip Richardson shows a great use of workflow on a lookup field through his screencast at: http://www.philiprichardson.org/screencasts/titan/BasicWorkflowCTP3/BasicWorkflowCTP3.html. Check it out for some more info on MSCRM v4.0.

I'm so excited for v4.0!



David Fronk
Dynamic Methods Inc.

Wednesday, October 10, 2007

Advanced Find Shows Related Columns

Here's a new addition to MSCRM 4.0 that will be really nice for users. You can now add columns from related entities in Advanced Find. So, if you want to see the email of the Primary Contact in the Account list that is now possible. Please be sure to remember that you can add any field on a related entity, custom or system created but please be aware that the related entities will be from the lookup fields (fields with the magnifying glass) on the entity on which you are building your view. So, while I can see the email of the Primary Contact of an Account, I cannot show the email for Contacts in the Account view. Why? Because there will be multiple and the system won't know which one to display. Also, the system is limited to only be able to show one value for each row of a given column.

Just to show you, from Advanced Find, I choose "Edit Columns" and then "Add Columns". I can now click on the entity as a drop down and it will bring up all of the related entities and what field the relationship is through:


I choose "Primary Contact (Contact)" and then check the "Email" column, run my query and I get:


There it is. I'm really excited about this because this need was probably one of the largest requests that I got that turned into an SRS report. SRS reports are great, don't get me wrong, they just can't be maintained or written by typical users and the actions you could take from that report were limited in comparison to what you could do from the CRM grid.

Last thing, since you can do this in Advanced Find logically it would make sense that you could do this in the main System Views for any given entity. Well, that's just what you get. Your System Views that you create for your company can have these types of columns as well.

Did I mention that I'm excited for MSCRM 4.0?

David Fronk
Dynamic Methods Inc.

Mail Merge from Web Client

Mail Merge has been revamped and improved greatly in the new release of MSCRM. Custom fields can now be used in Mail Merges, something that users have been wanting for a long time. The other large improvement is the capability to run a Mail Merge from the web client, not just the Outlook client. What this means is now Mail Merge templates can be stored at the server level and users can utilize company templates or make their own for their needs.

In the Settings area there is now a template section that has the three old templates from before (Articles, Contracts, and Emails) but now there is a Mail Merge Template option.






You can create a new Mail Merge template and fill out the following form:




Please note the Associated Entity list. It consists of:
Account
Contact
Lead
Quote

Nothing more as of yet. Maybe future versions, maybe not.

Also, take note of the File Attachment, this is for the Word Document Template that will be utilized to render the template for use. You upload your Word Documents as XML files for your template, attach it and then save the mail merge template form. Once the form is saved you can then choose which data fields to include in the Mail Merge.




When you click on the "Data Fields" button you can select what fields you want to include in the Mail Merge. Here's what the screen looks like:




If you look closely you'll see a couple of new capabilities here in this screen. First notice that the first attribute that is available to be selected is "AAA Test" with a schema name of "new_aaatest". Yep, custom fields. You've now seen it with your own eyes. Secondly, take note of the Record Type. Did you see that it's a picklist? Yep, you guessed it, you can pull any field from any related entity. Now I will put a bit of a caveat on my "any field from any related entity" statement. You can pull data from any related entity that is related through a Lookup field (the fields with the magnifying glass). So, from an Account I can pull the Primary Contact's data. There is only one record to pull from so it's clean and simple. However, I cannot pull a field from all related Contacts to a given Account. Having multiple values for one field in a Mail Merge just wouldn't make sense. Also, just so you can see it with your own eyes, here's a screenshot:




It's actually pretty nice in that it shows the field that is linking the two tables so you know what relationship you are pulling from.

From here on out it's Mail Merge as usual. From a list of Accounts you could then click on the Mail Merge button, choose the template you saved and run the merge.

Needless to say I am very excited about this new functionality and I hope you are too.

I'm so excited for MSCRM 4.0!

David Fronk
Dynamic Methods Inc.

Tuesday, October 02, 2007

Typing in a LOOKUP Field

This is probably my favorite end user addition that has come through to Titan. You can type inside of a lookup field. I can't tell you how many users have requested that whenever I go through training. Microsoft did a great job of dialing this in too. First just put your cursor into the field and you'll see the flashing cursor waiting for you to type in it.


Here I type in "David Fronk" and notice that it is not "hotlinked" yet until I click out of the field.


As soon as I click away, or tab out of the field CRM checks the Contact database to see if what I typed matches any existing contact record. If it finds one, and only one, record then you get the nice blue "hotlinked" name with the contact record.


If however you type in someone that does not exist in the linked database, or if there are duplicates, the system will not know which record to link to and you will get a red X and red hotlink telling you that this is incorrect.



You will then have to check your spelling or pick one of the multiple records that exist in the database so that CRM knows which record to link to.
This works on all lookup fields you come across. Including Product, Unit of Measure, Primary Contact, Parent Customer, etc.

Very nice and easy functionality that will reduce clicks and help people choose which way to fill out the form and hopefully fill out the form faster. Oh, and in case you're wondering about the speed of that check on the field, it's actually really fast. I haven't tested it on a system that has over a million contact records but for the small amount of data I have in the system it flew.

David Fronk
Dynamic Methods Inc.

Titan News

I just found out that the NDA on Titan expired yesterday so now anything about Titan is fair game to talk about, blog and possibly even show off. There are a lot to go over so I will most likely be posting about that for the next little while and possibly more frequently. Some of the big news is DUPLICATE CHECKER, multi-company, multi-currency, the ability to TYPE inside of a LOOKUP field, the use of Forms Authentication, a complete overhaul of the Email Router, Many-to-Many relationships, and did I mention DUPLICATE CHECKER? I think Duplicate Checker was either the most requested enhancement from my clients that I saw or the second most requested. Either way, there are a lot of people who want it and Microsoft has delivered. And just as a little plug for their Duplicate Checker, it's really good. You can check when you create a new record, make custom duplicate check rules, check across entities (check Contacts when adding a new Lead), and run scheduled dup checks of your entire system.

Some very cool things to see in the new version and hopefully I can help you see the new value that has been added.

David Fronk
Dynamic Methods Inc.

Friday, September 28, 2007

Determine space available for custom attributes

For anyone who has read the Microsoft CRM Customizations book this SQL script may not be anything new but I saw this script and thought it was really cool. I actually have a client who cannot add any more "bit" attributes to the Contact entity so when I saw this SQL Script I was really excited to see what it told me about the space available on their Contact entity.

Here's the script:

--Run this on the metabase
--space remaining in table
select e.Name, Byte_Remaining = 8060-(sum(a.length))
from entity e join Attribute a on e.entityid = a.entityid
where a.iscustomfield = 1
and a.islogical = 0
group by e.Name
 
--script to see current size of tables, can't go over 8060
select e.Name, Physical_size = sum(a.length)
from entity e join Attribute a on e.entityid = a.entityid
where a.iscustomfield = 1
and a.islogical = 0
group by e.Name

You don't run out of space very often but if you're afraid of running out then this script may help you out. For my client that cannot add any more "bit" attributes, this script showed that they still had 7000+ bytes available on the table. So, apparently there may be some limit as to the number of attribute types. I haven't found a solution for that piece yet but hopefully I will soon. If anyone has seen this and has figured out a way around the problem I would love to hear it.

I hope this script helps someone out (whether you've read the MSCRM Customizations book or not).

David Fronk
Dynamic Methods Inc.

Friday, September 21, 2007

System Customizer Role

I had a client recently go through and clean up the Roles of CRM because they were creating so many new roles that the list as getting a little unwieldy. I always recommend that the system roles should be left in tact and untouched so that they can be used as templates to copy new roles from. Well, sometimes curiosity gets the best of us and I recently found out what happens when you delete system roles.

At first you notice no difference. Records still stay in tact, can be viewed, updated, deleted, etc with no problem. However if you try to create a custom entity and the "System Customizer" role is gone (this also goes for the "System Administrator" role but Microsoft has locked down the deletion of that role) then CRM will throw an error at you telling you to contact your system administrator. A great error message that gets you no closer to figuring out your problem.

After a bit of searching I found the following:

Microsoft KB article 934690:
When a custom entity is created, Microsoft Dynamics CRM automatically grants the System Customizer role access to the new entity. If you delete or edit the System Customizer role, you receive the error message that is mentioned in the "Symptoms" section.

Microsoft has a hotfix for this issue (because apparently I wasn't the only curious one out there) but you have to contact MS Support in order to obtain the hotfix. From my other searchings, your other option is to back up CRM, uninstall CRM, install CRM fresh and then migrate all of your data from the back up into the new system. If you restore your DB's then you will once again be missing the "System Customizer" role so that will get you nowhere.

Oh, and in case you're wondering, you can't just recreate a "System Customizer" role manually. I tried to copy the "System Administrator" role, name it "System Customizer" and then tried to create a custom entity. I got the same error as I had received before. Whatever script Microsoft has running in the background looks for the GUID of the "System Customizer" role instead of the name. So, while I thought I had a nice quick fix it tuned out to not do anything at all.

So, this is my warning to all of you, DON'T DELETE ANY OF THE OUT-OF-THE-BOX ROLES. I don't know of any other issues with any of the other roles yet but that doesn't mean that there aren't any other similar issues like this. It doesn't cost anything to just leave the system roles there and let them be but it will cost you a bit of grief to get them back and get your system back up to full running capabilities.

Hope this helps someone and kills your curiosity on this subject.

David Fronk
Dynamic Methods Inc.

Friday, September 14, 2007

Set Regarding Lookup Default Entity

I've had numerous customers request, that in order to help their best practices, that the default object on the Regarding field default to the entity users should be associating activities. Some clients want it to default to Contact, others to Opportunities, and some to custom objects. I could never figure out how to get control of the window or form assistant where the entity dropdown list is made available. However, one of my co-workers found that we don't need control of the window, we can set the default attribute with a bit of JScript.

On the OnLoad event of the activity (theoretically this should work for whatever lookup you want, i.e. the Customer field on Case and Opportunity) place the following script:

if (crmForm.all.regardingobjectid != null) {
    crmForm.all.regardingobjectid.setAttribute("defaulttype", "2");
}

This code will set the default entity to be Contact. If you want a custom object they start at 10000. So, just fine the ObjectTypeCode of the entity you want (that can have activities associated to them) and place them in the quotes as the second parameter of the setAttribute method and you're set.

Please note that this only effects the window that gets opened when you click on the magnifying glass of the Regarding field. However it does not effect the Form Assistant. So, this doesn't do it all, but it does help in some regard.

Also, please note that this customization is not supported by the SDK and may be subject to change in the next version. But while this is a "lighter" unsupported customization it's the kind of customization that I like. No files get modified, upgrade path does not get hindered, you just have to check it after the upgrade to make sure it works. If it doesn't, you have to find the new method or call that is used to do what we just did.

Short, simple and sweet. Happy coding!

David Fronk
Dynamic Methods Inc.

Friday, September 07, 2007

Moving SMTP from Exchange to local CRM SMTP Server

Here's the situation:
CRM has already been installed and pointed to an Exchanged server. The client requested that SMTP be set up on CRM and used for sending outbound emails. No inbound functionality is required by the client. What is the best way to get CRM outbound emails to be sent directly from the CRM SMTP server?

Solution:
First, make sure SMTP is installed on the CRM server. If not, you will need to add it under Add/Remove Programs, Windows Components, Application Server, Details, IIS, Details, select SMTP Service and install. It will ask for the Server 2003 install disk.

If after installation of the SMTP service you can not see the 'Default SMTP Virtaul Server' in IIS, you will need to follow the directions below from microsoft:

Method 1: Click the 'Start' button, then 'Run…' and type:
regsvr32 %systemroot%\system32\inetsrv\smtpsnap.dll
Alternatively, %systemroot% can be replaced with the drive Windows Server 2003 is installed on

Method 2: Uninstalling and re-installing IIS including the SMTP service has also proven to fix the problem, it is, however, recommended to try method 1 first.
Once you have SMTP fully installed and configured (per the steps above) you will now need to remove 4 keys from the MSCRM reg hive. Type regedit from cmd line. Browse to the HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/MSCRM folder. Highlight the folder and right click. Then select Export - give it a name and save. This is a back up of the MSCRM reg folder in case you mess up.

After backing up the folder, proceed to remove 4 keys:
1. SMTPAuthenticate REG_DWORD Value=0
2. SMTPServer REG_SZ Value=ExchangeServerName
3. SMTPServerPort REG_DWORD Value=19
4. SMTPUseSSL REG_DWORD Value=0

Perform an iisreset and test email functionality directly from CRM.

If you did not set everything up correctly you will most likely see an error to the effect of:

'Failed to Initialze Token'

If that be the case, go back through the steps and double check that they were all input correctly. But the above steps should get it going for you.

My thanks to my CRM team for providing me with another great article.

David Fronk
Dynamic Methods Inc.

Saturday, September 01, 2007

How to Really Increase the Max File Size in MSCRM (v3.0)

This comes from one of my co-workers:

Step 1:
In the Web.config file, override the value of maxRequestLength for the application. For example, the following entry in Web.config allows files that are less than or equal to 8 megabytes (MB) to be uploaded:
<httpRuntime maxRequestLength="8192" />

Real Example: <httpRuntime executionTimeout="3000" maxRequestLength="51000"/>
Comments: I increase the Timeout from 300 to 3000 to allow more time on the upload. The file size is set to max at 51 MB.

Step 2:
(**Be careful when making changes to the Registry, it's always safer to back up the Registry, or at least the hive you're changing, just in case something breaks.**)

Change the following registry key to reflect the maximum number of bytes in decimal:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM\maxuploadfilesize
Real Example: Make sure you set the Decimal value to the number of bytes. So 50 MB converts to 52428800 bytes, or I put 53000000.

Step 3:
Reset Internet Information Services (IIS). To do this, click Start, click Run, type iisreset, and then click OK.
Real Example: CMD --> IISRESET

Hope this comes in handy.

David Fronk
Dynamic Methods

Tuesday, July 31, 2007

Pulling the Logged in User via JavaScript

I have been trying to find a good way to make "signatures" work in CRM. Some way for a manager to fill in a field for approval and then automatically put in the name of the manager into a field to prove that it was done by that person. I had found a way through some disabling the field and only opening it for users with a specific security role, but that still relied on the honesty of the managers. Some clients don't always trust their managers 100% unfortunately.

I have since found a post that gave me exactly what I was looking for. JavaScript that reads in the logged in user and puts the name of the logged in user into a text field automatically. So, whenever a specific field gets updated the user who changed it will get his/her name printed out so that all can see that the field was changed/approved by that user. Couple that with some additional JavaScript field level security and you've got a pretty good signature system. (Note that the field level security is NOT supported by Microsoft).

The cool part about finding the logged on user though is that it is supported JavaScript and uses the RetrieveMultiple CRM call to pull back the information desired. I take absolutely no credit for this code. I didn't have to really even change anything other than the output of the name so that it went into a field instead of an alert window. All credit goes to Michael Höhne, Microsoft Dynamics CRM MVP at Stunware. Here is the link to his post:

http://www.stunnware.com/crm2/topic.aspx?id=JSWebService


The code from his post is this:


var xml = "" + "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +


" <soap:Body>" +

" <query xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:QueryExpression\" xmlns=\"http://schemas.microsoft.com/crm/2006/WebServices\"&gt;" +

" <q1:EntityName>systemuser</q1:EntityName>" +

" <q1:ColumnSet xsi:type=\"q1:ColumnSet\">" +

" <q1:Attributes>" +

" <q1:Attribute>systemuserid</q1:Attribute>" +

" <q1:Attribute>fullname</q1:Attribute>" +

" </q1:Attributes>" +

" </q1:ColumnSet>" +

" <q1:Distinct>false</q1:Distinct>" +

" <q1:Criteria>" +

" <q1:FilterOperator>And</q1:FilterOperator>" +

" <q1:Conditions>" +

" <q1:Condition>" +

" <q1:AttributeName>systemuserid</q1:AttributeName>" +

" <q1:Operator>EqualUserId</q1:Operator>" +

" </q1:Condition>" +

" </q1:Conditions>" +

" </q1:Criteria>" +

" </query>" +

" </soap:Body>" +

"</soap:Envelope>" + "";


var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
xmlHttpRequest.Open("POST", "/mscrmservices/2006/CrmService.asmx", false);

xmlHttpRequest.setRequestHeader("SOAPAction","http://schemas.microsoft.com/crm/2006/WebServices/RetrieveMultiple");

xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");

xmlHttpRequest.setRequestHeader("Content-Length", xml.length); xmlHttpRequest.send(xml);
var doc = xmlHttpRequest.responseXML; var user = doc.selectSingleNode("//BusinessEntity");

var userId = user.selectSingleNode("systemuserid").text;

alert(userId);

var userName = user.selectSingleNode("fullname").text;

alert(userName);


You can quite literally copy and paste the code into any JavaScript function inside of CRM and this will work. There is nothing that ties it to one CRM implementation or another.


My hat goes off the Michael and the rest of the Stunware team for their great work and sharing this spectactular code. Thanks guys.


Happy coding,


David Fronk

Dynamic Methods Inc.

Monday, July 30, 2007

EmailTo via JScript

One of the shortcomings that I've found with some of the out-of-the-box features in MSCRM is the Email field. It's underlined, so it is supposed to be a link but when you click on it, instead of opening an email page like a URL does for a web page, it does nothing.

I finally decided to spend some time on figuring out some way around the "copy/paste" method that I have told so many users previously to do to work around this issue. And while I did not solve the onClick problem I did at least find a way to get an email page to come up with the email from the email field filled in. A huge win over the "copy/paste" method.

I found a way through JScript in the ISV.config to get everything I needed. I knew that I could use the "mailto:" call from the HREF HTML tags but I wasn't sure on how to reference it. So, after a little research I found a pretty cool way to get around this problem. So, I cannot by any means take full credit for figuring this out, I can only claim credit for finding the pieces necessary and putting them together to get what I needed done (as I'm sure most of us do through the wonderful knowledge share called the Internet). So, thanks to anyone any everyone who has posted about this, I probably saw your posts and they have contributed to this:


<button title="Email" tooltip="Send Email" icon="/_imgs/ico/16_send.gif" javascript="window.navigate('mailto:'+crmForm.all.new_email.DataValue)" passparams="0" winparams="" winmode="0">

The key is the JavaScript attribute and the window.navigate call. Once the window.navigate reference was made it was also very great to see I could call any field value on the form to my JavaScript stored in the ISV.config. That ability alone opens up a lot of doors to new possibilities. It makes sense that all of the supported hooks that we as developers are given are JavaScript that we could use the exact same calls from a different source, it just wasn't something I had tried until now. Once I had those points down it was a piece of cake.

So, now I have a button along the toolbar that will open up your default email client to whatever email address you specify. I'm sure there are some much more complex scripts that can come from this (like a primary email selection box that then pics the corresponding email address to send the email to).

Happy coding,

David Fronk
Dynamic Methods Inc.

Tuesday, June 26, 2007

Changing the Port Number of your CRM Website

One might think that changing the port number which CRM uses is pretty straight forward but I found that it wasn't quite as simple as I thought. I ran into this in order to get CRM and SharePoint to play nice together on a server which already had CRM installed and I needed to install SharePoint on the same server.

The first thing that I did was go into the IIS Management Console and manually change the port number there. I found out that was only half the problem. From here, once this change is made one could run a repair and that should make all of the necessary changes to the CRM web site for you from there. However, if you have installed Rollup1, or any other patches for that matter, you would then have to reinstall everyone of those patches. Not the most effective use of time in my opinion.

So, after poking around a bit I found that the other piece that I needed to update was the URL registry key titled "ServerURL" under the "HKey_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM" hive. You simply need only to add the colon ":" and the port number and you're set. So, your URL would go from "http:///MSCRMServices" to "http:///MSCRMServices:5555" and you're set. Quick, efficient and it works.

David Fronk
Dynamic Methods Inc.

Friday, February 09, 2007

MSCRM Integration with Docupace

I am finding that "integration" is the one of the latest business buzz words. User's don't want to have 8 to 10 applications open throughout the day to get their work done. So, requests of getting to other applications from Microsoft CRM has become a normal request for most of my clients. Some integrations can be very complex (where data gets passed between systems) and others can be rather simple (click a button for a view into the desired application).

My most recent request has been to integrate MSCRM with Docupace. For those of you who haven't seen or heard of Docupace, Docupace is a service provider of 'on demand' business process automation solutions for small to mid-sized businesses, departments, branches of large enterprises and outsourcers - across all industries. With a wide range of imaging and document management solutions, Docupace delivers rich, enterprise-class functionality that is easy to deploy, use and manage. (http://www.docupace.com/overview.html)

This happens to be one of the simpler integrations because no data is traded between the two systems. Just a search through Docupace with CRM provided data.

With a simple click of a button:




The user logs into Docupace and a Docupace window opens that goes directly to the client's page.


This allows users to jump straight into Docupace and get to specific client documents. Also, if Docupace credentials get passed from CRM to Docupace, users can be limited in what documents they can see within Docupace, through CRM privileges. If a user can only see his/her contacts he/she will only be able to launch Docupace windows from his/her contacts.

Great functionality, usability and ease of integration between the two systems make this a great addition for client's tools to use in the market.



Happy Coding!

David Fronk
Dynamic Methods Inc.