Бизнес правило (блокировка поля) для редактируемого реестра детали
Вопрос
В версии 7.7.0.2293 SalesEnterprise + Marketing + CustomerCenter в редактируемом реестре все поля изменяемой записи доступны для изменений. Как можно заблокировать от изменений отдельные поля?
Ответ
1) Создать деталь с помощью мастера деталей, на закладке страницы вывести хотя бы несколько полей. Сохранить.
2) Зарегистрировать мастером разделов деталь на странице в разделе. Настроить колонки.
3) Для того, чтобы деталь стала редактируемой, добавляем зависимости, миксин, атрибут и мердж грида в блоке дифф как показано в примере ниже:
define("UsrSchema1Detail", ["ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities"], function() { return { entitySchemaName: "UsrTestContactDetail", attributes: { "IsEditable": { dataValueType: Terrasoft.DataValueType.BOOLEAN, type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, value: true } }, mixins: { ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities" }, details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/, diff: /**SCHEMA_DIFF*/[ { "operation": "merge", "name": "DataGrid", "values": { "className": "Terrasoft.ConfigurationGrid", "generator": "ConfigurationGridGenerator.generatePartial", "generateControlsConfig": {"bindTo": "generatActiveRowControlsConfig"}, "changeRow": {"bindTo": "changeRow"}, "unSelectRow": {"bindTo": "unSelectRow"}, "onGridClick": {"bindTo": "onGridClick"}, "activeRowActions": [ { "className": "Terrasoft.Button", "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT, "tag": "save", "markerValue": "save", "imageConfig": {"bindTo": "Resources.Images.SaveIcon"} }, { "className": "Terrasoft.Button", "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT, "tag": "cancel", "markerValue": "cancel", "imageConfig": {"bindTo": "Resources.Images.CancelIcon"} }, { "className": "Terrasoft.Button", "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT, "tag": "remove", "markerValue": "remove", "imageConfig": {"bindTo": "Resources.Images.RemoveIcon"} } ], "initActiveRowKeyMap": {"bindTo": "initActiveRowKeyMap"}, "activeRowAction": {"bindTo": "onActiveRowAction"}, "multiSelect": false } } ]/**SCHEMA_DIFF*/, methods: {} }; });
5) В схеме страницы редактирования детали описываем бизнес-правило по правилам написания бизнес-правил - http://academy.terrasoft.ua/documents/docs/technic/SDK/7.6.0/BlockingFieldByCondition.html
define("UsrUsrTestContactDetail1Page", ["BusinessRuleModule"], function(BusinessRuleModule) { return { entitySchemaName: "UsrTestContactDetail", details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/, diff: /**SCHEMA_DIFF*/[ { "operation": "insert", "name": "UsrContact", "values": { "layout": { "colSpan": 12, "rowSpan": 1, "column": 0, "row": 0, "layoutName": "Header" }, "bindTo": "UsrContact" }, "parentName": "Header", "propertyName": "items", "index": 0 }, { "operation": "insert", "name": "UsrTestInt1", "values": { "layout": { "colSpan": 12, "rowSpan": 1, "column": 12, "row": 0, "layoutName": "Header" }, "bindTo": "UsrTestInt1" }, "parentName": "Header", "propertyName": "items", "index": 1 }, { "operation": "insert", "name": "UsrTestInt2", "values": { "layout": { "colSpan": 12, "rowSpan": 1, "column": 0, "row": 1, "layoutName": "Header" }, "bindTo": "UsrTestInt2" }, "parentName": "Header", "propertyName": "items", "index": 2 }, { "operation": "insert", "name": "CreatedBy", "values": { "layout": { "colSpan": 12, "rowSpan": 1, "column": 12, "row": 1, "layoutName": "Header" }, "bindTo": "CreatedBy" }, "parentName": "Header", "propertyName": "items", "index": 3 } ]/**SCHEMA_DIFF*/, methods: {}, rules: { "UsrTestInt1": { "EnabledUsrTestInt1": { "ruleType": BusinessRuleModule.enums.RuleType.BINDPARAMETER, "property": BusinessRuleModule.enums.Property.ENABLED, "conditions": [ { "leftExpression": { "type": BusinessRuleModule.enums.ValueType.CONSTANT, "value": true }, comparisonType: Terrasoft.ComparisonType.NOT_EQUAL, rightExpression: { type: BusinessRuleModule.enums.ValueType.CONSTANT, value: true } } ] } } } }; });
В результате поле заблокировано. Если же деталь существующая, и у нее нет страницы редактирования, то необходимо либо удалить информацию в таблице SysDetail и SysModuleEdit по данной детали, и пересоздать ее мастером деталей, либо страницу редактирования создать и зарегистрировать в таблице SysModuleEdit по аналогии с существующими. Затем написать в схеме страницы редактирования детали необходимый для блокировки код.