Wie kann ich Sharepoint-Liste Spalte Aggregation (gesamt) Berechnungen anpassen?
-
05-07-2019 - |
Frage
Ich habe eine Sharepoint-Liste Spalte ‚Textzeilen‘ Typen. Out of the box bietet Sharepoint nur die Möglichkeit, einen ‚Count‘ insgesamt für diesen Spalt Typen angezeigt werden soll. Ich möchte in der Lage sein, eine benutzerdefinierte Aggregation der Daten durchzuführen (insbesondere numerische Daten als Text gehalten zusammenzufassen zu überwinden dieser Mangel ).
Ich habe Beispiele dafür etwas ähnliches für berechnete Spalten mit XSLT und ListViewWebPart (Rendering, Sortierung, Filterung, Ansichtsdefinition, Aktionsmenüs usw.), aber diese Funktionalität hinzuzufügen. Wie kann ich das tun?
Lösung 2
Ich habe keine Chance, in vollem Umfang zu testen habe, aber das ist das Beste, was ich tun konnte,:
ein WebPart
erstellen, die zwei Steuerelemente enthält:
- A
ViewToolBar
mit dem Kontext der Liste / Ansicht angezeigt werden - A
Literal
das gerenderte HTML-Code der Ansicht enthält, angezeigt werden
Dies wird dann als die ursprüngliche Liste / Ansicht machen.
Auf den WebPart
Rendering, erhalten die Elemente aus der Sicht der RowLimit
als Maximalwert, der angibt, so dass alle Elemente in abgerufen werden (nicht nur die erste Seite).
Iterate über die Elemente, die Summe in einem geeigneten Datentyp Berechnung Genauigkeit beizubehalten.
Render die Gesamt als versteckter Wert im HTML und überschreiben die gerenderte Count
insgesamt mit Javascript wie durch die Methode hier beschrieben.
Eine grobe Skizze des Codes:
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
}
}
Beachten Sie, dass dies löst nicht das Problem mit der Ansicht ändern Bildschirm nur Count
als Summe für Textspalten zeigt. Auch gibt es eine Möglichkeit, dass zwischen der anfänglichen Wiedergabe durch die Ansicht und das Abrufen der Elemente für die Aggregation könnte produzieren Diskrepanzen zwischen der Gesamt und den angezeigten Elementen.
Andere Tipps
Das einzige, was Sie tun können, mit Summen:
Durchschnitt; Anzahl; Max; Mindest; Summe; Standardabweichung; Variance
Nicht sicher, wie irgendetwas anderes zu berechnen.