编程语言
首页 > 编程语言> > c#-通过CSOM错误创建SharePoint查找字段

c#-通过CSOM错误创建SharePoint查找字段

作者:互联网

我正在尝试使用CSOM在列表上创建查找字段.我在名为“用户状态类型”的ListTemplateType.GenericList中定义了查找值.此设置看起来很好,我可以在SharePoint本身中针对此列表成功创建字段.

当我尝试在目标列表(上面提到的通用列表中引用查找值的列)上创建字段时,问题就来了.

我通过fieldCollection(xml,false,AddFieldOptions.AddToAllContentTypes)提交以下Xml

<Field Type="Lookup" DisplayName="UserStatus" Description="System Activation Status" Required="TRUE" EnforceUniqueValues="FALSE" List="Lists/User Status Types" WebId="~sitecollection" Overwrite="TRUE" PrependId="TRUE" ShowField="Title" UnlimitedLengthInDocumentLibrary="FALSE" StaticName="Status" Name="Status" Hidden="FALSE" ReadOnly="FALSE" />

此列表生成ServerException“值不属于预期范围.”

请注意,虽然通过友好的名称引用列表是理想的,但我也随时可以快速访问Guid.我也对使用命名引用的陷阱也很感兴趣.

解决方法:

在使用CSOM / c#客户端的情况下,答案最终是简化XML和依赖添加后CSOM交互的组合.

简而言之,上述XML可以简化为:

var lookupFieldXml = "<Field DisplayName="UserStatus" Type="Lookup" />";
var field = destinationList.Fields.AddFieldAsXml(lookupFieldXml, false, AddFieldOptions.AddToAllContentTypes);
lookupField = context.CastTo<FieldLookup>(field);
lookupField.LookupList = sourceLookupList.Id.ToString();
lookupField.LookupField = "Title";
// at this point, we can update against lookupField or field. It doesn't appear to matter.
field.Update();
context.ExecuteQuery();

有关此解决方案的注释-这里的关键是显式CastTo运算符与上下文无关.这不是类型安全的强制类型转换,您可以将任何字段强制转换为任何其他类型的字段,并且没有任何抱怨.

标签:sharepoint-2013,csom,c,sharepoint-2010
来源: https://codeday.me/bug/20191030/1969011.html