Sunday, March 13, 2016

Workflow Activity Input and Output Parameters and Data Types in MS CRM 2013/15/16

Microsoft Dynamics CRM supports two types of parameters for a workflow activity.

  • Input Parameters
  • Output Parameters

Input Parameters

The input parameter is annotated with the .NET attribute "Input".


DefaultAttribute class can be used to specify a default value (using "Default" attribute) for an input parameter. 


[Input("Bool input")]
[Output("Bool output")]
public InOutArgument<bool> Bool { get; set; }


[Input("DateTime input")]
[Output("DateTime output")]
public InOutArgument<DateTime> DateTime { get; set; }


[Input("Decimal input")]
[Output("Decimal output")]
public InOutArgument<decimal> Decimal { get; set; }


[Input("Double input")]
[Output("Double output")]
public InOutArgument<double> Double { get; set; }


[Input("Int input")]
[Output("Int output")]
public InOutArgument<int> Int { get; set; }

Money (Currency)

[Input("Money input")]
[Output("Money output")] 
public InOutArgument<Money> Money { get; set; }


[Input("OptionSetValue input")]
[Output("OptionSetValue output")]
[AttributeTarget("account", "industrycode")]
public InOutArgument<OptionSetValue> OptionSetValue { get; set; }
Attribute Target must specify the entity and attribute being referenced. 


[Input("String input")]
[Output("String output")]
[Default("string default")]
public InOutArgument<string> String { get; set; }

Entity Reference

[Input("EntityReference input")]
[Output("EntityReference output")]
[Default("3B036E3E-94F9-DE11-B508-00155DBA2902", "account")]
public InOutArgument<EntityReference> AccountReference { get; set; }
Reference Target attribute must specify the type of entity being referenced. 

Required Argument Attribute 

System.Activities.RequiredArgumentAttribute class can be used to specify that the input parameter is required.

[Input("Update next Anniversary date for")]
public InArgument<EntityReference> Contact { get; set; }

Output Parameters

The output parameter is annotated with the .NET attribute "Output"

//this is the name of the parameter that will be returned back to the workflow
[Output("Credit Score")]
//this line identifies the specific attribute which will be passed back to the workflow
[AttributeTarget(CustomEntity, "new_creditscore")]
//this line declares the output parameter and declares the proper data type of the parameter being passed back.
public OutArgument<int> CreditScore {get;set;}

Refer to Microsoft documentation for more details

Option Set:

[Input("OptionSetValue input")]

[Output("OptionSetValue output")]

[AttributeTarget("account", "industrycode")]


public OutArgument<OptionSetValue> OptionSetValue { get; set; }

Output only:

[Output("OptionSetValue output")]

[AttributeTarget("account", "industrycode")]

public OutArgument<OptionSetValue> OptionSetVal { get; set; }

 To set:

this.OptionSetVal .Set(context, new OptionSetValue(intVar)); //change intVar var to yours


[Input("DateTime input")]

[Output("DateTime output")]


public OutArgument<DateTime> DateTimeVal { get; set; }

Output only:

[Output("DateTime output")]

public OutArgument<DateTime> DateTimeVal{ get; set; }

 To set:

this.DateTimeVal.Set(context, myDateTimeValue); //change myDateTimeValue var to yours


[Output("Money output")]

public OutArgument<Money> MoneyVal { get; set; }

To set:

decimal decimalVar = 200.15; //change to your value

this.MoneyVal .Set(context, new Money(decimalVar)); //change decimalvar to yours

Lookup or Entity Reference:

[Output("EntityReference output")]
[ReferenceTarget("account")]  //change this to your Entity, for example if you want to lookup to entity Account
public OutArgument<EntityReference> EntityReferenceVal { get; set; }

To set:

Guid accountId = new Guid("6fd72744-3676-41d4-8003-ae4cde9ac282"); //change to your value

this.EntityReferenceVal.Set(context, new EntityReference("account", accountId)); //change the "account" and accountId to your variables (entity name and entity record id of the lookup)

Btw, we also can set default value like this:

[Output("Money output")]


public InOutArgument<Money> MoneyParameter { get; set; }

Hope it helps!

Thank you.


  1. When I initially commented I clicked the “Notify me when new comments are added” checkbox and now each time a comment is added I get three e-mails with the same comment. Is there any way you can remove me from that service? Many thanks!
    python website development


  2. Iam so thrilled because of finding your alluring website here.Actually i was searching for Android.Your blog is so astounding and informative too..Iam very happy to find such a creative blog. Iam also find another one by mistake while am searching the same topicIOS Development.Thank you soo much..


Get files of last hour in Azure Data Factory

  Case I have a Data Factory pipeline that should run each hour and collect all new files added to the data lake since the last run. What is...