Вопрос

Установка справочного поля в кастомном правиле мобильного приложения

В текщей задаче мобильного приложения есть требование бизнес-логики: "При смене статуса заявки на "ВРаботе" - проставить ответственным текущего пользователя мобильного приложения"

В мобильном приложении добавили правило:
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... но на экране ничего не меняется, после синхронизации ничего не меняется, после перезагрузки приложения ничего не меняется.

Куда копать?

Нравится

4 комментария

Последний вариант выглядит так:
                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, но она вызывается для  для полей, связанных с файлами и не уверен, что подойдёт для обычных.

Показать все комментарии