Коллеги, тут такое дело. Мы загрузили свой пакет в систему (он, естественно, теперь нередактируемый), но появилась еще одна задача и пришлось унаследоваться от Пейджи и дописать туда еще один метод, который каждый раз при изменении поля [Стадия], будет апдейтить деталь. Но эта деталь находится на той пейдже от которой мы унаследовались и когда я пишу вот это: this.updateDetail({detail: "UsrSchema4Detailf84a3cb6"});
то ничего не происходит, но ведь должно? (ведь мы унаследовались)...
Нравится
Alex Zaslavsky,
насколько мне известно, метод init() не вызывается при updateDetail()
при вызове метода обновления детали на странице генерируется сообщение
updateDetail: function(detailConfig) {
var detailId = this.getDetailId(detailConfig.detail);
this.sandbox.publish("UpdateDetail", {
reloadAll: true
}, [detailId]);
}
На детали есть подписка на это сообщение:
subscribeSandboxEvents: function() {
this.sandbox.subscribe("UpdateDetail", function(config) {
if (this.destroyed) {
return;
}
this.updateDetail(config);
this.processCheckMasterRecordEditRights();
}, this, this.getUpdateDetailSandboxTags());
}
и нигде в этой цепочке нет Init()
Можете просто переопределить метод updateDetail или subscribeSandboxEvents на самой детали и заложить логику туда
Добрый день, уточните пожалуйста, унаследовались или заместили родителя? чтобы ваше изменение было применено в системе на той же странице, вы должны заместить Page.
Еще один вариант это попробовать обновлять деталь через сообщение со страницы
Колодяжный Владислав Эдуардович,
извините, да, заместил родителя.
Alex Zaslavsky,
попробуйте так
this.updateDetail( { detail: "UsrSchema4Detailf84a3cb6", reloadAll: true } );
Колодяжный Владислав Эдуардович,
Не помогло. Тогда можно небольшой ликбез?) Метод updateDetail ведь должен вызвать метод init() самой детали? А то в этом методе висит кое-какая логика, которая не отрабатывает при изменении стадии.
Alex Zaslavsky,
насколько мне известно, метод init() не вызывается при updateDetail()
при вызове метода обновления детали на странице генерируется сообщение
updateDetail: function(detailConfig) {
var detailId = this.getDetailId(detailConfig.detail);
this.sandbox.publish("UpdateDetail", {
reloadAll: true
}, [detailId]);
}
На детали есть подписка на это сообщение:
subscribeSandboxEvents: function() {
this.sandbox.subscribe("UpdateDetail", function(config) {
if (this.destroyed) {
return;
}
this.updateDetail(config);
this.processCheckMasterRecordEditRights();
}, this, this.getUpdateDetailSandboxTags());
}
и нигде в этой цепочке нет Init()
Можете просто переопределить метод updateDetail или subscribeSandboxEvents на самой детали и заложить логику туда
Колодяжный Владислав Эдуардович,
В общем, я пока нашел обходное решение, которое тоже нам подходит с помощью вызова метода addRecord(). Но тем не менее, в схеме детали я пробовал в subscribeSandboxEvents() добавить init() и дебаггер, а на пейдже, где я меняю стадию, вызываю метод updateDetail. В итоге когда я изменил стадию, отработал мой updateDetail, но
subscribeSandboxEvents() не отреагировал и логика не отработала. Я не разработчик, но пытаюсь со своими скудными базовыми знаниями в этом разобраться :) Спасибо, что пытаетесь помочь.