¿Cómo puedo personalizar los cálculos de la agregación de columnas de la lista de SharePoint (total)?

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

Pregunta

Tengo una columna de lista de SharePoint de tipo 'Una sola línea de texto'. Fuera de la caja, SharePoint solo ofrece la posibilidad de mostrar un total de 'Recuento' para este tipo de columna. Me gustaría poder realizar una agregación personalizada en los datos (específicamente para sumar los datos numéricos guardados como texto para superar esta deficiencia ).

He encontrado ejemplos para hacer algo similar para columnas calculadas utilizando XSLT y Javascript pero creo que ambos enfoques fallan cuando los datos están paginados (solo se agrega el subconjunto del contenido de la lista que se muestra en la pantalla).

Quiero conservar la funcionalidad de ListViewWebPart (representación, clasificación, filtrado, definición de vista, menús de acción, etc.) pero agregue esta funcionalidad. ¿Cómo puedo hacer esto?

¿Fue útil?

Solución 2

No he tenido la oportunidad de probarlo completamente, pero esto es lo mejor que pude encontrar:

Cree un WebPart que contenga dos controles:

  1. Un ViewToolBar con el contexto de la lista / vista que se mostrará
  2. Un Literal que contiene el HTML renderizado de la vista que se mostrará

Esto luego se mostrará como la lista / vista original.

Al representar WebPart , obtenga los elementos de la vista, especificando RowLimit como el valor máximo para que todos los elementos se recuperen (no solo la primera página) .

Iterar sobre los elementos, calculando el total en un tipo de datos adecuado para mantener la precisión.

Represente el total como un valor oculto en el HTML y sobrescriba el total de Count generado con Javascript, como por el método descrito aquí .

Un bosquejo aproximado del 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
  }
}

Tenga en cuenta que esto no resuelve el problema con la pantalla Modificar vista, que solo muestra Count como un total para las columnas de texto. También existe la posibilidad de que los cambios en la lista entre la representación inicial de la vista y la recuperación de los elementos para la agregación puedan producir discrepancias entre el total y los elementos mostrados.

Otros consejos

Las únicas cosas que puedes hacer con los totales son:

Promedio; Contar; Max; Min; Suma; Desviación estándar; Varianza

No estoy seguro de cómo calcular nada más.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top