Например у Активности есть поле Участок (справочник) и у Контакта есть такое поле Участок. Нужно чтобы Активность загружалась если её участок совпадает с участком указанным в Активности
Здравствуйте.
Вы пишите "Нужно чтобы Активность загружалась если её участок совпадает с участком указанным в Активности" - это как понимать?
Опишите пожалуйста детальней - что ожидается увидеть на выходе. какой бизнес-кейс решается?
Есть Пользователь П1 (торговый представитель), с ним связан Контакт К1, у которого есть кастомное поле Участок (типа справочник) со значением У1. Есть задачки (простите Активности!) З1, З2, ...., З99999, у которых кроме всего прочего так же есть кастомное поле Участок из того же справочника. Так вот если нет надобности грузить 99999 задачек, а только те у которых поля Участок совпадают с одноименным полем Контакта, то как построить данный фильтр типа Пользователь.Контакт.Участок = Задачка.Участок.
Понимаю, что для Активности можно обойтись корректной настройкой прав доступа. Но для интеграции деталей (на которые не хочется включать права доступа) такой механизм удобнее.
В етом случае Вас тоит вносить код в секцию ModelDataImportConfig Манифеста мобильного приложения.
Пример фильтрации данных для загрузки описан в документе, приведенном Вами выше:
Активность. Загружаются все колонки. Выполняется фильтрация модели - загружаются только те активности, у которых участником является текущий пользователь.
Николай, спасибо за Ваши ответы, но к сожалению нужной информации в них нет, возможно потому, что я плохо изложил задачу.
Нужно понимание как сделать фильтры по полям и в левой и в правой части выражения сравнения, что-то типа (ActivityAccount - деталь Контрагенты в Активностях):
В Вашем случае необходимо применить вариант решения с использоваием view
1. Создать View (например VwActivityAreaByContactArea) с колонками Активности и Контакта
2. Добавить в конфигурацию скрипт (Подразумевается колонка Участок = Area) и установить
------------------------------------------------------------------------
IF EXISTS (SELECT 1 FROM sys.views WHERE name = 'VwActivityAreaByContactArea')
DROP VIEW dbo.VwActivityAreaByContactArea
go
------------------------------------------------------------------------
CREATE VIEW dbo.VwActivityAreaByContactArea AS
SELECT
a.Id,
a.CreatedOn,
a.CreatedById,
a.ModifiedOn,
a.ModifiedById,
a.ProcessListeners,
a.Id as ActivityId,
c.Id as ContactId
FROM Activity a
JOIN Contact c ON c.Area = a.Area
Where c.Area <> ''
Извините за некропостинг, но может найдется кто, чтобы немного мне объяснить.
Мне надо отфильтровать Обращения, по состоянию, которые НЕ закрыты. Или хотя бы для примера SolutionOverdue, который означает "закрытие".
Добавляю в манифест фильтр:
[javascript]
"SyncFilter": {
"property": "Status",
// Название модели, для которой выполняется фильтрация.
//"modelName": "Case",
// Колонка связанной модели, по которой осуществляется связь с основной моделью.
//"assocProperty": "Id",
//"operation": "Terrasoft.FilterOperations.Any",
"compareType": "Terrasoft.ComparisonType.NotEqual",
//"value": {
//"value": "3e7f420c-f46b-1410-fc9a-0050ba5d6c38",
//"displayValue": "Закрыт"}
"value": "3e7f420c-f46b-1410-fc9a-0050ba5d6c38"
},
[/javascript]
Пробовал и так и сяк, при синхронизации в мобиле выдает ошибку.
Пробовал еще такой фильтр:
[javascript]
"SyncFilter": {
"type:" "Terrasoft.FilterTypes.Simple",
"property": "SolutionOverdue",
"compareType": "Terrasoft.ComparisonType.Equal",
"value": true
},
[/javascript]
В данном случае ошибок при синхронизации не выдает, но и он тупо не работает.
Подскажите что не так делаю, и вообще объясните моменты с modelName и assocProperty - для чего эти значения. Коммент в примере совсем не понятно что имеется ввиду.
Пробовал и так и сяк, при синхронизации в мобиле выдает ошибку.
Пробовал еще такой фильтр:
"SyncFilter": {
"type:" "Terrasoft.FilterTypes.Simple",
"property": "SolutionOverdue",
"compareType": "Terrasoft.ComparisonType.Equal",
"value": true
},
В данном случае ошибок при синхронизации не выдает, но и он тупо не работает.
Подскажите что не так делаю, и вообще объясните моменты с modelName и assocProperty - для чего эти значения. Коммент в примере совсем не понятно что имеется ввиду.
Добрый день, Илья!
Примеры описаны для версии 7.6.
Уточните, пожалуйста, версию системы и мобильного приложения.
Пробовал и так и сяк, при синхронизации в мобиле выдает ошибку.
Пробовал еще такой фильтр:
"SyncFilter": {
"type:" "Terrasoft.FilterTypes.Simple",
"property": "SolutionOverdue",
"compareType": "Terrasoft.ComparisonType.Equal",
"value": true
},
В данном случае ошибок при синхронизации не выдает, но и он тупо не работает.
Подскажите что не так делаю, и вообще объясните моменты с modelName и assocProperty - для чего эти значения. Коммент в примере совсем не понятно что имеется ввиду.
Добрый день, Илья!
Примеры описаны для версии 7.6.
Уточните, пожалуйста, версию системы и мобильного приложения.
7.8
Я уже сделал, но через модуль, создал с именем UsrMobileCaseModelConfig со след кодом:
[javascript]
Terrasoft.sdk.Module.addFilter("Case", Ext.create("Terrasoft.Filter", {
name: "CaseCustomFilter",
type: "Terrasoft.FilterTypes.Group",
subfilters: [
//Не закрытый статус
Ext.create("Terrasoft.Filter", {
name: "CaseStatusFilterValue",
property: "Status",
compareType: Terrasoft.ComparisonTypes.NotEqual,
value: "3e7f420c-f46b-1410-fc9a-0050ba5d6c38"
}),
//Ответственный - текущий пользователь
Ext.create("Terrasoft.Filter", {
name: "CaseOwnerFilterValue",
property: "Status",
compareType: Terrasoft.ComparisonTypes.Equal,
valueIsMacros: true,
value: "Terrasoft.ValueMacros.CurrentUserContact"
}),
//Не отменен статус
Ext.create("Terrasoft.Filter", {
name: "CaseStatusFilterValue",
property: "Status",
compareType: Terrasoft.ComparisonTypes.NotEqual,
value: "6e5f4218-f46b-1410-fe9a-0050ba5d6c38"
})
]
}));
[/javascript]
И затем в манифесте в PageExists подключил этот модуль, и все заработало.