Вопрос

Множественное добавление записей на деталь

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



В примере академии есть описание действия по реализации этого: https://academy.terrasoft.ru/documents/technic-sdk/7-12/mnozhestvennoe-…;



Но я не до конца понимаю концовку:

            getMultiSelectLookupConfig: function() {
                return {
                    // Корневая схема — [Продажа].
                    rootEntitySchemaName: "Opportunity",
                    // Колонка корневой схемы.
                    rootColumnName: "Opportunity",
                    // Связанная схема — [Контакт].
                    relatedEntitySchemaName: "Contact",
                    // Колонка связанной схемы.
                    relatedColumnName: "Contact"

Есть справочник, из которого надо будет добавлять на деталь нужные значения. И он вроде как отображается, но на этом и все.

relatedEntitySchemaName: "Мой справочник", - это, я так понимаю, как раз то, что будет показываться при добавлении



А что указывать в других строчках, если моя деталь находится на странице обращения и создана мною вручную? 

Нравится

5 комментариев
Лучший ответ

Добрый день!

 Деталь будет  подтягивать значения из объекта состоящего из двух справочных полей, первое это справочник на основе  объекта к которому добавлена деталь, второе это справочник на основе "вашего справочника"

пример объекта:

 

 

А это пример детали:

define("UsrSchema6Detail", ["LookupMultiAddMixin"], function() {
	return {
		entitySchemaName: "UsrRecipientsPetitionsOrg",// схема детали будет состоятьиз двух полей справочного типа
		mixins: {
			// Подключение миксина к схеме.
			LookupMultiAddMixin: "Terrasoft.LookupMultiAddMixin"
		},
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		 methods: {
			// Переопределение базового метода инициализации схемы.
			init: function() {
				this.callParent(arguments);
				//Инициализация миксина.
				this.mixins.LookupMultiAddMixin.init.call(this);
			},
			// Переопределение базового метода отображения кнопки добавления.
			getAddRecordButtonVisible: function() {
				//Отображать кнопку добавления если деталь развернута, даже если для детали не реализована страница редактирования.
				return this.getToolsVisible();
			},
			// Переопределение базового метода.
			// Обработчик события сохранения страницы редактирования детали.
			onCardSaved: function() {
				// Открывает справочное окно с множественным выбором записей.
				this.openLookupWithMultiSelect();
			},
			// Переопределение базового метода добавления записи на деталь.
			addRecord: function() {
				// Открывает справочное окно с множественным выбором записей.
				this.openLookupWithMultiSelect(true);
			},
 
			// Метод, возвращающий конфигурационный объект для справочного окна.
			getMultiSelectLookupConfig: function() {
					return {
					// Корневая схема — [Петиции]. объект к которому будет относиться деталь
					rootEntitySchemaName: "UsrPetitions",
					// Колонка корневой схемы. колонка в схеме детали (*) справочное поле
					rootColumnName: "UsrPetition",
					// Связанная схема — [Средство связи контрагента]. объект из которого будут выбираться значения
					relatedEntitySchemaName: "AccountCommunication",
					// Колонка связанной схемы. Данная колонка так же объявлена в схеме детали (*) справочное поле 
					relatedColumnName: "UsrEmailFromAccountCom"
				};
 
			},
			getLookupColumns: function() {
				return ["SearchNumber","Account","CommunicationType","Number"]
				},
 
			getLookupConfig: function() {
					return {
						entitySchemaName: this.getRelatedSchemaName(),
						multiSelect: true,
						columns: this.getLookupColumns()
					};
				},
 
			getAllLookupFilters: function(notExistingFilter) {
					var filters = this.Terrasoft.createFilterGroup();
					var additionalFilters = this.getAdditionalLookupFilters();
					if (!this.Ext.isEmpty(notExistingFilter)) {
						filters.add("NotExistsFilter", notExistingFilter);
					}
					if (!this.Ext.isEmpty(additionalFilters)) {
						filters.add("AdditionalFilters", additionalFilters);
					}
					//добавление фильтра на тип = Email
					var idList = ["ee1c85c3-cfcb-df11-9b2A-001d60e938c6", "EE1C85C3-CFCB-DF11-9B2A-001D60E938C6"];
					var filterById = Terrasoft.createColumnInFilterWithParameters("CommunicationType", idList);
					filterById.comparisonType = Terrasoft.ComparisonType.EQUAL;
					filters.add("filterById", filterById);
					return filters;
			}
		}
	};
});

 

Добрый день!

 Деталь будет  подтягивать значения из объекта состоящего из двух справочных полей, первое это справочник на основе  объекта к которому добавлена деталь, второе это справочник на основе "вашего справочника"

пример объекта:

 

 

А это пример детали:

define("UsrSchema6Detail", ["LookupMultiAddMixin"], function() {
	return {
		entitySchemaName: "UsrRecipientsPetitionsOrg",// схема детали будет состоятьиз двух полей справочного типа
		mixins: {
			// Подключение миксина к схеме.
			LookupMultiAddMixin: "Terrasoft.LookupMultiAddMixin"
		},
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		 methods: {
			// Переопределение базового метода инициализации схемы.
			init: function() {
				this.callParent(arguments);
				//Инициализация миксина.
				this.mixins.LookupMultiAddMixin.init.call(this);
			},
			// Переопределение базового метода отображения кнопки добавления.
			getAddRecordButtonVisible: function() {
				//Отображать кнопку добавления если деталь развернута, даже если для детали не реализована страница редактирования.
				return this.getToolsVisible();
			},
			// Переопределение базового метода.
			// Обработчик события сохранения страницы редактирования детали.
			onCardSaved: function() {
				// Открывает справочное окно с множественным выбором записей.
				this.openLookupWithMultiSelect();
			},
			// Переопределение базового метода добавления записи на деталь.
			addRecord: function() {
				// Открывает справочное окно с множественным выбором записей.
				this.openLookupWithMultiSelect(true);
			},
 
			// Метод, возвращающий конфигурационный объект для справочного окна.
			getMultiSelectLookupConfig: function() {
					return {
					// Корневая схема — [Петиции]. объект к которому будет относиться деталь
					rootEntitySchemaName: "UsrPetitions",
					// Колонка корневой схемы. колонка в схеме детали (*) справочное поле
					rootColumnName: "UsrPetition",
					// Связанная схема — [Средство связи контрагента]. объект из которого будут выбираться значения
					relatedEntitySchemaName: "AccountCommunication",
					// Колонка связанной схемы. Данная колонка так же объявлена в схеме детали (*) справочное поле 
					relatedColumnName: "UsrEmailFromAccountCom"
				};
 
			},
			getLookupColumns: function() {
				return ["SearchNumber","Account","CommunicationType","Number"]
				},
 
			getLookupConfig: function() {
					return {
						entitySchemaName: this.getRelatedSchemaName(),
						multiSelect: true,
						columns: this.getLookupColumns()
					};
				},
 
			getAllLookupFilters: function(notExistingFilter) {
					var filters = this.Terrasoft.createFilterGroup();
					var additionalFilters = this.getAdditionalLookupFilters();
					if (!this.Ext.isEmpty(notExistingFilter)) {
						filters.add("NotExistsFilter", notExistingFilter);
					}
					if (!this.Ext.isEmpty(additionalFilters)) {
						filters.add("AdditionalFilters", additionalFilters);
					}
					//добавление фильтра на тип = Email
					var idList = ["ee1c85c3-cfcb-df11-9b2A-001d60e938c6", "EE1C85C3-CFCB-DF11-9B2A-001D60E938C6"];
					var filterById = Terrasoft.createColumnInFilterWithParameters("CommunicationType", idList);
					filterById.comparisonType = Terrasoft.ComparisonType.EQUAL;
					filters.add("filterById", filterById);
					return filters;
			}
		}
	};
});

 

Спасибо большое, как раз помогло разобраться :3

Добрый день. Начал изучать креатио и столкнулся с похожей задачей. Помогите пожалуйста добавить фильтр для ServiceItem у него есть булевое значение UsrBooleanBR, хотел бы фильтровать по true.

Вот пример кода:

define("UsrSchema6830a0c2Detail", ["LookupMultiAddMixin"], function() {
	return {
		entitySchemaName: "UsrDetailLinkServiceBR",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		mixins: {
            // Подключение миксина к схеме.
            LookupMultiAddMixin: "Terrasoft.LookupMultiAddMixin"
        },
		methods: {
            // Переопределение базового метода инициализации схемы.
            init: function() {
                this.callParent(arguments);
                //Инициализация миксина.
                this.mixins.LookupMultiAddMixin.init.call(this);
            },
            // Переопределение базового метода отображения кнопки добавления.
            getAddRecordButtonVisible: function() {
                //Отображать кнопку добавления если деталь развернута, 
                //даже если для детали не реализована страница редактирования.
                return this.getToolsVisible();
            },
            // Переопределение базового метода.
            // Обработчик события сохранения страницы редактирования детали.
            onCardSaved: function() {
                // Открывает справочное окно с множественным выбором записей.
                this.openLookupWithMultiSelect();
            },
            // Переопределение базового метода добавления записи на деталь.
            addRecord: function() {
                // Открывает справочное окно с множественным выбором записей.
 
                this.openLookupWithMultiSelect(true);
            },
            // Метод, возвращающий конфигурационный объект для справочного окна.
            getMultiSelectLookupConfig: function() {
 
                return {
                    rootEntitySchemaName: "UsrBusinessRequestV2",
                    rootColumnName: "UsrLookupBR",
                    relatedEntitySchemaName: "ServiceItem",
                    relatedColumnName: "UsrLookupService"
                };
            }
		}
	};
});

 

Валентин, насколько я понимаю, тут происходит только настройка параметров, а вся логика отрабатывает в LookupMultiAddMixin. Для добавления дополнительных фильтров нужно создать функцию getAdditionalLookupFilters, которая должна возвращать набор фильтров, а стандартно в LookupMultiAddMixin пустая:

 /**
* Returns additional filters for lookup.
* @protected
* @return {Terrasoft.FilterGroup} Filters.
*/
getAdditionalLookupFilters: this.Terrasoft.emptyFn,

Аналогично тому, как в приведенном выше в теме коде определяют функцию getMultiSelectLookupConfig, которая в LookupMultiAddMixin тоже пустая.

 

Вот пример такой функции для определения фильтра с нужным Вам условием:

getAdditionalLookupFilters: function () {
 var additionalFilter = this.Terrasoft.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL,
"UsrBooleanBR",
true
);
 return additionalFilter;
 },

 

Зверев Александр,

Спасибо огромное , фильтр сработал !

Показать все комментарии