Фильтрация поля в мобильном приложении
Мобильное приложение
7.x

Фильтрация поля в мобильном приложении

BPMonline 7.7.0.2326

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

Нравится

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

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

Для решения данной задачи можно использовать бизнес правило фильтрации для мобильного приложения.

Пример правила фильтрации, в котором поле "Контакт" фильтруется по колонке "Контрагент" в разделе "Счета".

[code]
Terrasoft.sdk.Model.addBusinessRule("Invoice", {
ruleType: Terrasoft.RuleTypes.Filtration,
events: [Terrasoft.BusinessRuleEvents.Load, Terrasoft.BusinessRuleEvents.ValueChanged],
triggeredByColumns: ["Account"],
filteredColumn: "Contact",
filters: Ext.create("Terrasoft.Filter", {
property: "Account"
})
});
[/code]

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

Для решения данной задачи можно использовать бизнес правило фильтрации для мобильного приложения.

Пример правила фильтрации, в котором поле "Контакт" фильтруется по колонке "Контрагент" в разделе "Счета".

[code]
Terrasoft.sdk.Model.addBusinessRule("Invoice", {
ruleType: Terrasoft.RuleTypes.Filtration,
events: [Terrasoft.BusinessRuleEvents.Load, Terrasoft.BusinessRuleEvents.ValueChanged],
triggeredByColumns: ["Account"],
filteredColumn: "Contact",
filters: Ext.create("Terrasoft.Filter", {
property: "Account"
})
});
[/code]

Здравствуйте!
Не поняла, где именно это реализовывать.
Я создала через мастер мобильного приложения свое рабочее место "Агенты" и поместила туда раздел Лиды.
В Лиде есть новое поле справочник UsrAgent (выбор из контактов). Хотела бы его отфильтровать, чтобы при выборе из справочника были только контакты нашей компании с типом агент, наподобие ответственного в любых карточка BPMonline.
Но обратила внимания, что поле ответственный, например, в документе в мобильном приложении не фильтруется (хотела посмотреть пример реализации).
Скажите, возможно ли фильтровать поле в мобильном приложении?
и в какой именно схеме нужно делать изменения?

Начала разбираться в мобильном приложении, заметила, что обязательность и фильтрация полей написаны для раздела активности в MobileActivityModelConfig (я так поняла, что это модуль)

Мне нужно сделать фильтрация для полей раздела Лид. Нашла MobileLeadModelConfig (но написана она, как исходный код).

Заместить я ее не могу, так как нет в списке замещения и новую создать точно такую же не могу, потому что пользовательские схемы должны начинаться с Usr.

И как мне быть? Получается, что это ошибка системы? Как выйти из этой ситуации?

Добрый день, Виктория
Для решения Вашей задачи необходимо:

  • Желательно создать отдельную схему с типом «Модуль»
    И назвать ее так «UsrMobileLeadModelConfig» (чтоб она соответствовала базовым стилям именования файлов).
  • Внутри нее поместить такой код:

    [javascript]
    Terrasoft.sdk.Model.addBusinessRule("Lead", {
    name: "UsrMobileLeadUsrAgentFilter",
    ruleType: Terrasoft.RuleTypes.Filtration,
    events: [Terrasoft.BusinessRuleEvents.Load],
    triggeredByColumns: ["UsrAgent"],
    filters: Ext.create("Terrasoft.Filter", {
    name: "filterName",
    type: Terrasoft.FilterTypes.Group,
    logicalOperation: Terrasoft.FilterLogicalOperations.And,
    subfilters: [
    {
    property: "Account",
    value: 'айдишникнашейкомпании'
    },
    {
    property: "Type",
    value: 'айдишниктипаконтактаагент'
    }
    ]
    })
    });
    [/javascript]

  • Затем эту схему необходимо подключить в манифесте:
    - Создаем/Открываем схему UsrMobileApplicationManifestDefaultWorkplace
    - Добавляем в блок Models такой код:

    [javascript]
    "Models": {
    "Lead": {
    "PagesExtensions": ["UsrMobileLeadModelConfig"]
    }
    }
    [/javascript]

  • Сохраняем
  • Синхронизируемся на девайсе

Здравствуйте!
Весь день пробую код, который вы написали.

Заметила, что если в блоке "Models" добавить в "PageExtensions", то при синхронизации возникает ошибка, поэтому (по примеру в коде) добавила в "ModelExtensions" и проверила на обязательности этого поля, все срабатывает.
Terrasoft.sdk.Model.addBusinessRule('Lead', {
ruleType: Terrasoft.RuleTypes.Requirement,
triggeredByColumns: ['UsrAgent']
});

Но фильтрация не работает, пустой список, пробовала и просто по Account и по двум, пустой список и все.
Почему не работает фильтрация?
Почему пустой список хотя в sql с этими id есть 2 записи и в приложении на компе тоже 2 записи, а в мобильном приложении пусто?
Значение name: "filterName" должно быть любым или определенным? Или в чем-то другом причина?

Получилось настроить фильтрацию по текстовому полю:

Terrasoft.sdk.Model.addBusinessRule("Lead", {
ruleType: Terrasoft.RuleTypes.Filtration,
triggeredByColumns: ["UsrAgent"],
filters: Ext.create("Terrasoft.Filter", {
compareType: Terrasoft.ComparisonTypes.Equal,
property: "Name",
value: "Агент 1",
name: "test123"
})
});

Возможно, чтобы настроить фильтрацию по компании (это же справочник) нужно указать дополнительные свойства?

1)

"Чуплыгина Виктория Викторовна" написал:"PageExtensions", то при синхронизации возникает ошибка

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

2) Проверьте, что значения Id-шников указаны в нижнем регистре
[javascript]
{
property: "Account",
value: "e308b781-3c5b-4ecb-89ef-5c1ed4da488e"
},
[/javascript]

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

1) Если получилось настроить обязательность и фильтрацию по текстовому полю, то, мне кажется, подключила я все верно.
Квадратные скобки я поставила.

2) да, в нижнем регистре.

Может, все-таки для фильтрации по справочнику нужно указать что-то еще?
Никак не могу понять, что именно.

Terrasoft.sdk.Model.addBusinessRule("Activity", {
ruleType: Terrasoft.RuleTypes.Filtration,
events: [Terrasoft.BusinessRuleEvents.Load],
triggeredByColumns: ["Owner"],
filters: Ext.create("Terrasoft.Filter", {
property: "Active",
modelName: "SysAdminUnit",
assocProperty: "Contact",
operation: Terrasoft.FilterOperations.Any,
name: "ActivityContact_SysAdminUnit_Filtration",
value: true
})
});

Фильтрация поля ответственный в разделе активности?
что означают свойства modelName и assocProperty?
modelName, наверно, там, где искать property?

Да, это она.
modelName - имя связанной таблицы.
assocProperty - имя колонки по которой связанная таблица ссылается на фильтруемую таблицу.

Это не обычный фильтр, а фильтр по обратным связям.
Он означает следующее: Берем всех контактов для которых существует запись в таблице SysAdminUnit которая ссылается на контакта через свое поле SysAdminUnit.Contact

Значение name: "filterName" может быть любым

Указанный пример должен работать.
Попробуйте еще такой пример:

Сначала с NotEqual
[javascript]
Terrasoft.sdk.Model.addBusinessRule("Lead", {
ruleType: Terrasoft.RuleTypes.Filtration,
triggeredByColumns: ["UsrAgent"],
filters: Ext.create("Terrasoft.Filter", {
compareType: Terrasoft.ComparisonTypes.NotEqual,
property: "Id",
value: "81d05412-d90c-440a-831a-03fc52489fa5",
name: "name1"
})
});
[/javascript]
а затем с Equal

Похоже что данные по колонке Тип не забираются для таблицы "Контакт"
Добавьте в манифест колонку тип, примерно так:
[javascript]
"ModelDataImportConfig": [
{
"Name": "Contact",
"SyncColumns": [
"Name",
"Account",
"Department",
"JobTitle",
"Photo",
"Type"
]
}
]
[/javascript]
После чего лучше очистить кеш и пересинхронизироваться

Спасибо Вам большое!!!!!

Действительно данные по колонкам не забирались для таблицы контакт!

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