0

我已经为 SharePoint 定义了一个自定义列表模板类型。我使用 VSeWSS 1.3 安装它,一切似乎都正常。

我添加了一个自定义操作,它将向列表中添加额外的列 (SPFields)。但是,每次执行该代码时,它都会抛出 ArgumentException 并带有“值不在预期范围内”。错误信息。此行为似乎特定于此博客文章中建议的自定义类型。

以下是尝试向 thisList 的 SPFieldCollection 添加字段的相关代码(thisList 是我使用浏览器界面创建的自定义列表模板类型的一个实例):

                SPFieldType fieldType = Format2SPFieldType(format);
                SPField field = new SPField(thisList.Fields, fieldType.ToString(), fieldName);
                thisList.Fields.Add(field);

最后一条语句 (thisList.Fields.Add(field)) 引发以下异常:

   Message  "Value does not fall within the expected range."

   at Microsoft.SharePoint.SPFieldCollection.GetFieldByInternalName(String strName, Boolean bThrowException)
   at Microsoft.SharePoint.SPFieldCollection.GetFieldByInternalName(String strName)
   at Microsoft.SharePoint.SPFieldCollection.AddFieldAsXmlInternal(String schemaXml, Boolean addToDefaultView, SPAddFieldOptions op)
   at Microsoft.SharePoint.SPFieldCollection.AddFieldAsXml(String schemaXml, Boolean addToDefaultView, SPAddFieldOptions op)
   at Microsoft.SharePoint.SPFieldCollection.Add(SPField field)

如果 SPList 项是基本列表类型(内置自定义列表),则相同的代码执行得很好。

是否需要CAML中显式设置任何字段并直接使用AddFieldAsXml() 方法使此代码与自定义列表模板类型一起使用?

更新:我还应该提到,这些字段实际上是在某些情况下创建的,即使调用引发了异常!

4

2 回答 2

1

原来这是因为调用 thisList.SchemaXML 将 SPList 对象置于我无法恢复的状态!获取对同一 SharePoint 列表的新引用,例如 SPList newList=thisList.ParentWeb.Lists[thisList.ID] 解决了这个问题!

于 2009-07-10T23:33:44.610 回答
0

您要添加的字段类型是什么?是内部字段还是自定义字段类型,这个函数 Format2SPFieldType 返回什么?如果它是一个内置字段,您可以尝试添加

thisList.Fields.Add("DisplayName", SPFieldType.Integer, false);
于 2009-07-10T07:27:12.720 回答