Я видел эту ошибку раньше, и, к сожалению, она непредсказуема, я могу дать вам обходной путь, который заключается в указании listItemID (не GUID) для задачи, которую вы просите создать SharePoint, оттуда вы может получить доступ к элементу списка в любом будущем событии, предполагая, что создание завершилось успешно. Если используемый вами список получает много трафика, это может не сработать из-за условий гонки ...
Еще раз "обходной путь", так что будьте осторожны ...
-При создании вашей задачи «onTaskCreateTask1» задайте простоту taskItemID в SPWorkflowTaskProperties.TaskItemID = x, где x - это значение, которое вы генерируете.
- сохранить сгенерированный taskItemID в переменной-члене
- получить доступ к списку, используя метод getListItemFromID (x) или используя методы list.items [x] / accessors
Я не написал код ниже, отдайте должное Мартину Холи .. 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;
}