Здравствуйте, уважаемые коллеги.

Вопрос касается мобильного приложения.

Есть ли возможность при открытии стандартной детали миновать реестр и открывать сразу же первую же запись в нём? Изображение удалено.Изображение удалено.Изображение удалено.

Сам так и не разобрался до сих пор. Заранее спасибо за помощь :)

Нравится

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

А что делать если там 2 записи?

Кривонос Максим, это не важно, у меня так то всегда одна запись. Ну проще всего наверное сделать так, чтоб открывалась самая первая запись, даже если их там много

Федоровский Роман Дмитриевич,

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

Кривонос Максим,

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

А каким образом открывать эту запись из поля или кнопки? Как открывать какую-то запись опредленного модуля в JS по айдишнику, или как нибудь так?

Может Вам подойдут разворачиваемые группы колонок?

Кривонос Максим,​​​​​​ да! Это именно то, что мне надо было. Но вообще нигде не нашел информации про подобные группы полей. Не подскажете, где искать? На скриншоте стандартный раздел обращения? Не могу найти

Да, это раздел обращения (MobileCaseModuleConfig)

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

Затем создаете схему UsrMobileMySectionModuleConfig для настройки вашего раздела и пишите там такой код:

Terrasoft.sdk.RecordPage.configureColumnSet("MySection", "MyColumnSet1", {
	alwaysShowTitle: true,
	collapsible: true,
	isCollapsed: true,
	customEditConfig: {
		isCollapsed: false
	}
});

 

Кривонос Максим,

Спасибо большое, это мне очень сильно поможет!

UPD. Хотя проблема остается актуальной. Всё же это группа полей, а мне бы ещё в эту группу полей запихнуть деталей стандартных..

Федоровский Роман Дмитриевич,

такой стандартной возможности нет

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

Всем доброго времени суток. Столкнулся со следующей проблемой:

не всегда обновляется поля в детали продукт в заказе - http://prntscr.com/o0d083

заношу туда данные следующим образом:

setDiscount: function(config){
		var orderProductRecord = Ext.clone(config.model);
		var totalAmount;
		var discountPrice;
		var totalDiscount;
		if (config.discountType ==="personal") {
			totalAmount = config.model.data.TotalAmount;
			discountPrice = this.calculateAmountWithDiscount(totalAmount, config.discount);
			totalDiscount = totalAmount-discountPrice;
			orderProductRecord.set("WaDiscountContact", config.discount, true);
			orderProductRecord.set("WaTotalDiscount", totalDiscount, true);
 
			orderProductRecord.save({
				success: function(){
					Terrasoft.Mask.hide({force: true});
					Terrasoft.PageNavigator.refreshLastPage(); 
				},
				failure: function(exception) {
					Terrasoft.Mask.hide({force: true});
					Terrasoft.MessageBox.showMessage(Ext.String.format(Terrasoft.LS.WaErrorExecutionMessage, exception));
				},
				queryConfig: Ext.create("Terrasoft.QueryConfig", {
					modelName: orderProductRecord.self.modelName,
					columns: ["WaDiscountContact", "WaTotalDiscount"]
				})
			}, this);
		}
	},

Не всегда отрабатывает Terrasoft.PageNavigator.refreshLastPage(); хотя в бд записываются данные.

Нравится

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

Попробовал, Terrasoft.PageNavigator.refreshLastPage() отрабатывает нормально, поле со значением появляется. Возможно, срабатывание не всегда связано с моментом, когда вызывают setDiscount: вдруг карточка в этот момент ещё не загрузилась или что-то подобное.

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

Коллеги, всем доброго времени суток!

В мобильном приложении необходимо логировать некоторые данные. В приложении есть свой логгер -  http://prntscr.com/noti8j

Подскажите где смотреть логи если назначение будет Terrasoft.LogDestination.Analytics?

 

Нравится

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

Логи Terrasoft.LogDestination.Analytics не предназначены для просмотра пользователем. Можно посмотреть только Terrasoft.LogDestination.File, сформировав письмо с отчётом для отправки.

 

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

 Благодарю.

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

Всем доброго времени суток.

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

Создал ModuleConfig, прописал в нем фильтрацию, название модуля добавил в манифест, но при отработке вываливается ошибка - http://prntscr.com/nns86h

 

Terrasoft.sdk.Module.addFilter("Activity", Ext.create("Terrasoft.Filter", {
	property: "Owner",
	value: Terrasoft.CurrentUserInfo.contactId
}));

так же не работает сортировка - http://prntscr.com/nns8sc

 

Terrasoft.sdk.GridPage.setOrderByColumns("Activity", {
	column: "StartDate",
	orderType: Terrasoft.OrderTypes.DESC
});

В чем может быть проблема?

Нравится

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

Судя по тексту сообщения, код пытается сделать вставку (push) элемента в массив, а массив равен null. Где именно и почему это происходит, можно увидеть, открыв скрипты filter.js, sdk-utils.js и module-sdk.js в указанных на экране номерах строк.

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

Здравствуйте, уважаемые коллеги. Возник вопрос по мобильному приложению bpm'online.

Появилась необходимость заметить метод initialize из модуля "Terrasoft.view.BaseGridPage.View".

Сталкивался ли кто-то с подобной задачей? Помогите, пожалуйста. Пробовал создавать модуль, в котором писал extend: "Terrasoft.view.BaseGridPage.View", и подключал его в манифест. Сама схема подгружается, но метод вызывается только из родительской схемы.

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

Нравится

5 комментариев
Лучший ответ

Федоровский Роман Дмитриевич,

Тогда для этой цели используйте override:

Ext.define("Terrasoft.BaseGridPageViewOverride", {
	override: "Terrasoft.BaseGridPageView",
 
	/**
	 * @protected
	 * @overridden
	 */
	initialize: function() {
		/* Your code */
		this.callParent(arguments);
	}
 
});

Только, пожалуйста, обращайте внимание на указанные области видимости методов (ни в коем случае не перекрывайте приватные методы).

Добрый день! Можете описать свою бизнес-задачу? Для какой цели вы хотите заменить initialize() в Terrasoft.view.BaseGridPage.View? Объясню свой вопрос: для ряда задач нет необходимости в расширении базовых классов или их замещению. Например, для изменения стилей страниц можно воспользоваться утилитным методом Terrasoft.util.writeStyles().

S.Kalishenko,

Мне нужно добавить элемент вроде QR-кода на экран, который будет на постоянной основе находиться на экране в момент открытия любого раздела в целях безопасности, для этого я в div главного окна из JS я добавляю автогенерируемый qr-код. Как применять стили страниц я понимаю.

Федоровский Роман Дмитриевич,

Тогда для этой цели используйте override:

Ext.define("Terrasoft.BaseGridPageViewOverride", {
	override: "Terrasoft.BaseGridPageView",
 
	/**
	 * @protected
	 * @overridden
	 */
	initialize: function() {
		/* Your code */
		this.callParent(arguments);
	}
 
});

Только, пожалуйста, обращайте внимание на указанные области видимости методов (ни в коем случае не перекрывайте приватные методы).

А как сгенерировать сам QR-код, пример есть здесь.

Большое спасибо! Это решило все мои проблемы. Прошу прощения за столь длительный ответ

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

Всем доброго времени суток!

Подскажите, есть ли возможность определить роли текущего пользователя в мобильном приложении? Если делать запрос то выдает ошибку - Uncaught Error: [ERROR][Ext.data.Store#setModel] Model with name "SysUserInRole" does not exist.

В зависимости от вхождения в роль нужно делать фильтрацию в справочном поле.

Кто нибудь сталкивался с похожими случаями?

Заранее благодарен!

Нравится

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

Мобильное приложение не загрузило метаданные модели SysUserInRole.

Добавьте в манифест вот такую секцию:

ApplicationRequiredModels: ["SysUserInRole"]

Кривонос Максим,

 Благодарю, сработало.

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

Добрый день!



Возможно кто-нибудь ранее сталкивался с проблемами в мобильном приложении на 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,

поэтому и задал вопрос тут.

 

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

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