Мобильное приложение. Пользовательское бизнес правило. Не видит значение цены продукта
Всем доброго времени суток!
Есть задача при изменении кол-ва продуктов или же изменении продукта в детали Продукт в заказе просчитывать 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.