如何重置Sharepoint列表的查找值?

如何重置Sharepoint列表的查找值?,sharepoint,Sharepoint,我需要一些关于如何恢复我的sharepoint列表之一的查找列的值的帮助 情景: 我有两个sharepoint列表。 清单1 清单2 LIST1有一个列a,其类型为扩展查找字段,该字段引用LIST2的列a 最近,我在列表2中添加了另一个字段。然后我执行了,停用/激活|卸载/安装列表2 现在问题是A列-LIST1到A列-LIST2的引用查找丢失了。 在编辑列A-LIST1之前,有以下信息: 从以下位置获取信息: a列-列表2 现在,它只是空的…属性包含LIST2的原始实例的GUID。如果删除了LI

我需要一些关于如何恢复我的sharepoint列表之一的查找列的值的帮助

情景: 我有两个sharepoint列表。 清单1 清单2

LIST1有一个列a,其类型为扩展查找字段,该字段引用LIST2的列a

最近,我在列表2中添加了另一个字段。然后我执行了,停用/激活|卸载/安装列表2

现在问题是A列-LIST1到A列-LIST2的引用查找丢失了。 在编辑列A-LIST1之前,有以下信息:

从以下位置获取信息: a列-列表2

现在,它只是空的…

属性包含LIST2的原始实例的GUID。如果删除了LIST2并创建了新实例,则新LIST2将具有不同的GUID,并且LIST1上的查找字段将不起作用

不幸的是,
LookupList
不能直接更改:

SPException:属性已设置。设置LookupList属性后,无法更改查找列表

但是,您可以尝试以下操作:

Type type = typeof(SPFieldLookup);
object obj = type.InvokeMember("SetFieldAttributeValue", 
    BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance, 
    null, 
    myLookupField, 
    new object[] { "List", guidOfNewList.ToString() });
myLookupField.Update();

使用反射,您可以尝试调用内部SetFieldAttributeValue方法并更改“List”属性,这是
LookupList
属性所使用的属性。

下面是另一种可以重置目标web和List的方法。代码被放入扩展方法中。我从其他一些互联网帖子中得到了基本想法:

扩展方法,使用字符串操作修改XML:

使用XmlDocument的代码片段:

什么对我的项目有效:

//
///SPField对象的扩展方法。
/// 
公共静态类SPFieldLookupExtensions
{
/// 
///通过直接操作SharePoint对字段使用的XML架构来更新查找字段的源列表。
/// 
///要更新的字段。
///查找字段应使用的列表。
公共静态void UpdateLookupReferences(此SPFieldLookup lookupField,SPList)
{
//查找字段的列表是否与目标列表位于同一站点中
bool differentitsite=lookupField.LookupWebId!=list.ParentWeb.ID;
//是否正确设置了查找字段的目标列表
bool differentitlist=lookupField.LookupList!=list.ID.ToString();
if(!differentSite&&!differentList)
{
//如果字段的属性已经正确,则返回。
返回;
}
if(string.IsNullOrEmpty(lookupField.LookupList)和(!differentSite | | |)(differentSite和&string.IsNullOrEmpty(lookupField.LookupWebId.ToString-NullSafe()))
{
//如果字段尚未绑定到任何内容,请立即绑定它
如果(不同站点)
{
lookupField.LookupWebId=list.ParentWeb.ID;
}
lookupField.LookupList=list.ID.ToString();
}
其他的
{
//字段绑定不正确,请修复它。
XmlDocument fieldSchema=新的XmlDocument();
LoadXml(lookupField.SchemaXml);
如果(不同站点)
{
xmldattribute webAttr=fieldSchema.DocumentElement.Attributes[“WebId”];
if(webAttr==null)
{
webAttr=fieldSchema.CreateAttribute(“WebId”);
fieldSchema.DocumentElement.SetAttributeNode(webAttr);
}
webAttr.Value=list.ParentWeb.ID.ToString();
}
如果(差异列表)
{
XmlAttribute listAttr=fieldSchema.DocumentElement.Attributes[“List”];
如果(listAttr==null)
{
listAttr=fieldSchema.CreateAttribute(“列表”);
fieldSchema.DocumentElement.SetAttributeNode(listAttr);
}
listAttr.Value=list.ID.ToString();
}
lookupField.SchemaXml=fieldSchema.InnerXml;
}
lookupField.Update(true);
}
}