2009-08-18 77 views
6

我如何查找字段添加到使用XML定义SharePoint中的内容类型? (我收到错误)。查找字段添加到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日志:

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

+0

什么是XML是什么样子?它看起来像它得到了剥离出来,当你张贴 – Yuliy 2009-08-18 16:40:00

+0

... ... <字段id = “{GUID}” 类型= “查找” 列表= “解释/列表%20Name” ShowField = “标题” 名称= “MyLookupFieldName” DisplayName的= “MyLookupFieldName” StaticName = “MyLookupFieldName” 隐藏= “FALSE” 所需= “FALSE” 密封= “TRUE” > ... 你想看到什么? – zikoziko 2009-08-19 10:08:30

回答

2

问题是您需要引用列表的GUID而不是其标题。因为你可能不知道列表的GUID,所以你不能在没有执行一些自定义代码之后做到这一点。

即使你不使用VSeWSS的,在后dahlbyk最后一个步骤已链接到您展示如何做到这一点。克里斯奥布莱恩已经做了一个CodePlex project这将帮助你,如果你不使用VSeWSS的麻烦。

+0

没有要求添加对列表GUID的引用。在Ahmed他的XML示例中添加一个对列表标题的引用也是完全有效的,并解决了“我不知道正面的GUID”问题。 – 2012-05-22 15:55:00

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(); 
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> 

有“〜sitecollection”的价值,并设置覆盖为TRUE,这是设置WebId重要。
More info

+0

太棒了,我尝试了其他一切 - 这对我有用。谢谢! – 2011-08-02 23:58:47

+0

除了使用WebId =“〜sitecollection”之外,您还可以直接引用包含要将查找字段链接到的列表的子网站的名称。 – 2012-05-23 10:40:39

+0

可以将查找字段设置为引用它所属的同一列表吗? – 2014-06-06 12:42:57

相关问题