SharePointリスト列の集計(合計)計算をカスタマイズするにはどうすればよいですか?
-
05-07-2019 - |
質問
「単一行のテキスト」タイプのSharePointリスト列があります。すぐに使用できるSharePointには、この列タイプの「カウント」合計を表示する機能のみが用意されています。データに対してカスタム集計を実行できるようにします(具体的には、テキストとして保持されている数値データを合計して、この欠陥)。
XSLT および Javascript ですが、データがページ分割されている場合、これらのアプローチは両方とも失敗すると思います(画面に表示されるリストコンテンツのサブセットのみを集約します)。
ListViewWebPartの機能を保持したい(レンダリング、ソート、フィルタリング、ビュー定義、アクションメニューなど)がこの機能を追加します。どうすればいいですか?
解決 2
完全にテストする機会はありませんでしたが、これが思いつく最高の方法です:
2つのコントロールを含む WebPart
を作成します:
- 表示するリスト/ビューのコンテキストを含む
ViewToolBar
- 表示するビューのレンダリングされたHTMLを含む
Literal
これにより、元のリスト/ビューとしてレンダリングされます。
WebPart
のレンダリング時に、ビューからアイテムを取得し、 RowLimit
を最大値として指定して、最初のページだけでなくすべてのアイテムを取得します。
アイテムを反復処理し、適切なデータ型で合計を計算して精度を維持します。
HTMLで非表示の値として合計をレンダリングし、ここで説明するメソッド。
コードの大まかなスケッチ:
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
のみを表示する[ビューの変更]画面の問題は解決しません。また、ビューによる初期レンダリングと集計のためのアイテムの取得との間のリストの変更により、合計アイテムと表示アイテムの間に不一致が生じる可能性があります。
他のヒント
合計でできることは次のとおりです。
平均;カウント;マックス;最小;和;標準偏差;分散
その他の計算方法がわからない。