редактируемый реестр
Технические вопросы
7.x

Событие при добавлении записи в редактируемый реестр детали

Добрый день.
Версия BPMOnline Sales Omnichannel 7.5.0.1328.
Есть деталь "Продукты Документа" с редактируемым реестром, при добавлении/изменении/удалении записи детали на сервере происходит перерасчёт сумм связанного документа (событие DocumentProductSaved и DocumentProductDeleted).
Для отображения обновлённых сумм в карточке документа использую метод subscribe:

"DocumentProduct": {
        "schemaName": "DocumentProductDetailV2",
        "entitySchemaName": "DocumentProduct",
        subscriber: function(){
            this.reloadEntity();
        }
        },

Проблема в том, что метод subscriber выполняется только при обновлении и удалении записи из редактируемого реестра, а при добавлении не выполняется.
Использование метода onActiveRowSave для вызова метода fireDetailChanged не помогло, т.к. карточка документа обновляется до того, как выполнилась логика по событиям DocumentProductSaved и DocumentProductDeleted.
Подскажите, как решит эту проблему.

Также ещё интересует, как сделать валидацию полей в редактируемом реестре?
Спасибо.

Нравится

14 комментариев

Здравствуйте, Игорь.

Для вашей бизнес задачи нужно помимо метода subscriber использовать свои кастомные события через sandbox. И генерировать их еще и при изменении записи.

"Мартыненко Сергей" написал:

Здравствуйте, Игорь.

Для вашей бизнес задачи нужно помимо метода subscriber использовать свои кастомные события через sandbox. И генерировать их еще и при изменении записи.


Не могли бы вы подробнее описать ваш вариант

При инциализации схемы детали можно проверить добавляется ли сейчас новая запись следующим образом:

[javascript]
if(this.isAddMode()){
здесь код публикации события через sandbox
}
[/javascript]

Вот тут попытка в этом разобраться была :)

Спасибо.
А как быть с валидацией полей в редактируемом реестре?

"Коновалов Игорь" написал:

Спасибо.

А как быть с валидацией полей в редактируемом реестре?


Здравствуйте.

Посмотрите статью на академии:
http://academy.terrasoft.ru/documents/docs/technic/SDK/7.7.0/FieldsVali…

Подскажите как решилась разработка вызова метода без subscriber ?
Сейчас пытаемся аналогичный кейс решить.

Я в схеме детали <НазваниеОбъекта>DetailV2 при необходимости вызываю
[javascript]
this.updateDetail({reloadAll: true});
[/javascript]

Я в схеме детали <НазваниеОбъекта>DetailV2 при необходимости вызываю
[javascript]
this.updateDetail({reloadAll: true});
[/javascript]

Подскажите пож-та Игорь.
Догнать не могу.
Делаю так
*Detail
[javascript]
methods: {
init: function() {
this.callParent(arguments);
},
onSaved: function() {
this.updateDetail({reloadAll: true});
}

}
[/javascript]
и ничего. Вероятно я не туда это вставляю. Подскажите пож-та.

"Юсупов Марат" написал:

Подскажите пож-та Игорь.

Догнать не могу.

Делаю так

*Detail

methods: {

                        init: function() {

                                this.callParent(arguments);

                        },

                        onSaved: function() {

                                this.updateDetail({reloadAll: true});

                        }

                       

                }

и ничего. Вероятно я не туда это вставляю. Подскажите пож-та.

По идее да. А что debugger говорит?
И где вы вызываете метод onSaved?

Игорь, в детали *1Detail.
Или неправильный метод использую.
debugger туда не попадает.

В BaseGridDetailV2 Есть метод onCardSaved.
Может в вашем случае лучше использовать его.

Получилось так сделать в детали, которая вызывает песочницу.
[javascript]
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
}
[/javascript]

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