在工作中,我们在WSS 3.0上安装SP2与OnTaksCreated的随意行为相关时遇到了问题。有关此检查“http://fightingvssharepoint.blogspot.com/2009/06/ontaskcreated-in-wss-30-sp2.html”的详细信息。我们还没有找到解决方案,所以我们正在尝试另一种解决方案。包括取出OnTaksCreted并将其所有活动移至OnTaskInit。 如果您确实有SP2 OnTaskCreated问题的解决方案,请告诉我!但如果你不继续阅读,请...
自定义工作流程简短说明:在“任务”列表中创建新的设置,设置工作流程状态并向“assignedTo”人员发送电子邮件。 电子邮件正文中填入了最近创建的任务信息。为了检索此信息,调用方法“GetWorkflowTask”。该方法的签名是:
SPWorkflowTask任务GetWorkflowTask(int taskID)
在OnTaskCreated中调用时,此方法检索任务正常。但是如果我在OnTaskInit中调用它,则在Createtask活动之后,检索null。为什么呢?
谢谢! 乔治。
答案 0 :(得分:0)
我以前见过这个错误,不幸的是它是不可预测的,我能给你的是一个适用于我的解决方法,涉及为你要求SharePoint创建的任务指定listItemID(而不是GUID),从那里你假设创建成功,可以访问任何未来事件的列表项。如果你使用的列表获得了大量的流量,那么由于竞争条件,这可能无效......
再一次“解决方法”所以请充实...
- 当您创建任务“onTaskCreateTask1”时,在SPWorkflowTaskProperties.TaskItemID = x中指定taskItemID明确性,其中x是您生成的值。
- 将生成的taskItemID存储在成员变量中
- 使用getListItemFromID(x)方法或使用list.items [x]方法/访问器访问列表
我没有写下面的代码,赞扬Martin Holy .. http://social.msdn.microsoft.com/Forums/en-US/sharepointworkflow/thread/26ff3ce1-6d6f-40a5-90b4-a7436acdfffe
/// <summary>
/// Because our task form's don't let us inject the ID we have to
/// generate one beforehand.
/// </summary>
/// <param name="site"></param>
/// <param name="listId"></param>
/// <returns></returns>
public static int GetNextAvailableIdFromList(SPSite site, Guid listId)
{
int nextAvailableID = -1;
if (site.WebApplication.ContentDatabases.Count > 0)
{
string DBConnString = site.WebApplication.ContentDatabases[0].DatabaseConnectionString;
SqlConnection con = new SqlConnection(DBConnString);
try
{
con.Open();
SqlCommand com = con.CreateCommand();
com.CommandText = String.Format("select tp_NextAvailableId from AllLists where tp_ID = '{0}'", listId.ToString());
nextAvailableID = (int)com.ExecuteScalar();
}
finally
{
con.Close();
}
}
return nextAvailableID;
}
答案 1 :(得分:0)
我遇到与OnTaskCreated
相同的问题,Microsoft建议您不要使用OnTaskCreated
,但要解决此问题,请参阅this blog post。