Добрый день.
Проблема с обновлением грида детали после добавления элемента в деталь. Элемент не появляется в гриде сразу после выбора.
1. Выбор элементов в детали реализован с помощью LookupUtilities:
entitySchemaName: "BankingService",
columnName: "Name",
columns: ["ClientType"],
multiSelect: true,
filters: filters
};
LookupUtilities.ThrowOpenLookupMessage(
sandbox,
lookupConfig,
this.addBankingServiceItemsCallback,
this,
this.getCardModuleSandboxId()
);
2. Собственно callback-функция для обработки выбора пользователя:
if (!args || args.selectedRows.getCount() === 0) {
return;
}
var selectedIds = args.selectedRows.getKeys();
var synchronizedRule = this.filterValue;
var batchQuery = Ext.create('Terrasoft.BatchQuery');
Terrasoft.each(selectedIds, function(item) {
var insert = Ext.create('Terrasoft.InsertQuery', {
rootSchemaName: this.entitySchema.name
});
var newGuid = Terrasoft.generateGUID();
insert.setParameterValue(
'Id',
newGuid,
Terrasoft.DataValueType.GUID
);
insert.setParameterValue(
'BankingService',
item,
Terrasoft.DataValueType.GUID
);
insert.setParameterValue(
'SynchronizedRule',
synchronizedRule,
Terrasoft.DataValueType.GUID
);
batchQuery.add(insert);
}, this);
batchQuery.execute();
sandbox.publish('DetailChanged', {detailName: this.entitySchema.name}, [this.getSenderSandboxId()]);
};
3. Обработчик события DetailChanged на странице редактирования объекта с деталью:
viewModel.reloadDetail(args.detailName + 'Detail');
};
Однако, после нажатия кнопки "Выбрать", выбранные записи в гриде детали не отображаются. Если нажать "Сохранить" на странице редактирования объекта и потом открыть заново этот объект для редактирования, то в детали выбранные записи видны.
Как обновить грид детали, чтобы выбранные элементы отображались непосредственно после выбора?
Заранее благодарен за помощь!
Нравится
Добрый день Артем!!!
уточните пожалуйста версию и конфигурацию BPMOnline. Спасибо!!!
"Власов Михаил Викторович" написал:Добрый день Артем!!!
уточните пожалуйста версию и конфигурацию BPMOnline. Спасибо!!!
Михаил, версия 7.2; конфигурация вроде "lending"
Здравствуйте, я не воссоздавал на тестовом примере batchQuery, это не суть вопроса, сразу менял данные детали в базе данных, через sql management studio. Самое главное здесь в вашем вопросе, это вызов «viewModel.reloadDetail(args.detailName + 'Detail');»
Во-первых, выполните отладку, и убедитесь что метод вызывается, если нет, копайте в сторону песочницы, и того что бы ваши id песочницы совпадали. И добейтесь того что бы в функцию detailChangedSubscriber все же заходило.
Во-вторых, почему viewModel? Данный метод же есть прямо в главном скоупе страницы. Я закешировал для теста скоуп страницы в инит методе:
structure.userCode = function() { this.methods.init = function() { document.scp = this; }; };
И вот видно наш метод для обновления детали:
Во вторых, имя, передаваемое как аргумент должно соответствовать именно «name» свойству детали, а не «schemaName». Вот, к примеру, деталь опыта работы контакта:
И вот такой её вызов, отлично обновляет содержимое грида:
document.scp.reloadDetail("contactCareer");
где «document.scp» по сути this скоуп страницы контакта.
Вывод: Отладьте метод, проверьте имена.