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

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

Версия системы - 7.13.1, версия МП - от 7.15 до 7.18.1

Нравится

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

Добрый день!
Подскажите, ваше основное приложение работает по протоколу http или https ?
Вы хотите в мобильное приложение ввести адрес http://site.terrasoft.ru, верно ?

1. При входе в МП мы проверяем валидный ли протокол (http или https) и для этого "пингуем" наш сервис MobileCodeService.ashx. Для протокола должен быть валидный сертификат и он не должен быть самоподписанным.

2. Далее пытаемся понять, какой тип аутентификации у клиента. И если SSO, открываем адрес соотв. identity-провайдера.

3. После успешного входа осуществляется редирект на NuiLogin.aspx, который приложение ожидает и запускает синхронизацию.

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

Всем привет. Пытаюсь сделать своё кастомное бизнес-правило в мобилке, а оно работает как-то некорректно. Кто-нибудь может подсказать в чем может быть ошибка?

Terrasoft.sdk.Model.addBusinessRule("Activity", {
    name: "ActivityCategoryVisibilityRule",
    ruleType: Terrasoft.RuleTypes.Custom,
    triggeredByColumns: ["ActivityCategory"],
    events: [Terrasoft.BusinessRuleEvents.ValueChanged, Terrasoft.BusinessRuleEvents.Load],
    executeFn: function(record, rule, column, customData, callbackConfig, event) {
        var category = record.get("ActivityCategory.Id").toUpperCase();
        if (category === "42C74C49-58E6-DF11-971B-001D60E938C6" || //Meeting 
            category === "E52BD583-7825-E011-8165-00155D043204" || //Call
            category === "BC8B0E9A-6574-4A22-9538-BDE44C484008" || //Exhibition
            category === "F51C4643-58E6-DF11-971B-001D60E938C6" || //To do
            category === "17E871DD-1BF0-4E02-8D15-763A8F2C78C9" || // Forum round table
            category === "B821675D-8303-448B-936D-E931FFFD00BD" // Workshop
           ) {
            record.changeProperty("AtcSubcategory", {
                hidden: {
                    value: false
                }
            });
        } else {
            record.changeProperty("AtcSubcategory", {
                hidden: {
                    value: true
                }
            });
        }
        Ext.callback(callbackConfig.success, callbackConfig.scope, [true]);
    }
});

Нравится

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

Добрый день

Можете подробнее сказать про "оно работает как-то некорректно"? smiley

Как-то некорректно это как?

Артем Гура,

Нашёл в чем проблема. Корректно сетить свойство нужно вот так:

record.changeProperty("AtcSubcategory", {
                hidden: true
            });

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

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

 

Но при этом бизнес-правило успешно отрабатывает когда я не меняю число 20 в поле выше, а когда добавляю новую запись в продвигаемые продукты  и ввожу значение в поле:

Код бизнес-правила:
 

Terrasoft.sdk.Model.addBusinessRule("ActivityPromProduct", {
    name: "OpportunityAmountValidatorRule",
    ruleType: Terrasoft.RuleTypes.Custom,
    triggeredByColumns: ["QuantityPrescription"],
    events: [Terrasoft.BusinessRuleEvents.ValueChanged],
    executeFn: function(model, rule, column, customData, callbackConfig) {
        var revenue = model.get("QuantityPrescription");
		if (model.phantom){
			model.set("QuantityPrescription", 5, true);
		}
		else{
			model.set("QuantityPrescription", 7, true);
		}
        Ext.callback(callbackConfig.success, callbackConfig.scope);
    }
});

 

Нравится

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

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

Попробуйте также в events добавить событие Terrasoft.BusinessRuleEvents.Save и проверьте работу.

 

events: [Terrasoft.BusinessRuleEvents.ValueChanged, Terrasoft.BusinessRuleEvents.Save]

 

Mykhailo Storozhuk,

Добрый день! Не помогло, всё-равно при вводе значения в поле и сохраняется введённое мной значение, а не например, 5 или 7 как из кода выше по идее должно быть.

Симонов Сергей Сергеевич,

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

1) Добавили ли Вы схему, в которой настраиваете это бизнес правило в манифест мобильного приложения? Корректно ли Вы это сделали?  
2) Попробуйте также вообще удалить правило и посмотреть будет ли изменяться значение при создании новой записи. 
3) Кроме того, нужно провести отладку кода внутри мобильного приложения и посмотреть вызывается ли нужный метод.
4) Возможно у Вас есть еще одно бизнес правило, которое может нарушать логику текущего? Проверьте бизнес правила связанные с проблемными колонками.

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

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

Добрый день!

на данный момент используем интеграцию Creatio + Power automate + Teams bot.

 

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

Нравится

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

Добрый день!

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

Со своей стороны мы зарегистрировали пожелание по развитию продукта в будущих версиях.
Спасибо за идею!

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

Привет!
 

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

Колонки объекта и их настройка синхронизации в манифесте:

Ловлю запрос в профайлере при синхронизации с эмулятора:

Ловлю запрос при синхронизации с приложения на мобильном устройстве:

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

Нравится

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

Привет!

 

Мы сталкивались с подобным кейсом. Проблема была в том, что был задублированный в одном из манифестов  объект импорта. В итоге, при слиянии манифестов в результирующем конфиге присутствовали две настройки импорта для одного объекта. Один с дополнительными колонками, второй - нет. Брался второй конфиг при формировании запроса к серверу.

 

Привет!

 

Мы сталкивались с подобным кейсом. Проблема была в том, что был задублированный в одном из манифестов  объект импорта. В итоге, при слиянии манифестов в результирующем конфиге присутствовали две настройки импорта для одного объекта. Один с дополнительными колонками, второй - нет. Брался второй конфиг при формировании запроса к серверу.

 

Зезюков Сергей Aлександрович,

Спасибо, действительно в одном из пакетов в манифесте был дубль объекта SupplyPaymentTemplate

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

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

{
	"SyncExtensions": [
		"ScpMobileSyncExtensions"
	],
	"SyncOptions": {
//Настройки синхронизации
  }
}

Однако этот модуль не загружается вообще при синхронизации с реального устройства (в моём случае под Android). Пробовал отдельно просто выводить окошко с сообщение Terrasoft.MessageBox.showMessage("Тест"); При синхронизации с эмулятора окно с сообщением выводится как и положено, но при синхронизации с телефона ничего не происходит.

Кто сталкивался с подобным, как удалось решить?

Нравится

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

SyncExtensions стал deprecated c версии 7.16.0 так как перешли на «нативную» синхронизацию написаную на Java.
Соответсвенно, пользовательский javascript подключить туда нельзя.
Есть обходное решение — отключить нативную синхронизацию.
Но делать это настоятельно не рекомендуем, т.к. все новые «фишки» у Вас перестанут работать.
Опишите свою проблему, может, её «в коробке» исправят в новых версиях.

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

Добрый день. 

Столкнулись с такой проблемой, что на больших объёмах данных (несколько миллионов записей) в таблице продуктов в заказе. Настройка синхронизации объекта стандартная, в которой в SyncOptions установлен параметр "SyncByParentColumnWithRights": "Order"

Проверили запрос непосредственно в базе. Он выполняется несколько минут. В результате всего одна строка. Основное время исполнения уходит на проверку прав. 

Кто сталкивался с подобными проблемами, как удавалось решить?

Нравится

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

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

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

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

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

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

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

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

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

Есть задача в мобильном приложении (уже давно функционирующем) изменить на карточке Контрагента логику поля Подразделение . В справочнике Подразделений добавлено булево поле UsrProhibitSelectionAccount, если true, то запрещать подразделение к выбору. 

Рассматриваю применение 2-х вариантов:

Бизнес-правило 1: Фильтр записей Подразделений по признаку UsrProhibitSelectionAccount (см. ниже 1-й метод). Метод отрабатывает и при выборе отображает только то, что можно

Бизнес-правило 2: Выдавать сообщение пользователю, если выбранная ранее запись некорректна (см. ниже 2-й метод).  И вот тут почему-то в консоли видно, что не считывается корректно значение поля UsrProhibitSelectionAccount. Оно всегда false. Правда не во всех записях оно заполнено (см. скрин).

Помогите, пожалуйста, определить в чем некорректность 2-го метода. Благодарю за помощь

// Правило 1
/*Terrasoft.sdk.Model.addBusinessRule("Account", {
	ruleType: Terrasoft.RuleTypes.Filtration,
	position: 1,
	triggeredByColumns: ["UsrDepartment"],
	events: [Terrasoft.BusinessRuleEvents.ValueChanged,Terrasoft.BusinessRuleEvents.Load],
	 message: Terrasoft.LocalizableStrings.DepartmentMustBeAllowed,
	 filters: Ext.create("Terrasoft.Filter", {
        modelName: "UsrAccountDepartments",
        property: "UsrProhibitSelectionAccount",
        value: false
    })
});*/
 
// Правило 2
Terrasoft.sdk.Model.addBusinessRule("Account", {
	name: "AccountDepartmentMustBeAllowedRule",
	ruleType: Terrasoft.RuleTypes.Custom,
	triggeredByColumns: ["UsrDepartment"],
	events: [Terrasoft.BusinessRuleEvents.Load,
		Terrasoft.BusinessRuleEvents.ValueChanged, Terrasoft.BusinessRuleEvents.Save],
	executeFn: function(record, rule, column, customData, callbackConfig) {
		var AccountDepartment = record.get("UsrDepartment");
	var isValid = AccountDepartment.get("UsrProhibitSelectionAccount");
 
		record.changeProperty("UsrDepartment", {
			isValid: {
				value: isValid,
				message: Terrasoft.LocalizableStrings.DepartmentMustBeAllowed
			}
		});
		Ext.callback(callbackConfig.success, callbackConfig.scope, [isValid]);
	}
});

Нравится

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

Марина, а оно точно так должно синхронно читать из объекта справочника так, как у Вас?

В схеме MobileActivityOpportunityModelConfig значение Opportunity.Account читают с асинхронным вызовом так:

Terrasoft.sdk.Model.addBusinessRule("Activity", {
	name: "ActivityAccountOpportunityFiltrationRule",
	ruleType: Terrasoft.RuleTypes.Filtration,
	events: [Terrasoft.BusinessRuleEvents.Load, Terrasoft.BusinessRuleEvents.ValueChanged],
	triggeredByColumns: ["Account"],
	filteredColumn: "Opportunity",
	filters: Ext.create("Terrasoft.Filter", {
		property: "Account"
	})
});
 
Terrasoft.sdk.Model.addBusinessRule("Activity", {
	name: "ActivityAccountByOpportunityRule",
	ruleType: Terrasoft.RuleTypes.Custom,
	triggeredByColumns: ["Opportunity"],
	events: [Terrasoft.BusinessRuleEvents.ValueChanged, Terrasoft.BusinessRuleEvents.Save,
		Terrasoft.BusinessRuleEvents.Load],
	executeFn: function(record, rule, column, customData, callbackConfig) {
		var opportunityRecord = record.get("Opportunity");
		if (opportunityRecord) {
			var accountRecord = record.get("Account");
			if (!accountRecord) {
				var opportunityModel = Ext.ModelManager.getModel("Opportunity");
				opportunityModel.load(opportunityRecord.getId(), {
					isCancelable: false,
					queryConfig: Ext.create("Terrasoft.QueryConfig", {
						columns: ["Account"],
						modelName: "Opportunity"
					}),
					success: function(loadedRecord) {
						if (loadedRecord) {
							record.set("Account", loadedRecord.get("Account"), true);
						}
						Ext.callback(callbackConfig.success, callbackConfig.scope);
					},
					failure: function(record, operation) {
						var exception = operation.getError();
						Ext.callback(callbackConfig.failure, callbackConfig.scope, [exception]);
					},
					scope: this
				});
				return;
			}
		}
		Ext.callback(callbackConfig.success, callbackConfig.scope);
	},
	position: 1
});

Также на скриншоте видно, что колонка UsrProhibitSelectionAccount  в локальной БД пустая. Из-за этого логика может отрабатывать некорректно. Нужно правильно настроить фильтрацию синхронизации в манифесте и пересинхронизировать с нуля. 

Марина, а оно точно так должно синхронно читать из объекта справочника так, как у Вас?

В схеме MobileActivityOpportunityModelConfig значение Opportunity.Account читают с асинхронным вызовом так:

Terrasoft.sdk.Model.addBusinessRule("Activity", {
	name: "ActivityAccountOpportunityFiltrationRule",
	ruleType: Terrasoft.RuleTypes.Filtration,
	events: [Terrasoft.BusinessRuleEvents.Load, Terrasoft.BusinessRuleEvents.ValueChanged],
	triggeredByColumns: ["Account"],
	filteredColumn: "Opportunity",
	filters: Ext.create("Terrasoft.Filter", {
		property: "Account"
	})
});
 
Terrasoft.sdk.Model.addBusinessRule("Activity", {
	name: "ActivityAccountByOpportunityRule",
	ruleType: Terrasoft.RuleTypes.Custom,
	triggeredByColumns: ["Opportunity"],
	events: [Terrasoft.BusinessRuleEvents.ValueChanged, Terrasoft.BusinessRuleEvents.Save,
		Terrasoft.BusinessRuleEvents.Load],
	executeFn: function(record, rule, column, customData, callbackConfig) {
		var opportunityRecord = record.get("Opportunity");
		if (opportunityRecord) {
			var accountRecord = record.get("Account");
			if (!accountRecord) {
				var opportunityModel = Ext.ModelManager.getModel("Opportunity");
				opportunityModel.load(opportunityRecord.getId(), {
					isCancelable: false,
					queryConfig: Ext.create("Terrasoft.QueryConfig", {
						columns: ["Account"],
						modelName: "Opportunity"
					}),
					success: function(loadedRecord) {
						if (loadedRecord) {
							record.set("Account", loadedRecord.get("Account"), true);
						}
						Ext.callback(callbackConfig.success, callbackConfig.scope);
					},
					failure: function(record, operation) {
						var exception = operation.getError();
						Ext.callback(callbackConfig.failure, callbackConfig.scope, [exception]);
					},
					scope: this
				});
				return;
			}
		}
		Ext.callback(callbackConfig.success, callbackConfig.scope);
	},
	position: 1
});

Также на скриншоте видно, что колонка UsrProhibitSelectionAccount  в локальной БД пустая. Из-за этого логика может отрабатывать некорректно. Нужно правильно настроить фильтрацию синхронизации в манифесте и пересинхронизировать с нуля. 

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

 

Александр, большое спасибо за рекомендации. Да, видимо, я неверно читаю объект справочника. Надо попробовать разобраться с асинхронным вызовом. Спасибо за приведенный пример.

Заполнение колонки UsrProhibitSelectionAccount в локальной базе пока не помогло.

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

Пару месяцев назад после очередного обновления ос Android 7 приложение bpm перестало загружаться. Проблема решается отключением приложения GoogleChrome и отключением автообновлений.

версия мобильного приложения 7.10

 

из-за чего может возникнуть такой конфликт?

старая версия моб приложения и обновленный хром совсем никак не смогут сосуществовать?

Нравится

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

Здравствуйте, Анна!

 

У нас нет как таковой поддержки старых версий приложения. Рекомендуем использовать актуальную версию приложения, сейчас это 7.16.1. 

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

Добрый день, коллеги. Прошу помочь... Одно правило последнее перекрывает первое. И последнее работает, а первое нет. 

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

 

 

Terrasoft.sdk.Model.addBusinessRule("Activity", {
    ruleType: Terrasoft.RuleTypes.Visibility,
    conditionalColumns: [
        {name: "UsrLookupBR", value:"b14640eb-8b89-4fe9-8b00-a51b61ff9430"}
    ],
    triggeredByColumns: ["UsrLookupBR"],
    dependentColumnNames: ["UsrLookupDostup"]
});

Terrasoft.sdk.Model.addBusinessRule("Activity", {
    ruleType: Terrasoft.RuleTypes.Visibility,
    conditionalColumns: [
        {name: "UsrLookupBR", value:"e818a7c2-f351-41a6-a376-7f42762883f2"}
    ],
    triggeredByColumns: ["UsrLookupBR"],
    dependentColumnNames: ["UsrLookupDostup"]
});

Нравится

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

Насколько понимаю, в MobileKnowledgeBaseFileModelConfig именно так и сделано, два правила по двум константам меняют видимость одного поля:

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"]
});
Terrasoft.sdk.Model.addBusinessRule("KnowledgeBaseFile", {
	ruleType: Terrasoft.RuleTypes.Visibility,
	name: "KnowledgeBaseFileVisibleKnowledgeBaseLinkRule",
	conditionalColumns: [
		{name: "Type", value: Terrasoft.Configuration.FileTypeGUID.KnowledgeBaseLink}
	],
	events: [Terrasoft.BusinessRuleEvents.Load],
	dependentColumnNames: ["Name"]
});

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

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