Workflow Security and Workflow Scope Overview

Workflow Related Security Roles – Customisation Tab
  • Minimum User security rights to run workflows
    • To Execute workflows the user must have the mininum setting of "Execute Workflow Job"
    • No other rights are required
  • To see the workflow view
    • To see the workflow associated view within entities the user must have at mininum User read access to "System Jobs"
  • To create or run On demand workflows
    • To run ondemand workflows the user must have at mininum user read access to "Workflow"
    • To create workflows the user must have at mininum user read, write and create to "Workflow"

Then by expanding the visibility of system jobs and workflows will enable the user to view more records via system jobs and to be able to create workflows across the organisation

Workflow Scope

The workflow scope within a workflow record defines who can access the workflow and depending on the trigger the associated security role that is required:

  • If the trigger point for the workflow is anything but OnDemand then the workflow scope determines when the workflow will run based on the current user position within the business unit hierarchy
    • If it is set to Organisation then the workflow will be run for all users that can execute workflows when the trigger is met
    • If it is set to a business unit scope then it will run if the user is within the business unit of the user who owns the workflow
    • If it is set to user then only the owner of the workflow will trigger the workflow
  • If the trigger point is OnDemand then the workflow scope is directly related to the current users workflow read rights on their security record.
    • If it is set to Organisation then the workflow will be selectable via run workflow for all users that have organisation read access to workflow
    • If it is set to business unit scope then it will be selectable via run workflow if the user is within the business unit of the user who owns the workflow
    • If it is set to user then only the owner of the workflow will be able to run via the run workflow option

Hope this clears up the workflow visibility settings!


NZ XRM Dynamics UserGroup – Auckland

The Auckland XRM Dynamics Usergroup is up and running with the first event on Tuesday 2nd March – see link:
I am a member of the Committee and will be presenting at the first session along with the other committee members – Greg Olsen, Mark Smith, Regan Murthy, Paul Scott, Shafraz Nasser and Dirk Develter.

Microsoft CRM Rollup 9 Released

Update Rollup 9

Update Rollup 9 for Microsoft Dynamics CRM 4.0 (KB 977650)

Microsoft has released Update Rollup 9 for Microsoft Dynamics CRM 4.0. It includes updates and hot fixes packaged together for easy deployment. We recommend that you install the update rollup to keep your software performing at its best.

Important: Update Rollup 7 is a prerequisite to this update rollup. The Microsoft Dynamics CRM for Microsoft Office Outlook and Microsoft Dynamics CRM Data Migration Manager components require Update Rollup 7 to be installed. For more information about Update Rollup 7, see the Microsoft Knowledge Base article:
971782: Update Rollup 7 for Microsoft Dynamics CRM 4.0 is available

Update Rollup 9 is available for all languages that are supported by Microsoft Dynamics CRM 4.0.

For more information about this release, see Microsoft Knowledge Base article 977650: Update Rollup 9 is available for Microsoft Dynamics CRM 4.0.

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 :


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;