Hi all,
I'm working on a custom workflow called by a custom action. I'm wondering if when I have more than one output parameter, I must set all the parameters together every time that i want to set only one of them.
[Input("CustomerExternalId")]
public InArgument<String> CustomerExternalId { get; set; }
[Output("Individual")]
[ReferenceTarget("contact")]
[Default(null)]
public OutArgument<EntityReference> Individual { get; set; }
[Output("Corporate")]
[ReferenceTarget("account")]
[Default(null)]
public OutArgument<EntityReference> Corporate { get; set; }
I have these arguments. Now with this code the custom workflowk works fine:
protected override void ExecuteInternal(LocalWorkflowContext context)
{
string customerexternalid = this.CustomerExternalId.Get(context.CodeActivityContext);
if (customerexternalid != null)
{
var individualQuery = context.CrmContext.CreateQuery("contact").ToList().Where(c => c.GetAttributeValue<string>("etel_externalid") == customerexternalid).FirstOrDefault();
var corporateQuery = context.CrmContext.CreateQuery("account").ToList().Where(c => c.GetAttributeValue<string>("etel_externalid") == customerexternalid).FirstOrDefault();
if (individualQuery != null)
{
EntityReference individualReference = new EntityReference(ProxyClasses.Individual.GetLogicalName(), individualQuery.Id);
this.Individual.Set(context.CodeActivityContext, individualReference);
this.Corporate.Set(context.CodeActivityContext, null);
}
if (corporateQuery != null)
{
EntityReference corporateReference = new EntityReference(ProxyClasses.Corporate.GetLogicalName(), corporateQuery.Id);
this.Corporate.Set(context.CodeActivityContext, corporateReference);
this.Individual.Set(context.CodeActivityContext, null);
}
}
Instead with the following it doesn't works (Exception: entity reference cannot have id and key attributes empty):
protected override void ExecuteInternal(LocalWorkflowContext context)
{
string customerexternalid = this.CustomerExternalId.Get(context.CodeActivityContext);
if (customerexternalid != null)
{
var individualQuery = context.CrmContext.CreateQuery("contact").ToList().Where(c => c.GetAttributeValue<string>("etel_externalid") == customerexternalid).FirstOrDefault();
var corporateQuery = context.CrmContext.CreateQuery("account").ToList().Where(c => c.GetAttributeValue<string>("etel_externalid") == customerexternalid).FirstOrDefault();
if (individualQuery != null)
{
EntityReference individualReference = new EntityReference(ProxyClasses.Individual.GetLogicalName(), individualQuery.Id);
this.Individual.Set(context.CodeActivityContext, individualReference);
}
if (corporateQuery != null)
{
EntityReference corporateReference = new EntityReference(ProxyClasses.Corporate.GetLogicalName(), corporateQuery.Id);
this.Corporate.Set(context.CodeActivityContext, corporateReference);
}
}
But I set the default value null, so why I'm doing wrong?
*This post is locked for comments