What makes CRM projects successful? My top 10 …

I have been working in the realm of CRM for more than 12 years and have been involved with over 20 implementations globally. With this knowledge and experience I thought I would compile my top 10 of what makes CRM Projects successful.

 

What makes CRM projects successful? My top 10 …

 

CRM makes or breaks a business, its the foundation that enables a business to grow and retain its customers, its the system that provides insight into the Customers and what makes them tick, so why do many CRM implementations fail or is this just a myth? I have compiled a list below that I feel enables a CRM project to be successful in a business environment, not all points will apply to all projects but if the principles are followed then the project stands a better chance at being successful.

 

  1. End User Buy in
  2. Define the big picture and then break it up into manageable deliverables that focus on business value
  3. Identify the pain points and fix those first
  4. Minimise the number of ‘alt tabs’ in the solution
  5. Build in validation and review periods after go live to enable quick improvements to be made that helps drive user adoption
  6. Plan to deliver value in 10 weeks or less
  7. Add something abstract into the solution to provide a wow factor i.e. simple map integration
  8. Produce worthwhile documents rather than ones to fulfil a process
  9. Always document the process and how that process will interact with the system
  10. Keep it simple to start with, remove unnecessary links and functionality

How to find out which action raised the OnSave event in a Form using event>mode

Recently, I was asked by a customer if it was possible to execute some javascript when an Opportunity is marked as won. As you all know, the value of statecode is in fact on a separate dialog box and technically, there is no way to capture the event. However, this is another way around it, and that is the use the event.Mode value to determine which action raised the OnSave event in the first place.

Here is the list of events:

  • None : 0
  • Save : 1
  • SaveAndClose : 2
  • Delete : 3
  • Load : 4
  • Deactivate : 5
  • Reactivate : 6
  • Email Send : 7
  • Email Reply : 8
  • Email Forward : 9
  • Kb Submit : 10
  • Kb Reject : 11
  • Kb Publish : 12
  • Kb UnPublish : 13
  • Kb Rate : 14
  • Lead Unqualify : 15
  • Lead Qualify : 16
  • Quote Accept : 17
  • Quote CreateOrder : 18
  • Order ProcessOrder : 19
  • Opportunity AddRelatedOrder : 21
  • Opportunity AddRelatedQuote : 22
  • Opportunity AddRelatedInvoice : 23
  • Quote CreateRevision : 24
  • Quote CloseQuote : 25
  • Order CancelOrder : 26
  • Invoice Close : 27
  • Quote GetProducts : 28
  • Quote Activate : 29
  • Email ReplyAll : 30
  • Contract Hold : 31
  • Contract ReleaseHold : 32
  • Contract Cancel : 33
  • Contract Renew : 34
  • Product ConvertToKit : 35
  • Product ConvertFromKit : 36
  • ContractDetail Cancel : 37
  • Contract Invoice : 38
  • Contract Clone : 39
  • Incident Cancel : 40
  • Email Assign : 41
  • Change SalesStage : 42
  • SalesOrder GetProducts : 43
  • InvoiceGetProducts : 44
  • TemplateMakeOrgAvailable : 45
  • TemplateMakeOrgUnavailable : 46
  • Assign : 47
  • IncidentAssignToUser : 49
  • OrderLock : 50
  • OrderUnlock : 51
  • InvoiceLock : 52
  • InvoiceUnlock : 53
  • ConvertResponse : 54
  • ReportMakeOrgAvailable : 60
  • ReportMakeOrgUnavailable : 61
  • WorkflowAddCheckStep : 62
  • WorkflowUpdateCondition : 63
  • WorkflowCreateAction : 64
  • SendInvite : 65
  • WorkflowAddElseIfStep : 66
  • WorkflowAddElseStep : 67
  • WorkflowDeleteStep : 68

Example Usage :

if(event.Mode == 5) //deactivation

{

// Do some custom logic here

}

 

If you dont know which action triggered the event, you can use the following line in the onSave event of the form to find out :

alert(event.Mode);

Changing the default lookup type of a regarding field

When opening a lookup that can select from multiple entity types, you may want to use a different default entity in the lookup dialog. The following script changes the default entity of the regardingobjectid field in an activity to contacts:

 

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

 

The 2 refers to contact, just change to reflect the object you wish to set as the default.

Retrieving values from lookup entity relationships without using webservices

Note the values that you want to pull through need to be on the lookup view of that entity. Item in bold is the key part.

//Defines the lookup entity to retrieve values from

var lookup = crmForm.all.<<LookupField>>;

if(lookup .DataValue != null)

{

//Using key values to retrieve the value of the item from the lookup entity. Items[0] refers to the selected instance of the entity of the form.

 var lookupfieldvalue =  lookup.items[0].keyValues.<<field_on_lookup_view>>.value;

}