如何使用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时出错。”查询文本(如果可用):“{?= call proc_GetListMetaDataAndEventReceivers(?,?,?,?,?,?)}”
答案 0 :(得分: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非常重要。
More info
答案 1 :(得分:2)
问题是你需要引用列表的GUID而不是它的标题。由于您可能不知道列表的GUID,因此您不能在不执行某些自定义代码的情况下执行此操作。
即使你没有使用VSeWSS,post dahlbyk的最后几个步骤也链接到了如何执行此操作。如果您不使用VSeWSS,Chris O'Brien已经遇到了制作CodePlex project以帮助您的麻烦。
答案 2 :(得分:1)
好的,所以由于某种原因,我无法获取内容类型的字段的xml定义。我确实在代码中找到了如何做到这一点。对我有用的解决方案是不在xml中添加Field定义,而是将其添加到代码中:
例如:
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();