namespace Workflow
{
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Workflow;
using System;
using System.Activities;
public partial class CustomWorkflow: CodeActivity
{
/// <summary>
/// Define property for DayofWeeks
/// </summary>
[Output("DayofWeek")]
public OutArgument<String> DayofWeek { get; set; }
/// <summary>
/// Define override method for custom workflow Execute
/// </summary>
/// <param name="Execution"></param>
protected override void Execute(CodeActivityContext Execution)
{
string Day = string.Empty;
DateTime _Date = DateTime.MinValue;
//Get context
IWorkflowContext context = Execution.GetExtension<IWorkflowContext>();
//Create iorganization service object
IOrganizationServiceFactory serviceFactory = Execution.GetExtension<IOrganizationServiceFactory>();
IOrganizationService service = serviceFactory.CreateOrganizationService(context.InitiatingUserId);
//Get created date of the lead
Entity _lead = (Entity)service.Retrieve("lead", context.PrimaryEntityId, new ColumnSet(new string[] { "createdon" }));
if (_lead.Contains("createdon"))
{
//get day of the week based on created on date
Day = ((DateTime)_lead.Attributes["createdon"]).DayOfWeek.ToString();
}
//Set value to output variable
DayofWeek.Set(Execution, Day);
if (Day == "Sunday")
{
Guid _UserID = GetUserID(service);
AssignLead(service, context.PrimaryEntityId, _UserID);
}
}
/// <summary>
/// To get Userid
/// </summary>
/// <param name="service"></param>
/// <returns></returns>
private Guid GetUserID(IOrganizationService service)
{
Guid _UserID = Guid.Empty;
ConditionExpression condition1 = new ConditionExpression();
condition1.AttributeName = "firstname";
condition1.Operator = ConditionOperator.Equal;
condition1.Values.Add("Vishanshu");
ConditionExpression condition2 = new ConditionExpression();
condition2.AttributeName = "lastname";
condition2.Operator = ConditionOperator.Equal;
condition2.Values.Add("Jain");
FilterExpression filter1 = new FilterExpression();
filter1.Conditions.AddRange(condition1, condition2);
QueryExpression query = new QueryExpression("systemuser");
query.Criteria.AddFilter(filter1);
EntityCollection EntityCol = service.RetrieveMultiple(query);
if (EntityCol.Entities.Count > 0)
{
Entity _User = (Entity)EntityCol.Entities[0];
_UserID = _User.Id;
}
return _UserID;
}
/// <summary>
/// AssignLead to user
/// </summary>
/// <param name="service"></param>
/// <param name="LeadID"></param>
/// <param name="UserID"></param>
private void AssignLead(IOrganizationService service, Guid LeadID, Guid UserID)
{
AssignRequest _Assign = new AssignRequest()
{
Assignee = new EntityReference("systemuser", UserID),
Target = new EntityReference("lead", LeadID)
};
service.Execute(_Assign);
}
}
}