Pergunta

Eu tenho uma coluna de lista SharePoint do tipo 'linha de texto'. Fora da caixa SharePoint só fornece a capacidade de exibir um total 'Contagem' para este tipo de coluna. Eu gostaria de ser capaz de executar uma agregação personalizada sobre os dados (especificamente para resumir os dados numéricos mantidos como texto para superar esta deficiência ).

Eu encontrei exemplos para fazer algo semelhante para colunas calculadas usando XSLT e Javascript mas acredito que ambas as abordagens falham onde os dados são paginados (somente agregando o subconjunto do conteúdo lista exibida na tela).

Eu quero manter a funcionalidade do ListViewWebPart (processamento, classificação, filtragem definição da visão, ação menus etc.), mas adicionar esta funcionalidade. Como posso fazer isso?

Foi útil?

Solução 2

Eu não tive a oportunidade de testá-lo totalmente, mas este é o melhor que eu poderia vir acima com:

Criar um WebPart que contém dois controles:

  1. A ViewToolBar com o contexto da lista / fim de ser exibido
  2. A Literal contendo o HTML renderizado da visão a ser exibido

Este, então, processar como o original / lista de vista.

No tornando o WebPart, obter os itens da vista, especificando o RowLimit como o valor máximo de modo que todos os itens são recuperados (e não apenas a primeira página).

iterar sobre os itens, calcular o total em um tipo de dados adequado para manter a precisão.

Render o total como um valor escondido no HTML e substituir total Count processado com Javascript, como pelo método descrito aqui .

Um esboço do código:

public sealed class TextAggregatingWebPart : WebPart {
  protected override void CreateChildControls() {
    base.CreateChildControls();

    var web = SPContext.Current.Web;
    var list = web.Lists[SourceList];
    var view = list.Views[ViewOfSourceList];

    var toolbar = new ViewToolBar();
    var context = SPContext.GetContext(
    Context, view.ID, list.ID, SPContext.Current.Web);
    toolbar.RenderContext = context;
    Controls.Add(toolbar);

    var viewHtml = new Literal {Text = view.RenderAsHtml()};
    Controls.Add(viewHtml);
  }

  protected override void Render(HtmlTextWriter writer) {
    EnsureChildControls();
    base.Render(writer);

    var web = SPContext.Current.Web;
    var list = web.Lists[SourceList];
    var view = list.Views[ViewOfSourceList];

    var items = list.GetItems(new SPQuery(view) {RowLimit = uint.MaxValue});
    foreach (SPItem item in items) {
      // Calculate total
    }

    // Render total and Javascript to replace Count
  }
}

Note que isso não resolver o problema com a tela Modificar Visão mostrando apenas Count como um total para colunas de texto. Também há a possibilidade de que as alterações na lista entre a prestação inicial, a vista e a recuperação dos itens para a agregação poderia produzir discrepâncias entre total e os itens exibidos.

Outras dicas

As únicas coisas que você pode fazer com os totais são:

Média; Contagem; Max; min; Soma; Desvio padrão; Variância

Não tenho certeza como calcular qualquer outra coisa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top