Установка справочного поля в кастомном правиле мобильного приложения
В текщей задаче мобильного приложения есть требование бизнес-логики: "При смене статуса заявки на "ВРаботе" - проставить ответственным текущего пользователя мобильного приложения"
В мобильном приложении добавили правило:
Terrasoft.sdk.Model.addBusinessRule("Case", {
name: "CaseOwnerReq",
ruleType: Terrasoft.RuleTypes.Custom,
triggeredByColumns: ["Category", "Status"],
events: [
Terrasoft.BusinessRuleEvents.Load,
Terrasoft.BusinessRuleEvents.ValueChanged,
Terrasoft.BusinessRuleEvents.Save
],
executeFn: function(record, rule, column, customData, callbackConfig) {
//Статусы обращения
const cnstStatInProg = "7e9f1204-f46b-1410-fb9a-0050ba5d6c38";//В работе
....
if(vStatusId === cnstStatInProg){//В работе
/*
record.set("Owner.Id", Terrasoft.CurrentUserInfo.contactId, false);
record.set("Owner.Name", Terrasoft.CurrentUserInfo.contactName, true);
*/
record.set("Owner.Id", "3d3b2a43-e521-49c0-97be-98e235e99e92", true);
record.set("Owner.Name", "- Петя ", true);
}
......
и далее все как в примере
Попробовал уже наверное вариантов 10.... ошибок в консоли нет, если отладчиком пройти по коду, то оно вроде да-же меняет Owner.Id... но на экране ничего не меняется, после синхронизации ничего не меняется, после перезагрузки приложения ничего не меняется.
Куда копать?
Нравится
Последний вариант выглядит так:
if(vStatusId === cnstStatInProg){//В работе
record.set("Owner", "3d3b2a43-e521-49c0-97be-98e235e99e92", true);
});
}
И оно даж типа работает....(вижу аккаунт который задал) пока я стою на брек-поинте и смотрю на блокированный экран в эмуляторе.... и его даж видно на странице редактирования.... но не видно на странице просмотра Заявки.... и шо это может быть?
Виктор, смотрю примеры подобных правил, только поля не справочные.
В MobileOpportunityModelConfig:
Terrasoft.sdk.Model.addBusinessRule("Opportunity", { name: "OpportunityAmountValidatorRule", ruleType: Terrasoft.RuleTypes.Custom, triggeredByColumns: ["Amount"], events: [Terrasoft.BusinessRuleEvents.ValueChanged, Terrasoft.BusinessRuleEvents.Save], executeFn: function(model, rule, column, customData, callbackConfig) { var revenue = model.get("Amount"); if ((revenue < 0) || Ext.isEmpty(revenue)) { model.set("Amount", 0, true); } Ext.callback(callbackConfig.success, callbackConfig.scope); } });
В MobileOpportunityProductInterestModelConfig:
Terrasoft.sdk.Model.addBusinessRule("OpportunityProductInterest", { name: "OpportunityProductInterestQuantityBelowZeroRule", ruleType: Terrasoft.RuleTypes.Custom, triggeredByColumns: ["Quantity"], events: [Terrasoft.BusinessRuleEvents.ValueChanged, Terrasoft.BusinessRuleEvents.Save], executeFn: function(model, rule, column, customData, callbackConfig) { if (model.get("Quantity") < 0) { model.set("Quantity", 1, true); } Ext.callback(callbackConfig.success, callbackConfig.scope); } });
Последнюю строку точно не забыли?
Зверев Александр,
Спасибо за коммент.
В принципе сделал (оч. похоже на ваш вариант), в принципе работает.
Проблема в обновлении страницы после присвоения. Те. на странице редактирования видно, что поле поменялось. Если уйти в реестр обращений а потом вернуться обратно в обращение, то запись становиться видна как родная.
Что с этим делать - пока не понятно... временно оставили как есть ибо не критично... решим административно-документальными мерами.
В MobileFileAndLinksEditControllerV2 и MobileFileAndLinksEmbeddedDetailGenerator используется функция setDisplayValue, но она вызывается для для полей, связанных с файлами и не уверен, что подойдёт для обычных.