Вопрос
Подскажите пожалуйста, как сделать поле-выпадающий список из поля-справочника в редактируемом реестре версии 7.7.0.2293 SalesEnterprise + Marketing + CustomerCenter? Я сделал редактируемый реестр активностей, в карточке активности поле "Состояние" - выпадающий список. Но в редактируемом реестре это же поле представляет собой классический лукап с открываюшимся лукапным окном.
P.S. Решение полезно если страницы редактирования нет, или их много, или они базовые.
Ответ
Можно переопределить метод generateActiveRowControlsConfig() в схеме детали, и в нужных случаях, передавать нужный дополнительный конфиг.
В вашем случае можно добавить:
if (columnName = "Status") {
cellConfig.contentType = Terrasoft.ContentType.ENUM;
}
Сразу после создания в нем cellConfig.
Исходный код можно взять из схемы ConfigurationGridUtilities, если он отличается от того что будет в предоставленном примере.
Пример схемы детали, на которой все тестировалось, включая превращение грида в редактируемый и переопределение generateActiveRowControlsConfig:
define("UsrSchema1Detail", ["terrasoft", "BusinessRulesApplierV2", "ConfigurationEnums", "BusinessRuleModule",
"GridUtilitiesV2", "ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities"], function(
Terrasoft, BusinessRulesApplier, ConfigurationEnums, BusinessRuleModule) {
return {
entitySchemaName: "Activity",
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: {
generateActiveRowControlsConfig: function(id, columnsConfig, rowConfig) {
this.columnsConfig = columnsConfig;
var gridLayoutItems = [];
var currentColumnIndex = 0;
this.Terrasoft.each(columnsConfig, function(columnConfig) {
var columnName = columnConfig.key[0].name.bindTo;
var column = this.getColumnByColumnName(columnName);
var cellConfig = this.getCellControlsConfig(column);
cellConfig = this.Ext.apply({
layout: {
colSpan: columnConfig.cols,
column: currentColumnIndex,
row: 0,
rowSpan: 1
}
}, cellConfig);
if (columnName = "Status") {
cellConfig.contentType = Terrasoft.ContentType.ENUM;
}
gridLayoutItems.push(cellConfig);
currentColumnIndex += columnConfig.cols;
}, this);
var gridData = this.getGridData();
var activeRow = gridData.get(id);
var rowClass = {prototype: activeRow};
BusinessRulesApplier.applyRules(rowClass, gridLayoutItems);
var viewGenerator = this.Ext.create("Terrasoft.ViewGenerator");
viewGenerator.viewModelClass = {prototype: this};
var gridLayoutConfig = viewGenerator.generateGridLayout({
name: this.name,
items: gridLayoutItems
});
rowConfig.push(gridLayoutConfig);
},
}
};
});