WSS 3 SP2 OnTaskСоздано - PullRequest
       32

WSS 3 SP2 OnTaskСоздано

1 голос
/ 31 октября 2009

На работе у нас была проблема после установки 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 ]

0 голосов
/ 08 апреля 2010

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

0 голосов
/ 01 ноября 2009

Я видел эту ошибку раньше, и, к сожалению, она непредсказуема, я могу дать вам обходной путь, который заключается в указании 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;
}
...