我想在WSS 3.0状态机工作流程中使用OnWorkflowItemChanged事件来检查对启动工作流的列表项所做的更改。此事件的属性包括更改属性之前和之后,我可以毫无问题地绑定到after属性,并获取具有列表项更改值的属性集。但是,属性之前的绑定始终是空的,经过一些研究后我发现这个http://msdn.microsoft.com/en-us/library/aa979520.aspx在属性仅在文档库而不是列表上可用之前说过。
我想知道的是,是否有针对此缺失功能的解决方法或获得此功能的最佳方法是什么?
答案 0 :(得分:2)
我克服这个问题的方法是使用该项目的先前版本。当然,必须在列表中启用版本控制。
// 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 :(得分:1)
我目前使用了以下解决方法,并希望得到一些关于其他人的想法的反馈。我个人不喜欢它,因为我认为应该有一种方法来访问框架提供的这些信息。
我在状态的状态初始化中创建了一个执行自定义代码活动,等待要更改的项目。以下代码将属性保存到工作流程中的字段,以便在更新发生后进行访问
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]);
}
}
别人怎么想?