Como posso personalizar a agregação de lista de coluna SharePoint (total) cálculos?
-
05-07-2019 - |
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?
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:
- A
ViewToolBar
com o contexto da lista / fim de ser exibido - 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.