我有以下问题我有两个列表“TestUsers”和“TestGroups”。 “TestUsers”列表有两列[Group - Choice],[User - Single line of text]。 “TestGroups”列表有两列[Group - 单行文本],[CheckedOut - 单行文本]。
两个列表中的数据如下:
TestUsers(列表): 用户:testuser1 组:groupA
用户:testuser2 组:groupB
TestGroups(List): 组:groupA CheckedOut:testuser1
要求是当“TestUsers”列表中的用户将其“Group”更改为例如从“groupA”更改为“groupB”时,也应该反映并在“TestGroups”列表中自动更新。因此,例如在“TestUsers”列表中,如果我要将“testuser1”的“Group”更改为“groupB”,则在“TestGroups”列表中,“testuser1”的“Group”也必须更改/更新为“groupB” ”
我希望上述内容足以说明要求是什么。
我尝试使用worklflows并使用查找列和计算列来完成此操作。但是计算列和查阅列似乎都不起作用。
如何使用c#中的代码实现此目的。我知道如何更新列表项,但我不确定如何在前面提到的单独列表中更改值时如何从列表中更新列表项。
我坚持这个问题,并认为我在这里发布,所以我可以得到一些关于如何开始的快速和准确的建议。
非常感谢,对此的任何帮助将不胜感激。
答案 0 :(得分:1)
你可以尝试这个在事件接收器中使用ItemUpdating
事件方法只是检查项目是否改变并创建你的逻辑
public override void ItemUpdating(SPItemEventProperties properties)
{
base.ItemUpdated(properties);
if (properties.ListTitle == "TestUsers")
{
SPWeb web = properties.OpenWeb();
SPList list = web.Lists[properties.ListTitle];
SPListItem litemUser = list.GetItemById(properties.ListItemId);
SPList objFeatureList = web.Lists["TestGroups"];
SPQuery objParentQuery = new SPQuery();
string user = properties.AfterProperties["User"].ToString();
//in Caml query just find it out listitem which contain Users and than update its listitem.
objParentQuery.Query = "<Where><Eq><FieldRef Name='Check_x0020_it_x0020_out'/><Value Type='Integer'>"+You should set Userid in Field From litemUser +"</Value></Eq></Where>";
SPListItemCollection liitemcol = objFeatureList.GetItems(objParentQuery);
foreach (SPListItem litemGroup in liitemcol)
{
litemGroup["Group"] = litemUser["Group"];
litemGroup.Update();
// or if you want to using Workflow just startWorflow when item has match over here.
}
}
}