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

Добрый день.
Версия 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. И генерировать их еще и при изменении записи.


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

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

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
			}
Показать все комментарии