Вопрос

Добрый день!

Возможно кто-нибудь ранее сталкивался с проблемами в мобильном приложении на iOS. Приложение постоянно намертво зависает при создании/редактировании активностей. Очистка кэша помогает ровно до первого раза. Пользователи устройств на android таких проблем не испытывают. С интернетом и свободным пространством на телефоне проблем нет.

Десктопная версия BPM 7.12, мобильная 7.13.

Чем могут быть вызваны проблемы в мобильном приложении на iOS? Может ли кто-нибудь посоветовать метод борьбы с данными проблемами? 

У меня такой же вопрос

2 комментария

В мобильной версии наблюдались проблемы с утечками памяти для разных версий iOS, и они исправлялись обновлением на iOS 12.

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

И как итог, для того, чтобы локализировать причины проблем с прозводительностью необходимо учитывать следующие факторы:

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

Мотков Илья,

Спасибо за ответ!

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Коллеги столкнулся с такой проблемой, не находит некоторые схемы - http://prntscr.com/mugxfw
Схемы добавлены в манифест рабочего места - http://prntscr.com/mugxx2
Подскажите что делаю не так?

У меня такой же вопрос

1 комментарий

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

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Есть возможность унаследоваться от сгенерированных страниц своих разделов в мобильном приложении? И как это сделать, если это возможно.

У меня такой же вопрос

1 комментарий

Что именно вам необходимо сделать? Реализовать свою бизнес-логику в карточке вашего раздела?

От авто-сгенерированных классов страниц нельзя наследоваться. 

Как можно замещать страницу просмотра в разделе контакты:

Нужно создать схему UsrMobileContactPreviewPage. В которой вы опишите классы (controller/view) своей страницы, которые будут наследоваться от базовых классов страницы.

Пример можно посмотреть в схеме: Mobile -> MobileContactPreviewPage

Затем вам нужно будет прописать имя этой схемы в соответствующей секции в манифете мобильного приложения:

"Models": {
   "Contact": {
      "Preview": "UsrMobileContactPreviewPage"
Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос
Вопрос: как правильно настраивается отображение справочных полей из связанных таблиц?
На карточке заключения заявки отображаю собственника заявки, указав
"columnName": "MSPApplication.Owner":

{
   "operation": "insert",
   "name": "settings",
   "values": {
      "entitySchemaName": "MSPApplicationConclusion",
      "items": [],
      "subtitleItems": [],
      "groupItems": [],
      "settingsType": "GridPage",
      "operation": "insert"
   }
},
{
   "operation": "insert",
   "name": "Owner",
   "values": {
      "row": 2,
      "content": "Ответственный",
      "columnName": "MSPApplication.Owner",
      "dataValueType": Terrasoft.DataValueType.Lookup,
      "operation": "insert"
   },
   "parentName": "settings",
   "propertyName": "groupItems",
   "index": 2
}

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

Проблема в том, что в base-preview-page-controller.js выдает ошибку в базовом методе

onPreview: function(recordId, field) {
        var columnName = field.getName();
        var parentComponent = field.getParent();
        var parentModel;
        if (parentComponent && parentComponent.isDecorator) {
            parentComponent = parentComponent.getComponent();
            parentModel = (parentComponent && parentComponent instanceof Terrasoft.ViewField) ?
                parentComponent.getRecord().self : null;
        } else {
            parentModel = (parentComponent && parentComponent instanceof Terrasoft.ViewEmbeddedDetailItem) ?
                parentComponent.getRecord().self : null;
        }
        var model = parentModel || this.self.Model;
        var columnConfig = model.ColumnConfigs.get(columnName);
        Terrasoft.util.openPreviewPage(columnConfig.modelName, {recordId: recordId});
    },
из-за того, что columnConfig undefined.

Как настроить columnConfig? 

У меня такой же вопрос

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

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

scr_mobile_wizard_new_column.png

Зверев Александр,

     Александр, приведенный Вами пример относится к "встроенной детали"(через пункт меню "Настроить страницу" - добавить встроенную деталь)
     Мне же нужно добавить деталь в мастере, используя меню "Настроить детали". И в мастере можно  настроить только колонки для связи схем.
Поэтому gridPage и recordPage детали нужно настраивать программно.

 

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

я не нашел ни одного такого примера в базовом пакете Mobile,
поэтому и задал вопрос тут.
 

По ссылке была вообще статья по редактированию основной карточки раздела. По деталям, встроенным и обычным, есть соседняя статья.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день.

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

record.changeProperty("ColumnName", {
    isValid: {
        value: isValid,
        message: columnMessage
    }
});

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

Есть возможность как-то решить данную проблему, желательно не модифицируя сам объект.

У меня такой же вопрос

3 комментария

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

Зверев Александр,

Обязательность дефолтными правилаи проверяется как раз после выполнения пользовательских правил. Из-за чего моя проверка не учитывается: если значение имеет неверный формат, но поле заполнено, то после отработки всех правил оно всё равно считается верно заполненным.

У своего правила можно задать position, чтобы выполнялось после других.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Не нашел инструкции как настроить отображение времени начала календаря в мобильном приложении, чтобы отображение было как в веб-интерфейсе. 

У меня такой же вопрос

3 комментария

Что такое «время начала календаря»? От сотворения мира?

Зверев Александр,

в представлении Расписание  время начала дня. Обычно это 8 или 9 утра. В моб приложении день начинается с 0 часов дня.  

Стандартно есть только переключение между днём и неделей, время начала дня не настраивается.

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

Войдите или зарегистрируйтесь, чтобы комментировать
Публикация

Симптомы

Суть проблемы: в чешской локализации невозможно добавить стандартную деталь. При сохранении изменений в консоли ошибка «Cannot read property 'name' of undefined» (версия 7.7).

 Кейс 1:

- открываем в мастере мобильного приложения «Настроить детали» в разделе «Заказы» (Objednбvky).

 

- добавляем деталь «Продукт в заказе» (Produkt v objednбvce)

 

- в результате добавления детали «Продукты в заказе» в дизайнере мобильного приложения происходит свал:

 

Если опять перейти в настройки детали, то caption этой детали не отображается.

 

Кейс 2:

- в мастере мобильного приложения открыть настройки стандартной детали, например, раздела «Контрагенты» (Firmy)

 

- ничего не добавляем, а только необходимо нажать на кнопку сохранить;

 

- заново открываем настройки детали раздела «Контрагенты».  Увидим, что caption снова не отображаются. Снова нажимаем на сохранить.

 

- в результате возникает такая же ошибка.

 

Доп. информация:

- На русской и английской локализации не удается воспроизвести ошибку.

- В 7.8 не удалось воспроизвести, так как нет демки с чешской локализацией.

- При создании детали нормально формируется код:

{
    "operation": "insert",
    "name": "settings",
    "values": {
        "entitySchemaName": "Order",
        "details": [],
        "columnSets": [],
        "localizableStrings": {
            "primaryColumnSetOrder_caption": "Zбkladnн informace",
            "OrderProductDetailV2StandartDetailOrder_caption": "Produkt v objednбvce"
        },
        "settingsType": "RecordPage",
        "operation": "insert"
    }
},

но у самой локализационной строки OrderProductDetailV2StandartDetailOrder_caption значение пустое. Если же туда добавить руками Produkt v objednбvce, то на странице перечня деталей карты Заказ мобильного приложения название появляется. Если же мы будем добавлять деталь сразу на страницу - то тоже самое сначала название детали видно, но после ее конфигурирования, сохранения страницы и повторного ее открытия видим undefined вместо названия. При этом никаких ошибок ни в консоли, ни в запросах нет.

Решение

Для решения проблемы необходимо:

1)      Создать замещающий клиентский модуль(Nahrazující uživatelský modul) для схемы «Mobile app module - Section designer»

Внутри написать такой код:

define("MobileSectionDesignerModule", [],
    function() {
        return {};
    }
);
Ext.define("Terrasoft.MobileDesignerSchemaManager.override", {
    override: "Terrasoft.MobileDesignerSchemaManager",
    statics: {
        getCultureValues: function(value) {
            var res = this.callParent(arguments);
            res["cs-CZ"] = value;
            return res;
        }
    }
});

 

2)      После чего, удалить проблемный раздел из конфигурации:

А) Удалить схемы

UsrMobileOrderActionsSettingsDefaultWorkplace

UsrMobileOrderGridPageSettingsDefaultWorkplace

UsrMobileOrderProductActionsSettingsDefaultWorkplace

UsrMobileOrderProductGridPageSettingsDefaultWorkplace

UsrMobileOrderProductRecordPageSettingsDefaultWorkplace

UsrMobileOrderRecordPageSettingsDefaultWorkplace

 

Б) В манифесте MobileApplicationManifestDefaultWorkplace

Удалить локализируемую строку OrderSectionTitle

И в блоке "Modules" удалить "Order"

3)      И снова добавить раздел и деталь  через дизайнер.

Поделиться

0 комментариев
Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Доброго времени!

Возникла необходимость фильтрации записей в детали "UsrProductInAccount" раздела Контрагенты "Account". Данная деталь отображена в манифесте

"Models": {
        "UsrProductInAccount": {
            "RequiredModels": [
                "UsrProductInAccount",
                "Account",
                "Product",
                "SocialMessage"
            ],
            "ModelExtensions": [],
            "PagesExtensions": [
                "UsrMobileUsrProductInAccountActionsSettingsFieldForceWorkplace",
                "UsrMobileUsrProductInAccountGridPageSettingsFieldForceWorkplace",
                "UsrMobileUsrProductInAccountRecordPageSettingsFieldForceWorkplace",
                "UsrMobileProductInAccountConfig"
            ]
        }
    }

Созданный модуль "UsrMobileProductInAccountConfig" отобразил в манифесте и прописал сам фильтр. Фильтр исключает все записи с заполненным реквизитом "UsrDateSale".

Terrasoft.sdk.Module.addFilter("UsrProductInAccount", Ext.create("Terrasoft.Filter", {
    name: "UsrProductInAccountFilter",
    type: Terrasoft.FilterTypes.Group,
    subfilters: [
            Ext.create("Terrasoft.Filter", {
                property: "UsrDateSale",
                    // Оператор отрицания
                isNot: false,
                    // Не заполнено
                value: null
            })
        ]
    }));

Выполняю синхронизацию. Результат не получен. В чём может быть причина?

Спасибо.

У меня такой же вопрос

1 комментарий

Алексей, здравствуйте!

Это не раздел (Terrasoft.sdk.Module), а стандартная деталь. Соответственно, для нее нужно использовать Terrasoft.sdk.Details. А именно нужно добавить в схему UsrMobileAccountModuleConfig след. код:

 
Terrasoft.sdk.Details.addFilter("Account", "UsrSchema4DetailStandardDetail", {
   property: "UsrDateSale",
   isNot: false,
   value: null
});

В результате к существующей фильтрации детали по родительской записи (по контрагенту) добавится необходимая клиенту фильтрация по колонке UsrDateSale.

Войдите или зарегистрируйтесь, чтобы комментировать
Публикация

Симптомы

Ошибка: у сотрудника не отображается в мобильной версии завершенная активность (визит). Сам же визит отображается в десктопе (представление «Расписание» в активностях). Используется платформа UIv1. Версия приложения 7.6 pharma

Кейс:

  1. Засихронизироваться под пользователем;
  2. Открыть расписание/список активностей за 23.03.2017;
  3. В результате визит «Визит к врачу: ФИО, Адрес, ДЕРМАТОЛОГ» не отображается за 23.03.2017.

Доп. инфа:

В десктопе данный визит есть

Также данная активность если открыть активности контакта врача.

Причина

В этом проекте доработана базовая фильтрация раздела Активности (проектное решение)

Происходит дополнительная фильтрация по НОВЫМ полям «Начало факт» и «Завершение факт»

Примерно такая:

SELECT *
FROM [Activity] AS [Activity]
WHERE 
(
    (
        NOT([Activity].[StatusId] = '4bdbb88f-58e6-df11-971b-001d60e938c6')
        AND
        datetime([Activity].[DueDate]) >= datetime('2017-03-22 22:00:00.000Z')
    )
    OR
    (
        [Activity].[StatusId] = '4bdbb88f-58e6-df11-971b-001d60e938c6'
        AND
        datetime([Activity].[ActualDueDate]) >= datetime('2017-03-22 22:00:00.000Z')
    )
)
AND
(
    (
        [Activity].[StatusId] = '4bdbb88f-58e6-df11-971b-001d60e938c6'
        AND
        datetime([Activity].[ActualStartDate]) <= datetime('2017-03-23 21:59:59.000Z')
    )
    OR
    (
        NOT([Activity].[StatusId] = '4bdbb88f-58e6-df11-971b-001d60e938c6')
        AND
        datetime([Activity].[StartDate]) <= datetime('2017-03-23 21:59:59.000Z')
    )
)

У данной активности

Не заполнено поле «Завершение факт» поэтому она и не попадает в реестр мобильного приложения.

Решение

Заполнить колонку "Завершение факт" и/или "Начало факт" (ActualDueDate или ActualStartDate) тем же значением, что и в колонках "StartDate" и "DueDate" на уровне БД.

Поделиться

0 комментариев
Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Доброго времени!

В строку быстрого поиска в разделе были выведены дополнительные колонки по которым осуществляется поиск. Интересует вопрос как убрать зависимость от регистра?

Спасибо!

У меня такой же вопрос

4 комментария

Есть несколько вариантов обходных решений. 

1. В манифесте выставляем параметр - PreferedFilterFuncType: 'Terrasoft.FilterFunctions.SubStringOf'. 
Поиск станет не чуствителен к регистру. Но и станет искать по подстроке (во всех разделах).

2. Вводим при поиске значок %. 

Проверялось только на английской локализации.

Мотков Илья,

Всё реализовано именно так, как описано в 1 пункте. В результате тестов было замечено, что на Android устройствах, в режимах работы online/offline всё корректно работает. На ios же в online поиске всё отрабатывает корректно, а вот offline чувствителен к регистру.

Мотков Илья,

Причём заметил, что на английской локализации всё корректно, что нельзя сказать про русскую в режиме Offline на ios. 

Спасибо за уточняющую информацию, она будет передана разработчикам.

Войдите или зарегистрируйтесь, чтобы комментировать