Problema adicionando campo para um tipo de lista personalizada no SharePoint
-
12-09-2019 - |
Pergunta
eu ter definido um lista personalizada tipo de modelo para SharePoint . Eu instalá-lo usando VSeWSS 1.3 e tudo parece se comportar corretamente.
Eu adicionei uma ação personalizada que irá adicionar colunas adicionais (SPFields) à lista ??strong>. No entanto, cada vez que o código executa lançamentos e ArgumentException com um 'Valor não no intervalo esperado.' mensagem de erro. Este comportamento parece ser específica para tipos personalizados, como sugerido na este post .
Aqui está o código relevante (thisList é uma instância da minha lista personalizada tipo de modelo criado usando o interace browser) que tenta adicionar um campo ao SPFieldCollection de thisList:
SPFieldType fieldType = Format2SPFieldType(format);
SPField field = new SPField(thisList.Fields, fieldType.ToString(), fieldName);
thisList.Fields.Add(field);
A última declaração (thisList.Fields.Add (campo)) lança a seguinte exceção:
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 mesmo executa o código apenas multa se o item SPList é o tipo de lista de base (built-in lista personalizada).
Existem campos que precisam ser explicitamente definido no CAML e usando o método AddFieldAsXml () diretamente para fazer este trabalho de código com lista personalizada tipos de modelo?
Update:! Gostaria também de mencionar que os campos são realmente criado em alguns casos, mesmo que a chamada lança uma exceção
Solução
Acontece que isso foi causado porque chamando thisList.SchemaXML colocar o objeto SPList em um estado que eu não era capaz de recuperar! Obter uma nova referência à mesma lista SharePoint, por exemplo, SPList newList = thisList.ParentWeb.Lists [thisList.ID] resolveu o problema!
Outras dicas
O que é o tipo de campo que você está tentando adicionar? é que um campo interno ou um tipo de campo personalizado, o que faz este Função retorno Format2SPFieldType? Se for um campo Inbuilt você pode tentar adicionar com o
thisList.Fields.Add("DisplayName", SPFieldType.Integer, false);