Коллеги, всех приветствую!
Есть следующая задача:
У контакта имеется несколько связанных с ним контрагентов. Я хочу их отобразить в левой панели связанных профилей.
Кодом добавил дополнительный AccountProfile1, на страницы стал отображаться. Но при добавлении, контрагент все-равно добавляется в один профиль.
Скрины прикладываю.
define("ContactPageV2", ["BaseFiltersGenerateModule", "BusinessRuleModule", "ContactPageV2Resources", "ConfigurationConstants", "ContactCareer", "DuplicatesSearchUtilitiesV2"], function(BaseFiltersGenerateModule, BusinessRuleModule, resources, ConfigurationConstants, ContactCareer) { return { entitySchemaName: "Contact", attributes: {}, modules: /**SCHEMA_MODULES*/{ "AccountProfile": { // Конфигурация профиля. "config": { // Название схемы. "schemaName": "AccountProfileSchema", // Признак, сообщающий о том, что конфигурация схемы проинициализирована. "isSchemaConfigInitialized": true, // Признак, сообщающий о том, что не используется HistoryState. "useHistoryState": false, // Параметры профиля. "parameters": { // Конфигурация модели представления. "viewModelConfig": { // Название колонки связанной сущности. masterColumnName: "Account" } } } }, "AccountProfile1": { // Конфигурация профиля. "config": { // Название схемы. "schemaName": "AccountProfileSchema", // Признак, сообщающий о том, что конфигурация схемы проинициализирована. "isSchemaConfigInitialized": true, // Признак, сообщающий о том, что не используется HistoryState. "useHistoryState": false, // Параметры профиля. "parameters": { // Конфигурация модели представления. "viewModelConfig": { // Название колонки связанной сущности. masterColumnName: "UsrAccount" } } } } }/**SCHEMA_MODULES*/, details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/, businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/, methods: {}, dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/, diff: /**SCHEMA_DIFF*/[ { "operation": "insert", "parentName": "LeftModulesContainer", "propertyName": "items", // Название профиля. "name": "AccountProfile", // Значения. "values": { // Тип элемента — модуль. "itemType": Terrasoft.ViewItemType.MODULE } }, { "operation": "insert", "parentName": "LeftModulesContainer", "propertyName": "items", // Название профиля. "name": "AccountProfile1", // Значения. "values": { // Тип элемента — модуль. "itemType": Terrasoft.ViewItemType.MODULE } },
Нравится
Вероятно, по какой-то причине берётся masterColumnName из первого, а не второго профиля. Эта логика реализована в BaseProfileSchema, от которой наследуется AccountProfileSchema и ей подобные.
Возможно, поможет, если для второго профиля использовать не AccountProfileSchema, а сделать свой аналог (или переопределить) с такой же логикой? Если нет, нужно смотреть отладкой, как у Вас работает получение этого значения в функции, передача параметров в конфиг окна выбора и получение из него ответа для записи в карточку и почему и на каком этапе туда попадает не то:
/** * Initializes profile entity. * @protected */ initEntity: function() { var masterColumnName = this.get("masterColumnName"); var columnsValues = this.getColumnsValues([masterColumnName]); if (this.checkIsNeedLoadEntity(columnsValues)) { this.loadEntity(columnsValues); } }, /** * Initializes master column info. * @protected */ initMasterColumnInfo: function() { var masterColumnName = this.get("masterColumnName"); var masterColumnInfo = this.sandbox.publish("GetColumnInfo", [masterColumnName], [this.sandbox.id]); this.set("MasterColumnInfo", masterColumnInfo); }, /** * Returns lookup config for open lookup. * @param {Object} [config] Config for open lookup page. * @return {Object} lookupConfig Resut config for open lookup. */ getLookupConfig: function(config) { var masterColumnInfo = this.get("MasterColumnInfo"); var lookupListConfig = masterColumnInfo.lookupListConfig; var entitySchemaName = masterColumnInfo.referenceSchemaName || this.entitySchemaName; var masterColumnName = this.get("masterColumnName"); var lookupConfig = { entitySchemaName: entitySchemaName, multiSelect: false, columnName: masterColumnName, hideActions: true, lookupListConfig: lookupListConfig, columns: lookupListConfig && lookupListConfig.columns, filters: this.getLookupQueryFilters(masterColumnName) }; this.Ext.apply(lookupConfig, config); return lookupConfig; }, /** * Handles search button click event. * Opens lookup. * @protected */ onSearchButtonClick: function() { var config = this.getLookupConfig(); this.openLookup(config, this.onLookupResult, this); }, /** * @inheritdoc Terrasoft.BaseSchemaViewModel#onLookupResult * @overridden */ onLookupResult: function(response) { var selectedRows = response.selectedRows; var columnName = response.columnName; if (!selectedRows.isEmpty()) { this.updateCardProperty({ key: columnName, value: selectedRows.getByIndex(0) }); } },
Зверев Александр,
Александр, подскажите как сделать свой аналог (или переопределить) с такой же логикой?
Как использовать код, который вы привели?
Я имел в виду создать копию или переопределение AccountProfileSchema в своей схеме с другим названием и для второго блока использовать её. Но не факт, что дело именно в её отсутствии, более точно можно понять отладкой упомянутых схем.