Utilities for action buttons¶
Utilities for action buttons are designed to automate the execution of certain actions when you click a button in a web form. The button is connected for the web form of creating and editing the object through the commands
array of the main form object:
{
"commands": [
{
"id": "SAVE",
"caption": "Save",
"visibilityCondition": null,
"enableCondition": null,
"needSelectedItem": false,
"signBefore": false,
"signAfter": false,
"isBulk": false
},
{
"id": "SAVEANDCLOSE",
"caption": "Save and close",
"visibilityCondition": null,
"enableCondition": null,
"needSelectedItem": false,
"signBefore": false,
"signAfter": false,
"isBulk": false
},
{
"id": "CREATE_INDICATOR_VALUE",
"caption": "Form the collected values",
"visibilityCondition": null,
"enableCondition": null,
"needSelectedItem": false,
"signBefore": false,
"signAfter": false,
"isBulk": false
}
],
The three buttons are available on the form: SAVE
, SAVEANDCLOSE
and CREATE_INDICATOR_VALUE
.
Before connecting to the form, the custom buttons must be set in deploy.json
in the object modules.registry.globals.di.actions.options.actions
:
{
"modules": {
"registry": {
"globals" : {
"di": {
"actions": {
"options": {
"actions": [
{
"code": "CREATE_INDICATOR_VALUE",
"handler": "ion://createIndicatorValueHandler"
},
{
"code": "ASSIGNMENT_TO_EVENT_ONLY",
"handler": "ion://assignmentToEventOnly"
},
{
"code": "CREATE_PROJECT_REPORTS",
"handler": "ion://createProjectReportsHandler"
}
]
Also the parameters of the handler module used by the button must be specified:
{
"modules": {
"registry": {
"globals" : {
"di": {
"createIndicatorValueHandler": {
"module": "applications/sakh-pm/lib/actions/createIndicatorValueHandler",
"initMethod": "init",
"initLevel": 2,
"options": {
"data": "ion://securedDataRepo",
"workflows": "ion://workflows",
"log": "ion://sysLog",
"changelogFactory": "ion://changelogFactory",
"state": "onapp"
}
},
In this example, clicking the button``CREATE_INDICATOR_VALUE`` launches the script ./applications/sakh-pm/lib/actions/createIndicatorValueHandler.js
.
The contents of the script:
/**
* Created by kras on 08.09.16.
*/
'use strict';
const ActionHandler = require('modules/registry/backend/ActionHandler');
const edit = require('modules/registry/backend/items').saveItem;
const ivc = require('../indicator-value-creator');
/**
* @constructor
* @param {{}} options
* @param {DataRepository} options.data
* @param {WorkflowProvider} options.workflows
* @param {Logger} options.log
* @param {ChangelogFactory} [options.changelogFactory]
* @param {String} [options.state]
*/
function CreateIndicatorValueHandler(options) {
options = options || {};
const work = ivc(options);
this.init = function () {
if (options.workflows && options.state) {
options.workflows.on(
'indicatorBasic@sakh-pm.' + options.state,
(e) => {
let logger = null;
if (options.changelogFactory && e.user) {
logger = options.changelogFactory.logger(() => e.user.id());
}
return work(e.item, e.user, logger).then(() => null);
}
);
}
};
/**
* @param {{metaRepo: MetaRepository, securedDataRepo: SecuredDataRepository}} scope
* @param {ChangelogFactory} scope.changelogFactory
* @param {Request} req
* @returns {Promise}
*/
this._exec = function (scope, req) {
let logger;
let user = scope.auth.getUser(req);
if (options.changelogFactory) {
logger = options.changelogFactory.logger(() => user.id());
}
return edit(scope, req, null, logger, true)
.then(item => scope.dataRepo.getItem(item, null))
.then((item) => {
if (item.get('status') !== 'edit') {
throw new Error('Создать значения показателей, можно только при редактировании!');
}
return work(item, user, logger);
})
.then((count) => {
return {$message: 'Создано ' + count + ' значений для ввода по периодам!'};
});
};
}
CreateIndicatorValueHandler.prototype = new ActionHandler();
module.exports = CreateIndicatorValueHandler;