Пытаюсь разобраться как работает поле "Сумма по продуктам" в разделе "Продажы". При добавлении, изменении и удалении записи сумма в поле перерасчитывается. Пытаюсь разобраться как это работает, понимаю что через сообщения, но не могу понять как. Может кто помочь с этой ситуацией, нужно сделать такую логику для кастомной детали со страницей редактирования и полем в компании.
Нравится
Эта логика реализована во встроенном БП объекта «Продукт в продаже» (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);
},