Showing posts with label MS-CRM. Show all posts
Showing posts with label MS-CRM. Show all posts

Wednesday, June 17, 2009

Managing Sales Documents in MS-CRM

One of the most common questions we get from users is how to store sales and service documents in Microsoft Dynamics CRM. These documents could be sales related like quotes, work orders, purchase requests, proposals, etc or service related like field service reports, error logs, or other documentation related to a case.

The answer to the questions, of course, is the often missed upload attachment featureCRM Documents .
Unfortunately this feature does not work for most Microsoft Dynamics CRM document storage needs, for the following reasons.
  1. There is no version control or document management features.
  2. There is no ability to search the text of documents that are stored
  3. The documents uploaded are stored in the notes section and not visible when browsing the record and it is often not intuitive to look in the notes section for documents.
  4. The attach document icon (the paperclip) is placed in the form header, not where people think to look to upload documents.
Further storing documents in MS-CRM will bloat the Microsoft Dynamics CRM database causing serious performance problems.

A better solution is to leverage Microsoft SharePoint for document management within Dynamics CRM. In this way, you get all of the document management features of SharePoint without leaving CRM. Statera offers Stratus, a web based MS-CRM and Sharepoint integration platform to do this for you.


Stratus takes a few minutes to setup and is currently available for free from stratus.statera.com.

Monday, June 1, 2009

Simple Integration of MS-CRM and SharePoint

Statera just released an easy to use enterprise application mashup called Stratus to simplify the integration of MS-CRM and SharePoint. Stratus can be setup in a few minutes and will allow you to leverage SharePoint's document management features within Microsoft Dynamics CRM (both online and on premise versions).

Once activated, Stratus adds a new tab to Accounts, Opportunities and Cases that will allow you to create Sharepoint sites and add/view documents to and from those sites.

In addition Stratus gives you visibility to key CRM information directly from within Sharepoint.


To learn more about Statera's MS-CRM and SharePoint Integration tool, go to stratus.statera.com.

Monday, January 5, 2009

How not to mess up your environments (or learn from my mistakes)

Here is a fun one:
An error has occurred. Try this action again. If the problem
continues, check the Microsoft Dynamics CRM Community for solutions or
contact your organization's Microsoft Dynamics CRM Administrator. Finally,
you can contact Microsoft Support.


Right, lots of info there. Troubleshooting? Let's not even talk about what I tried to do. What happened? Well, I broke it. Good thing this was development environment and not production. I did what everyone tells you not to do, but at least I had the forethought to "TRY" it out first.

I had been working with a development system that was quite old. No one really knew when it was set up, if it was a snapshot of production, when the last time data or configurations had been migrated...all we knew was that it wasn't 100% perfect, but it was good enough. I'd been using it for a couple of weeks, trying some configurations out, code, entities, all sorts of stuff.

Suddenly, we were given a new environment built on virtuals - "Yeah!" yelled the developers. This sounded great. It was a recent snapshot of production (minus data), but it worked (for the most part). Minor inconsistencies (that I wont elaborate on) aside, it was good.

At this point, I needed to move any new developments from the old dev system to the new one. No big deal. This would be a good test for moving changes we'd made to the production system...Here goes. First, back up the customizations from the dev virtual, then we dove in. Made a few changes, added some objects, then pulled 3 or 4 entities from the old dev and imported to the virtual.

Let's publish...and get an error. No biggie...we get those. But no solution to be found.

After searching and looking, importing backups and everything it came down to this...

Creating an object in CRM assigns a GUID that is carried over (within the database) when exporting and importing to new environments. If you create a new object in 1 enviroment that has some 1:N or N:1 or N:N relationship to another, then recreate that object in a new environment EVEN IF YOU DON'T IMPORT THAT OBJECT those N:1, 1:N, N:N relationships reference the GUID...if you import an object that is related to the one you created...you're dead in the water. You can't "un-import", even importing the backup entity doesn't fix the issue.

I may explore the configuration database and see if I can manually remove/update, but I think that will just create other issues. I can't delete those objects in my new dev and try to recreate them with an import because the relationships somehow prevent this and they (the relationships) cannot be removed.

Anyway, this has rambled on longer than I wanted to, but wanted to get this info out as I find it important to know.

Again, really good that we found this out now rather than doing it in production :)

Friday, December 19, 2008

Script behind the Price List Field

I thought this was worth a post. This deals with MS-CRM 4.0.

At some point, the Price List field was removed from the Opportunity form. Once you put it back on, you can't actually select a price list. The fix deals with a script that has to be MANUALLY added back through the object XML file. (Thanks to http://dmcrm.blogspot.com/2008/03/removing-price-list-field-from.html).

Maybe you ran into my problem? After importing the customization, when I try to access an Opportunity object I would get an error. I looked and looked, but couldn't figure it out. I must have edited that XML 12 times to be sure I had it right. Anyway, the simple solution was that you must have the Currency field on the form as well. You don't get any sort of error that points you to this and I don't believe there's anything in the script, but this resolved the issue. Currency is read only, so I don't see any other issues.

That said...more posts to come.

Thursday, August 7, 2008

Cleaning up old CRM Active Directory groups

For anyone who has done multiple re-installations of MSCRM in the same domain and wants to figure out which AD groups can be deleted based on GUID, run this query and look at the GUID in the PrivUserGroup column:

select * from dbo.OrganizationBase

Tuesday, July 29, 2008

MSCRM 4.0 Roadmap

Microsoft released a whitepaper which is essentially a roadmap for MSCRM 4.0 into 2009.

https://mbs.microsoft.com/downloads/customer/documentation/whitepapers/MD_CRM_StatementOfDirection_July08_FINAL.pdf

Some highlights include details around Mobility, Accelerators, BizTalk Integration and SharePoint web parts. Many of these will be coming out in the second half of 2008.

One interesting point is Microsoft's release updates for CRM Online which will include search engine keyword research and bidding as well as campaign management dashboards. Between these enhancements and the forthcoming accelerators it will put MS in a much better competitive position against salesforce.com although far from the huge library in App Exchange.

CRM Mobile Express for 4.0

I'm sure everyone has seen CRM Mobile Express for MSCRM v.3.0 which was released in August of 2006. Unfortunately there is no mobile version yet for MSCRM v.4.0 but I have seen a lot of discussion around whether Mobile Express will run with v.4.0. The good news is...yes! Since the v.3.0 web-services still exist in v.4.0 everything works as it did in v.3.0.

There is only one small tweak you have to make to the Sitemap.xml code that is given in the Mobile Express documentation. Wherever you see "/MobileClient/HomePage.aspx" make sure you put "../.." in front of it (e.g. "../../MobileClient/HomePage.aspx"). The reason for this is the way the CRM application is referenced due to multi-tenancy. The SiteMap for v.4.0 needs to crawl up to the top-level virtual directory to access the web-service.

You also have to put the Microsoft.Crm.Webservice.dll in the GAC on the CRM server.

You can download CRM Mobile Express here: http://www.codeplex.com/crmmobileexpress

If anyone has had less than favorable results with CRM Mobile Express using CRM v.4.0, let us know.

Monday, July 28, 2008

CRM 4.0 Solution Center

Microsoft has released a support site that lists some of the top issues, how-to and readme files. The site is far from a wealth of information but it is a great start:

http://support.microsoft.com/ph/12976

Some helpful links on this page that I commonly run into are:

How to change the Web site port after Dynamics CRM 4.0 is installed
Internet facing deployment scenarios
Installing Dynamics CRM 4.0 with the minimum required permissions

Thursday, July 17, 2008

Change Business Unit Permission

Ah, the CRM security model. Nothing is what it seems. I spent about an hour today trying to figure out what controlled the "Change Business Unit" permission and from what I can tell it is not the Business Management tab of a security role that controls this, but rather I had to give full permission on the Service Management tab for the following entities - Calendar, My Work Hours and Service as well as Search Availability and Browse Availability.

The security model continues to amaze me at times.




Monday, July 14, 2008

Great MS-CRM site

In case you don't know about this site, it is a great way to stay plugged in to the Microsoft Dynamics CRM community with helpful news links, articles about ISV solutions and case studies.

http://msdynamicsworld.com/page/dynamics-crm-resource-center

Friday, July 11, 2008

Pre-Filter Lookup

I ran across some code today that will pre-filter a lookup field based on a selection in another lookup field.

Put this in the onChange of the first lookup:

document.filterLookup(crmForm.all.customerid, crmForm.all.contactid);

Put this in the onLoad of the form:

// Filtered lookup
document.filterLookup = function (source, target) {
if (IsNull(source) IsNull(target)) {
return;
}
var name = IsNull(source.DataValue) ? '' : source.DataValue[0].name;
target.additionalparams = 'search=' + name;
}


For a more in-depth method of achieving this, visit this blog: http://jianwang.blogspot.com/2008/05/mysterious-crm-lookup-ii.html

Tuesday, July 8, 2008

Enabling Social Networking within CRM Applications

A primer on integrating your CRM application to Social Networking Sites

Over the past 6 months, there has been an increase in the demand for CRM application integration with Social Networking sites. This integration allows organizations to harvest relationships that have been developed by their employees using tools like Linked in and Plaxo. In addition, this integration can be used for marketing purposes by creating corporate social networking sites on MySpace, FaceBook, LinkedIn, Plaxo, etc…

These integrations can have a significant impact on CRM user adoptions by eliminating data entry and making CRM information far more comprehensive. While Oracle and Saleforce.com are leading the way with built in social networking features, most other CRM applications can be configured to incorporate social networking functionality.

There are basically 4 levels of integration:
  1. Static Linking. By far the easiest to implement but also the most limiting. With static linking you provide a link to the social network sites that are most commonly used by your CRM users. You rely on the smarts of the social network site to do the rest. For instance, you may want to setup a research page in your CRM application and provide links to the search pages on Plaxo, Linked In and Hoovers. This can be accomplished in almost any CRM application with some basic configurations.
  2. Dynamic Linking. Most CRM applications allow you to add iFrames with mashups or dynamic links or to other web pages. The dynamic links will contain fields from the current record to allow you to navigate to the appropriate page on the destination site.
    a) Example of this for MS-CRM & LinkedIn; MS-CRM & Facebook
    b) Example of this for salesforce.com & LinkedIn
  3. Web Services Integration. Develop web services calls to social Networking sites and integrate data directly into the CRM application. This approach is ideal for creating new leads/prospects or establishing relationship maps. If the social networking site provides an API, the code can be written using the API. Otherwise a screen scraping approach can be used and data can be returned based on the current screen design. A screen scraping approach is not ideal as it can break if the social networking site changes screen designs, but for sites without an open API it is the only option.
    a) Example of this for MS-CRM & LinkedIn (Contact us)
    b) Example of this for SalesLogix & LinkedIn
    c) Example of this for salesforce.com & LinkedIn; salesforce.com & FaceBook
  4. MultiSite Integration. You may wish to aggregate data from multiple Social Networking sites. This can be accomplished by creating custom code that integrates with each site or by leveraging a common social networking framework. There are two emerging frameworks fbOpen from Facebook and Open Social from Google.
    a) salesforce.com OpenSocial Strategy
    b) Oracle’s OpenSocial Strategy

Developer/API Resources:

Integrating LinkedIn and MS-CRM



A simple example of using a dynamic URL to pull LinkedIn information into a MS-CRM iframe.



For this example we will create a simple integration with LinkedIn from the MS-CRM account record. This integration will allow CRM users to quickly see all contacts from this account that are in their LinkedIn network. This feature is enhanced significantly if you setup a group for your Organization within LinkedIn, because this will ensure you see all of the relationships across your organization.




1) Create the iFrame
As a system administrator, go to the Settings tab and click Customizations. Select Customize Entities and then click the Account record. Click Forms and Views under the details section. Click the form record. Add a Tab and name it LinkedIn. Add a section and name it LinkedIn. Add an Iframe and name it IFRAME_LinkedIn. Uncheck restrict cross-frame scripting box and check the “automatically expand to use available space” box under the row layout section of the formatting tab. Click ok to save the iframe changes.

2) Add Code
Click the form properties under the common tasks section of the account form. Select OnLoad from the Event List and click edit. Enter the following code:



var CRM_FORM_TYPE_CREATE = 1;
var CRM_FORM_TYPE_UPDATE = 2;
switch (crmForm.FormType)
{
case CRM_FORM_TYPE_UPDATE:
crmForm.all.IFRAME_LinkedIn.src="http://www.linkedin.com/search?search=&company=" + crmForm.all.name.DataValue+ "&currentCompany=currentCompany&searchLocationType=I&countryCode=us&postalCode=" + crmForm.all.address1_postalcode.DataValue+ "&distance=50&sortCriteria=3";
break;
}



Click ok to close Event Detail Properties window. Click ok to close Form Properties window. Click the Save and Close button on the Account form.

3) Publish
Click Publish from the Action menu on the Account Entity form. The change is now available to your application.







Notes
Required Fields
Account Name and Zipcode are required fields for this integration and should be made as required fields in MS-CRM. The Zipcode requirement can be removed by removing the location references in the URL.

Sorting
The lists will be sorted by the default sorting (degrees and Name). This can be changed by changing the sortCriteria value.
1: Number of Connections
2: Degrees and Recommendations
3: Degrees and Name
4: Keyword (CompanyName) relevance

Troubleshooting
If you get a security message when you open the account record or the following message in the LinkedIn iframe “Navigation to the webpage was canceled”, you need to change security settings in Internet Explorer to enable “Display Mixed Content”.

Wednesday, June 11, 2008

CRM 4.0 Sales Process Workflow

I found a great article today on creating Sales Processes with Workflow in CRM 4.0. Unfortunately in my experience the workflow engine is pretty finicky, especially when it comes to using Stages. A lot of times it hangs on the wait timers.

http://www.bizitpro.com/weblog/entry/microsoft_crm_40_workflow_stage_example_upgraded_from_crm_30/

UPDATE: Microsoft has released a hotfix to fix the wait timer issue:
http://support.microsoft.com/?kbid=951919

Monday, June 2, 2008

Hiding Action Menu items

Well, this is completely unsupported but we had to hide the Activate and Deactivate choices from the Actions menu on a form the other day. I highly suggest downloading the IE Developer Toolbar to accomplish this. It will assist with getting the ids for these two menu choices. Here is the javascript we implemented:

//HIDE DEACTIVATE AND ACTIVATE MENU ITEM if (document.all._MIchangeStatedeactivate100145 != null) { document.all._MIchangeStatedeactivate100145.style.display = "none";} if (document.all._MIchangeStateactivate100146 != null) { document.all._MIchangeStateactivate100146.style.display = "none";}

Thursday, March 20, 2008

Disable all attributes on a form

I found this snippet of code today on a message board to disable all attributes on a form:

for (var i = 0; i <>)
{
crmForm.all[i].Disabled = true;
}

Original post can be found here:
http://www.microsoft.com/communities/newsgroups/en-us/default.aspx?dg=microsoft.public.crm.developer&tid=0ddb6aa6-3d3c-4299-835e-94a8bc9509c1

Thursday, September 6, 2007

Getting values from a lookup control

We recently needed to capture both the GUID and the text value from a CRM lookup control. I found some quick code to do this on the following newsgroup:

http://groups.google.com/group/microsoft.public.crm/browse_thread/thread/9bc6721768f0a1f1/4b5f5d0ff5972dc0?lnk=st&q=ms+crm+get+lookup+datavalue&rnum=1&hl=en#4b5f5d0ff5972dc0



var lookupItem = new Array;

lookupItem = crmForm.all.primarycontactid.DataValue;

if (lookupItem[0] != null)
{
// The text value of the lookup.
alert(lookupItem[0].name);


// The GUID of the lookup.
alert(lookupItem[0].id);
}


Thursday, May 3, 2007

Hiding and Disabling CRM fields with Javascript

I always forget the syntax for hiding and disabling fields in CRM. Below are some common examples:

//hide contract and contract line fields
crmForm.all.contractid_d.style.visibility = 'hidden';
crmForm.all.contractdetailid_d.style.visibility = 'hidden';


//hide a tab
crmForm.all.tab3Tab.visibility = "hidden";

//disable lookup fields
var oField = crmForm.all.SOME_FIELD_ID;
oField.Disabled = !oField.Disabled;


//disable radio button field
crmForm.all.new_inboundoutbound.disabled = true;

//disable datetime field
if(crmForm.FormType!=4)
{
//disable data field
var oField = crmForm.all.new_resolutiondate;
oField.Disabled = !oField.Disabled;
}