Несколько связанных профилей контакта.
Коллеги, всех приветствую!
Есть следующая задача:
У контакта имеется несколько связанных с ним контрагентов. Я хочу их отобразить в левой панели связанных профилей.
Кодом добавил дополнительный 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 в своей схеме с другим названием и для второго блока использовать её. Но не факт, что дело именно в её отсутствии, более точно можно понять отладкой упомянутых схем.