Come è possibile personalizzare i calcoli (totali) di aggregazione delle colonne dell'elenco di SharePoint?

StackOverflow https://stackoverflow.com/questions/1808245

Domanda

Ho una colonna dell'elenco di SharePoint di tipo "Riga di testo singola". Immediatamente SharePoint offre solo la possibilità di visualizzare un totale di "Conteggio" per questo tipo di colonna. Vorrei essere in grado di eseguire un'aggregazione personalizzata sui dati (in particolare per sommare i dati numerici mantenuti come testo per superare questa carenza ).

Ho trovato esempi per fare qualcosa di simile per le colonne calcolate usando XSLT e Javascript ma credo che entrambi questi approcci falliscano laddove i dati sono impaginati (aggregando solo il sottoinsieme del contenuto dell'elenco visualizzato sullo schermo).

Voglio conservare la funzionalità di ListViewWebPart (rendering, ordinamento, filtro, visualizzazione definizione, menu azioni ecc.) ma aggiungi questa funzionalità. Come posso farlo?

È stato utile?

Soluzione 2

Non ho avuto la possibilità di testarlo completamente, ma questo è il migliore che ho potuto inventare:

Crea un WebPart che contiene due controlli:

  1. Un ViewToolBar con il contesto dell'elenco / vista da visualizzare
  2. Un letterale contenente l'HTML renderizzato della vista da visualizzare

Questo verrà quindi visualizzato come elenco / vista originale.

Quando si esegue il rendering del WebPart , ottenere gli elementi dalla vista, specificando RowLimit come valore massimo in modo da recuperare tutti gli elementi in (non solo la prima pagina) .

Scorri gli articoli, calcolando il totale in un tipo di dati adatto per mantenere la precisione.

Rendi il totale come valore nascosto nell'HTML e sovrascrivi il totale Count reso con Javascript come < metodo descritto qui .

Uno schizzo approssimativo del codice:

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
  }
}

Nota che questo non risolve il problema con la schermata Modifica vista che mostra solo Count come totale per le colonne di testo. Inoltre, esiste la possibilità che le modifiche all'elenco tra il rendering iniziale da parte della vista e il recupero degli elementi per l'aggregazione possano produrre discrepanze tra il totale e gli elementi visualizzati.

Altri suggerimenti

Le uniche cose che puoi fare con i totali sono:

media; Contare; Max; min; Somma; Deviazione standard; Varianza

Non sono sicuro di come calcolare qualcos'altro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top