using System;
using System.Collections.Generic;
using System.Linq;
using System.Activities;
using EGR_Workflow_Helper;
namespace EGR_WorkflowLibrary
{
public class CheckMailActivity : NativeActivity
{
public InArgument<String> InActivityClassName { get; set; }
public InArgument<string> InDeadLineName { get; set; }
public InArgument<int> InSwitchType { get; set; }
public InArgument<DateTime> InNewDeadline { get; set; }
public InArgument<int> InDaysToExtendDeadline { get; set; }
public InOutArgument<WorkflowContainer> WFContainer { get; set; }
public OutArgument<Boolean> OutMailReceived { get; set; }
public OutArgument<string> OutXMLID { get; set; }
CheckMailItem _item;
protected override void Execute(NativeActivityContext context)
{
try
{
DateTime dueDate = new DateTime();
IRequestItemHostNotification extension =
context.GetExtension<IRequestItemHostNotification>();
{
WorkflowContainer container = WFContainer.Get(context);
List<Deadline> deadlines = (List<Deadline>)container.GetValue("Deadlines");
// Create BookmarkName
string _bookmarkName = context.WorkflowInstanceId + "." + InActivityClassName.Get(context) + "." + context.ActivityInstanceId;
//get deadline
if (InNewDeadline.Get(context) != DateTime.MinValue)
{
dueDate = InNewDeadline.Get(context);
}
else
{
int st = InSwitchType.Get(context);
string name = InDeadLineName.Get(context);
dueDate = ((List<Deadline>)container.GetValue("Deadlines")).
Where(d => d.Designation == InDeadLineName.Get(context)).First().DueDate;
}
dueDate = dueDate.AddDays(InDaysToExtendDeadline.Get(context));
Console.WriteLine("CheckMail date: " + dueDate.ToShortDateString());
_item = new CheckMailItem(dueDate, context.WorkflowInstanceId, _bookmarkName)
{
ProcessDocument = container.GetValue("ProcessDocument").ToString(),
};
// Publish Workitem
extension.Notify(_item);
// Publish Bookmark
context.CreateBookmark(_bookmarkName, Resumed);
}
}
catch (Exception ex)
{
Console.WriteLine("CheckMailActivity.Execute error: " + ex);
}
}
private void Resumed(NativeActivityContext context, Bookmark bookmark, object value)
{
OutMailReceived.Set(context, _item.MailReceived);
OutXMLID.Set(context, _item.XMLID);
}
protected override bool CanInduceIdle
{
get { return true; }
}
}
}