我有一个在VS2010中编写的自定义状态机工作流,当工作流被取消或完成时,我需要向所有与给定工作流交互(完成/更改任务或文档)的用户发送电子邮件。我一直无法想出一个好方法来获得我需要发送电子邮件的用户列表。有什么建议吗?
一种简单的方法是通过检查项目的工作流任务并找出它们被分配给谁来获得在工作流过程中分配的任务集合。循环遍历这些任务,并构建分配给每个任务的用户列表。
然后,检查项目的版本,看看是谁创建了每个版本,并将此用户添加到上述列表中:
/// <summary>
/// This helper method will return a List of strings representing users who modified an item
/// or were assigned a workflow task for the item.
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
private List<string> GetUsersForWorkflow(SPListItem item)
{
List<string> assignees = new List<string>();
//Get task editors
Microsoft.SharePoint.Workflow.SPWorkflowTaskCollection tasks = item.Workflows[0].Tasks; //Get the workflow by GUID alternatively
foreach (Microsoft.SharePoint.Workflow.SPWorkflowTask task in tasks)
{
string assignee = task["Assigned To"].ToString();
assignees.Add(assignee);
}
//Get version creators
SPListItemVersionCollection versions = item.Versions;
foreach (SPListItemVersion version in versions)
{
string assignee = version.CreatedBy.ToString();
assignees.Add(assignee);
}
return assignees;
}
如果你想只给那些已经完成任务的人发邮件,你可以玩任务。你可以找到工作流作者(item.Workflows[0]. author),也可以给他/她发邮件。