Проблема уже была описана и даж. решена, но подключить вильтрацию пользователей (ответственных) по выбранной группе в мобильном приложении не получается.
Два варианта подключения этого хитрого фильтра проверил и оба неудачно.
Чей-то умные мысли закончились
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);
*/
Нравится
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 добавить вручную.