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

 
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
			})
		]
	})
});

 

Показать все комментарии
Мобильное приложение
Разработка
Фильтры
7.14_()
mobile

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

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

А то что мне необходимо фильтровать в данном поле не отображает - http://prntscr.com/of9wvo

 

 

 

Нравится

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

И почему то вообще не срабатывает бизнес правило фильтрации:

http://prntscr.com/ofa2wb - правило добавилось

http://prntscr.com/ofa4mc - в списке пусто

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

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

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

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

Показать все комментарии
mobile
Мобильное приложение
7.14_()
service_enterprise

Добрый день! 



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

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



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

В документации нет примеров реализации



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

 

Нравится

1 комментарий
Мобильное приложение
Разработка
обязательное поле
JScript
7.14_()
mobile

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

Подскажите, есть ли возможность проставить признак обязательности заполнения(*), при этом не устанавливая параметр на уровне БД?

http://prntscr.com/ocz7r9

Есть ли какие то методы при помощи которых можно выполнить такую настройку?

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

Нравится

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

В 7.Х вообще не стоит устанавливать обязательность поля на уровне базы, достаточно на уровне объекта.

Если же нужно кодом на мобильной странице, см. эту и эту темы.

Показать все комментарии
Разработка
События
Исключения
Мобильное приложение
7.14_()
mobile

Коллеги всем доброго времени суток! Подскажите как сгенерировать Terrasoft.Exception.

Необходимо преред добавлением записи проверять заполнение детали если пусто выкидывать Exception и сообщение, что заполните деталь

Terrasoft.sdk.Model.setModelEventHandler("Contact", 
	Terrasoft.ModelEvents[Terrasoft.ModelEventKinds.Before].insert,
	function(config, operation) {
		debugger;
		var record = config.scope.eventConfig.records[0];
		window.console.log(config);
		window.console.log(record);
		var addresses = record.ContactAddressDetailV2EmbeddedDetailStore.getData();
		if(addresses.all.length === 0) {
			var exceptionConfig = {
				message: "Сообщение",
			};		
			Ext.callback(config.failure,config.scope,Terrasoft.Exception(exceptionConfig);
		} else {
			Ext.callback(config.success, config.scope, [true]);
		}		
});

Как реализовать что бы работало, может кто то сталкивался?

Вылазит следующие ошибки  -http://prntscr.com/ocnz86

не читает - http://prntscr.com/ocnzgz

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

Нравится

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

разобрался

Terrasoft.sdk.Model.setModelEventHandler("Contact", 
	Terrasoft.ModelEvents[Terrasoft.ModelEventKinds.Before].insert,
	function(config, operation) {
		debugger;
		var record = config.scope.eventConfig.records[0];
		window.console.log(config);
		window.console.log(record);
		var addresses = record.ContactAddressDetailV2EmbeddedDetailStore.getData();
		if(addresses.all.length === 0) {
			var exception = new Terrasoft.Exception();
			exception.config.message = "Сообщение";
 
			Ext.callback(config.succes, config.scope, [false]);
		} else {
			Ext.callback(config.success, config.scope, [true]);
		}
		Ext.callback(config.success, config.scope, [true]);
});

 

Показать все комментарии
redirect
синхронизация
Мобильное приложение
Разработка
javascript
7.14_()
mobile

Коллеги, как реализовать redirect на preview страницу после синхронизации приложения?

реализовал событие после обновления заказа

Terrasoft.sdk.Model.setModelEventHandler("Order", 
	Terrasoft.ModelEvents[Terrasoft.ModelEventKinds.After].update,function(config){
		var model = "Order";
		var record = config.scope.eventConfig.records[0];
		var pageConfig = {			
			recordId: record.data.Id
		};
		Terrasoft.Configuration.WaSync(model, pageConfig, false);
	});
 
Terrasoft.Configuration.WaSync = function(model, pageConfig, toMainPage = true) {
	Terrasoft.MobileSettingsPageControllerSyncManager.synchronize({
		exportOnly: false ,
		checkForPredefinedDatabase: false,
		redirect: function() {
			debugger;
			if(toMainPage) {
				Terrasoft.core.redirectToMainPage();
			} else {
				Terrasoft.Application.close(() => {
 
				});
			}
		}
	});
};

нашел функцию Terrasoft.util.redirectToPage:

 

Terrasoft.util.redirectToPage = function(to, hash) {
	Terrasoft.Application.close(() => {
		to += location.search;
		if (hash) {
			to += "#" + hash;
		}
		location.href = to;
	});
};

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

Нравится

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

Опишите подробней свою бизнес задачу.

Довольно странное поведение - открывать страницы после полной синхронизации. К тому же во время полной синхронизации может может изменится структура объектов

Для открытия страницы просмотра обычно используется такой метод:

Terrasoft.util.openPreviewPage("Contact", {
	recordId: contact.getId()
});

P.S. Метод Terrasoft.MobileSettingsPageControllerSyncManager.synchronize является @internal его нельзя использовать!

P.S.S. Класс Terrasoft.MobileSettingsPageControllerSyncManager является устаревшим, сейчас используют Terrasoft.SyncUtils

Наверное вам подойдет метод 

Terrasoft.SyncUtils.synchronizeData

 

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

здравствуйте, после сохранения изменения заказа, а именно изменения состояния заказа необходимо осуществлять синхронизацию приложения, что бы заказа сразу уходил в основную БД. После синхронизации нужно открыть этот же заказ на PreviewPage что бы было возможным осуществлять действия - http://prntscr.com/o9nbjt. Сразу скажу онлайн режим не подходит. Уже использую Terrasoft.SyncUtils.synchronizeData

Terrasoft.sdk.Model.setModelEventHandler("Order", 
	Terrasoft.ModelEvents[Terrasoft.ModelEventKinds.After].update, 
	function(config) {
		var record = config.scope.eventConfig.records[0];
		if(record.modified.hasOwnProperty("Status")) {
			Terrasoft.util.Sync.synchronizeData({
				exportOnly: false ,
				isCancelable: true,
				checkIfSyncStarted: true,
				checkForPredefinedDatabase: false,
				ignoreNotifications: true,
				runType: Terrasoft.Sync.RunTypes.Background,
				redirect: true
			});
		}
	}
);

 

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

 


 

Фоновая синхронизация доступна пока что только для Android. Чтоб она работала нужно включить системную настройку RunMobileSyncInService.

Запускать в фоне можно вот так:

Terrasoft.SyncUtils.synchronizeData({

    redirect: false,

    isCancelable: true,

    ignoreNotifications: true, 

    checkForPredefinedDatabase: false

});

Вам нужно дожидаться каких-то данных с сервера?

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

нужно понимать что синхронизация прошла успешно и выводить сообщение пользователю

 

Смотрите какое поведение системы(делаю на эмуляторе):

подставил код который Вы написали выше - http://prntscr.com/o9ze1c

Синхронизация проходит без редиректа на основную страницу, но затем после сохранения записи не отрабатывают события, перехожу в другой раздел и затем обратно в раздел заказы и наблюдаю следующее - http://prntscr.com/o9zg5s

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

1) При подписке на события модели нужно в конце вызывать config.success

2) Если вы хотите что-то отображать пользователю то логику нужно реализовывать на карточке а не на объекте

3) у synchronizeData есть метод finish по идее он должен вызываться в конце

Показать все комментарии
синхронизация
Мобильное приложение
Разработка
js
7.14_()
mobile

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

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

Нравится

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

Или же необходимо после синхронизации делать редирект на preview страницу сохраненного Заказа.

Terrasoft.Configuration.WaSync = function(model, pageConfig) {
	Terrasoft.MobileSettingsPageControllerSyncManager.synchronize({
		exportOnly:false ,
		checkForPredefinedDatabase: false,
		redirect: function() {
			//Terrasoft.util.openPreviewPage(model, pageConfig);
		}
	});
};
 
Terrasoft.sdk.Model.setModelEventHandler("Order", 
	Terrasoft.ModelEvents[Terrasoft.ModelEventKinds.After].update, 
	function(config){
		debugger;
		var model = "Order";
		var record = config.scope.eventConfig.records[0];
		var pageConfig = {
			recordId: record.data.Id
		};
		Terrasoft.Configuration.WaSync(model, pageConfig);
	});

Terrasoft.util.openPreviewPage - не срабатывает!

См. документацию по расширению синхронизации.

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

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

Написано:

Модули синхронизации являются внутренними (internal) классами и не подлежат расширению. Но часто возникает необходимость ограничить передаваемые во время синхронизации данные в соответствии с определенными правилами. Для этого была добавлена возможность управления этапами синхронизации с помощью класса управления.

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

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

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

Столкнулся с такой проблемой. Есть орг. роли в которых есть поле Область/Штат, заполнено неким значением, в эту роль входит пользователь Иванов. При работе с моб. приложения под этим пользователем необходимо отображать только те контакты у которых на детали есть адрес с полем Область/Штат соответсвующий полю Область/Штат орг. роли.

Реализовал функцию которая считывает роли данного пользователя и заносит в глобальную переменную.

Далее добавил фильтр в реестре:

Terrasoft.sdk.Module.addFilter("Contact", Ext.create("Terrasoft.Filter", {
	type: Terrasoft.FilterTypes.Group,
	logicalOperation: Terrasoft.FilterLogicalOperations.Or,
	subfilters: Terrasoft.WaContactFiltersByRegionInCurrentUserRole()
}));
 
 
Terrasoft.WaContactFiltersByRegionInCurrentUserRole = function () {
	var subfilters = [];
	for (var i = 0; i < Terrasoft.WaRoleRegions.length; i++) {
		subfilters.push({property:"[ContactAddress:Contact:Id].Region", value:Terrasoft.WaRoleRegions[i]});
	}
	return subfilters;
};



В оффлайн режиме фильтрует, в онлайн нет, иногда выдает ошибки.

Так вот собственно вопрос, с чем это может быть связанно и как с этим бороться?

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

Нравится

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

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

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

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

http://prntscr.com/o6ypsp. Пользователям не нравится такой вид, поэтому задавал фильтр по ответсвенному - фильтровало, но потом как оказалось не подходит по бизнес логике фильтрации, пришлось придумать такой костыль, вот и выплыло следующее в оффе фильрует в онлайн нет - http://prntscr.com/o6yr3i

Как с таким бороться?

Вообще, это стандартное поведение с 14 версии, отображает сначала пустой список, а потом — последние посещённые 10 записей:

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

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

это понятно. Однако помимо реестра нужно ещё накладывать фильтр в справочных полях Контакт что бы фильтровало какие описано выше))

Разобрался чего не фильтровало, я в фильтр передавал объект - https://prnt.sc/o7a23e

перестроил фильтрацию по Id и все заработало как в оффлайн так и в онлайн режиме

Показать все комментарии
mobile
js
Разработка
асинхронные запросы
7.14_()
sales_enterprise

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

Возможно ли настроить конфигурацию мобильного приложения следующим образом, что бы при срабатывании бизнес правила и обработки модели текущей записи возможно было доставать значения данных из связанных записей? В данном случае меня интересует Контакт - http://prntscr.com/o5yxe7. Без написания запроса. или запрос нужно писать в любом случае? Стоит задача при изменении Контакта необходимо в заказе перезаписывать контактный номер телефона, как лучше реализовать?

Нравится

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

Стоит задача при изменении Контакта необходимо в заказе перезаписывать контактный номер телефона, как лучше реализовать?

Мне кажется, такое нужно делать не в мобильной версии, а на стороне сервера при синхронизации. Ведь новые данные контакта могут прийти с разных сторон, например, их может исправить пользователь, работающий в веб-версии, интеграция с сайтом, 1С или ещё чем-то. Если менять будут при помощи класса EntitySchemaQuery, можно реализовать логику во встроенном или обычном процессе.

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

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

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

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

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

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

Создал функцию:

 

(function () {
	var SysUserInRole = "SysUserInRole";
	var columns = ["Id", "SysRole.Region"];
	var store = Ext.create("Terrasoft.store.BaseStore",{
		model: SysUserInRole
	});
	var queryConfig = Ext.create("Terrasoft.QueryConfig", {
		modelName: SysUserInRole,
		columns: columns
	});
	var filters = Ext.create("Terrasoft.Filter", {
		property: "SysUser.Id",
		value: Terrasoft.CurrentUserInfo.userId
	});
	store.load({
		queryConfig: queryConfig,
		filters: filters,
		callback: function(records, operation, success) {
			try {
				debugger;
				if(success && records) {
					Terrasoft.WaUserInRoles = records;
				} else {
					window.console.info(operation);
					window.console.info(success);
					window.console.info(records);
				}
			} catch(ex) {
				Terrasoft.Mask.hide({force: true});
				Terrasoft.Logger.error(ex, Terrasoft.LogDestination.Console);
				window.console.error(ex);
				return;
			}
		},
		scope: this
	});
}());

Добавил ее в манифест в блок:

 

{
	"ApplicationRequiredModels": [
		"SysAdminUnit",
		"SysUserInRole"
	],
	"CustomSchemas": [
		....
		"WaMobileGetCurrentUserRoles"
	],
}

При выполнении не может определить lockupModel:

 

var lookupModel = Ext.ClassManager.get(columnConfig.modelName);

http://prntscr.com/o3ctl3

 

В чем может быть проблема? Заранее благодарен.

Нравится

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

не актуально, разобрался. Нужно было добавить Region в блок манифеста ApplicationRequiredModels

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