Scenario Overview

In this scenario, the business requirement we are addressing is to create a Contact direct from a Lead, without creating an Opportunity and to move all the open and completed activities over to the new Contact.

For this we don't want to use the out of the box lead conversion process, we are essentially recreating a custom process that suits our business needs.

To do this we are going to use the North52 Quick Button to create a button on a Lead that will create the record for us.

North52 Decision Suite Solution

The North52 Decision Suite solution works like this,

  • We create a formula of type 'ClientSide - Calculation' on the Lead entity
  • Add a North52 Quick Button to the form using the instructions that can be found here
  • Set the formula shortcode for the Quick Button to your formula
  • The Formula will first create the new Contact record
  • Then it uses Fetch-XML to retrieve the list of activities.
  • If the activity is open, it will update the regarding field to the new Contact 
  • If the activity is closed, it will store the status reason, then open the activity, update the regarding field and then close back down the activity setting the correct status reason
  • Finally, as the last step, it will mark the Lead as Qualified


North52 Decision Suite Steps

The following set of steps will set this formula up for you.

  • Create a new formula of type 'ClientSide - Calculation'
  • Set the Source Entity to 'Lead'
  • Copy and paste the formula below into the formula canvas
  • Save the formula
  • Create the Fetch-XML call using the below
  • Click Save and you are ready to test

North52 Quick Button

Newly Created Contact

All the Activities Copied Over


      SetAttribute('firstname', [lead.firstname]),
      SetAttribute('lastname', [lead.lastname]),
      SetAttribute('address1_line1', [lead.address1_line1]),
      SetAttribute('address1_line2', [lead.address1_line2]),
      SetAttribute('address1_line3', [lead.address1_line3])

    FindRecordsFD('FindAllActivities', true),

    If(CurrentRecord('statecode') = 0, /* Activity is open */
        SetAttribute('regardingobjectid', 'contact', GetVar('NewContact'))),

      /* Not Open -> Open Activity,  Update the regarding, then close activity again */
        /* Record Previous StatusReason */
        SetVar('pStatusReason', CurrentRecord('statuscode')),

          SetAttributeStatus( 0,  1 )),

          SetAttribute('regardingobjectid', 'contact', GetVar('NewContact'))),

          SetAttributeStatus( 1, GetVar('pStatusReason')))

    SetAttributeStatus( 1,  3)

  SmartFlowReturn(SetFormNotification('New Contact has been created - All activities have been moved over', 


<fetch top="50" >
  <entity name="activitypointer" >
    <attribute name="activityid" />
    <attribute name="regardingobjectid" />
    <attribute name="statecode" />
    <attribute name="activitytypecode" />
    <attribute name="statuscode" />
      <condition attribute="regardingobjectid" operator="eq" value="@leadid@" />
      <condition attribute="statecode" operator="neq" value="2" />

Wizard - FindRecordsFD

Please see below the wizard you can use to create the FindRecordsFD() function call used in this formula. 

Note you will need to have created the FetchXML beforehand. 

Did you know?

North52 helps you automatically test Dynamics 365 projects

North52's TestShield helps you test Dynamics 365 projects:

  • FASTER - Our no code solution delivers automated CRM project testing faster
  • EASIER - Simple to use point-and-click interface to build simple or complex testing plans
  • SMARTER - Lower your project risk and slash ongoing costs with automated process testing

Learn more about TestShield