В этой статье я расскажу как можно вывести итоги для вычисляемого поля.
по умолчанию SharePoint не предоставляет возможности вывести сумму по Calculated field, но мы можем это исправить и изменить шаблон рендера представления CSR и самостоятельно посчитать сумму.
и так начнем.
хочу рассказать что решение получилось достаточно универсальным и не зависит:
1. сколько полей вычисляемых полей мы можем вывести.
2. положение поля вычисляется в коде (есть проблемы если вычисляемое поле первое с лева).
3. отображается ли стандартная панель итогов или нет.
как использовать:
необходимо в шаблоне указать id вычисляемого поля
файл можно скачать по ссылке sumJs.js
по умолчанию SharePoint не предоставляет возможности вывести сумму по Calculated field, но мы можем это исправить и изменить шаблон рендера представления CSR и самостоятельно посчитать сумму.
и так начнем.
хочу рассказать что решение получилось достаточно универсальным и не зависит:
1. сколько полей вычисляемых полей мы можем вывести.
2. положение поля вычисляется в коде (есть проблемы если вычисляемое поле первое с лева).
3. отображается ли стандартная панель итогов или нет.
как использовать:
необходимо в шаблоне указать id вычисляемого поля
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | 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( "<b>Sum= " + fieldSum + "</b>" ); }; }; 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 '<div align="right" class="ms-number">' + fieldValue + '</div>' ; }; }; 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(); }); |
Комментариев нет:
Отправить комментарий