Pregunta

He definido un tipo de plantilla de lista personalizada para SharePoint.Lo instalo usando VSeWSS 1.3 y todo parece funcionar correctamente.

He añadido una acción personalizada que agregar columnas adicionales (SPFields) a la lista.Sin embargo, cada vez que se ejecuta ese código, arroja una ArgumentException con un 'El valor no está en el rango esperado.' mensaje de error.Este comportamiento parece ser específico de los tipos personalizados como se sugiere en esta publicación de blog.

Aquí está el código relevante (thisList es una instancia de mi tipo de plantilla de lista personalizada creada usando la interfaz del navegador) que intenta agregar un campo a SPFieldCollection de thisList:

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

La última declaración (thisList.Fields.Add(field)) genera la siguiente excepción:

   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)

Este mismo código se ejecuta bien si el elemento SPList es el tipo de lista base (lista personalizada incorporada).

¿Hay alguna campos que deben establecerse explícitamente en el CAML y usando el Método AddFieldAsXml() ¿Directamente para que este código funcione con tipos de plantillas de listas personalizadas?

Actualizar: ¡También debo mencionar que los campos en realidad se crean en algunos casos aunque la llamada genere una excepción!

¿Fue útil?

Solución

Resulta que esto fue causado porque llamando thisList.SchemaXML poner el objeto SPList en un estado que yo no era capaz de recuperarse de! Obtener una nueva referencia a la misma lista de SharePoint, por ejemplo, SPList newList = thisList.ParentWeb.Lists [thisList.ID] resuelto el problema!

Otros consejos

¿Cuál es el tipo de campo que está intentando agregar? es que un campo interno o un tipo de campo personalizado, lo que hace esta función Format2SPFieldType regresan? Si se trata de un campo incorporada puede que intente añadir el

thisList.Fields.Add("DisplayName", SPFieldType.Integer, false);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top