Вопрос
В версии 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 по аналогии с существующими. Затем написать в схеме страницы редактирования детали необходимый для блокировки код.