Кейс

 У вас в мобильном приложении когда заходишь в раздел итоги, по умолчанию открывается воронка продаж, можно переключиться на активности, но окно потом не закрывается сколько на кнопку закрыть не нажимай!

Цель

Корректная работа кнопки "Закрыть" окно.

Необходимые условия

Понимание, как устроена работа с мобильным приложением на данный момент.

Выполнение

Данное поведения наблюдается в случае, если пользователь нажимает на стрелочку, справа от поля с выпадающим списком. Если открывать окно “Раздел”, нажимая на центр поля, кнопка “Закрыть” работает корректно. 

Изображение удалено.

Нравится

Поделиться

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

Симптомы

'Bpm'online mobile bug report Тип: Terrasoft.ODataItemNotFoundException Сообщение: Элемент Contact не найден 

Тип: Terrasoft.ODataItemNotFoundException 

Сообщение: Элемент Contact не найден 

Дополнительная информация: 

{"error":{"code":"1","message":{"lang":"","value":"Элемент Contact не найден"},"innererror":{"message":"Элемент Contact не найден","type":"Terrasoft.Common.ItemNotFoundException","stacktrace":"   at Terrasoft.Core.Entities.Services.EntityLazyProxy.<>c__DisplayClass7.b__6()\r\n   at Terrasoft.Core.Entities.Services.EntityLazyProxy.<>c__DisplayClass2.<.ctor>b__0()\r\n   at System.Lazy`1.CreateValue()\r\n   at System.Lazy`1.LazyInitValue()\r\n   at Terrasoft.Core.Entities.Services.EntityLazyProxy.SaveChanges()\r\n   at Terrasoft.Core.Entities.Services.ServiceContext.SaveChanges()\r\n   at System.Data.Services.DataService`1.HandleNonBatchRequest(RequestDescription description)\r\n   at System.Data.Services.DataService`1.HandleRequest()"}}}

Причина

Попытка в мобильном приложении открыть запись, которая была удалена в веб-версии приложения.

Решение

Для решения вопроса с ошибкой синхронизации мобильного приложения нужно:

1. Синхронизироваться, убедится, что в настройках стоит корректная дата и время последней синхронизации (соответствует текущему).

2. Выполнить очистку кэша мобильного приложения (нажав на соответствующую кнопку «Очистить кэш». Если такой кнопки внизу не будет, то сперва нужно выполнить демо-вход – соответствующая кнопка внизу под авторизационными данными, после чего уже очистку кэша).

Ниже прикреплен скриншот для наглядности:

Изображение удалено.

 

3. Повторно синхронизироваться.

Также проверьте, что розданы соответствующие права.

Т.е. необходимо очистить кэш и заново провести синхронизацию.

Нравится

Поделиться

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

Вопрос

Как сделать, чтобы колонка была ссылочной? Например, колонка "Контрагент" в разделе "Контакт".

Ответ

По умолчанию пользовательские колонки (колонки через мастер мобильного приложения), которые имеют тип «Справочник» в мобильном приложении не являются ссылочным (нет возможности перейти на страницу редактирования). Например раздел «Обращения» в мобильном приложении не является базовым. Для реализации необходимо добавить в модуль мобильного приложения для раздела  ссылку на поля.

Пример реализации, можете посмотреть в MobileContactModuleConfig (раздел «Контакты»):

Terrasoft.sdk.RecordPage.configureColumn("Contact", "primaryColumnSet", "Account", {
    viewType: Terrasoft.ViewTypes.Preview
});
 

Нравится

Поделиться

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

Вопрос

Как быстро сгенерировать код страницы для мобильного приложения

Можно использовать для:

  • Edit
  • Grid
  • Preview

Ответ

Выполнять в консоли браузера эмулятора 

(new Terrasoft.CodeGeneration.PageCodeGenerator({
    modelName: "Contact", 
    pageType: Terrasoft.PageTypes.Edit
})).generate()

В modelName указываем нужный объект

В pageType  указываем тип страницы: 

pageType: Terrasoft.PageTypes.Grid
pageType: Terrasoft.PageTypes.Edit
pageType: Terrasoft.PageTypes.Preview

Изображение удалено.

В итоге получается:

Terrasoft.LastLoadedPageData = {
    controllerName: "Terrasoft.configuration.ContactEditPageController",
    viewXClass: "Terrasoft.configuration.ContactEditPageView"
};
 
Ext.define("Terrasoft.configuration.view.ContactEditPage", {
    extend: "Terrasoft.view.BaseEditPage",
    alternateClassName: "Terrasoft.configuration.ContactEditPageView",
    config: {
        id: "ContactEditPage"
    }
});
 
Ext.define("Terrasoft.configuration.controller.ContactEditPage", {
    extend: "Terrasoft.controller.BaseEditPage",
    alternateClassName: "Terrasoft.configuration.ContactEditPageController",
    statics: {
        Model: Contact
    },
    config: {
        refs: {
            view: "#ContactEditPage"
        }
    }
});

 

Нравится

Поделиться

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

Симптомы

Bug mobile report:

Type: Terrasoft.SyncException 

Message: В процессе синхронизации произошла ошибка 

Stack trace: 



Type: Terrasoft.FileException 

Message: В процессе записи в файл произошла ошибка 

AdditionalInfo: Имя: BPMonline700/Downloads/6005bfc5-5ea7-42da-82e6-15f5f4c9e80a/счет на оплату #6.pdf

Type: Terrasoft.FileSystemException 

Message: undefined 

AdditionalInfo: Код: undefined 

Data: 4 

Model Name: iPhone8,2 (0x0)

Platform: iOS

Platform Version: 9.2.1

IsOnlineMode: false

UIVersion: 2

ApplicationVersion: 7.7.8

ApplicationMajorVersion: 7.7

ContactId: c41b4784-a414-438c-a846-c5bf418f0056

CultureName: ru-RU

ApplicationRevision: 0

BackgroundSyncMode: 3

WorkplaceCode: DefaultWorkplace

Причина

Данная ошибка возникает из-за того, что в приложении присутствует файл «счет на оплату #6.pdf» (деталь «Файлы и ссылки»), в котором есть спецсимвол «#». В мобильном устройстве на платформе iOS есть ограничения по использованию спецсимволов при передаче запросов/файлов.

Решение

Для исправления необходимо переименовать файл и убрать символ «#». Это можно сделать, например, следующими способами:

- найти прикрепленный файл вручную открывая каждую запись в приложении;

- по ID записи (например, «6005bfc5-5ea7-42da-82e6-15f5f4c9e80a») в БД найти родительский объект, чтобы понять в каком разделе и в какой записи находиться данный файл и также переименовать через БД или на уровне приложения. Для упрощения поиска прикрепил скрипт, который можно выполнить на уровне БД и определить в каком объекте находиться данный файл.  

-- Вхідні параметри - назва та значення стовпчика:
DECLARE @COLUMN_NAME NVarChar(100) = 'Id'
DECLARE @COLUMN_VALUE NVarChar(100) = '6005bfc5-5ea7-42da-82e6-15f5f4c9e80a'
DECLARE @tableName VARCHAR(50)
DECLARE tablesCursor CURSOR LOCAL FORWARD_ONLY STATIC FOR
    -- Запит повертає імена таблиць в БД, у яких є стовпчик @COLUMN_VALUE:
    SELECT table_name = sysobjects.name
    FROM sysobjects
    JOIN syscolumns ON sysobjects.id = syscolumns.id         
    WHERE sysobjects.xtype='U'
    and syscolumns.name = @COLUMN_NAME
OPEN tablesCursor
FETCH NEXT FROM tablesCursor INTO @tableName
WHILE @@FETCH_STATUS = 0
BEGIN  
    -- Якщо в якійсь таблиці є стопчик @COLUMN_NAME зі значенням @COLUMN_VALUE -
    -- вивести ім'я таблиці, запит і кількість рядків у запиті
    EXEC ('DECLARE @recordCount INT;
        DECLARE @quotesChar CHAR = char(39);
        DECLARE @tabChar CHAR = char(9);
        BEGIN TRY
            SET @recordCount =
                (SELECT COUNT(*)
                FROM [' + @tableName + '] where ' + @COLUMN_NAME + ' = ''' + @COLUMN_VALUE + ''')
                IF @recordCount > 0
                    BEGIN                                                 
                        PRINT ''''
                        PRINT ''-- ' + @tableName + ':''
                        PRINT ''     SELECT * FROM ' + @tableName +
                            ' WHERE ' + @COLUMN_NAME +
                            ' = '' + @quotesChar + ''' + @COLUMN_VALUE + ''' + @quotesChar + ''''                                          
                        PRINT ''     -- Кількість рядків у запиті: '' + CAST(@recordCount as VARCHAR(5))
                    END
        END TRY        
        BEGIN CATCH                                   
        END CATCH;                      
    ');
    FETCH NEXT FROM tablesCursor INTO @tableName
END
CLOSE tablesCursor
DEALLOCATE tablesCursor

Необходимые условия и возможные ограничения

Данная ошибка актуальна для iOS (iPhone)

Нравится

Поделиться

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

Вопрос

Установила в мобильном приложении Automatic Synchronization – Only through Wifi. Скажите, с какой периодичностью запускатся автоматическая синхронизация данных?

 Изображение удалено.

Ответ

Каждый раз при сворачивании приложения синхронизация происходит через 30 сек. И если пользователь активирует снова приложение эта синхронизация останавливается.

Примечание. Из-за специфики операционной системы на Iphone, может останавливать все процессы в фоне приблизительно через 3 минуты. Т.е. если синхронизация не успела завершится в фоне – то она по факту не прошла. 

Нравится

Поделиться

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

Вопрос

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

Пользователь синхронизируется в мобильном приложении, визиты не удаляются. Пользователь делает очистку кэша – визиты удаляются. 

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

Ответ

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



Если вы хотите, чтобы удаление происходило, то для нужных вам моделей, например, модели Активности, нужно включить дополнительную опцию в манифесте "IsAdministratedByRights": true. 



Например: 

{
   "SyncOptions": {
      "ModelDataImportConfig": [
         {
            "Name": "Activity",
            "IsAdministratedByRights": true
         }
      ]
   }
}

Этот признак добавляет в синхронизацию дополнительный шаг, в котором отбирается выборка данных с сервера и сравнивается с выборкой данных, которые есть в мобильном приложении. "Лишние" записи удаляются. Время синхронизации увеличится пропорционально объему выборок, которые нужно сравнить (чем больше будет данных, тем дольше будет проходить синхронизация). 

Нравится

Поделиться

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

Симптомы

Ошибка после перехода к показу презентации в действиях визита

 

Тип: Terrasoft.FileException

Сообщение: В процессе чтения файла произошла ошибка Дополнительная информация:

Имя: https://ourcompany.bpmonline.com/0/ServiceModel/EntityDataService.svc/ActivityFileCollection(guid'71fff37b-3e84-4042-a7bb-ec1b49876e1b')/Data?ForceUseSession=true&X-Terrasoft-Mobile=true

Цепочка вызовов:

failure@file:///var/mobile/Applications/12072E52-5AC6-48DB-B608-A61D72AA7758/Documents/BPMonline700/AppStructure/rev_1/src/MobileUtilities.js?hash=b1e737c2-e66b-4a95-b823-bab46756b5b5:278:38

callback@file:///var/mobile/Applications/12072E52-5AC6-48DB-B608-A61D72AA7758/bpm'online.app/www/appV1/Common/lib/SenchaTouch/sencha-touch-all-debug.js:10397:31

Terrasoft.File.callFailure@file:///var/mobile/Applications/12072E52-5AC6-48DB-B608-A61D72AA7758/bpm'online.app/www/appV1/Common/Terrasoft.Mobile.Combined.js:4418:16

failure@file:///var/mobile/Applications/12072E52-5AC6-48DB-B608-A61D72AA7758/bpm'online.app/www/appV1/Common/Terrasoft.Mobile.Combined.js:4463:20

callback@file:///var/mobile/Applications/12072E52-5AC6-48DB-B608-A61D72AA7758/bpm'online.app/www/appV1/Common/lib/SenchaTouch/sencha-touch-all-debug.js:10397:31

file:///var/mobile/Applications/12072E52-5AC6-48DB-B608-A61D72AA7758/bpm'online.app/www/appV1/Common/Terrasoft.Mobile.Combined.js:4788:18

file:///var/mobile/Applications/12072E52-5AC6-48DB-B608-A61D72AA7758/bpm'online.app/www/plugins/org.apache.cordova.file/www/DirectoryEntry.js:112:22

callbackFromNative@file:///var/mobile/Applications/12072E52-5AC6-48DB-B608-A61D72AA7758/bpm'online.app/www/cordova.js:288:57

file:///var/mobile/Applications/12072E52-5AC6-48DB-B608-A61D72AA7758/bpm'online.app/www/cordova.js:1098:35

nativeEvalAndFetch@file:///var/mobile/Applications/12072E52-5AC6-48DB-B608-A61D72AA7758/bpm'online.app/www/cordova.js:1106:13

nativeCallback@file:///var/mobile/Applications/12072E52-5AC6-48DB-B608-A61D72AA7758/bpm'online.app/www/cordova.js:1095:38

global code@file:///var/mobile/Applications/12072E52-5AC6-48DB-B608-A61D72AA7758/bpm'online.app/www/appV1/MobileApp/MobileMainPage.html:1:47

 

Тип: Terrasoft.FileSystemException

Сообщение: URL к объекту некорректно сформирован Дополнительная информация:

Код: 5

Data: {

"code": 5

}

Причина

Суть проблемы – мы не поддерживаем работу с файлами, содержащими в названии символ слеша (“/”). Поскольку ссылка на статью базы знаний – это, по сути, ссылка на файл, то приложение игнорировало эту ссылку и ничего локально не загружало, что и привело к описанной проблеме.

Решение

Что нужно сделать

- У клиента переименовать статью базы знаний, по которой была проблема;

- В приложении мы сейчас предусматриваем такую ситуацию, и если нужно будет загрузить файл\ссылку на статью базы знаний, то мы просто удаляем из названия «/» и загружаем файл. 

Нравится

Поделиться

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

Вопрос

Как сделать, чтобы раздел "Итоги" не отображался в мобильном приложении

Ответ

Создать кастомную схему (Исходный код) (например, "MobileUtilitiesCustom")

/* Скрытие раздела "Итоги" */
 
Terrasoft.ApplicationUtils.initializeSystemData({
    success: function() {
        Terrasoft.ApplicationConfig.moduleGroups.get("sales").modules.splice(0, 1);
    }
});

В манифесте мобильного приложения (например, "UsrMobileApplicationManifestCustomMobile") указать кастомную схему

{
    "CustomSchemas": [
        "MobileUtilitiesCustom"
    ]
}

 

Нравится

Поделиться

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

Вопрос

Мобильное приложение. Как добавить кнопку "Добавить" в справочное поле у которого нет своего раздела

Ответ

Согласно базовой логике мобильного приложения добавлять новые значения в справочных полях можно только в том случае если для этого поля есть раздел со страницей редактирования (например, поле «Ответственный» и раздел «Контакты»). Для реализации необходимо добавлять отдельную страницу редактирования и необходимые для работы колонки. 

Для реализации необходимо следующее:

Terrasoft.LastLoadedPageData = {
    controllerName: "Terrasoft.configuration.UsrnomberoflidEditPageController",
    viewXClass: "Terrasoft.configuration.UsrnomberoflidEditPageView"
};
 
Ext.define("Terrasoft.configuration.view.UsrnomberoflidEditPage", {
    extend: "Terrasoft.view.BaseEditPage",
    alternateClassName: "Terrasoft.configuration.UsrnomberoflidEditPageView",
    config: {
        id: "UsrnomberoflidEditPage"
    }
});
 
Ext.define("Terrasoft.configuration.controller.UsrnomberoflidEditPage", {
    extend: "Terrasoft.controller.BaseEditPage",
    alternateClassName: "Terrasoft.configuration.UsrnomberoflidEditPageController",
    statics: {
        Model: Usrnomberoflid
    },
    config: {
        refs: {
            view: "#UsrnomberoflidEditPage"
        }
    }
});
  • создать схему, где прописать колонки, которые мы хотим отображать на странице (например, название схемы UsrMobileUsrnomberoflidModuleConfig (настройка колонок в новой странице)):
Terrasoft.sdk.GridPage.setPrimaryColumn("Usrnomberoflid", "Name");
Terrasoft.sdk.RecordPage.addColumnSet("Usrnomberoflid", 
    {
        name: "primaryColumnSet",
        isPrimary: true
    }, 
    [
        {
            name: "Name"
        }
    ]);
Terrasoft.sdk.RecordPage.addColumn("Usrnomberoflid", {
    name: "CreatedOn"
}, "primaryColumnSet");
  • и подключить эти схемы в манифест. например, «UsrMobileApplicationManifestOpportunities»:
"Usrnomberoflid": {
    "Edit": "UsrnomberoflidEditPage",
    "RequiredModels": [
        "Usrnomberoflid"
    ],
    "PagesExtensions": [
        "UsrMobileUsrnomberoflidModuleConfig"
    ]
},

Теперь если Вы нажмете на запись, то откроется информация о записи, если проведете swipe по полю справа налево, то откроется список доступных значений с быстрым фильтром.

Наглядные скриншоты:

Изображение удалено.

Изображение удалено.

Изображение удалено.

 

Нравится

Поделиться

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