Мобильное приложение. Пользовательское бизнес правило. Не видит значение цены продукта
Всем доброго времени суток!
Есть задача при изменении кол-ва продуктов или же изменении продукта в детали Продукт в заказе просчитывать Amount и TotalAmount. Реализую данную задачу через пользовательское бизнес правило:
Terrasoft.sdk.Model.addBusinessRule("OrderProduct", {
name: "WaOrderProductAmountValidatorRule",
ruleType: Terrasoft.RuleTypes.Custom,
triggeredByColumns: ["Quantity", "Product"],
events: [Terrasoft.BusinessRuleEvents.ValueChanged, Terrasoft.BusinessRuleEvents.Save],
executeFn: function(model, rule, column, customData, callbackConfig) {
window.console.info(model);
debugger;
var product = model.get("Product");
if ((!product) || Ext.isEmpty(product)) {
model.set("Price", 0, true);
model.set("TotalAmount", 0, true);
model.set("Amount", 0, true);
} else {
var quantity = model.get("Quantity");
var price = product.get("Price");
var amount = quantity * price;
model.set("Amount", amount, true);
model.set("TotalAmount", amount, true);
}
Ext.callback(callbackConfig.success, callbackConfig.scope);
}
});Но почему то значение цены продукта возвращает null:
{
"modified":{
"Id":"fbfb2d62-4439-486b-ae2f-b360f9e899f8"
},
"raw":{},
"stores":[],
"data":{
"Id":"1fd85496-4cc0-485c-ad37-bb91857e65df",
"Name":"Гидрогелевая маска для лица WOW Mask",
"ProcessListeners":null,
"Price":null,
"Active":false,
"IsArchive":false
},
"_data":{
"Id":"1fd85496-4cc0-485c-ad37-bb91857e65df",
"Name":"Гидрогелевая маска для лица WOW Mask",
"ProcessListeners":null,
"Price":null,
"Active":false,
"IsArchive":false
},
"id":"fbfb2d62-4439-486b-ae2f-b360f9e899f8",
"internalId":"fbfb2d62-4439-486b-ae2f-b360f9e899f8",
"phantom":true,
"dirty":true
}Хотя значение цены есть - http://prntscr.com/my9x2o
Нравится
Нигрескул Алексей,
Такое происходит из-за того, что в конфиг запроса для справочной колонки никоим образом не была добавлена нужная колонка. Можно в явном виде добавить таким кодом где-нибудь в ModuleConfig:
var additionalProductColumns = ["Price", /*прочие колонки*/];
var productQueryConfig = Terrasoft.sdk.LookupGridPage.getQueryConfig("Product");
Terrasoft.sdk.LookupGridPage.updateQueryConfigColumns(null, {columns: additionalProductColumns}, productQueryConfig);Либо можно для converFuction первичной или вторичной колонки добавить её в LookupGridPage.
В мобильном приложении при изменении значения в самой записи значения в связанном поле на странице не обновляется автоматически, как в основной версии. Нужно дополнительные действия выполнить
var controller = Terrasoft.app.getControllerInstances()["MyController"];
//Можно задебажиться и посмотреть, какие экземпляры контроллеров есть, среди них должен быть нужный
var control = controller.getFieldByName("MyColumn", record);
control.setValue(value);Или ещё вариант:
var control = Ext.getCmp("{ViewId}_{PageType}_{ColumnName}_Column");
// {ViewId} - id представления, {PageType} - тип страницы Edit или Preview, {ColumnName} - название колонки, например AccountPage_Edit_AlternativeName_Column
control.setValue(value);
Бершеда Д. Н.,
Здравствуйте! Я настроил кастомное правило и все хорошо изменяется, в данном случае сумма в зависимости от цены и кол-ва товаров. Вопрос в другом, не видит значение цены продукта, вот пример:
Есть заказ с продуктами -
http://prntscr.com/mz1088, меняю кол- во продукта срабатывает правило - http://prntscr.com/mz10kr
Мне возвращает цену продукта null - http://prntscr.com/mz10vd
Почему так происходит? В манифест зависимости добавил.
Нигрескул Алексей,
Такое происходит из-за того, что в конфиг запроса для справочной колонки никоим образом не была добавлена нужная колонка. Можно в явном виде добавить таким кодом где-нибудь в ModuleConfig:
var additionalProductColumns = ["Price", /*прочие колонки*/];
var productQueryConfig = Terrasoft.sdk.LookupGridPage.getQueryConfig("Product");
Terrasoft.sdk.LookupGridPage.updateQueryConfigColumns(null, {columns: additionalProductColumns}, productQueryConfig);Либо можно для converFuction первичной или вторичной колонки добавить её в LookupGridPage.