将字段添加到SharePoint中的自定义列表类型时出现问题

时间:2009-07-09 23:26:07

标签: sharepoint exception spfield spfieldcollection

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

我添加了一个自定义操作,将其他列(SPFields)添加到列表中。但是,每次执行该代码时,它都会抛出ArgumentException,并且'Value不在预期范围内。'错误消息。此行为似乎特定于this blog post中建议的自定义类型。

以下是相关代码(thisList是使用浏览器interace创建的自定义列表模板类型的实例),它尝试将字段添加到thisList的SPFieldCollection:

                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()方法使此代码正常工作使用自定义列表模板类型?

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

添加
thisList.Fields.Add("DisplayName", SPFieldType.Integer, false);