Как я могу настроить вычисления агрегации столбцов списка SharePoint (total)?

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

Вопрос

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

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

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

Это было полезно?

Решение 2

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

Создать 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 как итог по текстовым столбцам.Также существует вероятность того, что изменения в списке между первоначальным отображением в представлении и извлечением элементов для агрегирования могут привести к расхождениям между общим количеством и отображаемыми элементами.

Другие советы

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

Средний;Считать;Макс.;Минимум;Сумма;Стандартное отклонение;Отклонение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top