这是场景。我们的 SharePoint 自定义作业存档列表项(基于某些条件)并将这些项复制/移动到不同的网站集。在这种情况下,如果列表项有一些查找字段,当我复制/mpve 到不同的网站集时如何保留这些字段?
谢谢,杜尔加
这是场景。我们的 SharePoint 自定义作业存档列表项(基于某些条件)并将这些项复制/移动到不同的网站集。在这种情况下,如果列表项有一些查找字段,当我复制/mpve 到不同的网站集时如何保留这些字段?
谢谢,杜尔加
查找字段的内部名称应该保持不变,只要查找字段引用的列表使用相同的值(ID 可以不同,只需匹配该值并创建一个新的 SPFIeldLookupValue),就没有问题。根据字段内部名称复制元数据,一切都应该正常,我们使用 timerjobs 归档新闻项目和文档也是如此。
您不能将 sitecoll A 中的字段“复制”到 sitecoll B,您必须重新创建它。解决这个问题的通常方法是实际使用创建查找字段的功能,但我猜这里不是这种情况(应该在一开始就完成,将来我建议这就是你创建字段的方式,看看如何方法可重复使用)。
您需要做的是在 b sitecoll 的 SPSite 对象中使用原始字段创建一个新字段,field.SchemaXml
这样您就可以在 sitecoll b 中从头开始重新创建该字段的所有相关信息。如果要设置新字段的内部名称,则需要使用AddFieldAsXml
SPSite.Fields 集合,因为 InternalName 属性是只读的。
在这里阅读如何
检查字段是否存在:
using(SPSite targetSite = new SPSite("urloftargetsite"))
{
using(SPWeb targetWeb = sourceSite.OpenWeb())
{
if(!targetWeb.Fields.ContainsField(originalField.InternalName))
{
targetWeb.Fields.AddFieldAsXml("caml string here");
}
}
}