Tuesday, February 22, 2011

CRM 2011 On Premise Released

Just in case you haven't heard from all of the Microsoft and other Partner hype, CRM 2011 has now been released for install on your own premise (not just the online version).

Here is the link to download the bits.

Other useful links:
Implementation Guide
SDK
Outlook Client
Email Router


Enjoy the new version of CRM!

David Fronk
Dynamic Methods Inc.

Tuesday, September 14, 2010

Microsoft Dynamics CRM 2011 Beta is released

The beta for the next version of Microsoft CRM has been released.

Check out information on it here.

To download bits, click here.

There is some great stuff to see. Quite a few UI changes and a lot of enhancements added to the Outlook client.

Good stuff coming our way in the future.

David Fronk
Dynamic Methods Inc.

Wednesday, June 30, 2010

Scribe 7.0 Released!

Scribe 7.0 has release today, check out the details here from Scribe's blog/website. Some of the highlights for the data migration/integration application are:

1. Multi-Target solutions. Integrations/Imports can now have steps that point to different targets. If your ERP system needs to pass along inventory data to all of your other systems, you can now do it in one integration file, rather than one file for each system to push to.
2. Take advantage of outside webservices during the integration to improve data integrity and business rules.
3. DBLookups no longer limited to Source, Target, or Internal. They can now be run against outside systems to check, validate, etc against that system's date for the integration.

Here's a link to Scribe's whitepaper of listed enhancements for their 7.0 product.

Download here.

Good stuff from Scribe, check it out.

David Fronk
Dynamic Methods Inc.

Wednesday, May 05, 2010

Managing the MSCRM Asynchronous Service

Workflows are a wonderful thing.  They make it so that power users, non-developers, can get a lot done with Microsoft CRM without having to know a lick of code and can get a lot of business processes built into their company’s application relatively easy.

I have, however, seen some administrators and power users get a little liberal in how they use and implement their workflows without thinking about the repercussions to their system as a whole.  I’ve seen servers where the Asynchronous Service (CRMAsyncService.exe)was using on average 90-95% of the CPU constantly. 

1

Any guess as to the cause?  Workflows.  But not just any workflows, workflows with WAIT’s in them.  Workflows that fire from their given trigger, run their course and then complete are great and just fine.  They don’t take up much memory or CPU usage because they run for such a short time.  It’s the WAIT states that eat up all your memory and CPU usage on your server.

WAIT states have their place and sometimes cannot be avoided.  But a system administrator should look to have as few WAIT’s as possible in his/her system.

Here are some good alternatives for WAIT’s:

1. Use the UPDATE trigger on another workflow to check for a given attribute and condition and fire the WAIT logic when that criteria is met.

2. Don’t wait to create activities, create them immediately and just set the dates on the activity accordingly.  If you are waiting X number of days to send an email as a follow up, you could just create the email and have it sit in a users “To Do” list and when that user looks at his/her list for the day, would see that the email needs to be sent out.  Otherwise, you could even create the emails and write a nightly process (or use a third party tool) to check the system for emails that haven’t been sent and have the tool send them after hours.

3. Change to batch processes.  Using a custom tool or third party product, have the tool check the system at intervals to escalate incidents (cases), send emails, remind users about opportunities or past due activities, etc.  Sure it’s a little extra work but if you have a lot of things that need to be waited on, then it’ll be worth the effort.

Protect yourself, your server and your company from WAIT’s in workflows by just avoiding them.  Keep your eye on that Asynchronous Process!

David Fronk
Dynamic Methods Inc.

Friday, March 26, 2010

Populate CRM Fields from Parent Window

There are a number of people who have posted about copying a record via JScript button in CRM, and this post isn't far off from that concept. My coworker found a great way to implement the concept of opening a record and populating fields on the newly opened window, based on data from the originating window. And that is quickly opening an activity.

This customization cuts down the number of clicks to open a new Activity from 4, down to 1. 4 being click on the record you wish to create an activity for, click "Activities", click "New", click the activity type, click Ok. You can double click on the activity type to open it, but that's still 4 clicks technically. With this customization, users just click the button of the activity type. Done.

In a piece of software where users already feel like there are a lot of clicks and windows, this helps significantly.

Ok, now the good part. How do we do it?

Add a button to the entity you want to apply this customization to within the ISV.config file (in this example I use the contact):

<Entity name="contact" >
<ToolBar ValidForCreate="0" ValidForUpdate="1">
<Button Icon="/_imgs/ico_16_142.gif"
JavaScript="window.open('http://crmserver/CompanyName/activities/appointment/edit.aspx?');" PassParams="1"
WinParams="" WinMode="0">
<Titles>
<Title LCID="1033" Text="New Activity" />
</Titles>
<ToolTips>
<ToolTip LCID="1033" Text="Create new appointment activity" />
</ToolTips>
</Button>
</ToolBar>
</Entity>

Now, on the OnLoad script of the given activity (in this case the Appointment), add the following code:

//appointment onload script
if (window.opener.crmForm) {
var rgid = window.opener.crmForm.ObjectId;
var rgtype = window.opener.crmForm.ObjectTypeCode;
}
if (rgtype == 1) {
var rgname = window.opener.crmForm.all.name.DataValue;
}
if (rgtype == 2) {
var rgname = window.opener.crmForm.all.fullname.DataValue;
}

if (rgid != null) {
var oItems = new Array();
oItems[0] = new LookupControlItem(rgid, rgtype, rgname);

crmForm.all.regardingobjectid.DataValue = oItems;
}


Done. Not too difficult and end users will love it.

David Fronk
Dynamic Methods Inc.

Friday, March 05, 2010

Integrations: In-line versus Queue/Batch Based

I love web services. They make it so that one system can send and receive data from some completely different system from anywhere over the web. Data gets updated, end users can see the latest and greatest data essentially instantaneously. With CRM plugins you can have in-line integrations that just push data from CRM to whatever system you want on a save, reassignment, deletion, etc. Or, you could pull data from another system whenever a page loaded, all through plugins. That's awesome.

Queue, or batch, integrations take note of everything that changes and then runs a process at a given time interval and pushes all of the data that has been queued up into the other system. Web services can be used to push/pull data in this data from the queue in batch fashion and keep systems in sync. But typically when these batches are run they put a load on the server and could be rather resource intensive. And data isn't updated instaneously, it gets updated shortly after the predetermined time interval. If this is nightly that might be too stale for some people. Depending on the data though, that may be more than sufficient.

However, when those web services don't work (when either server goes down, gets overloaded, etc) it's REALLY bad. Things either get out of sync, or else your integration just got a whole new level of complexity; waiting, or holding the data, until the other system comes back online. In the debate of in-line versus queue based integrations, queue based gets a point here. If the server is down, the queue based system gracefully errors, noting that the remote server is down, and the next time it runs it picks up where it left off and tries again. In-line dies and doesn't get the data transimitted across. The best it can do is error and put its data into a record to get queued up and processed at a later time...via a queue based integration.

I have recently worked with a system that went down at least twice a day. Originally it was thought that an in-line integration would work just fine. But since the receiving server has been down I now have to include or move to a queue based integration in case the in-line goes down.

Each has their use, and I want the in-line to work because in my mind it's the best. But in reality, the queue based, though "slower", is the most reliable.

If any one has any thoughts or input, we'd love to hear it.

David Fronk
Dynamic Methods Inc.

Friday, February 12, 2010

Pictures inside CRM Emails

One of my biggest issues with CRM emails, versus an Outlook email, is how difficult it can be to tailor up your emails that you want to send out. Getting a good looking email sent out of CRM is about as complex as writing a static web page. And since CRM emails are rendered in HTML, that's actually exactly what it takes to get a good looking email out.

Now, not everyone wants to send out an amazing document all the time, sometimes a picture or logo at the end of the email would suffice. Theoretically this would be simple, only CRM doesn't let you copy and paste images from your local machine into an email.

But there is a solution, it doesn't require too much effort, but it does require whatever image you want to be sent in your email to be public available to anyone. Just like a webpage cannot show an image from your local machine (unless it's hosted there) a CRM email cannot show an image that you copy from your local machine into the body of the email.

Here's how to work around this. You need to use pictures/logos that are publicly available. For instance, if you want to put your company logo in an email, go to your company web page, right click on the company logo and choose to copy the image. Then go to your CRM email and paste it in. The image will appear and when you send it out the image will carry through. The reason it will go through is because the reference you copy and paste points to a URL that all computers can reference and see.

If you can have a public folder that you store you images in and that can be accessed via a URL path from anywhere, then you are all set to put whatever images you want into your CRM emails. All this would take would be to add a folder to where your company website resides (maybe call it "CRMPictures") then you can manually browse to that location and copy and paste whatever pictures you want.

A little cludge of a work around but it works and it could give you a centralized place to place pictures/images to be used for your CRM Marketing needs.

David Fronk
Dynamic Methods Inc.