WSS 3 SP2 OnTask Создано

На работе у нас была проблема после установки SP2 на WSS 3.0, связанная с плохим поведением OnTaksCreated. Для получения дополнительной информации об этой проверке " http://fightingvssharepoint.blogspot.com/2009/06/ontaskcreated-in-wss-30-sp2.html ". Мы еще не нашли исправления, поэтому пытаемся найти альтернативное решение. Состоит в том, чтобы вынуть OnTaksCreted и перенести всю свою деятельность в OnTaskInit. Если у вас есть решение проблемы SP2 OnTaskCreated, пожалуйста, дайте мне знать! Но если вы не продолжаете читать, пожалуйста...

Краткое описание настраиваемого рабочего процесса: создает новые такты в списке "Задачи", устанавливает статус рабочего процесса и отправляет электронное письмо сотруднику "назначенного". Тело электронной почты заполнено недавно созданной информацией о задаче. Чтобы получить эту информацию, есть вызов метода "GetWorkflowTask". Подпись метода:

SPWorkflowTask task GetWorkflowTask (int taskID)

Этот метод прекрасно получает задачу при вызове из OnTaskCreated. Но если я вызову его в OnTaskInit, после действия Createtask получит ноль. Зачем?

Спасибо! Хорхе.

2 ответа

Я уже видел эту ошибку раньше, и, к сожалению, она непредсказуема, я могу предложить вам обходной путь, включающий указание listItemID (не GUID) для задачи, которую вы просите создать SharePoint, откуда вы можете получить доступ к элемент списка на любое будущее событие, предполагая, что создание завершилось успешно. Если используемый вами список получает много трафика, это может не сработать из-за условий гонки...

Опять "обходной путь", так что будьте осторожны... - Когда вы создаете задачу "onTaskCreateTask1", задайте простоту taskItemID в SPWorkflowTaskProperties.TaskItemID = x, где x - это значение, которое вы генерируете.
- сохранить сгенерированный taskItemID в переменной-члене - получить доступ к списку с помощью метода getListItemFromID(x) или методов / аксессоров list.items[x]

Я не написал код ниже, отдавая должное Мартину Холи. 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;
}

У меня была такая же проблема с OnTaskCreatedMicrosoft рекомендует не использовать OnTaskCreated, но для решения этой проблемы смотрите этот пост в блоге.

Другие вопросы по тегам