Вопрос

Сложный фильтр в мобильной версии

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

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

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

 

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 добавить вручную.

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