В этой статье я расскажу как можно вывести итоги для вычисляемого поля.
по умолчанию 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+=" "; 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 '"; }; tr+=" '+ 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(); });
Комментариев нет:
Отправить комментарий