将查找字段添加到sharepoint中的内容类型

将查找字段添加到sharepoint中的内容类型,sharepoint,content-type,lookup-field,Sharepoint,Content Type,Lookup Field,如何使用xml定义向sharepoint中的内容类型添加查找字段?(我有错误) 注意事项: -将内容类型添加到文档库时,将存在查找列表。 -查找列表将始终具有相同的名称。 -查找列表的名称中有一个空格 这是我添加到xml中的内容: <Field ID="{GUID}" Type="Lookup" List="$Resources:core,lists_Folder;/List%20Name" ShowField="Title"

如何使用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"
         >

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


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

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


即使您没有使用VSEWS,post dahlbyk中的最后几步也会链接,向您展示如何做到这一点。Chris O'Brien不辞辛劳地制作了一个可以在不使用VSEWS的情况下为您提供帮助的文档。

好的,因此出于某种原因,我无法获得内容类型字段的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();

幸运的是,在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非常重要。

XML是什么样子的?它看起来像是在你发布它的时候被剥掉的。。。你还想看什么?太棒了,我尝试了其他的一切——这对我很有用。非常感谢。除了使用WebId=“~sitecollection”,您还可以直接引用包含要链接查找字段的列表的子网站的名称。是否可以将查找字段设置为引用它所属的同一列表?不需要添加对列表GUID的引用。添加对列表标题的引用(如Ahmed的XML示例所示)也是完全有效的,并解决了“我不知道正手时的GUID”问题。