Tutorial 7 - phuocle/Dynamics-Crm-DevKit GitHub Wiki
Task
- Qualify lead don't create Opportunity, create Account and move to Account page after success qualified
Prerequisites
- Finish Tutorial 1: Plugin
- Finish Tutorial 2: Unit Test Plugin
- Finish Tutorial 3: WebResource
- Finish Tutorial 4: Unit Test WebResource
- Finish Tutorial 5: Custom Workflow
- Finish Tutorial 6: WebApiClient
Coding
- Goto Dynamics 365, create a
Custom ActionthenActivatedwith these information bellow
Process Name:AjaxUnique Name:paz_AjazEntity:None (global)ArgumentsName:function,Type:String,Required:Required,Direction:InputName:jsonInput,Type:String,Required:Optional,Direction:InputName:jsonOutput,Type:String,Required:Required,Direction:Output
- Add
New Project02. C# Custom Action Projectto solution.- A popup form
Add new Custom Action Projectopened - Click button
><to create/select a Dynamics 365 connection - Keep the text box
Project Nameempty - Select
9.0.2.4in theCrm VersionPL.DynamicsCrm.DevKitget allMicrosoft.CrmSdk.CoreAssembliesversion fromNuGet - Select
4.5.2in the.Net version - Click
OK PL.DynamicsCrm.DevKitcreated workflow project name:Paz.LuckeyMonkey.CustomAction
- A popup form
- Rebuild solution to restore
NuGetpackages - Add
New Item04. C# Custom Action ClasstoPaz.LuckeyMonkey.CustomActionproject- A popup form opened
- Click button
><to create/select a Dynamics 365 connection - After connected
PL.DynamicsCrm.DevKitloaded all entities and bind to dropdownMessage - Select
paz_Ajax - Click
OK PL.DynamicsCrm.DevKitcreated custom action class:PostNonepaz_AjaxSynchronous
- Edit
ExecuteCustomActionlike bellow
private ParameterCollection ExecuteCustomAction(IPluginExecutionContext context, IOrganizationServiceFactory serviceFactory, IOrganizationService service, ITracingService tracing)
{
var outputs = new ParameterCollection();
//YOUR CUSTOM ACTION BEGIN HERE
var function = (string)context.InputParameters["function"];
var jsonInput = (string)context.InputParameters["jsonInput"];
var @return = string.Empty;
switch (function)
{
case "QualifyLead":
var qualifyLead = new QualifyLead();
@return = qualifyLead.Do(context, service, tracing, jsonInput);
break;
}
outputs.Add(new KeyValuePair<string, object>("jsonOutput", @return));
return outputs;
}
- Class
QualifyLead
public class InputQualifyLead
{
public string LeadId { get; set; }
}
public class OutputQualifyLead
{
public string AccountId { get; set; }
public bool Status { get; set; }
}
public class QualifyLead
{
internal string Do(IPluginExecutionContext context, IOrganizationService service, ITracingService tracing, string jsonInput)
{
//Parse jsonInput to strong type InputQualifyLead
var input = SimpleJson.DeserializeObject<InputQualifyLead>(jsonInput);
//Call request QualifyLead
var request = new QualifyLeadRequest()
{
CreateAccount = true,
CreateOpportunity = false,
CreateContact = true,
LeadId = new EntityReference(Lead.EntityLogicalName, Guid.Parse(input.LeadId)),
Status = new OptionSetValue((int)StatusCode.Qualified)
};
var response = (QualifyLeadResponse)service.Execute(request);
var account = response.CreatedEntities.FirstOrDefault(r => r.LogicalName == Account.EntityLogicalName);
//Prepare output and Serialize to jsonOutput
var output = new OutputQualifyLead
{
Status = account != null,
AccountId = account?.Id.ToString()
};
return SimpleJson.SerializeObject(output);
}
}
NOTED You should add 01. C# Late Bound Class class: Account to Entities folder of Paz.LuckeyMonkey.Shared project
- Run
deploy.batof projectPaz.LuckeyMonkey.CustomAction - Check-in all files to your source control
- You finished this tutorial
Summary
This tutorial, you know howto