通过CAML将查找字段作为站点列

时间:2009-07-16 17:17:26

标签: sharepoint

我正在尝试通过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>

5 个答案:

答案 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)