Как настроить вычисления агрегации столбцов списка SharePoint (всего)? - PullRequest
0 голосов
/ 27 ноября 2009

У меня есть столбец списка SharePoint типа «Одна строка текста». Из коробки SharePoint предоставляет только возможность отображать итоговое значение «Количество» для этого типа столбца. Я хотел бы иметь возможность выполнять произвольное агрегирование данных (в частности, суммировать числовые данные, хранящиеся в виде текста, чтобы преодолеть этот недостаток ).

Я нашел примеры для того, чтобы сделать что-то подобное для вычисляемых столбцов, используя XSLT и Javascript , но я считаю, что оба этих подхода терпят неудачу, когда данные разбиваются на страницы (объединяет только подмножество содержимое списка, отображаемое на экране).

Я хочу сохранить функциональность ListViewWebPart (рендеринг, сортировка, фильтрация, определение представления, меню действий и т. Д.), Но добавить эту функцию. Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 09 декабря 2009

У меня не было возможности полностью протестировать его, но это лучшее, что я мог придумать:

Создайте WebPart, который содержит два элемента управления:

  1. A ViewToolBar с контекстом отображаемого списка / представления
  2. A Literal, содержащий визуализированный HTML-код отображаемого представления

Это будет отображаться как исходный список / представление.

При рендеринге WebPart получите элементы из представления, указав RowLimit в качестве максимального значения, чтобы были извлечены все элементы (не только первая страница).

Перебирать элементы, вычисляя итоги в подходящем типе данных, чтобы сохранить точность.

Визуализируйте итоговое значение как скрытое значение в HTML и перезаписайте отображаемое итоговое значение Count с помощью Javascript, например, описанным здесь методом .

Грубый набросок кода:

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

Обратите внимание, что это не решает проблему, так как на экране «Изменить вид» отображается только Count для текстовых столбцов. Также существует вероятность того, что изменения в списке между начальным отображением представлением и извлечением элементов для агрегации могут привести к расхождениям между итоговыми и отображаемыми элементами.

0 голосов
/ 27 ноября 2009

Единственное, что вы можете сделать с итогами:

Среднее; граф; Максимум; Min; Сумма; Стандартное отклонение; Дисперсия

Не уверен, как рассчитать что-нибудь еще.

...