Como determinar o item ContentType no FormControl (FieldIterator por exemplo)?
-
10-12-2019 - |
Pergunta
Implementei meu ListFieldIterator para alterar a forma como os controles de campo são renderizados.Gostaria de alterar o comportamento do formulário dependendo do tipo de conteúdo do item, mas qualquer tentativa de determinar ContentTypeId a partir do código retorna resultado errado.
ListFieldIterator.ListItem.ContentTypeId
SPContext.Current.ListItem.ContentTypeId
estão sempre voltando
0x00C2208B8CE6E1422CADC1C521EAB2A68B
(que é um ID de tipo de conteúdo inválido)
Existe uma propriedade LoadContentTypes na classe SPContext, mas definindo-a como TRUE para SPContext.Current
ou FieldIterator.ItemContext
Não faz diferença.
O que estou fazendo de errado?
Solução
Além do método com determinação Tipo de conteúdo em costume ListFieldIterator da string de consulta, ItemContext contém propriedade Tipo de conteúdo.Mas esta propriedade é interna e, portanto, não poderia ser usada diretamente no custom ListFieldIterator implementação.
Abaixo é apresentado o wrapper para recuperação Tipo de conteúdo com base na propriedade correspondente para SPContexto (A reflexão é usada aqui)
private SPContentType CurrentContentType
{
get {
var ct = typeof(SPContext).GetProperty("ContentType", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(ItemContext, null) as SPContentType;
return ct;
}
}
Usando Tipo de conteúdo atual propriedade, o tipo de conteúdo pode ser determinado em custom ListFieldIterator implementação.
Outras dicas
A única maneira que encontrei para determinar o tipo de conteúdo neste caso é analisar a string de consulta HTTP:
new SPContentTypeId(this.Context.Request.QueryString["ContentTypeId"])