Подскажите пожалуйста, можно ли настроить мобильное приложение на создание представления с использованием фильтров и групп?
Такие представления очень хорошо получаются на персональном компьютере. Можно ли что-нибудь подобное сделать и на смартфоне?
На текущий момент в мобильном приложении нет возможности настривать группы, однако Вы можете использовать права доступа и бизнес правила фильтрации для отобращения необходимых записей.
Можно немного поподробней в каком месте использовать права доступа и бизнес-правила фильтрации?
Может быть Вы имеете ввиду настройку мобильного приложения в самой системе?
Правильно ли я понимаю, что такие фильтры необходимо настраивать для какого-то определенного рабочего места, а потом уже его использовать в мобильной версии?
Здравствуйте.
Права доступа вы настраиваете в десктоп-приложении (не мобильном). В зависимости от этих настроек пользователю будет доступен тот или иной набор данных в результате синхронизации. Что касается "бизнес-правил" фильтрации, то настройки такого плана выполняются на уровне конфигурации и уже исходя из специфики поставленной задачи, это может быть применено для определённого рабочего места или пользователя, в частности. С настройкой прав доступа вы можете ознакомиться на ресурсе https://academy.terrasoft.ru, выбрав раздел документация и соответствующий продукт. С вопросами конфигурирования - https://academy.terrasoft.ru/documents/technic-sdk/7-8/dokumentaciya-po…
В релизе 7.11 реализована функциональность быстрой фильтрации в разделах и деталях мобильного приложения. Для поиска нужных записей в разделе (или на детали) можно настроить "быстрый" фильтр по колонкам объекта.
Подскажите, как сделать сортировку по умолчанию в мобильном приложении к примеру: в Продажах по полю "Дата создания" DESC. Т.е. вверху самые новые Продажи.
Коллеги, у кого есть опыт внедрения Field Sales - полевые продажи. Кто может проконсультировать: as is :))))
Вопросы:
1)насколько стабильно работает версия?
2)Действительно ли можно определить местоположение менеджера, у которого на телефоне стоит мобильная версия?
3)Можно ли отслеживать маршрут машины с менеджерами в реальном времени? Т.е. у меня 20 менеджеров уехали. хочу посмотреть всех 20 - где они сейчас?
все вопросы касаются коробки. Спасибо.
"Милова Марина Федоровна" написал:1)насколько стабильно работает версия?
Острая тема для открытого раздела :)
"Милова Марина Федоровна" написал:2)Действительно ли можно определить местоположение менеджера, у которого на телефоне стоит мобильная версия?
3)Можно ли отслеживать маршрут машины с менеджерами в реальном времени? Т.е. у меня 20 менеджеров уехали. хочу посмотреть всех 20 - где они сейчас?
И такое там заявлено? Я как бы для саморазвития интересуюсь, ну и тему поднять заодно вверх...
Думал, там только при использовании мобильного приложения можно сделать чекин/чекаут с передачей координат в систему, а вот чтобы у девайсов централизованно с сервера запросить данные об их положении?
Функционал полевых продаж стабилен в использовании, в чем, собственно, Вы можете убедится, заказав себе на месяц бесплатную триальную версию продукта Sales Enterprise на нашем сайте terrasoft.ru
Что касается второго и третьего вопроса, то, как и сказал ранее Александр, данный функционал в системе не заявлен. По координатам Вы можете отслеживать где находился менеджер в момент чек-ина (действительно ли он был на точке), а маршрут строится сразу при планировании этих визитов.
Подробная информация по работе данного функционала описана в руководстве пользователя в соответствующем разделе: https://academy.terrasoft.ru/documents/sales-enterprise/7-8-0/funkciona…
Реализовали в качестве фичи для домашней системы в мобайле. Добавили вторую кнопочку для звонков через Zoiper . Очень удобно. Если будут вопросы, пишите.
Есть ли примеры добавления вкладки (возможно через Terrasoft.sdk.RecordPage.addColumnSet ) в мобильном приложении 7.X и настройки правил видимости, к примеру: если тек.дата больше даты начала Активности и пользователь есть в участниках Активности...
Мобильное приложение не поддерживает несколько вкладок на странице просмотра/редактирования.
Если вам необходимо делать видимой группу колонок в зависимости от значений полей записи,
то можно добавить в пользовательскую схему примерно такой код:
Ext.define("CustomContactPreviewPage.Controller", {override:"ContactPreviewPage.Controller",
onLoadRecord: function(record){this.callParent(arguments);
var view =this.getView();
var panel = view.getPanel();
var account = record.get("Account");
var accountId = account && account.getId();
var panelItems = panel.getItems();for(var i =0, ln = panelItems.getCount(); i < ln; i++){
var item = panelItems.items[i];if(item.id==="Contact_Preview_ContactCommunicationDetailEmbeddedDetail_ColumnSet"){
var isItemHidden = item.getHidden();if(accountId ==="5aa4ace7-bfef-4fd0-ab0c-b7d5711d9e27"){if(!isItemHidden){
item.setHidden(true);}}elseif(isItemHidden){
item.setHidden(false);}}}}});
*пример для версий 7.6
либо версии 7.7 с сис.настройкой MobileApplicationMode = UIV1
"Кривонос Максим" написал:Если вам необходимо делать видимой группу колонок в зависимости от значений полей записи
Спасибо, Максим!
Именно группа колонок внутри ColumnSet. Но есть нюанс, в item.id вижу "ext-tscolumnset-38" (цифры всегда разные) и оно никак не связано с объявленным title:
Например у Активности есть поле Участок (справочник) и у Контакта есть такое поле Участок. Нужно чтобы Активность загружалась если её участок совпадает с участком указанным в Активности
Здравствуйте.
Вы пишите "Нужно чтобы Активность загружалась если её участок совпадает с участком указанным в Активности" - это как понимать?
Опишите пожалуйста детальней - что ожидается увидеть на выходе. какой бизнес-кейс решается?
Есть Пользователь П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, который означает "закрытие".
Добавляю в манифест фильтр:
"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"},
Пробовал и так и сяк, при синхронизации в мобиле выдает ошибку.
Пробовал еще такой фильтр:
В данном случае ошибок при синхронизации не выдает, но и он тупо не работает.
Подскажите что не так делаю, и вообще объясните моменты с 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 со след кодом:
Виктория здравсвуйте.
Что значит "автоматическую синхронизацию"?
Опишите пожалуйста функционал который Вы бы хотели видеть и чем не подходят текущие настройки.
Здравствуйте!
Руководитель компании хочет, чтобы после входа в приложение каждые 5 минут происходила синхронизация без нажатия на кнопку, сама по себе.
Возможно ли такое?
И в каком модуле нужно прописывать код?
Все-таки Online синхронизация не подходит, потому что без доступа к интернету не будет возможности создавать и просматривать записи. А нам этот вариант не подходит.
Все-таки возможно ли реализовать автоматическую синхронизацию?
И в какой схеме нужно прописать код?
А правильно ли я понимаю, что для реализации автоматической синхронизации, мне необходимо использовать setInterval и clearInterval?
При чем при загрузке приложения стартовая страница это раздел Лиды.
То есть можно при инициализации страницы реестра вызвать setInterval?
А нужно ли вызывать clearInterval или после выхода из системы он сам автоматически завершится?
И получается мне нужно переопределить страницу грида?
Или автоматическую синхронизацию можно реализовать по-другому?
1. Да, для того, чтобы синхронизация запускалась через какой-то период, можно использовать setInterval().
2. Да, можно сделать этот запуск на инициализации страницы реестра Лида, если у Вас гарантированно эта страница открывается при старте.
3. clearInterval() вызывать не обязательно.
4. Да, как вариант, можно реализовать подобное на инициализации реестра Лида. Контроллер будет выглядеть примерно так:
Но нужно понимать следующее:
- Поскольку Javascript - однопоточный, то и синхронизация будет выполняться в основном потоке приложения. Это может привести к тому, что в случае обращения к одному и тому же объекту приложение будет "тупить". Т.е. если пользователь пытается найти Контакта и в этот же момент синхронизация тоже будет обращаться к Контактам (например, будет добавлять новые записи в этот объект), то UI приложения будет тормозить\зависать, пока сохранение не завершится.
- В приведенном выше коде после выполнения синхронизации осуществляется рестарт приложения (Terrasoft.core.redirectToMainPage();). Обычно мы это делаем для того, чтобы конфигурационные изменения, загруженные в ходе синхронизации, применились (например, Вы добавили новую колонку в карточку редактирования и хотите, чтобы у всех пользователей это изменение появилось). Но в Вашем случае, возможно, этого делать не нужно (пользователям вряд ли понравится, что приложение вдруг взяло и перегрузилось).
- Если Вам нужно просто передавать данные в bpm'online, то достаточно указать свойство exportOnly
Возможно Вам будет удобней включить online-режим для мобильного приложении?
Тогда все изменения будут моментально отображаться/передаваться на сервер.
(Правда для его работы на устройсвах необходим будет постоянно интернет)
А где включается online-режим для мобильного приложения?
А если интернет пропадет и в этот момент добавят 2 записи, а после того, как интеренет появится, добавят 3-ю запись, что произойдет с первыми 2?
Или если не добавят 3-ю запись, а просто появится интернет, 2 записи будут переданы на сервер?
Включается в системной настройке "режим работы мобильного приложения"
Если нет интернета вы не сможете создать ни одной записи. впрочем как и прочитать.
Правильно ли я понимаю, что для того, чтобы синхронизация происходила после сохранения записи, мне нужно переопределить страницу редактирования Лида и на onSaved написать вызов синхронизации?
Или это делается по-другому?
Подобное можно реализовать как минимум двумя способами.
1. Как Вы о писали, можно переопределить страницу редактирования Лида и в контроллере на обработчике onDataSavedSuccessfully() реализовать запуск синхронизации. Этот обработчик срабатывает как-раз после того, как данные сохранены.
2. Второй способ - подписаться на события самой модели и уже там реализовать нужную Вам функциональность. Плюс этого подхода - код будет срабатывать всегда на соотв. событие, вне зависимости от того, открывали Вы вообще страницу редактирования Лида или нет. Пример подобной реализации можно подсмотреть в схеме MobileActivityModelConfig. Такая подписка будет выглядеть примерно так:
Так захотел руководитель компании.
Хочет, чтобы в мобильном приложении в настройках остались только кнопки синхронизация и очистить кеш.
Скажите, такое возможно? И как это реализовать?
Хорошо, спасибо, сейчас попробую.
Вы можете подсказать, как скрыть все в разделе настройки, кроме кнопок синхронизация и очистить кеш или это займет у Вас много времени?
Создала новое поле справочник UsrAgent (выбор из контактов). Возможно ли настроить фильтрацию этого поля в мобильном приложении, чтобы выбирались только контакты нашей компании с типом агент?
И в какой схеме это реализовывать?
Здравствуйте!
Не поняла, где именно это реализовывать.
Я создала через мастер мобильного приложения свое рабочее место "Агенты" и поместила туда раздел Лиды.
В Лиде есть новое поле справочник UsrAgent (выбор из контактов). Хотела бы его отфильтровать, чтобы при выборе из справочника были только контакты нашей компании с типом агент, наподобие ответственного в любых карточка BPMonline.
Но обратила внимания, что поле ответственный, например, в документе в мобильном приложении не фильтруется (хотела посмотреть пример реализации).
Скажите, возможно ли фильтровать поле в мобильном приложении?
и в какой именно схеме нужно делать изменения?
Начала разбираться в мобильном приложении, заметила, что обязательность и фильтрация полей написаны для раздела активности в MobileActivityModelConfig (я так поняла, что это модуль)
Мне нужно сделать фильтрация для полей раздела Лид. Нашла MobileLeadModelConfig (но написана она, как исходный код).
Заместить я ее не могу, так как нет в списке замещения и новую создать точно такую же не могу, потому что пользовательские схемы должны начинаться с Usr.
И как мне быть? Получается, что это ошибка системы? Как выйти из этой ситуации?
Добрый день, Виктория
Для решения Вашей задачи необходимо:
Желательно создать отдельную схему с типом «Модуль»
И назвать ее так «UsrMobileLeadModelConfig» (чтоб она соответствовала базовым стилям именования файлов).
Затем эту схему необходимо подключить в манифесте:
- Создаем/Открываем схему UsrMobileApplicationManifestDefaultWorkplace
- Добавляем в блок Models такой код:
Здравствуйте!
Весь день пробую код, который вы написали.
Заметила, что если в блоке "Models" добавить в "PageExtensions", то при синхронизации возникает ошибка, поэтому (по примеру в коде) добавила в "ModelExtensions" и проверила на обязательности этого поля, все срабатывает.
Terrasoft.sdk.Model.addBusinessRule('Lead', {
ruleType: Terrasoft.RuleTypes.Requirement,
triggeredByColumns: ['UsrAgent']
});
Но фильтрация не работает, пустой список, пробовала и просто по Account и по двум, пустой список и все.
Почему не работает фильтрация?
Почему пустой список хотя в sql с этими id есть 2 записи и в приложении на компе тоже 2 записи, а в мобильном приложении пусто?
Значение name: "filterName" должно быть любым или определенным? Или в чем-то другом причина?
Да, это она.
modelName - имя связанной таблицы.
assocProperty - имя колонки по которой связанная таблица ссылается на фильтруемую таблицу.
Это не обычный фильтр, а фильтр по обратным связям.
Он означает следующее: Берем всех контактов для которых существует запись в таблице SysAdminUnit которая ссылается на контакта через свое поле SysAdminUnit.Contact
Значение name: "filterName" может быть любым
Указанный пример должен работать.
Попробуйте еще такой пример: