Добрый день, уважаемые коллеги!

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

Задача - на страницу редактирования Активности в мобильном приложении добавить бизнес-правило (доступность). В какой схеме необходимо прописать новое бизнес-правило?

Есть образованные при настройке мастером мобильного приложения кастомные

MobileApplicationManifestFieldForceWorkplace и MobileActivityRecordPageSettingsFieldForceWorkplace.

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

  1. Создать схему клиентского модуля, в которой прописать новое бизнес-правило. Схема должна расширить кастомную MobileActivityRecordPageSettingsFieldForceWorkplace? Как правильно связать новую схему с MobileActivityRecordPageSettingsFieldForceWorkplace?
  2. Подключить созданную схему модуля в манифесте мобильного приложения MobileApplicationManifestFieldForceWorkplace

И еще вопрос: в каком случае следует использовать классы бизнес-правил , а в каком пользовательские бизнес-правила.

Благодарю за помощь

Нравится

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

Вообще, бизнес-правила для разных разделов добавляют в схемы с названиями ...ModelConfig, вроде MobileActivityModelConfig. Например, в ней стандартно такое:

Terrasoft.sdk.Model.addBusinessRule('ContactCommunication', {
	ruleType: Terrasoft.RuleTypes.Requirement,
	triggeredByColumns: ['Number'],
	position: 0
});
 
Terrasoft.sdk.Model.addBusinessRule('ContactCommunication', {
	ruleType: Terrasoft.RuleTypes.Requirement,
	triggeredByColumns: ['CommunicationType'],
	position: 1
});
 
Terrasoft.sdk.Model.addBusinessRule('ContactCommunication', {
	ruleType: Terrasoft.RuleTypes.Filtration,
	triggeredByColumns: ['CommunicationType'],
	position: 2,
	filters: Ext.create('Terrasoft.Filter', {
		type: Terrasoft.FilterTypes.Group,
		subfilters: [
			Ext.create('Terrasoft.Filter', {
				property: 'UseforContacts',
				value: true
			}),
			Ext.create('Terrasoft.Filter', {
				property: 'Id',
				funcType: Terrasoft.FilterFunctions.NotIn,
				funcArgs: [Terrasoft.GUID.Twitter, Terrasoft.GUID.Facebook, Terrasoft.GUID.LinkedIn]
			})
		],
		name: 'a4265c53-b393-4e16-be5f-ee0e5a7faa8c'
	})
});

 

По базовым бизнес-правилам можно тут документацию с примерами почитать

https://academy.terrasoft.ru/documents/technic-sdkmob/7-16/biznes-pravila-mobilnogo-prilozheniya

А тут по кастомным

https://academy.terrasoft.ru/documents/technic-sdkmob/7-16/polzovatelskie-biznes-pravila-mobilnogo-prilozheniya

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

 

 

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

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

Вообще, бизнес-правила для разных разделов добавляют в схемы с названиями ...ModelConfig, вроде MobileActivityModelConfig. Например, в ней стандартно такое:

Terrasoft.sdk.Model.addBusinessRule('ContactCommunication', {
	ruleType: Terrasoft.RuleTypes.Requirement,
	triggeredByColumns: ['Number'],
	position: 0
});
 
Terrasoft.sdk.Model.addBusinessRule('ContactCommunication', {
	ruleType: Terrasoft.RuleTypes.Requirement,
	triggeredByColumns: ['CommunicationType'],
	position: 1
});
 
Terrasoft.sdk.Model.addBusinessRule('ContactCommunication', {
	ruleType: Terrasoft.RuleTypes.Filtration,
	triggeredByColumns: ['CommunicationType'],
	position: 2,
	filters: Ext.create('Terrasoft.Filter', {
		type: Terrasoft.FilterTypes.Group,
		subfilters: [
			Ext.create('Terrasoft.Filter', {
				property: 'UseforContacts',
				value: true
			}),
			Ext.create('Terrasoft.Filter', {
				property: 'Id',
				funcType: Terrasoft.FilterFunctions.NotIn,
				funcArgs: [Terrasoft.GUID.Twitter, Terrasoft.GUID.Facebook, Terrasoft.GUID.LinkedIn]
			})
		],
		name: 'a4265c53-b393-4e16-be5f-ee0e5a7faa8c'
	})
});

 

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

 

Александр, спасибо за пояснения. Но никак не разберусь).

Имеется решение Sales Enterprise + Field Force. Цель изменить поведение стандартного бизнес-правила Активности заполнения Результата, применив сверху стандартного правила и внешнего пакета. Стандартное бизнес-правило прописано в MobileActivityModelConfig (пакет Mobile) - разрешать редактирование поля Result , если состояние активности имеет признак Конечное. Стандартное правило не именовано,т.е. просто отключить его нельзя

Есть FieldForceMobileActivityModelConfig (пакет FieldForceMobile), где изменяется стандартное бизнес-правило в отношении поля DetailedResult. 

Есть MobileApplicationManifestFieldForceWorkplace (пакет FieldMobile), где для модели Activity прописаны "ModelExtensions":

["MobileActivityModelConfig" (стандартные правила),

"FieldForceMobileActivityModelConfig" (добавленные правила внешнего пакета)]

Есть MobileApplicationManifestFieldForceWorkplace (пакет Custom), создан автоматически с признаком «замещать родителя» да.

Создаю свой модуль UsrFieldForceMobileActivityModelConfig, где прописываю свое бизнес-правило, и затем в MobileApplicationManifestFieldForceWorkplace (пакет Custom), добавляю в "ModelExtensions" свой модуль UsrFieldForceMobileActivityModelConfig

И никак не могу добиться работы своего бизнес-правила (либо работает стандартное, либо ничего не работает :)). Т.е. каким образом можно переопределить стандартное неименованное бизнес-правило на свое?

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

 

Благодарю за помощь) разобралась

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

Добрый день.

Правило которое должно сработать если в поле UsrLookupBR выбрано определённое значение. Только вот оно и игнорирует условие срабатывания и просто скрывает навсегда. 
   

Terrasoft.sdk.Model.addBusinessRule("Activity", {
    ruleType: Terrasoft.RuleTypes.Visibility,
    conditionalColumns: [
        {name: "UsrLookupBR", value:"E818A7C2-F351-41A6-A376-7F42762883F2"}
    ],
    triggeredByColumns: ["UsrLookupBR"],
    dependentColumnNames: ["UsrLookupDostup", "Owner"]
});

 

А вот если указать на предмет заполненности  поля    {name: "UsrLookupBR", value: null}, то правило чудесным образом срабатывает. 

Буду очень рад помощи. Заранее спасибо.

Нравится

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

Скорее всего, неправильно сделали сравнение с GUID в фильтре. Если посмотреть похожие случаи, там так:

Terrasoft.sdk.Model.addBusinessRule("KnowledgeBaseFile", {
	ruleType: Terrasoft.RuleTypes.Visibility,
	name: "KnowledgeBaseFileVisibleFileRule",
	conditionalColumns: [
		{name: "Type", value: Terrasoft.Configuration.FileTypeGUID.File}
	],
	events: [Terrasoft.BusinessRuleEvents.Load],
	dependentColumnNames: ["Data"]
});
Terrasoft.sdk.Model.addBusinessRule("KnowledgeBaseFile", {
	ruleType: Terrasoft.RuleTypes.Visibility,
	name: "KnowledgeBaseFileVisibleLinkRule",
	conditionalColumns: [
		{name: "Type", value: Terrasoft.Configuration.FileTypeGUID.Link}
	],
	events: [Terrasoft.BusinessRuleEvents.Load],
	dependentColumnNames: ["Name"]
});

Тут File и Link — две константы, заданные в MobileConstants:

Terrasoft.Configuration.FileTypeGUID = {
	File: "529bc2f8-0ee0-df11-971b-001d60e938c6",
	Link: "539bc2f8-0ee0-df11-971b-001d60e938c6",
	EntityLink: "549bc2f8-0ee0-df11-971b-001d60e938c6"
};

А, может, дело просто в верхнем регистре букв у Вас в константах?

Спасибо большое. Дело было в регистре.

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

Коллеги, привет)
Подскажите, каким образом можно реализовать многострочный тип строки в моб.приложении? Базовая многострочная колонка отображается в моб.приложении так же. А кастомная нет.

Нравится

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

Здравствуйте, Виктория!

 

К сожалению, сейчас нет возможности установки многострочности через мастер мобильного приложения.
Данная проблема уже находится на рассмотрении у аналитиков продукта и, возможно, будет исправлена в последующих релизах.
Данную настройку можно решить с помощью доработки.
Если колонка ранее добавлена в мастере мобильного приложения, то необходимо ее сконфигурировать следующим образом:

Terrasoft.sdk.RecordPage.configureColumn("Activity", "primaryColumnSet", "Title", {
    isMultiline: true
});

Для этого нужно просто знать название колонки и группу колонок, в которой размещена колонка (второй параметр в примере выше).

Пример реализации:

1. Создать в конфигурации модуль http://prntscr.com/pgj6cm  в пакете Custom 
2. Называем его UsrMobileActivityModuleConfig  и пишем в схеме код: 
 

Terrasoft.sdk.RecordPage.configureColumn("Activity", "primaryColumnSet", "DetailedResult", {
    isMultiline: true
});

https://prnt.sc/q0zgem

3. Сохраняем схему 
4. В MobileApplicationManifestDefaultWorkplace в пакете Custom добавляем созданную схему https://prnt.sc/q0zh0l
Как это правильно делать также описано на Академии https://academy.terrasoft.ru/documents/technic-sdkmob/7-14/kak-dobavit-standartnuyu-detal-s-kolonkami
https://academy.terrasoft.ru/documents/technic-sdkmob/7-15/sdk-reestra
5. Сохраняем манифест 
6. Компилируем измененное.
 

Здравствуйте, Виктория!

 

К сожалению, сейчас нет возможности установки многострочности через мастер мобильного приложения.
Данная проблема уже находится на рассмотрении у аналитиков продукта и, возможно, будет исправлена в последующих релизах.
Данную настройку можно решить с помощью доработки.
Если колонка ранее добавлена в мастере мобильного приложения, то необходимо ее сконфигурировать следующим образом:

Terrasoft.sdk.RecordPage.configureColumn("Activity", "primaryColumnSet", "Title", {
    isMultiline: true
});

Для этого нужно просто знать название колонки и группу колонок, в которой размещена колонка (второй параметр в примере выше).

Пример реализации:

1. Создать в конфигурации модуль http://prntscr.com/pgj6cm  в пакете Custom 
2. Называем его UsrMobileActivityModuleConfig  и пишем в схеме код: 
 

Terrasoft.sdk.RecordPage.configureColumn("Activity", "primaryColumnSet", "DetailedResult", {
    isMultiline: true
});

https://prnt.sc/q0zgem

3. Сохраняем схему 
4. В MobileApplicationManifestDefaultWorkplace в пакете Custom добавляем созданную схему https://prnt.sc/q0zh0l
Как это правильно делать также описано на Академии https://academy.terrasoft.ru/documents/technic-sdkmob/7-14/kak-dobavit-standartnuyu-detal-s-kolonkami
https://academy.terrasoft.ru/documents/technic-sdkmob/7-15/sdk-reestra
5. Сохраняем манифест 
6. Компилируем измененное.
 

Мотков Илья,

большое спасибо!

Илья, привет! С Праздником Пасхи! Мира, добра и всех благ :-)
Подскажи, пожалуйста, если у меня колонка вообще не отображается в моб.приложении после всех действий, что можно сделать?
Мой кейс: добавила новую колонку "Комментарии к статье". Создала модуль в конфигурации и добавила код с названием моей колонки. Добавила данный модуль в манифест, скомпилровала измененное. Колонки вообще нет в моб. приложении.

Может данную колонку нужно добавить в коллекцию первичных колонок?

Viktoriya Abysova,

вопрос уже не актуален, разобралась, спасибо!

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

Добрый день, коллеги!
В мобильном приложении в разделе итоги не отображаются расчетные показатели, составленные с помощью Calculated metrics for Creatio. При этом остальные работают.

Может кто сталкивался? Как решается данный вопрос?

Нравится

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

Добрый день, Илья!

 

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

Ирина Лазоренко,

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

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

Добрый день, уважаемые коллеги! Для нас представляет большой интерес приложение  Field surveys for Creatio (приложение с MarketPlace). Но к сожалению, при работе с мобильным приложением в режиме off-line, возникают ошибки синхронизации. Мы обращались в техническую поддержку Terrasoft, где приложение проверили на чистой сборке и подтвердили, что  возникают ошибки синхронизации. Может кто-то уже сталкивался и решал подобную проблему?

Нравится

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

Добрый день, Марина,

 

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

Ирина Лазоренко,

Добрый день, Ирина! Прошу прощения за задержку. Нет, больше никаких дополнений не установлено. 

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

Установлено приложение Creatio File Storage. 

при прикреплении файла к обращению через мобильно приложение прикрепляется пустой файл. 

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

 

лог из мобильного приложения при принудительной синхронизации

Model Name: BKL-L09
Platform: Android
Platform Version: 9
Resolution: 424x848
IsHybridMode: true
SyncInService: false
UIVersion: UIV2
RootAppDirectory: creatio
ApplicationVersion: 7.15.9
ApplicationMajorVersion: 7.15
BackgroundSyncMode: Always
UseNativeSynchronization: true
UseNativeImport: true
UseNativeExport: true
UseNativeLogout: true
UseDataService: true
IsDevMode: false
CurrentDateTime: 2020-03-10T06:34:48.936Z
ServerUrl: 
ContactId: 105110e0-71c6-4cc8-a413-0e4fb0b73446
CultureName: ru-RU
ApplicationRevision: 0
WorkplaceCode: DefaultWorkplace
ProductInfo: {"ProductName":"Портал ЭПМ","ProductEdition":"service enterprise","CustomerId":"201812031735","Version":{"Major":7,"Minor":15,"Build":3,"Revision":1649,"MajorRevision":0,"MinorRevision":1649}}

CaseFile(6597eb70-1eb3-4de6-b58b-235afed70547) at Tue Mar 10 2020 09:34:07 GMT+0300 (Москва, стандартное время). Error text: Message: null
Status code: 400
URL: https:/0/rest/FileApiService/Upload?totalFileLength=68177&fileId=6597eb70-1eb3-4de6-b58b-235afed70547&columnName=Data&fileName=!Лист ознакомления с ЛНА.docx&entitySchemaName=CaseFile&fileTypeId=529bc2f8-0ee0-df11-971b-001d60e938c6
Response body: 










Request Error



The server encountered an error processing the request. The exception message is 'Value cannot be null.
Parameter name: g'. See server logs for more details. The exception stack trace is:



at System.Guid..ctor(String g)
at Terrasoft.Configuration.FileUpload.FileUploadInfo.get_ParentColumnValue()
at Terrasoft.Configuration.BpmFileStorage.GetUploadFilePath(IFileUploadInfo fileUploadInfo)
at Terrasoft.Configuration.FileUpload.BpmFileUploader.InnerUploadFile(IFileUploadInfo fileUploadInfo)
at Terrasoft.Configuration.FileUpload.BpmFileUploader.UploadFile(IFileUploadInfo fileUploadInfo, Boolean isSetCustomColumns)
at Terrasoft.Configuration.FileApiService.Upload(Stream fileContent)
at SyncInvokeUpload(Object , Object[] , Object[] )
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

 

Нравится

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

Добрый день, Алексей! Кейс добавления файлов через мобильное приложение не поддерживается в решении File storage for Creatio. В мобильном приложении Creatio используются другие подходы работы с деталью Файлы и ссылки. Еще ожидаю обратную связь от ответственной команды по планам такой доработки. Как только узнаю решение, вам сообщу.

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

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

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

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

Пробовал:

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

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

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

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

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

 

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

Нравится

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

Проблемы с текущей версией хрома 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"

 

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

Добрый день!
Подскажите как можно добавить фото Контакта и Контрагента в реестр и на страницу в мобильной версии Creatio.

Нравится

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

Так стандартно фото есть и в реестре, и в карточке:

scr_mobile_overview_main_wizard.pngscr_mobile_overview_look_inside.png

А если Вы хотите с телефона добавить фото конкретному контакту, то вроде бы стандартными средствами нельзя.

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

Всем привет!

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

В первую очередь интересует возможно вызывать свои JS функции при изменении в полях и переопределение метода сохранения. В доках ничего такого не нашёл - только бизнес-правила. Или sdk пока настолько мала, что даже этого нельзя ?

Заранее спасибо за ответы.

Нравится

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

Добрый день! Вот пример кода обработчика после добавления:
 

Terrasoft.sdk.Model.setModelEventHandler("Order", 
	Terrasoft.ModelEvents[Terrasoft.ModelEventKinds.After].insert, 
	function(config) {
		var record = config.scope.eventConfig.records[0];
		if(record.data.Status.data.Id !== Terrasoft.WaOrderStatusEnum.Confirmed) {
			Terrasoft.SyncUtils.synchronizeData({
				redirect: true,
				isCancelable: true,
				ignoreNotifications: true, 
				checkForPredefinedDatabase: false,
				syncOptions: {
					ignoreContactInPricePlan: true
				}
			});
		}
	}

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

Так же просмотрите данное обсуждение https://community.terrasoft.ua/questions/mobilnoe-prilozenie-avtozapolnenie-pola

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

Коллеги, приветствую!

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

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

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

Нравится

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

Александр Горчаков,

Если в демке тоже есть проблема, то это может быть ошибка базовой версии.

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

Проверьте в схеме детали Caption, чтобы не был пуст

Литвинко Павел,

Caption на месте. Я так понял что будь там что-то не так - в вэб-версии тоже ничего бы не отображалось.

Посмотрел в облачной-демке - проблема аналогичная.

Еще заметил что если в мобильной версии зайти в изменение записи - заголовок детали есть.
Сделал временно по другому (через настройку деталей в мастере мобильного приложения), но вопрос все еще актуален.

Александр Горчаков,

Если в демке тоже есть проблема, то это может быть ошибка базовой версии.

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

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