我正在尝试通过CAML创建一个查找字段作为站点列。我想用作查找源的列表是在Feature Receiver中创建的,所以我不知道它的ID。我已经阅读了几篇博客文章,表明我可以将路径放在List属性的列表中。从这些帖子的评论中可以看出,这种解决方案适用于某些人,但不适用于其他人。我是后者。
当我尝试关联使用查找站点列I的内容类型时:“来自HRESULT的异常:0x80040E07”
<Field
ID="{da94e56b-428f-4b95-b4c6-24aed0256475}"
Name="Test_x0020_Lookup_x0020_Column"
StaticName="Test_x0020_Lookup_x0020_Column"
DisplayName="Test Lookup Column"
Type="Lookup"
Required="FALSE"
List="Lists/Test"
ShowField="Title"
PrependId="TRUE"
Group="Test Site Columns" />
<ContentType
ID="0x0100B6D92594DDCE8E479D0EB0C414C463B0"
Name="Test Lookup Content Type"
Version="0"
Group="Test Content Types">
<FieldRefs>
<FieldRef
ID="{da94e56b-428f-4b95-b4c6-24aed0256475}"
Name="Test_x0020_Lookup_x0020_Column"
Required="TRUE" />
</FieldRefs>
</ContentType>
答案 0 :(得分:3)
确保在创建网站coloumn Overwrite =“TRUE”
时添加此属性答案 1 :(得分:2)
将路径放入List属性中的列表确实有效我已在项目中完成并且成功了。我想让你检查的一件事是功能的顺序。你手动执行功能吗?或者在onet.xml中使用它们。因为当您的内容类型功能执行时,应该已经有该列表可供参考。
此外,您应该在Logs文件夹中显示的SharePoint日志中获得更详细的信息。尝试在很多情况下找到有关错误的更多信息。
答案 2 :(得分:1)
我在schema.xml中定义的列表遇到了同样的问题。我通过确保在字段def和schema.xml文件中提供相同的路径来修复它。
答案 3 :(得分:1)
List =“”应该是唯一的GUID。由于您还不知道GUID,因此在创建列表时需要以编程方式替换它。
以下是有关如何执行此操作的一些信息:http://www.sharepointtactics.com/blog/fix-lookup-fields-created-through-features.html
答案 4 :(得分:1)
列表名称对我来说也不起作用。
我必须使用Feature Activator动态创建列表和查找列。一旦我通过SharePoint对象模型创建查找列表,您就拥有了Guid。然后,您可以使用上面的现有CAML,使用以下方法在需要查找列的列表上动态创建列:
string xml = // your CAML up top with a TOKEN to replace List="{TOKEN}"
SPList listWithLookupColumn = web
.Lists
.Add(url,description,SPListTemplateType.GenericList);
Guid listId = listWithLookupColumn.ID;
xml = xml.Replace("TOKEN",listId);
// some code to find the list you want lookup column on
SPList listToAddLookupColumn = listRepository(listNameToFind);
listToAddLookupColumn
.AddFieldAsXml(xml,true,SPAddFieldOptions.AddToDefaultContentType)