Вопрос

Несколько связанных профилей контакта.

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

 

У меня такой же вопрос

3 комментария

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

Войдите или зарегистрируйтесь, чтобы комментировать