Wednesday, September 21, 2011

CRM 2011 – Custom Workflow Syntax changes from CRM 4 to CRM 2011 « Hosk's Dynamic CRM 2011 Blog

Usefull post from The Host on differences between CRM 4 and CRM 2011 custom workflow actions.


Differences in Custom Workflow Assembly in CRM 4.0 and CRM 2011


We have listed the list of changes noticed for designing a custom workflow assembly in CRM 2011 and in CRM 4.0.


1. References


CRM 4.0


using System.Workflow.Activities;


using System.Workflow.ComponentModel;


using System.Workflow.ComponentModel.Compiler;


using Microsoft.Crm.Sdk;


using Microsoft.Crm.Sdk.Query;


using Microsoft.Crm.SdkTypeProxy;


using Microsoft.Crm.Workflow;


CRM 2011


using System.Activities;


using Microsoft.Crm.Sdk.Messages;


using Microsoft.Xrm.Sdk;


using Microsoft.Xrm.Sdk.Workflow;


2. Base Class


Base class definition has been changed from SequenceActivity to CodeActivity.


CRM 4.0: In CRM 4.0 we have to specify both Workflow name and Workflowactivitygroupname in the code as written in the following code.


[CrmWorkflowActivity("My Custom Workflow", "CRM Workflow")]


public class MyCustomWF: SequenceActivity


CRM 2011: In CRM 2011 that is done in different way.


public class MyCustomWF: CodeActivity


Both Workflow name and Workflowactivitygroupname can be specified at the time of registering the assembly as shown in below screen shot.


3. Execute Method


The overridden Execute method remains the same except parameter and return type.


CRM 4.0


protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)


CRM 2011


protected override void Execute(CodeActivityContext executionContext)


4. Create service


CRM 4.0


IContextService contextService = (IContextService)executionContext.GetService(typeof(IContextService));


IWorkflowContext context = contextService.Context;


ICrmService crmService = context.CreateCrmService();


CRM 2011


IWorkflowContext context = executionContext.GetExtension();


IOrganizationServiceFactory serviceFactory = executionContext.GetExtension();


IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);


5. INPUT Parameters


CRM 4.0


Declaration: how to initialize the input parameter


// specified dependency property


public static DependencyProperty CaseIDProperty = DependencyProperty.Register("CaseID", typeof(Lookup), typeof(TotalTaskRetrieval));


// Specified Input property


[CrmInput("Enter Case ")]


// Set the reference Target for Property created


[CrmReferenceTarget("incident")]


// Property Defined for caseId


public Lookup CaseID


{


get


{


return (Lookup)base.GetValue(CaseIDProperty);


}


set


{


base.SetValue(CaseIDProperty, value);


}


}


Use: Access the input parameter declared above as,


Guid caseid=CaseID.Value


CRM 2011


Declaration: how to initialize the input parameter


[Input("Enter Case ")]


[ReferenceTarget("incident ")]


[Default("3B036E3E-94F9-DE11-B508-00155DBA2902", " incident ")]


public InArgument CaseID { get; set; }


Use: Access the input parameter declared above as,


Guid caseid = CaseID.Get(executionContext).Id


6. OUTPUT Parameters


CRM 4.0


[CrmOutput("outputSum")]


public CrmMoney Sum


{


get


{


return (CrmMoney)base.GetValue(SumProperty);


}


set


{


base.SetValue(SumProperty , value);


}


}


CRM 2011


[Output("outputSum")]


[Default("23.3")]


public OutArgument Sum { get; set; }

0 comments: