Вопрос

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

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

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

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

 

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

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