Способ настройки отображения колонок в редактируемом реестре (выпадающий список)
Вопрос
Подскажите пожалуйста, как сделать поле-выпадающий список из поля-справочника в редактируемом реестре версии 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); }, } }; });