Вопрос

Добрый день.
Настраиваю мобильное приложение и столкнулся со следующей ситуацией.

Настройки часовых поясов: 

В профиле пользователя, от которого произведен логин в мобильное приложение +3 часа.
На мобильном устройстве +3 часа.

Добавляю запись через мобильное приложение со следующими значениями:

После сохранения записи, выхода в основное меню и повторного открытия этой записи значения оказываются следующими:

В основном приложении значения:
Дата подачи: 20.12.2017 9:28
Дата начала командировки: 19.12.2017
Дата окончания командировки: 19.12.2017

Что можно с этим сделать?

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

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

Искандер, здравствуйте!

Уточните, пожалуйста:

- версию мобильного приложения;

- версию приложения bpm'online;

- какой конкретно (название) часовой пояс стоит в мобильном устройстве и в приложении;

- в каком разделе создаете запись;

- какой режим (offline/online) мобильного приложения используется;

- какую версию платформы Вы используете (UIv1/UIv2).

Вильшанский Дмитрий,

Версия мобильного приложения: 7.11.7
Версия приложения  7.11.0.3122
Часовой пояс в мобильном приложении определяется автоматически (GMT+03:00 Москва, стандартное время)
Запись создаем в новом разделе (раздел создан в рамках проекта)
Режим приложения - Онлайн
Использовать мобильный интерфейс V2 : да

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

Добрый день. Подскажите пожалуйста как добавить возможность загружать файлы через мобильное приложение.

В академии есть инструкция для настройки embeded детали. Но мне бы хотелось сделать обычную деталь.

Спасибо

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

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

Здравствуйте.
Что в Вашем понимании "обычная" деталь?
В мобильном приложении есть два типа деталей: встроенные (например, адреса, средства связи и т.д.) и стандартные (Активность в контакте и прочие, сюда же входят детали с редактируемым реестром).
В инструкции на данный момент представлена наиболее удобная для разработчика и пользователя реализация встроенной детали "Файлы и ссылки" из возможных. Пользователь нажимает "Добавить" и может сделать фото с камеры, прикрепить картинку с галереи или добавить файл.
Помимо инструкции можете также посмотреть реализацию данной детали в пакете Mobile.

Добрый день!

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

Хочу отметить, что загруженные записи отображаются на страницы записи, а не на отдельной странице - http://prntscr.com/hpzz3r.

Вопрос: чем Вам не подходит встроенная деталь?

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

Добрый день.

Можно ли как то задавать значения по умолчанию для полей в мобильном приложении?
Хочется сделать предзаполнение полей  (в идеале даже не выводить их в интерфейс мобильного приложения), например заполнить "дату подачи" текущей датой, и поле "поле канал поступления" указать "мобильное приложение".

Можно ли такое сделать и если можно, то как?

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

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

Добрый день.

Для того, чтобы задать значение по умолчанию для поля при создании записи, можно использовать SDK модели:

Terrasoft.sdk.Model.setDefaultValuesFunc("НазваниеМодели", function(config) {
    var myValue = "Мобильное приложение";
    config.record.set("НазваниеКолонки", myValue);
    Ext.callback(config.success, config.scope);
});

Скрыть колонку тоже можно. Теперь используем SDK страницы:

Terrasoft.sdk.RecordPage.addColumn("НазваниеМодели", {
    name: "НазваниеКолонки", // название колонки как в объекте
    position: 0,
    hidden: true // Здесь скрывается колонка
}, "primaryColumnSet");

Значения должны записываться, несмотря на скрытость колонки.

Больше примеров можете найти в пакете Mobile в схемах MobileActivityModelConfig и MobileActivityModuleConfig соответственно.

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

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

1. Можно ли использовать для детали filterMethod, как в основной версии, или каким-либо образом использовать произвольный фильтр, а не только по колонке родительской страницы?

2. Как отключить возможность добавлять, удалять и редактировать записи детали, в зависимости от значений на родительской странице?

Заранее спасибо.

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

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

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

1. Для деталей можно указывать фильтры, используя метод configure() соотв. sdk-класса:

 

Terrasoft.sdk.Details.configure("Contact", "ActivityDetailV2StandartDetail", {
   filters: Ext.create("Terrasoft.Filter", {
      type: Terrasoft.FilterTypes.Group,
      subfilters: [
         Ext.create("Terrasoft.Filter", {
            compareType: Terrasoft.ComparisonTypes.NotEqual,
            property: "Type",
            value: Terrasoft.GUID.ActivityTypeEmail
         })
      ]
   })
});

2. В целом, изменение режима работы детали делается так:

Terrasoft.sdk.Details.setChangeModes("Contact", "ActivityDetailV2StandartDetail", [Terrasoft.ChangeModes.Read]);

Но если нужно менять режим работы от условия, то для этого в контроллерах страниц есть метод getChangeModes(). Т.е. в контроллерах соотв. страниц (грида, просмотра, редактирования) нужно расширить этот метод:

 

getChangeModeOperations: function() {
   var detailConfig = this.getDetailConfig();
   if (detailConfig) {
      var parentRecord = detailConfig.parentRecord;
      if (parentRecord.get("IsNonActualEmail") === false) {
         return {
            canCreate: false,
            canUpdate: false,
            canDelete: false
         };
      }
   }
   return this.callParent(arguments);
}
Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

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

Потому начал создавать грид по аналогии из FieldForceMobileActivitySKUGridPage и настроил конфиг по аналогии с FieldForceMobileActivitySKUModuleConfig, подключил схемы в манифесте для детальки 
MyDetailSchema: {

"Grid": "MyGridPage",

PagesExtensions: [

"MyGridConfig"

]

}

Но теперь, при открытии детали в мобилке выдает ошибку: 'caption' undefined, что я не так сделал? Или чего мне не хватает? В схеме грида тайтл подключен через переопределенный метод getCustomTitle (думал что из-за него - нет)

 

И еще, чтобы не создавать отдельную тему. Как можно в Embedded детали вывести чекбос? Справочные/текстовые/числовые/дату поля отображает без проблем, а логическую не грузит вовсе (причем без ошибок, просто не отображает)

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

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

Добрый день, 

Относительно Embedded детали: текущая логика приложения по работе с карточками Preview работает таким образом, что "пустые" колонки отображаются только в режиме редактирования. Значение false для булевой колонки сейчас воспринимается, как отсутствие значения. Это можно проверить таким образом: добавьте на деталь запись, у которой булевое поле будет true - и оно отобразится на карточке просмотра. 

Мы зарегистрировали пожелание по доработке этой функциональности в базовом продукте. Так как false может сам по себе нести определенный бизнес-смысл для булевой колонки. 

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

Есть страница реестра, код которой примерно такой.

Ext.define("MyObjectPage.View", {
    extend: "Terrasoft.view.BaseGridPage.View",
    xtype: "myobjectgridpage",
    config: {//Конфиг
    }
    //...
});
 
Ext.define("MyObjectGridPage.Controller", {
    extend: "Terrasoft.controller.BaseGridPage",
    //методы и т.д.
});

Требуется расширить имеющиеся классы view и controller, не создавая новые. Пробовал добавить следующий код:

Ext.define("MyObjectGridPage.View", {
    override: "MyObjectGridPage.View", 
    //Остальное...
});
 
Ext.define("MyObjectGridPage.Controller", {
    override: "MyObjectGridPage.Controller", 
    //Остальное...
});

Подключал по разному в манифесте: свойство "Grid" или массив "PagesExtensions" для модели нужного объекта, добавлял в "CustomSchemas". Всё время получаю ошибку:

Uncaught TypeError: Cannot read property 'singleton' of null

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

Что я мог упустить? Как можно повлиять на порядок загрузки кодов, чтобы выполнился сначала основной код класса, затем мои расширения? 

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

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

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

  1. Мы рекомендуем не использовать override для расширения возможностей существующих классов. Для этих целей можно использовать extend.
  2. Для решения вашей задачи необходимо:
  • добавить свои классы, которые будут расширять существующие классы грида (view и контроллер)
  • указать эти новые классы в переменной Terrasoft.LastLoadedPageData, использующейся при навигации страниц (по сути, в ней хранится связь view и controller)
  • указать в манифесте вашу новую схему с реализацией своих классов в секции Models для соотв. модели в параметре «Grid»
  • указать там же в свойстве PagesExtensions ту базовую схему, которую вы расширяли

Возьмем, к примеру, view карточки реестра раздела «Лента». Схема, описывающая view, называется MobileSocialMessageGridPageView и соотв. класс называется SocialMessageGridPage.View.

  1. Создадим свою схему MySocialMessageGridPage. В нее добавляем след. код:

 

Terrasoft.LastLoadedPageData = {

controllerName: "SocialMessageGridPage.Controller",

viewXType: "mysocialmessagegridpageview"

};

 

Ext.define("Terrasoft.configuration.view.MySocialMessageGridPage", {

alternateClassName: "MySocialMessageGridPage.View",

extend: "SocialMessageGridPage.View",

xtype: "mysocialmessagegridpageview",

 

config: {

 

myButton: true

 

},

 

/**

* @protected

* @virtual

* @cfg-applier

*/

applyMyButton: function(newButton) {

if (!newButton) {

return false;

}

var config = {

style: "background: red; width: 32px; height: 32px;"

};

return Ext.factory(config, "Ext.Button", this.getMyButton());

},

 

/**

* @protected

* @virtual

* @cfg-updater

*/

updateMyButton: function(newButton, oldButton) {

if (newButton) {

var myButton = this.getMyButton();

this.add(myButton);

}

}

 

});

В этом расширении класса SocialMessageGridPage.View мы добавили свою красную кнопку, которая будет добавлена в «Ленту». При этом основные моменты в этом классе выделены красным. Т.е. помимо того, что мы расширили существующий класс (extend: "SocialMessageGridPage.View"), мы еще указали свой xtype (xtype: "mysocialmessagegridpageview"). И затем в Terrasoft.LastLoadedPageData указали его, сказав тем самым, что при открытии грида нужно использовать нашу новую view (контроллер при этом будет использоваться базовый, но вы можете его расширить и указать самостоятельно).

  1. Изменения в манифесте будут следующими:

 

{

"Models": {

"SocialMessage": {

"Grid": "MySocialMessageGridPage",

"PagesExtensions": [

"MobileSocialMessageGridPage"

]

}

}

}

 

В итоге результат будет таким (в левом верхнем углу карточки видна красная кнопка):

 

 

Вильшанский Дмитрий,

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

Uncaught TypeError: Cannot read property 'getName' of undefined
    at Class.getModelName (ApplicationConfig.js:189)
    at Class.getModelConfig (ApplicationConfig.js:203)
    at Class.getConfig (GridPage.sdk.js:24)
    at Class.beforeInitializeGrid (BaseGridPageController.js:226)
    at Class.doFire (sencha-touch-all-debug.js:15417)
    at Class.fire (sencha-touch-all-debug.js:15344)
    at Class.doDispatchEvent (sencha-touch-all-debug.js:15842)
    at Class.dispatchEvent (sencha-touch-all-debug.js:15823)
    at Class.doFireEvent (sencha-touch-all-debug.js:16188)
    at Class.fireEvent (sencha-touch-all-debug.js:16142)
    at Class.beforeinitialize (BaseGridPageView.js:75)
    at Class.doFire (sencha-touch-all-debug.js:15417)
    at Class.fire (sencha-touch-all-debug.js:15344)
    at Class.doDispatchEvent (sencha-touch-all-debug.js:15842)
    at Class.dispatchEvent (sencha-touch-all-debug.js:15823)
    at Class.doFireEvent (sencha-touch-all-debug.js:16188)
    at Class.fireEvent (sencha-touch-all-debug.js:16142)
    at Class.initialize (List.js:566)
    at Class.constructor (sencha-touch-all-debug.js:22965)
    at Class.callParent (sencha-touch-all-debug.js:4715)
    at Class.constructor (sencha-touch-all-debug.js:32881)
    at Class.callParent (sencha-touch-all-debug.js:4715)
    at Class.constructor (Sencha.js:126)
    at Class.callParent (sencha-touch-all-debug.js:4715)
    at Class.constructor (sencha-touch-all-debug.js:54756)
    at Class.callParent (sencha-touch-all-debug.js:4715)
    at Class.constructor (sencha-touch-all-debug.js:70258)
    at new Class (sencha-touch-all-debug.js:5267)
    at eval (eval at getInstantiator (sencha-touch-all-debug.js:7041), <anonymous>:3:8)
    at Object.instantiate (sencha-touch-all-debug.js:7008)
    at Object.instantiateByAlias (sencha-touch-all-debug.js:6920)
    at Object.factory (sencha-touch-all-debug.js:10109)
    at Class.applyGrid (BaseGridPageView.js:80)
    at Class.setter [as setGrid] (sencha-touch-all-debug.js:5541)
    at Class.initConfig (sencha-touch-all-debug.js:4979)
    at Class.constructor (sencha-touch-all-debug.js:22952)
    at Class.callParent (sencha-touch-all-debug.js:4715)
    at Class.constructor (sencha-touch-all-debug.js:32881)
    at Class.callParent (sencha-touch-all-debug.js:4715)
    at Class.constructor (Sencha.js:126)
    at new Class (sencha-touch-all-debug.js:5267)
    at eval (eval at getInstantiator (sencha-touch-all-debug.js:7041), <anonymous>:3:8)
    at Object.instantiate (sencha-touch-all-debug.js:7008)
    at Object.instantiateByAlias (sencha-touch-all-debug.js:6920)
    at Object.factory (sencha-touch-all-debug.js:10109)
    at Class.initializeCacheItem (PageNavigator.js:125)
    at Class.forward (PageNavigator.js:198)
    at Class.success (MainPageController.js:318)
    at Object.callback (sencha-touch-all-debug.js:10397)
    at Class.loadLookupSubColumnsModels (StructureLoader.js:308)
    at Class.success (StructureLoader.js:317)
    at Object.callback (sencha-touch-all-debug.js:10397)
    at Class.loadLookupSubColumnModels (StructureLoader.js:331)
    at Class.success (StructureLoader.js:338)
    at Object.callback (sencha-touch-all-debug.js:10397)
    at Class.loadSchemas (StructureLoader.js:154)
    at Class.loadLookupSubColumnModels (StructureLoader.js:335)
    at Class.success (StructureLoader.js:338)
    at Object.callback (sencha-touch-all-debug.js:10397)
    at Class.loadSchemas (StructureLoader.js:154)
    at Class.loadLookupSubColumnModels (StructureLoader.js:335)
    at Class.loadLookupSubColumnsModels (StructureLoader.js:313)
    at Class.success (StructureLoader.js:224)
    at Object.callback (sencha-touch-all-debug.js:10397)
    at Class.loadSchemas (StructureLoader.js:154)
    at Class.loadGridPageModelDependencies (StructureLoader.js:222)
    at Class.success (StructureLoader.js:196)
    at Object.callback (sencha-touch-all-debug.js:10397)
    at Class.success (StructureLoader.js:145)
    at Object.callback (sencha-touch-all-debug.js:10397)
    at Class.<anonymous> (ScriptLoader.js:158)
    at one (head.js:566)
    at head.js:782
    at head.js:818
    at HTMLScriptElement.process (head.js:914)

Что я мог упустить?

Бершеда Д. Н.,

Так сказать сложно.

Возьмите эмулятор (http://ftp.bpmonline.com/support/downloads/mobile/7.11.7.rar) и поставьте debugger в функцию getModelConfig: function(model) класса Terrasoft.ApplicationConfig

И посмотрите в переменной model что приходит.

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

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

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

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

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

 

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

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

Добрый день. Возникла задача в мобильном приложении обработать выбранный пользователем файл, например, извлечь из него некоторые данные. К сожалению, не могу найти примеры, как это можно было бы сделать. Нужно по нажатию на кнопку открыть окно выбора файла из файловой системы, затем получить содержимое этого файла и считать из него данные. Где можно почитать про это, может есть какие-либо примеры в базовой реализации? Быть может кто-то реализовывал нечто подобное?

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

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

а что это за данные и почему надо читать их именно на мобильном устройстве? просто сами файлы же так или иначе попадают в систему и все обработки и получения атрибутов можно реализовать на серверной стороне

Максим Цынгаев,

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

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

К сожалению, данный кейс нельзя реализовать без отправки файла изначально на север.

Если я корректно понял Ваш кейс, то почему бы не внести правки изначально в файле, а потом уже выполнять заливку.

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

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

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

На отдельной вкладке изменяю модуль-схему. Сохраняю. В эмуляторе жму синхронизация.Происходит синхронизация и перезапуск приложения-эмулятора. Проверяю изменения. И в это время вкладка с модулем-схемой сообщает о системной ошибке.

Сталкивались ли вы с таким поведением? Может это как то лечится?

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

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

попробуйте очистить Redis и перезапустить application pool

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

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

Здравствуйте.
При синхронизации мобильного приложения в оффлайн-режиме во время импорта данных возникает ошибка "Unable to get property 'IsVirtual' of undefined or null reference". Упоминания 'IsVirtual' нашел только в нескольких схемах, не связанных с мобильным приложением. проблема возникает только при синхронизации с пользовательским рабочим местом. Основное рабочее место работает отлично.
Подскажите, пожалуйста, в чем может быть проблема?

Заранее спасибо!

Прикрепленные файлы
Log.txt221 байт
log.png29.71 КБ

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

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

Добрый день, Роман!

Судя по предоставленной информации у Вас используется не последняя версия мобильного приложения. Обновите её пожалуйста и проверьте работу функциональности.

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

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