Добрый день коллеги!Подсажите пожалуйста, можно ли настроить поле на редактируемом греде, чтобы оно было не look up (выбор справочника в новом окне), а combo box (выпадающим списком)? Спасибо!
Нравится
Можно, на подобии того как бизнес правила из страницы редактирования детали распространяются на редактируемый реестр детали, так же распространяются и настройки полей.
Все что вам нужно, что бы деталь была корректно создана мастером деталей, что бы у нее была страница редактирования. На ней вы задаете поля выпадающим списком. Даже через мастер страницы детали это можно сделать.
А потом в схеме детали вы делаете грид редактируемым. И его поля, которые были настроены «списком», будут «списком» и в гриде. Примеры ниже.
------ страница контакта ------ define("ContactPageV2", ["ContactPageV2Resources", "GeneralDetails"], function(resources, GeneralDetails) { return { entitySchemaName: "Contact", details: /**SCHEMA_DETAILS*/{ "UsrContactInfob66277ee47c9": { "schemaName": "UsrSchema1Detail", "entitySchemaName": "UsrContactInfo", "filter": { "detailColumn": "UsrContact", "masterColumn": "Id" } } }/**SCHEMA_DETAILS*/, diff: /**SCHEMA_DIFF*/[ { "operation": "insert", "name": "UsrContactInfob66277ee47c9", "values": { "itemType": 2 }, "parentName": "GeneralInfoTab", "propertyName": "items", "index": 0 } ]/**SCHEMA_DIFF*/, attributes: {}, methods: {}, rules: {}, userCode: {} }; }); ------ схема детали ----------- define("UsrSchema1Detail", ["ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities"], function() { return { entitySchemaName: "UsrContactInfo", 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: {} }; }); ------ схема страницы детали -- define("UsrUsrContactInfo1Page", [], function() { return { entitySchemaName: "UsrContactInfo", details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/, diff: /**SCHEMA_DIFF*/[ { "operation": "insert", "name": "UsrContact440ad902-7e9b-426d-9162-654b6e410474", "values": { "layout": { "colSpan": 12, "rowSpan": 1, "column": 0, "row": 1, "layoutName": "Header" }, "labelConfig": {}, "enabled": true, "bindTo": "UsrContact" }, "parentName": "Header", "propertyName": "items", "index": 0 }, { "operation": "insert", "name": "UsrAccountac6b8364-bd8e-43b7-bd6d-589f7fe300a6", "values": { "layout": { "colSpan": 12, "rowSpan": 1, "column": 0, "row": 2, "layoutName": "Header" }, "labelConfig": {}, "enabled": true, "bindTo": "UsrAccount" }, "parentName": "Header", "propertyName": "items", "index": 1 }, { "operation": "insert", "name": "Name9870b437-3b62-4f5e-8879-e5f3d4277114", "values": { "layout": { "colSpan": 12, "rowSpan": 1, "column": 0, "row": 0, "layoutName": "Header" }, "bindTo": "Name" }, "parentName": "Header", "propertyName": "items", "index": 2 } ]/**SCHEMA_DIFF*/, methods: {}, rules: {} }; });
Здравствуйте Максим! Спасибо за Ваш ответ! Попробовал протестить этот вариант, но не получилось, подскажите пожалуйста, что я упустил...
Пробовал делать на детали "Карьера" на вкладке "место работы".
На замещающую страницу карточки контакта добавил деталь и diff для нее (хотя это наверное не обязательно)
define("ContactPageV2", [], function(BaseFiltersGenerateModule, BusinessRuleModule, resources, ConfigurationConstants, ContactCareer) { return { entitySchemaName: "Contact", messages: {}, attributes: {}, rules: {}, details: /**SCHEMA_DETAILS*/{ ContactCareer: { schemaName: "ContactCareerDetailV2", filter: { masterColumn: "Id", detailColumn: "Contact" }, defaultValues: { Contact: { masterColumn: "Id" } } } }/**SCHEMA_DETAILS*/, mixins: {}, methods: {}, diff: /**SCHEMA_DIFF*/[ { "operation": "merge", "parentName": "JobTabContainer", "propertyName": "items", "name": "ContactCareer", "values": { "itemType": 2 } } ]/**SCHEMA_DIFF*/ }; });
на замещающей схеме детали все стандартно:
define("ContactCareerDetailV2", ["terrasoft", "ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities"], function(Terrasoft) { return { entitySchemaName: "ContactCareer", attributes: { "IsEditable": { dataValueType: Terrasoft.DataValueType.BOOLEAN, type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, value: true } }, methods: {}, mixins: { ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities" }, diff: /**SCHEMA_DIFF*/[ { "operation": "merge", "name": "DataGrid", "values": { "className": "Terrasoft.ConfigurationGrid", "generator": "ConfigurationGridGenerator.generatePartial", "generateControlsConfig": {"bindTo": "generateActiveRowControlsConfig"}, "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*/ }; });
И на схеме страницы детали попытался одно из лукапных полей сделать выпадающим списком:
define("ContactCareerPageInContactV2", [], function() { return { entitySchemaName: "ContactCareer", attributes: {}, methods: {}, diff: /**SCHEMA_DIFF*/[ { "operation": "merge", "name": "Job", "parentName": "Header", "propertyName": "items", "values": { "bindTo": "Job", "layout": { "column": 0, "row": 2, "colSpan": 12, "layoutName": "Header" }, "labelConfig": {}, "enabled" : true, "contentType": Terrasoft.ContentType.ENUM } } ]/**SCHEMA_DIFF*/ }; });
Здравствуйте, есть два варианта по которым у вас этот код мог не отработать.
Либо страница редактирования все же зарегистрирована не корректно, что можно проверить "отключив" редактируемый реестр, и попробовав добавить запись.
Либо страниц редактирования у объекта ContactCareer несколько.
Для таких случаев вы можете настроить конфиг полей в редактируемом реестре, прямо в схеме детали "ContactCareerDetailV2".
Т.к. редактируемый реестр получает конфиг с помощью метода "generateActiveRowControlsConfig" из "ConfigurationGridUtilities", его можно переопределить прямо на уровне детали. Код метода можно брать из примера, или из своей схемы "ConfigurationGridUtilities" если он будет отличатся, и доработать его чем-то вроде:
if (columnName = "Status") {
cellConfig.contentType = Terrasoft.ContentType.ENUM;
}
Сразу после создания в нем cellConfig.
Где Status - имя колонки которой вы хотите присвоить дополнительный конфиг.
Пример где в детали на основе объекта активности я сделал статус выпадающим списком:
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); }, } }; });
По мимо самого метода, не забудьте подключить и зависимости как в примере.
Большое спасибо! второй вариант с добавлением свойства напрямую в cellConfig работает отлично! :twisted: