На тек. момент прикрутили сортировку обращений хард-кодом:

Terrasoft.sdk.GridPage.setOrderByColumns("Case", [

{

    column: "Number",

    orderType: Terrasoft.OrderTypes.DESC

},

{

    column: "RegisteredOn",

    orderType: Terrasoft.OrderTypes.DESC

},

{

    column: "AccountAddress",

    orderType: Terrasoft.OrderTypes.DESC

}]);



Но, есть необходимость что-бы специалист каким-то образом указал по какому из 3х полей он хочет отсортировать обращения и увидел соотв. результат.



Каким образом можно реализовать что-то подобное?

Нравится

1 комментарий

Здравствуйте, Виктор!

Такой возможности пока нет. Но, по словам разработчиков, у них есть планы по этой функциональности.

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

Проблема:

Если поле Телефон строковое, добавление атрибута

    viewType: Terrasoft.ViewTypes.Phone

позволяет без проблем осуществить звонок щелкнув по полю....

Но, если это поле - справочник тлф. номеров, то получим ошибку "replace is not a function".



Проблема судя по всему в модуле utils.js, если его функцию переписать примерно так, то проблема исчезнет:

Terrasoft.util.callByPhone = function(phoneNumber) {

/*Блокировано для проверки в эмуляторе

    if (Terrasoft.Platform.isWebKit) {

        return;

    }

*/

    if (typeof phoneNumber === 'object')//Это справочник

        phoneNumber = phoneNumber.data.Number;

    phoneNumber = Terrasoft.util.parsePhoneNumber(phoneNumber);

    if (Terrasoft.Platform.isWindows) {

        if (Terrasoft.ApplicationInfo.getIsSystemFeatureEnabled(Terrasoft.NativeSystemFeature.Telephony)) {

            Windows.ApplicationModel.Calls.PhoneCallManager.showPhoneCallUI(phoneNumber, "");

        }

    } else {

        var url = "tel:" + phoneNumber;

        Terrasoft.util.openUrl(url, true);

    }

};

 

Непонятно насколько корректно такое решение и как делать по правильному.

Нравится

5 комментариев

А зачем нужно было создавать справочник телефонов? Есть же деталь с телефонами.

 

Number это первичное для отображения поле в справочнике?

В крайнем случае можно вывести сразу составное поле

Terrasoft.sdk.RecordPage.addColumn("Contact", {
	name: "Tel.Number",
	label: "имя лок. строки",
	viewType: Terrasoft.ViewTypes.Phone,
	position: 99
})

 

Функцию Terrasoft.util.callByPhone нельзя менять

1) она рассчитана что в нее приходит строка

2) ее содержимое может в будущем изменится

Кривонос Максим,

>>она рассчитана что в нее приходит строка

Ну.... у нас (грубо говоря) есть Таблица "Заявка", в ней поля: "Средство связи", "Средство связи (другое)"



У меня задача: "Технарь должен жмакнуть по полю "Средство связи", или "Средство связи (другое)" и связаться с клиентом... на самом деле хотя-бы скопипастить данные поля куда-нибудь....

Я вижу замечательную возможность, описанную тут:

https://community.terrasoft.ru/articles/kak-perenesti-knopku-pozvonit-v-novoe-rabochee-mesto-mobilnogo-prilozheniya



Ну... меняю как описано и оно даж работает... на поле "Средство связи (другое)" что вызывает бурный восторг у моего проджект-манагера (ибо это не основное поле и вообче-то никто не ожидал что по небу будут жмакать)...



А потом получаю по голове палкой, потому-че поле "Средство связи" выглядит как настоящее и по нему можно даж тапнуть.... и получить ошибку....

ну вот как по нему тапнут - так я получаю по голове палкой....

Так что на что там она расчитана.... как оно там когда-нибудь потом поменяется.... моему начальству не интересно... а мне не интересно тем более тк. задачу нужно закрыть сегодня иначе зря-плата в понедельник мне не грозит.

Виктор, если оба поля самодельные, то почему бы не сделать их оба такими же, как то, что работает? А если одно стандартное, и при каких-то действиях нажатие на него приводит к ошибке, то опишите последовательность действий подробнее и укажите версию программы.

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

Пару месяцев назад после очередного обновления ос Android 7 приложение bpm перестало загружаться. Проблема решается отключением приложения GoogleChrome и отключением автообновлений.

версия мобильного приложения 7.10

 

из-за чего может возникнуть такой конфликт?

старая версия моб приложения и обновленный хром совсем никак не смогут сосуществовать?

Нравится

1 комментарий

Здравствуйте, Анна!

 

У нас нет как таковой поддержки старых версий приложения. Рекомендуем использовать актуальную версию приложения, сейчас это 7.16.1. 

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

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



В мобильном приложении добавили правило:

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

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

В разделе Обращения мобильного приложения необходимо убрать контекстное меню.

Идеально было-бы прикрутить какую-то логику управления пунктами меню (показать-скрыть, блокировать-разрешить)

 

В файле MobileCaseActionsSettings если комментировать все содержимое - ругается типа схема не определена,

Оставил только:

[

    {

        "operation": "insert",

        "name": "settings",

        "values": {

            "entitySchemaName": "Case",

            "items": [],

            "settingsType": "Actions",

            "operation": "insert"

        }

    }

]

В результате пункт "Добавить" все-равно откуда-то вылазит.

Как быть?



Изображение удалено.

Нравится

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

Виктор, если осталось убрать только добавление, может, будет достаточно настройки прав доступа на объект? Отобрать там пользователю на создание. Или тогда всё равно появится кнопка, но неактивная?

Зверев Александр,

Эм... это отдельное мобильное приложение, заточенное под техников, которые работают в полях....соотв. функционал в нем с одной стороны очень ограничен(дабы они своими рученками лишнего не наделали), с др. стороны оптимизирован под быстрое выполнение характерных именно для них задач.



Не уверен что у нас есть отдельная роль под такую деятельность (да и это не моя задача, тк я разраб а не админ).



Мне, как разрабу, важно понимать что можно сделать с этим меню на программном уровне и соотв. либо решать вопрос программно, либо перекидывать на админов.

Вообще, разграничение полномочий для разных должностей пользователей делают обычно как раз правами на роли. Ту же мобильную версию могут использовать не только техники, а те, в свою очередь, могут залогиниться в веб-версию и наделать лишнего уже там.

 

Другое дело, что не уверен, что отбирание прав на добавление даст именно нужный Вам визуальный эффект.

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

В мобильном приложении есть поле "Модель оборудования".

К этому полю применяется фильтр вида:



Terrasoft.sdk.Model.addBusinessRule("Case", {

    ruleType: Terrasoft.RuleTypes.Filtration,

    events: [Terrasoft.BusinessRuleEvents.Load, Terrasoft.BusinessRuleEvents.ValueChanged],

    triggeredByColumns: ["WorkTypeEquipment"],//Тип оборудования

    filteredColumn: "WorkCategoryModelEquipment",//Модель оборудования связана с Тип оборудования по WorkTypeEquipmentId

    filters: Ext.create("Terrasoft.Filter", {

        property: "WorkTypeEquipment"

    })

});



Также это поле Должно быть обязательным, если приведенный выше фильтр возвращает хотя-бы одну запись, иначе поле НЕ обязательное.



Пока есть только идея  перед установкой признака Обязательное вручную формировать запрос Select Count(*).... и смотреть на результат....

Но как асинхронный результат выполнения будет сочетаться с бизнес-правилом поля не совсем понятно.



Может если перейти на фильтр, построенный как бизнес-правило можно-будет при определении Обязательности вычитать какие-то его свойства?



Какие могут быть еще решения?

Нравится

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

Вручную использовать запросы к базе крайне не рекомендуется, т.к. отвалится онлайн режим.

Можно использовать custom бизнес правило. Сначала строим фильтр. Потом этот же фильтр используем его для подсчёта кол-ва записей. Как-то так. Пример оформления custom правила в академии есть.

record.changeProperty("WorkCategoryModelEquipment", {
   removeFilter: "FilterName"
});
 
var filter = Ext.create("Terrasoft.BaseFilter", {
    name: "FilterName"
    //определение фильтра
});
 
record.changeProperty("WorkCategoryModelEquipment", {
    addFilter: filter
})
 
var store= Ext.create("Terrasoft.store.BaseStore", { model: "WorkCategoryModelEquipment" });
 
store.setFilters(filter);
var queryConfig = Ext.create("Terrasoft.QueryConfig", {
	modelName: "WorkCategoryModelEquipment",
	columns: ["Id", "Name"]
});
store.load({
    queryConfig: queryConfig,
    callback: function(records, operation, success) {
        var isRequired = store.data.length > 0;
        record.changePropery("WorkCategoryModelEquipment", {required: isRequired});
        Ext.callback(config.success, config.scope);
    }
})

 

Полученный конечный результат для одной колонки выглядит так:

//Причины поломки

Terrasoft.sdk.Model.addBusinessRule("Case", {

    name: "WorkReasonReqRule",

    ruleType: Terrasoft.RuleTypes.Custom,

    triggeredByColumns: ["Category", "Status", "WorkCategory", "WorkReason"],

    events: [

        Terrasoft.BusinessRuleEvents.Load,

        Terrasoft.BusinessRuleEvents.ValueChanged,

        Terrasoft.BusinessRuleEvents.Save

    ],

    executeFn: function(record, rule, column, customData, callbackConfig) {

        let vWorkCategoryId = record.get("WorkCategory.Id");//зона ответственности

        let vWorkCategoryEmpty = !!vWorkCategoryId;//зона ответственности

        if(!vWorkCategoryEmpty){//если зона ответственности = пусто, то причина поломки - не обязательна

            record.changeProperty("WorkReason",

                {isValid: {

                    value: true,

                    message: ""

                    }

                });

            Ext.callback(callbackConfig.success, callbackConfig.scope, [true]);

            return;

        }

        

        let vReasonValid = !!record.get("WorkReason.Id");//причины поломки не пустая

        if(vReasonValid){

            record.changeProperty("WorkReason",

                {isValid: {

                    value: true,

                    message: ""

                    }

                });

            Ext.callback(callbackConfig.success, callbackConfig.scope, [true]);

            return;

        }

        let vFilter = Ext.create("Terrasoft.Filter", {

            name: "WorkReasonFilter",

            property: "WorkCategory",

            value: vWorkCategoryId

        });

        let vStore = Ext.create("Terrasoft.store.BaseStore", { model: "WorkReason" });

        vStore.setFilters(vFilter);

        var vQueryConfig = Ext.create("Terrasoft.QueryConfig", {

            modelName: "WorkReason",

            columns: ["Id", "Name"]

        });

        vStore.load({

            queryConfig: vQueryConfig,

            callback: function(records, operation, success) {

                let vEmpty = records.length > 0;

                record.changeProperty("WorkReason",

                    {isValid: {

                        value: !vEmpty,

                        message: Terrasoft.LS["Sys.RequirementRule.message"]

                        }

                    });

                Ext.callback(callbackConfig.success, callbackConfig.scope, [!vEmpty]);

            },

            scope: this

        });

        return;

    }

});

 

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

В мобильном приложении, раздел Обращения иногда выглядит так:

Изображение удалено.

 

А иногда вот так:

Изображение удалено.

От чего это зависит?

Можно-ли этим как-то управлять?

По крайней мере для отладки приложения мне (да и конечному пользователю) было-бы удобно ходить по разделам (папкам) туда-сюда, но эта панелька почти всегда скрыта (отсутствует) а как ее показать - не понятно.

Нравится

7 комментариев

Виктор,  по умолчанию все 3 кнопки должны показываться. За исключением «папки» с динамическими группами. Эта функциональность не работает в оффлайн-режиме (см. системную настройку «MobileApplicationMode»).

Соответственно, если ни одна из кнопок не показывается, то скорее всего произошел какой-то свал в ходе инициализации раздела.  Если это воспроизводится в эмуляторе, посмотрите сообщения в консоли.

Ничего подозрительного в консоли не светиться.

Похоже для того, что-бы эта панель появилась нужно очистить куки а потом запустить синхронизацию. Итс а мейджик.

А в каком файле прописано создание и управление этими кнопками?

Видимо, в системе была доработка, влияющая на видимость кнопок.

А в какой схеме прописано, можно узнать, посмотрев название элементов в средствах разработчика в браузере.

Такое ощущение, что эта панель показывается в зависимости от времени загрузки списка обращений (не знаю где она еще применяется)... чисто интуитивно - если список грузиться в течении более минуты - панель не показывается....

Возможно она показывается если какой-то асинхронный метод не вернул результатов или работал слишком долго?



Никаких особых доработок не производили... пилим исключительно свои странички отображения содержимого запроса.

 

Виктор, скорее, какой-то запрос со стороны клиента к сервисам системы завис (или работает слишком долго) и из-за этого не отработало то, что после него, в том числе и отрисовка кнопок. На эмуляторе в браузере можно в инструментах разработчика увидеть, какой запрос сколько выполняется, а какого вообще нет, если для кнопок идёт или не идёт на сервер отдельный.

Один и тот-же код выполняется в эмуляторе.



Захожу на сервер разработки - панель появляется 1 раз из 5ти.... иногда помогает тупая пересинхронизация (возможно список обращений при этом тянеться из кеша IIS а не БД)



Захожу на 127.0.0.1 - панель появляется почти всегда

 

По идее, в таком случае должна быть видна разница в длительности или в наличии-отсутствии конкретных запросов на сервер.

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

Проблема уже была описана и даж. решена, но подключить вильтрацию пользователей (ответственных) по выбранной группе в мобильном приложении не получается.

Два варианта подключения этого хитрого фильтра проверил и оба неудачно.

Чей-то умные мысли закончились Изображение удалено.

 

Terrasoft.sdk.Model.addBusinessRule("Case", {

    name: "CaseOwnerFiltrationRule",

    ruleType: Terrasoft.RuleTypes.Custom,

    triggeredByColumns: ["Group"],

    events: [

        Terrasoft.BusinessRuleEvents.Load,

        Terrasoft.BusinessRuleEvents.ValueChanged

        ],

    executeFn: function(record, rule, column, customData, callbackConfig) {

        let vGroupId = record.get("Group.Id");

        let vFltrName = "CaseOwnerByGroupFiltration";

 

        //второй вариант - не работает

        let vFltrGrp = Ext.create("Terrasoft.FilterGroup");//тут ошибка "файл FilterGroup.js не найден"

        vFltrGrp.add(vFltrName,

            Terrasoft.createColumnFilterWithParameter(

            Terrasoft.ComparisonTypes.Equal,

            "[SysAdminUnit:Contact].[SysUserInRole:SysUser].SysRole.Id",

            vGroupId));

        

        /*первый вариант - не работает

        //в этом случае непонятно еще и как имя фильтра задать (оно обязательно нужно будет дальше для отключения фильтрации при пустой группе)

        let vFilter = Terrasoft.createColumnFilterWithParameter(//и так ошибка "метод createColumnFilterWithParameter не существует"

            Terrasoft.ComparisonTypes.Equal,

            "[SysAdminUnit:Contact].[SysUserInRole:SysUser].SysRole.Id",

            vGroupId);

        */

Нравится

5 комментариев
Лучший ответ

Terrasoft.FilterGroup - это, по-моему, элемент интерфейса. Зачем его создавать в бизнес-правиле?

Terrasoft.createColumnFilterWithParameter - это клиентская esq, крайне не рекомендуется использовать её в мобильном приложении.

Фильтр примерно так задаётся. В том же бизнес правиле. Только нужно убедится, что SysAdminUnit и SysUserInRole загружаются в моб. приложение.

record.changeProperty("ColumnName", {
    removeFilter: "UsrGroupFiler"
});
 
var userFilter = Ext.create("Terrasoft.Filter", {
    name: "UsrGroupFiler",
    property: "[SysAdminUnit:Contact].[SysUserInRole:SysUser].SysRole.Id",
    value: roleId
});
 
record.changeProperty("ColumnName", {
    addFilter: userFilter
})



 

Terrasoft.FilterGroup - это, по-моему, элемент интерфейса. Зачем его создавать в бизнес-правиле?

Terrasoft.createColumnFilterWithParameter - это клиентская esq, крайне не рекомендуется использовать её в мобильном приложении.

Фильтр примерно так задаётся. В том же бизнес правиле. Только нужно убедится, что SysAdminUnit и SysUserInRole загружаются в моб. приложение.

record.changeProperty("ColumnName", {
    removeFilter: "UsrGroupFiler"
});
 
var userFilter = Ext.create("Terrasoft.Filter", {
    name: "UsrGroupFiler",
    property: "[SysAdminUnit:Contact].[SysUserInRole:SysUser].SysRole.Id",
    value: roleId
});
 
record.changeProperty("ColumnName", {
    addFilter: userFilter
})



 

Бершеда Д. Н.,

О! Спасибо, будем проверять.

Оч. похоже на правду,.... но не работает.

Код кот. получился:

 

Terrasoft.sdk.Model.addBusinessRule("Case", {

    name: "CaseOwnerFiltrationRule",

    ruleType: Terrasoft.RuleTypes.Custom,

    triggeredByColumns: ["Group"],

    events: [

        Terrasoft.BusinessRuleEvents.Load,

        Terrasoft.BusinessRuleEvents.ValueChanged

        ],

    executeFn: function(record, rule, column, customData, callbackConfig) {

        let vGroupId = record.get("Group.Id");

        let vFltrName = "CaseOwnerByGroupFiltration";

        let vFilter = Ext.create("Terrasoft.Filter", {

                name: vFltrName,

                //modelName: "SysAdminUnit",//так тож не работает

                property: "[SysAdminUnit:Contact].[SysUserInRole:SysUser].SysRole.Id",

                //property: "[SysAdminUnit:Contact].=[SysUserInRole:SysUser].SysRole.Id",

                value: vGroupId

            });

        record.changeProperty("Owner", {addFilter: vFilter});

        Ext.callback(callbackConfig.success, callbackConfig.scope, [true]);

    }

});



Судя по отладчику оно пытается найти поле "[SysAdminUnit:Contact]" в таблице (схеме) "Contact", ес-нно там такого нет и не предвидеться.



Думал, что фильтру нужно сказать, что он строиться не по модели "Contact" а по модели - modelName: "SysAdminUnit", но эт. тож не работает тк. судя по отладчику vFilter это не фильтр а суб-фильтр дата-сета... у дата-сета первичный фильтр схему не содержит и потому в суб-фильтр никто не смотрит а сразу лезет в основную схему... а там таких связок нет.



Блин... по всему коду разбросана похожая фильтрация, но через тупое создание фильтра с параметром.... но его тут применить нельзя... а эта конструкция не работает.... и чо делать?

Если дело только в неправильной настройке фильтра по обратным связям, см. третий пример тут. Хотя, вроде бы всё на месте. Подробно мобильные фильтры обсуждали в этой теме.

Виктор Мелковский,

У мобилки проблемы с колонками с обратной связью. Официально они не поддерживаются. Но у меня получалось заставить работать фильтры в разделе с одной связью работать. Сразу две на практике не приходилось применять. В каком режиме работает приложение? Онлайн или оффлайн?

В крайнем случае можно запросом выгрузить список с фильтрацией по прямой связи, и через subfilters все id добавить вручную.

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

Добрый день. В результате изучения моб. приложения. Столкнулись с рядом проблем. 

1) Можно, ли расставить сигналы таким образом?

https://i.imgur.com/nKBk78M.png.

2) Дело в том, что данный бизнес процесс связан с кейсом. А если запускается по сигналу, то можно увидеть что связь с кейсом пропадает. Как быть быть в данной ситуации???

https://i.imgur.com/oeQA186.png

3) Если такая модель бизнес-процесса подходит, то как избавиться от ошибок. Дело в том что бизнес процесс запускается на сайте. А дальше продолжение по сигналу через приложение. 

https://i.imgur.com/HMQYg7N.png

Первый процесс это продолжение через моб. версию. (Диаграмма выполнения: https://i.imgur.com/9ZxIBnH.png)

А второй с ошибкой это запуск через сайт. (Диаграмма выполнения: https://i.imgur.com/V2Ck5iR.png)

Нравится

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

Не совсем понимаю, что Вы хотите сделать в БП и причём тут мобильное приложение.

Само по себе мобильное не выполняет процессы, они запускаются на сайте, если происходят изменения в записи объекта, для которых в БП настроен сигнал. Если мобильное приложение работает оффлайн, то данные в основной системе добавятся или изменятся в момент синхронизации. 

Узнать больше о том, как выполнялись элементы БП и какие в этот момент были значения параметров, можно, включив трассировку.

Да спасибо я уже понял. Дело в том что  в мобильном приложении вносятся изменения в карточку способом: просто редактированием поля(без какого-либо подтверждения оно автоматически сохраняется, in-place редактирование). По этой причине некоторые бизнес-процессы не работали. Изменил немного логику

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

Здравствуйте!

Помогите, пожалуйста, реализовать блокировку (сделать недоступным для редактирования, disable=false) поля мобильного приложения. Как альтернативу скрывать поле программно при загрузке.

Нравится

1 комментарий

Блокировать и разблокировать поле в мобильном приложении можно при помощи бизнес-правил. См. статью.

Там приводится следующий  пример:

Доступность поля, связанного с колонкой Stock, зависит от значения в колонке IsPresence.

Terrasoft.sdk.Model.addBusinessRule("ActivitySKU", {
    ruleType: Terrasoft.RuleTypes.Activation,
    events: [Terrasoft.BusinessRuleEvents.Load, Terrasoft.BusinessRuleEvents.ValueChanged],
    triggeredByColumns: ["IsPresence"],
    conditionalColumns: [
        {name: "IsPresence", value: true}
    ],
    dependentColumnNames: ["Stock"]
});

Для более сложных случаев есть ещё пользовательские.

Если же нужно просто заблокировать поле без всяких условий, можно настроить правами доступа.

 

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