Событие при добавлении записи в редактируемый реестр детали
Добрый день.
Версия BPMOnline Sales Omnichannel 7.5.0.1328.
Есть деталь "Продукты Документа" с редактируемым реестром, при добавлении/изменении/удалении записи детали на сервере происходит перерасчёт сумм связанного документа (событие DocumentProductSaved и DocumentProductDeleted).
Для отображения обновлённых сумм в карточке документа использую метод subscribe:
"schemaName": "DocumentProductDetailV2",
"entitySchemaName": "DocumentProduct",
subscriber: function(){
this.reloadEntity();
}
},
Проблема в том, что метод subscriber выполняется только при обновлении и удалении записи из редактируемого реестра, а при добавлении не выполняется.
Использование метода onActiveRowSave для вызова метода fireDetailChanged не помогло, т.к. карточка документа обновляется до того, как выполнилась логика по событиям DocumentProductSaved и DocumentProductDeleted.
Подскажите, как решит эту проблему.
Также ещё интересует, как сделать валидацию полей в редактируемом реестре?
Спасибо.
Нравится
Здравствуйте, Игорь.
Для вашей бизнес задачи нужно помимо метода subscriber использовать свои кастомные события через sandbox. И генерировать их еще и при изменении записи.
"Мартыненко Сергей" написал:Здравствуйте, Игорь.
Для вашей бизнес задачи нужно помимо метода subscriber использовать свои кастомные события через sandbox. И генерировать их еще и при изменении записи.
Не могли бы вы подробнее описать ваш вариант
При инциализации схемы детали можно проверить добавляется ли сейчас новая запись следующим образом:
if(this.isAddMode()){ здесь код публикации события через sandbox }
Вот тут попытка в этом разобраться была :)
Спасибо.
А как быть с валидацией полей в редактируемом реестре?
"Коновалов Игорь" написал:Спасибо.
А как быть с валидацией полей в редактируемом реестре?
Здравствуйте.
Посмотрите статью на академии:
http://academy.terrasoft.ru/documents/docs/technic/SDK/7.7.0/FieldsVali…
Подскажите как решилась разработка вызова метода без subscriber ?
Сейчас пытаемся аналогичный кейс решить.
Я в схеме детали <НазваниеОбъекта>DetailV2 при необходимости вызываю
this.updateDetail({reloadAll: true});
Я в схеме детали <НазваниеОбъекта>DetailV2 при необходимости вызываю
this.updateDetail({reloadAll: true});
Подскажите пож-та Игорь.
Догнать не могу.
Делаю так
*Detail
methods: { init: function() { this.callParent(arguments); }, onSaved: function() { this.updateDetail({reloadAll: true}); } }
и ничего. Вероятно я не туда это вставляю. Подскажите пож-та.
"Юсупов Марат" написал:Подскажите пож-та Игорь.
Догнать не могу.
Делаю так
*Detail
methods: {
init: function() {
this.callParent(arguments);
},
onSaved: function() {
this.updateDetail({reloadAll: true});
}
}
и ничего. Вероятно я не туда это вставляю. Подскажите пож-та.
По идее да. А что debugger говорит?
И где вы вызываете метод onSaved?
Игорь, в детали *1Detail.
Или неправильный метод использую.
debugger туда не попадает.
В BaseGridDetailV2 Есть метод onCardSaved.
Может в вашем случае лучше использовать его.
Получилось так сделать в детали, которая вызывает песочницу.
saveRowChanges: function(row, callback, scope) { scope = scope || this; callback = callback || this.Terrasoft.emptyFn; if (row && this.getIsRowChanged(row)) { row.save({ callback: callback, isSilent: true, scope: scope }); } else { callback.call(scope); } scope.sandbox.publish("UpdateMyData", null, ["111"]); // вызов песочницы в Page }