Пытаюсь разобраться как работает поле "Сумма по продуктам" в разделе "Продажы". При добавлении, изменении и удалении записи сумма в поле перерасчитывается. Пытаюсь разобраться как это работает, понимаю что через сообщения, но не могу понять как. Может кто помочь с этой ситуацией, нужно сделать такую логику для кастомной детали со страницей редактирования и полем в компании.
Нравится
Эта логика реализована во встроенном БП объекта «Продукт в продаже» (OpportunityProductInterest). Там в обработчике событий сохранения и удаления записей в объекте детали запускается функция CalckOpportunityAmount с кодом:
var oppotrunityAmountSelect = new Select(UserConnection) .Column("Amount") .From("OpportunityProductInterest") .Where("OpportunityId").IsEqual(Column.Parameter(opportunityId)) as Select; double opportunityAmount = 0.0; using (var dbExecutor = UserConnection.EnsureDBConnection()) { using (IDataReader dr = oppotrunityAmountSelect.ExecuteReader(dbExecutor)) { while (dr.Read()) { if(!dr.IsDBNull(0)){ opportunityAmount += (double)UserConnection.DBTypeConverter.DBValueToDecimal(dr[0]); } } } } var update = new Update(UserConnection, "Opportunity") .Set("Amount", Column.Parameter(opportunityAmount)) .Where("Id").IsEqual(Column.Parameter(opportunityId)); update.Execute();
Зверев Александр,
Спасибо. Нашел - получилось что бы в поле записывалась сумма, но я так понимаю должно быть еще сообщение которое заставляет страницу обновляться (или точнее поле на фронте). Не нахожу таких сообщений в OpportunityPageV2 и наверно с БП объекта тот что отправляет
У страницы OpportunityPageV2 есть много версий в разных пакетах.
Зверев Александр,
Я смотрел сразу через дебагер в chrome, что бы видеть все версии сразу
Не оно ли:
details: /**SCHEMA_DETAILS*/{ ... OpportunityProduct: { schemaName: "OpportunityProductDetailV2", filter: { masterColumn: "Id", detailColumn: "Opportunity" }, subscriber: {methodName: "onOpportunityProductChanged"} }, ... methods: { /** * Reloads current record. * @private */ onOpportunityProductChanged: function() { this.loadEntity(this.get("Id")); this.sendSaveCardModuleResponse(this); },