В этой статье я расскажу как можно вывести итоги для вычисляемого поля.
по умолчанию SharePoint не предоставляет возможности вывести сумму по Calculated field, но мы можем это исправить и изменить шаблон рендера представления CSR и самостоятельно посчитать сумму.
и так начнем.
хочу рассказать что решение получилось достаточно универсальным и не зависит:
1. сколько полей вычисляемых полей мы можем вывести.
2. положение поля вычисляется в коде (есть проблемы если вычисляемое поле первое с лева).
3. отображается ли стандартная панель итогов или нет.
как использовать:
необходимо в шаблоне указать id вычисляемого поля
файл можно скачать по ссылке sumJs.js
по умолчанию SharePoint не предоставляет возможности вывести сумму по Calculated field, но мы можем это исправить и изменить шаблон рендера представления CSR и самостоятельно посчитать сумму.
и так начнем.
хочу рассказать что решение получилось достаточно универсальным и не зависит:
1. сколько полей вычисляемых полей мы можем вывести.
2. положение поля вычисляется в коде (есть проблемы если вычисляемое поле первое с лева).
3. отображается ли стандартная панель итогов или нет.
как использовать:
необходимо в шаблоне указать id вычисляемого поля
SP.SOD.executeFunc("clienttemplates.js", "SPClientTemplates", function() {
function getBaseHtml(ctx) {
return SPClientTemplates["_defaultTemplates"].Fields.default.all.all[ctx.CurrentFieldSchema.FieldType][ctx.BaseViewID](ctx);
};
function init() {
var totalSum = {};
var ctx = {};
ctx.Templates = {};
ctx.OnPostRender = postRenderer;
ctx.Templates.Fields = {
"calc": { 'View': summation }, // указать ID поля
"Sum": { 'View': summation }, // указать ID поля
};
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(ctx);
function postRenderer(ctx){
console.log(totalSum);
for(var f in totalSum){
var fieldId = f;
var fieldSum = Math.round(totalSum[f] * 100) / 100;
var fiedPOsition = getCellField(ctx,fieldId);
if(! jQuery("#aggr"+ ctx.wpq).length > 0){
var tableId = ctx.listName + "-" + ctx.view;
var tr = "";
for (var i = 0; i < ctx.ListSchema.Field.length+2; i++) {
tr+=" ";
};
tr+=" ";
var tbody = ''+tr+'';
jQuery("[id='"+tableId+"'] tbody").before(tbody);
}
jQuery("#aggr"+ ctx.wpq).find("tr").children().eq(fiedPOsition -1).html("Sum= " + fieldSum + "");
};
};
function summation(ctx){
var fieldValue = ctx.CurrentItem[ctx.CurrentFieldSchema.RealFieldName];
if(fieldValue){
var currSum = fieldValue.replace(",",".").replace(/\s/g,"")*1;
if(!isNaN(currSum)){
var sum = totalSum[ctx.CurrentFieldSchema.RealFieldName];
if(sum){
totalSum[ctx.CurrentFieldSchema.RealFieldName] = sum + currSum;
}else{
totalSum[ctx.CurrentFieldSchema.RealFieldName] = currSum;
};
};
}
return ''+ fieldValue + '';
};
};
function getCellField(Ctx, NameField) {
for (var f = 0; f < Ctx.ListSchema.Field.length; ++f) {
var listField = Ctx.ListSchema.Field[f];
if (listField.Name == NameField) {
return f + 3;
};
};
return null;
};
//RegisterModuleInit(SPClientTemplates.Utility.ReplaceUrlTokens("~siteCollection/Style Library/sumJs.js"), init);
init();
});





Комментариев нет:
Отправить комментарий