Sharepoint OnWorkflowItemChanged до / после списков свойств - PullRequest
1 голос
/ 15 мая 2009

Я хотел бы использовать событие OnWorkflowItemChanged в рабочем процессе конечного автомата WSS 3.0 для проверки изменений, внесенных в элемент списка, который начал рабочий процесс. Свойства этого события включают свойства до и после изменения, и я могу без проблем связываться со свойствами после и получить набор свойств с измененными значениями элемента списка. Однако свойства ограничения перед всегда пустые, и после некоторых исследований я обнаружил http://msdn.microsoft.com/en-us/library/aa979520.aspx, в котором говорится, что свойства доступны только в библиотеках документов, а не в списках.

Что я хотел бы знать, так это то, есть ли способ обойти эту недостающую функциональность, или как лучше всего получить эту функциональность?

Ответы [ 2 ]

2 голосов
/ 15 мая 2009

Я решил эту проблему, используя предыдущую версию предмета. Конечно, в списке должно быть включено управление версиями.

// get an object referencing the item in the list
Guid listGuid = new Guid(listId);
SPList myList = web.Lists[listGuid];
SPListItem myItem = myList.GetItemById(itemId);

// make sure there is at least one previous version to compare
// 0 -> current version
// 1 -> previous version
// 2 -> older version
// ...
if (myItem.Versions.Count > 1)
{
    SPListItemVersion newItem = myItem.Versions[0];
    SPListItemVersion oldItem = myItem.Versions[1];
}
1 голос
/ 15 мая 2009

В настоящее время я использовал следующий обходной путь и хотел бы получить отзывы о том, что думают другие. Лично мне это не нравится, так как я думаю, что должен быть способ доступа к этой информации, предоставляемой платформой.

Я создал операцию выполнения пользовательского кода в состоянии инициализации состояния, которое ожидает изменения элемента. Следующий код сохраняет свойства в поле рабочего процесса для доступа после обновления

SPListItem item = workflowProperties.Item;
item.Update();

beforeApplicationChangedProperties = new Hashtable();
foreach (SPField field in item.ContentType.Fields)
{
    if (!beforeApplicationChangedProperties.ContainsKey(field.Title))
    {
        beforeApplicationChangedProperties.Add(field.Title, item[field.Id]);
    }
}

Что думают другие?

...