我为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()方法使此代码正常工作使用自定义列表模板类型?
更新:我还应该提一下,即使调用引发异常,这些字段实际上也是在某些情况下创建的!
答案 0 :(得分:1)
原来这是由引起的,因为调用thisList.SchemaXML会将SPList对象置于我无法恢复的状态!获取对同一SharePoint列表的新引用,例如, SPList newList = thisList.ParentWeb.Lists [thisList.ID]解决了这个问题!
答案 1 :(得分:0)
您要添加的字段类型是什么?是一个内部字段或自定义字段类型,此函数Format2SPFieldType返回什么? 如果它是Inbuilt字段,您可以尝试使用
添加thisList.Fields.Add("DisplayName", SPFieldType.Integer, false);