Creating a Workbook Builder Plug-in Script File
You must implement each Workbook Builder Plug-in interface function in a JavaScript file (with a .js extension). You can use SuiteCloud IDE, another JavaScript IDE, or a text editor to create the plug-in implementation script file.
The following is a Workbook Builder Plug-in sample:
/**
* @NApiVersion 2.x
* @NScriptType workbookbuilderplugin
*/
define(['N/workbook', 'N/dataset'], function(wb, ds) {
return Object.freeze({
createWorkbook: function(context) {
var dataset = ds.load({
id: 'customscript_dataset'
});
var idExpr = dataset.getExpressionFromColumn({
alias: 'id'
});
var sort = wb.createSort({
ascending: false
});
var col1 = wb.createTableColumn({
datasetColumnAlias: 'id'
});
var col2 = wb.createTableColumn({
datasetColumnAlias: 'name'
});
var col3 = wb.createTableColumn({
datasetColumnAlias: 'date'
});
var col4 = wb.createTableColumn({
datasetColumnAlias: 'total'
});
var tableview = wb.createTableDefinition({
id: 'view',
name: 'View',
dataset: dataset,
columns: [col1, col2, col3, col4]
});
var rowItem = wb.createDataDimensionItem({
label: 'A',
expression: dataset.getExpressionFromColumn({
alias: 'date'
})
});
var rowDataDimension = wb.createDataDimension({
items: [rowItem]
});
var rowSection = wb.createSection({
children: [rowDataDimension]
});
var columnItem = wb.createDataDimensionItem({
label: 'B',
expression: dataset.getExpressionFromColumn({
alias: 'total'
})
});
var columnDataDimension = wb.createDataDimension({
items: [columnItem]
});
var columnMeasure = wb.createMeasure({
label: 'M',
expression: idExpr,
aggregation: workbook.Aggregation.MAX
});
var columnSection = wb.createSection({
children: [columnDataDimension, columnMeasure]
});
var constExpr = wb.createConstant(1);
var anyOfExpr = wb.createExpression({
functionId: workbook.ExpressionType.ANY_OF,
parameters: {
expression: idExpr,
set: [constExpr]
}
});
var notExpr = wb.createExpression({
functionId: workbook.ExpressionType.NOT,
parameters: {
a: anyOfExpr
}
});
var allSubNodesSelector = wb.createAllSubNodesSelector();
var rowItemSelector = wb.createDimensionSelector({
dimension: rowDataDimension
});
var columnItemSelector = wb.createDimensionSelector({
dimension: columnDataDimension
});
var rowSelector = wb.createPathSelector({
elements: [allSubNodesSelector, rowItemSelector]
});
var columnSelector = wb.createPathSelector({
elements: [allSubNodesSelector, columnItemSelector]
});
var rowSort = wb.createDimensionSort({
item: rowItem, sort:sort
});
var columnSort = wb.createMeasureSort({
measure: columnMeasure,
sort: sort,
otherAxisSelector: allSubNodesSelector
});
var rowSortDefinition = wb.createSortDefinition({
sortBys: [rowSort],
selector: rowSelector
});
var columnSortDefinition = wb.createSortDefinition({
sortBys: [columnSort],
selector: columnSelector
});
var rowAxis = wb.createPivotAxis({
root: rowSection,
sortDefinitions: [rowSortDefinition]
});
var columnAxis = wb.createPivotAxis({
root: columnSection,
sortDefinitions: [columnSortDefinition]
});
var limitingFilter = wb.createLimitingFilter({
row: true,
filteredNodesSelector: rowSelector,
limit: 1,
sortBys: [rowSort]
});
var conditionalFilter = wb.createConditionalFilter({
row: false,
filteredNodesSelector: rowSelector,
otherAxisSelector: columnSelector,
measure: columnMeasure,
predicate: notExpr
});
var pivot = wb.createPivotDefinition({
id: 'pivot',
name: 'Pivot',
dataset: dataset,
rowAxis: rowAxis,
columnAxis: columnAxis,
filterExpressions: [notExpr],
aggregationFilters: [limitingFilter, conditionalFilter]
});
var firstAxis = wb.createChartAxis({
title: 'First axis'
});
var secondAxis = wb.createChartAxis({
title: 'Second axis'
});
var category = wb.createCategory({
axis: firstAxis,
root: rowSection
});
var legend = wb.createLegend({
axes: [secondAxis],
root: columnSection
});
var aspect = wb.createAspect({
measure: columnMeasure
});
var series = wb.createSeries({
aspects: [aspect]
});
var chart = wb.createChartDefinition({
id: 'chart',
name: 'Chart',
dataset: dataset,
category: category,
legend: legend,
series: [series]
});
var workbook = wb.create({
description: 'My Test Workbook',
name: 'Test Workbook',
tableDefinitions: [tableview],
pivotDefinitions: [pivot],
chartDefinitions: [chart]
});
context.workbook = workbook;
}
});
});