Развернул сайт разработки, подключил  SSL Let's encrypt все запросы и интеграции ходят корректно, сертификат принимает. В мастере мобильного приложения зашел во все схемы и сохранил. Получаю ошибку которой не вижу в community,  может кто-то сталкивался?

Model Name: CPH2009 Platform: Android Platform Version: 11 Resolution: 360x756 IsHybridMode: true RootAppDirectory: creatio ApplicationVersion: 7.18.6 ApplicationMajorVersion: 7.18 UseNativeSynchronization: true UseNativeImport: true UseNativeExport: true UseNativeLogout: true UseNativeMetadataSync: false UseNativeFullSynchronization: false UseDataService: true IsDevMode: false CurrentDateTime: 2022-01-20T19:09:15.553Z ServerUrl: https://suncrm.space/ ContactId: null CultureName: null ApplicationRevision: null WorkplaceCode: null ProductInfo: {"ProductName":"Creatio","ProductEdition":"enterprise","CustomerId":"","Version":{"Major":7,"Minor":18,"Build":5,"Revision":1501,"MajorRevision":0,"MinorRevision":1501}} Type: Terrasoft.SyncException Message: В процессе синхронизации произошла ошибка Stack trace: Function.handleException(terrasoft-all-combined.js:26896:37) Object.callback(sencha-touch-all-debug.js:10397:26) Class.callUserErrorHandler(terrasoft-all-combined.js:21844:9) Object.callback(sencha-touch-all-debug.js:10397:26) Class.callFailure(terrasoft-all-combined.js:21503:11) Object.callback(sencha-touch-all-debug.js:10397:26) Function.failure(terrasoft-all-combined.js:36406:17) Object.callback(sencha-touch-all-debug.js:10397:26) Object.requestItemFailure(terrasoft-all-combined.js:34794:17) Class.onRequestFailure(terrasoft-all-combined.js:34602:16) Object.callback(sencha-touch-all-debug.js:10397:26) terrasoft-all-combined.js:34798:13 Object.callback(sencha-touch-all-debug.js:10397:26) Class.finish(terrasoft-all-combined.js:35206:11) Class.finishCancellableOperation(terrasoft-all-combined.js:1576:43) Class.(terrasoft-all-combined.js:34783:12) Object.callback(sencha-touch-all-debug.js:10397:26) terrasoft-all-combined.js:34961:11 Object.callback(sencha-touch-all-debug.js:10397:26) Class.finish(terrasoft-all-combined.js:35206:11) Class.finishCancellableOperation(terrasoft-all-combined.js:1576:43) Class.executeCallbackIfNotCanceled(terrasoft-all-combined.js:34960:10) Class.failureHandler(terrasoft-all-combined.js:34977:10) Object.callback(sencha-touch-all-debug.js:10397:26) Class.onComplete(sencha-touch-all-debug.js:36405:17) Class.onStateChange(sencha-touch-all-debug.js:36341:18) XMLHttpRequest.(sencha-touch-all-debug.js:3233:27) Type: Terrasoft.ServerException Message: Запрос на сервер вернул ошибку AdditionalInfo: { "requestId": 11, "status": 500 }

Нравится

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

В описании приложения https://marketplace.terrasoft.ua/app/business-card-scanner-mobile-creat… указано, что нужно указать один язык в системной настройке. То есть один язык на всю компанию.

Вопрос: что делать, если нужно распознавание нескольких языков? 

Нравится

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

Сергей, добрый день!
Логика у приложения следующая:

 

Если заполнена системная настройка "OCRSpaceLanguage", то берется значение из системной настройки. Если настройка не заполнена, то берется культура текущего пользователя. 

Использовать в рамках одного пользователя несколько локализаций нет возможности.

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

Добрый день!

Необходимо заблокировать возможность изменение поля Состояние (Status) на странице просмотра конкретного обращения. Когда я применяю фильтрацию, запрет поля происходит сразу на двух страницах (на CasePreviewPage - странице предпросмотра обращения и на CaseEditPage - страницы изменения обращения)

Можно ли каким то образом применить запрет на изменения поля только на странице CasePreviewPage?

Terrasoft.sdk.Model.addBusinessRule("Case", {
	name: "CaseStatusCustomRule",
	ruleType: Terrasoft.RuleTypes.Custom,
	triggeredByColumns: ["Status"],
	events: [
		Terrasoft.BusinessRuleEvents.Load,
		Terrasoft.BusinessRuleEvents.ValueChanged
		],
	executeFn: function(record, rule, column, customData, callbackConfig) {
		let vStatusId = record.get("Status.Id");
		let vSfld = "Status";
		record.changeProperty(vSfld, {
			disabled: true
		});
 
		let vFilter = Ext.create("Terrasoft.Filter", {
			name: "CaseStatus_NextStatus_Filtration",
			modelName: "CaseNextStatus",
			property: "Status",
			assocProperty: "NextStatus",
			operation: Terrasoft.FilterOperations.Any,
			value: vStatusId
		});
		record.changeProperty("Status", {addFilter: vFilter});
 
		Ext.callback(callbackConfig.success, callbackConfig.scope, [true]);
	}
});

 

Нравится

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

Сергей, добрый день!

 

Такого признака, на какой из страниц выполняется правило, в системе нет.

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

 

Для этого в соответствующей схеме настроек раздела необходимо добавить следующий код:

Terrasoft.sdk.Module.setChangeModes("[Объект_раздела]", [Terrasoft.ChangeModes.Read]);

 

Схему настроек раздела можно найти по маске %Mobile[Объект_раздела]ModuleConfig

 

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

Но при этом в карточке не будет кнопки редактирования. Для добавления кнопки редактирования записи нужно переопределить карточку просмотра и в ней реализовать свой метод initNavigationButtons(). Для этого (на примере раздела для объекта SNLWARSECTION) нужно создать схему-модуль MobileSNLWARSECTIONPreviewPage и в ней добавить такой код:

 

Terrasoft.LastLoadedPageData = {
                controllerName: "Terrasoft.configuration.SNLWARSECTIONPreviewPageController",
                viewXClass: "Terrasoft.configuration.SNLWARSECTIONPreviewPageView"
};

Ext.define("Terrasoft.configuration.view.SNLWARSECTIONPreviewPage", {
                extend: "Terrasoft.view.BasePreviewPage",
                alternateClassName: "Terrasoft.configuration.SNLWARSECTIONPreviewPageView",
                config: {
                                id: "SNLWARSECTIONPreviewPage"
                }
});

Ext.define("Terrasoft.configuration.controller.SNLWARSECTIONPreviewPage", {
                extend: "Terrasoft.controller.BasePreviewPage",
                alternateClassName: "Terrasoft.configuration.SNLWARSECTIONPreviewPageController",
                statics: {
                                Model: SNLWARSECTION
                },
                config: {
                                refs: {
                                                view: "#SNLWARSECTIONPreviewPage"
                                }
                },

                /**
                * @protected
                * @overridden
                */
                initNavigationButtons: function() {
                                this.callParent(arguments);
                                var view = this.getView();
                                var editButton = view.showEditButton(true);
                                editButton.on("tap", this.onEditButtonTap, this);
                }

});

Ключевое - это view.showEditButton(true), добавляющий кнопку редактирования в навигационную панель.
 

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

Здравствуйте! Возник такой вопрос: Как добавить отображение ещё одного поля для справочника. Допустим, к примеру, нужно отобразить Id напротив каждого значения Name, ну или любую другую колонку. Можно ли это сделать прям при выборе в справочнике? 

Версия мобильного приложения:7.16.5 основного:7.14

 

Нравится

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

Есть Terrasoft.sdk.LookupGridPage. Работает по аналогии с sdk реестра.

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

Нигрескул Алексей, для реестра это сработает, а как быть с обычными справочниками уже внутри страницы? Допустим справочник "Состояние" на странице "Активности".

Есть Terrasoft.sdk.LookupGridPage. Работает по аналогии с sdk реестра.

Николай Кузьмин пишет:

Есть Terrasoft.sdk.LookupGridPage. Работает по аналогии с sdk реестра.

 

 Благодарю за подсказку. Помогло.

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

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

Помогите, пожалуйста, реализовать блокировку (сделать недоступным для редактирования, disable=false) поля мобильного приложения. Как альтернативу скрывать поле программно при загрузке.

Нравится

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

Блокировать и разблокировать поле в мобильном приложении можно при помощи бизнес-правил. См. статью.

Там приводится следующий  пример:

Доступность поля, связанного с колонкой Stock, зависит от значения в колонке IsPresence.

Terrasoft.sdk.Model.addBusinessRule("ActivitySKU", {
    ruleType: Terrasoft.RuleTypes.Activation,
    events: [Terrasoft.BusinessRuleEvents.Load, Terrasoft.BusinessRuleEvents.ValueChanged],
    triggeredByColumns: ["IsPresence"],
    conditionalColumns: [
        {name: "IsPresence", value: true}
    ],
    dependentColumnNames: ["Stock"]
});

Для более сложных случаев есть ещё пользовательские.

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

 

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

Коллеги, день добрый!

 

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

 

По умолчанию используются следующие цвета:

- синий - для запланированных визитов;

- серый - для завершённых и отменённых;

- оранжевый - для просроченных.

 

Я же хочу эту цветовую схему изменить, сделав выполненные визиты зелёными, чтобы отличались от отменённых.

 

Нравится

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

В ядре, в scedule-item.js есть функция GetStatusCls, которая в зависимости от статуса выдаёт нужный CSS-стиль. Там для завершённого и отменённого и так разные стили: x-cancel и x-done. Цвет одинаковый, но у первого текст перечёркивается. Для изменения цветов можно на вкладке LESS переопределить нужные стили, как описывается тут или тут.

Александр, день добрый!

 

Этот файл только из файловой системы доступен? А то у нас облако, а в списке схем конфигурации не нахожу такого.

 

Это файл ядра, в конфигурации его нет.

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

Добрый день.Столкнулся с проблемой, что при попытке входа в мобильную версию системы через Google Chrome, при нажатии на кнопку  "Далее", открывается не привычное окно логина в мобильную версию приложения, а открывается новая вкладка, где предлагается залогиниться в  браузерной версии.

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

Изначально мобильная версия работала корректно. Но после перезагрузки ПК все поломалось.

Пробовал:

удаление папок с кэшем из папки мобильного приложения;

использование свежих архивов с мобильным приложением;

переустановка браузера;

удаление любых упоминаний хрома и мобильного бпм в реестре;

запуск мобильного приложения через батник на свежеустановленной винде 8 на виртуалке;

 

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

Нравится

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

Проблемы с текущей версией хрома 80+. Откатитесь до 79, и все будет работать 

Проблемы с текущей версией хрома 80+. Откатитесь до 79, и все будет работать 

Или использовать MS Edge на Chromium, запускать можно батником:

@echo off
SET PAGEPATH=appV2\MobileApp\MobileMainPage.html
start msedge --disable-features=IsolateOrigins,site-per-process --allow-file-access-from-files --disable-web-security --disable-popup-blocking --user-data-dir="%~dp0\\ChromeUserData" --enable-device-mode "file:///%~dp0%PAGEPATH%?platform=webkit&usecookie=true"

 

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

Создал модуль. Отобразил его в манифесте. Пробую отфильтровать деталь по значениям в колонке следующим образом - не помогает. Что может быть не так?

 
Terrasoft.sdk.Details.addFilter("Account", "UsrSchema4DetailStandardDetail", Ext.create("Terrasoft.Filter", {
	name: "UsrProductInAccountStatusFilter",
	type: Terrasoft.FilterTypes.Group,
	logicalOperation: Terrasoft.FilterLogicalOperations.Or,
	subfilters: [
		{
			property: "UsrProductStatus",
			value: "9b7bdb4f-4a49-49ea-a65d-65415a9f2ebc" // Значение статуса "ИНФОРМАЦИЯ"
		},
		{
			property: "UsrProductStatus",
			value: "24cee800-da09-4dfe-85e9-8dbe649b7b69" // Значение статуса "ЧУЖАЯ ПРОДАЖА"
		}]
	}));

 

Нравится

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

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

Попробуйте использовать следующее:
 

Terrasoft.sdk.Details.configure("Account", "UsrSchema4DetailStandardDetail", Ext.create("Terrasoft.Filter", {
	name: "UsrProductInAccountStatusFilter",
	type: Terrasoft.FilterTypes.Group,
	logicalOperation: Terrasoft.FilterLogicalOperations.Or,
	subfilters: [
		{
			property: "UsrProductStatus",
			value: "9b7bdb4f-4a49-49ea-a65d-65415a9f2ebc" // Значение статуса "ИНФОРМАЦИЯ"
		},
		{
			property: "UsrProductStatus",
			value: "24cee800-da09-4dfe-85e9-8dbe649b7b69" // Значение статуса "ЧУЖАЯ ПРОДАЖА"
		}]
	}));

У меня была подобная ситуация, так же использовать данную настройку следует в манифесте здесь - http://prntscr.com/ogms6l
Вот настройка моего мой фильтра:

Terrasoft.sdk.Details.configure("Event", "EventProductDetailV2StandardDetail", {
	filters: Ext.create("Terrasoft.Filter", {
		type: Terrasoft.FilterTypes.Group,
		subfilters: [
			Ext.create("Terrasoft.Filter", {
				compareType: Terrasoft.ComparisonTypes.NotEqual,
				property: "Product.IsArchive",
				value: true
			})
		]
	})
});

 

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

Попробуйте использовать следующее:
 

Terrasoft.sdk.Details.configure("Account", "UsrSchema4DetailStandardDetail", Ext.create("Terrasoft.Filter", {
	name: "UsrProductInAccountStatusFilter",
	type: Terrasoft.FilterTypes.Group,
	logicalOperation: Terrasoft.FilterLogicalOperations.Or,
	subfilters: [
		{
			property: "UsrProductStatus",
			value: "9b7bdb4f-4a49-49ea-a65d-65415a9f2ebc" // Значение статуса "ИНФОРМАЦИЯ"
		},
		{
			property: "UsrProductStatus",
			value: "24cee800-da09-4dfe-85e9-8dbe649b7b69" // Значение статуса "ЧУЖАЯ ПРОДАЖА"
		}]
	}));

У меня была подобная ситуация, так же использовать данную настройку следует в манифесте здесь - http://prntscr.com/ogms6l
Вот настройка моего мой фильтра:

Terrasoft.sdk.Details.configure("Event", "EventProductDetailV2StandardDetail", {
	filters: Ext.create("Terrasoft.Filter", {
		type: Terrasoft.FilterTypes.Group,
		subfilters: [
			Ext.create("Terrasoft.Filter", {
				compareType: Terrasoft.ComparisonTypes.NotEqual,
				property: "Product.IsArchive",
				value: true
			})
		]
	})
});

 

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

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

Подскажите пожалуйста как так получается, что фильтры которые я применяю к реестру Контакта накладываются на поле Ответственный в Заказе - http://prntscr.com/of9vys?
А то что мне необходимо фильтровать в данном поле не отображает - http://prntscr.com/of9wvo
 

 

 

Нравится

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

И почему то вообще не срабатывает бизнес правило фильтрации:
http://prntscr.com/ofa2wb - правило добавилось
http://prntscr.com/ofa4mc - в списке пусто
http://prntscr.com/ofa5ds - контакты есть удовлетворяющие условиям фильтрации

фильтры которые я применяю к реестру Контакта накладываются на поле Ответственный в Заказе

Скорее всего, Вы их применяете к полю Owner в  Order, а Contact — название объекта справочника. Более подробно о наложении фильтров можно почитать в статье о бизнес-правилах мобильного приложения.

А для прояснения всех тонкостей поведения Вашей системы со всеми внесенными доработками можно воспользоваться отладкой мобильной версии.

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

Добрый день! 

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

Можете пожалуйста описать подробную реализацию на примерах
В документации нет примеров реализации

Нашел старый топик, но по нему не получается вывести свои кнопки
 

Нравится

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

См. примеры в статье и обсуждениях тут, тут и тут.

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