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?

Foi útil?

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"])
Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top