6

如何使用 xml 定义将查找字段添加到 sharepoint 中的内容类型?(我收到错误)。

注意事项: - 将内容类型添加到文档库时,查找列表将存在。- 查找列表将始终具有相同的名称。- 查找列表的名称中有空格。

这是我添加到 xml 中的内容:

  <Field ID="{GUID}"
         Type="Lookup"
         List="$Resources:core,lists_Folder;/List%20Name"
         ShowField="Title"
         Name="MyLookupFieldName"
         DisplayName="MyLookupFieldName"
         StaticName="MyLookupFieldName"
         Hidden="FALSE"
         Required="FALSE"
         Sealed="TRUE"
         >

然后,当我以编程方式将内容类型添加到文档库时,我得到一个异常(没有有​​用的信息),并将以下内容记录到共享点日志中:

2009 年 8 月 18 日 17:13:39.50 w3wp.exe (0x08B8) 0x11B0 Windows SharePoint Services 数据库 6f8g 意外 意外查询执行失败,错误代码 8114。下面包含来自 SQL Server 的其他错误信息。“将数据类型 nvarchar 转换为 uniqueidentifier 时出错。” 查询文本(如果可用):“{?=call proc_GetListMetaDataAndEventReceivers(?,?,?,?,?,?)}”

4

3 回答 3

9

幸运的是,在 SharePoint 2010 中,您可以通过设置所有必需的属性以声明方式执行此操作,如下面的工作示例所示。

<Field Type="Lookup" DisplayName="Link Type" Description="Represents link type." 
Required="TRUE" EnforceUniqueValues="FALSE" List="Lists/Links Types" WebId="~sitecollection" 
Overwrite="TRUE" PrependId="TRUE" ShowField="Title" UnlimitedLengthInDocumentLibrary="FALSE" 
Group="Research Links Columns" ID="{a15e9fa2-4ea0-41f1-a583-b21d53cf72d3}" 
SourceID="{30650f6f-fbb8-4acc-a935-29745f5d3c59}" StaticName="Link_x0020_Type" 
Name="Link_x0020_Type" Hidden="FALSE" ReadOnly="FALSE"></Field>

将 WebId 设置为“~sitecollection”并将 Overwrite 设置为 TRUE 很重要。
更多信息

于 2011-06-27T15:45:34.273 回答
2

问题是您需要引用列表的 GUID 而不是其标题。由于您可能不知道列表的 GUID,因此如果不执行一些自定义代码,您将无法执行此操作。

即使您没有使用 VSeWSS,dahlbyk 帖子中的最后一步也已链接到向您展示如何执行此操作。Chris O'Brien 费心制作一个CodePlex 项目,如果您不使用 VSeWSS,它将为您提供帮助。

于 2009-08-18T18:36:00.263 回答
1

好的,由于某种原因,我无法获得内容类型的字段的 xml 定义来为我工作。我确实找到了如何在代码中做到这一点。对我有用的解决方案是不在 xml 中添加字段定义,而是在代码中添加它:

  • 将内容类型添加到列表中(在站点定义代码中或任何位置)。
  • 向给定的 SPWeb 添加字段查找(因此该字段是 web? 字段,而不是站点字段)
  • 将新字段链接添加到列表内容类型。
  • 更新内容类型。

例如:

SPContentType myContentType = myWeb.Site.RootWeb.ContentTypes["MyContentType "];
myLib.ContentTypes.Add(myContentType);

myContentType = myLib.ContentTypes["MyContentType "];

myWeb.Fields.AddLookup("MyLookupFieldName", myWeb.Lists["MyLookupListName"].ID, false);
SPFieldLink myFIeldLink = new SPFieldLink(myWeb.Fields["MyLookupFieldName"]);
myContentType.FieldLinks.Add(myFIeldLink);
myContentType.Update();
于 2009-08-19T14:25:56.283 回答