Вопрос

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

Столкнулся со следующей проблемой, у нас в системе были кастомные Excel отчеты, выгружались посредствам библиотеки ClosedXml, и все работало, но с версии 7.14 перестало работать. Высыпаются ошибки в зависимостях:

Terrasoft.Web.Common.ServiceModel.ErrorHandler ProvideFault - Метод не найден: "System.IO.Packaging.PackageProperties DocumentFormat.OpenXml.Packaging.OpenXmlPackage.get_PackageProperties()".
System.MissingMethodException: Метод не найден: "System.IO.Packaging.PackageProperties DocumentFormat.OpenXml.Packaging.OpenXmlPackage.get_PackageProperties()

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

Кто работал с библиотекой ClosedXml в bpm'online, может знает какую версию использовать?

Текущая версия crm 7.14.4 

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

У меня такой же вопрос

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

Столкнулся, к сожалению. пришлось все переписывать... В ClosedXML используются библиотеки DocumentFormat.OpenXml, в версии 7.14 видимо обновили версию библиотеки/зависимых библиотек и все. Мучался часа 3 с зависимостями, потом плюнул и переписал на OpenXml генерацию xls

Столкнулся, к сожалению. пришлось все переписывать... В ClosedXML используются библиотеки DocumentFormat.OpenXml, в версии 7.14 видимо обновили версию библиотеки/зависимых библиотек и все. Мучался часа 3 с зависимостями, потом плюнул и переписал на OpenXml генерацию xls

А что говорит по этому вопросу служба поддержки? Что они рекомендуют?

Алла Савельева,

Здравствуйте! Пока ничего. Анализирует предоставленный мною лог.

Нигрескул Алексей,

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

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

Всем доброго времени суток! Столкнулся со следующей проблемой. Есть БП который запускается после изменения записи, в нем есть скрипт-таск в котором определяется заголовок Origin - System.Web.HttpContext.Current.Request.Headers["Origin"], если изменение производились через карточку записи то заголовок присутствовал и процесс шел по одной ветке, если же изменение произошло кодом через интеграцию, то заголовок был пустой. Это работало до недавнего времени, сейчас же System.Web.HttpContext.Current == null.

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

У меня такой же вопрос

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

Разобрался, в настройке начального сигнала стояло выполнять след. эл-ты в фоне. Из-за этого не читалось.

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

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

Всем доброго времени суток. Подскажите есть ли возможность у bpm'online интегрироваться с RabbitMQ, а именно подписываться на сообщения?

Благодарю.

У меня такой же вопрос

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

Как минимум, в механизме глобального поиска он используется. Нужно смотреть документацию по этому ПО, как устроены стандартные библиотеки для взаимодействия с ним, есть ли они под JS и C# и можно ли ими воспользоваться в конфигурации bpm'online.

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

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

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

Версия: 7.14.2.881 

У меня такой же вопрос

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

разобрался в чем дело

затер часть connectionStrings

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

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

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

 

 

У меня такой же вопрос

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

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

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

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

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

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

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

http://prntscr.com/ocz7r9
Есть ли какие то методы при помощи которых можно выполнить такую настройку?

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

У меня такой же вопрос

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

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

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

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

Коллеги всем доброго времени суток! Подскажите как сгенерировать 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 на 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 по идее он должен вызываться в конце

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

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

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

У меня такой же вопрос

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 и все заработало как в оффлайн так и в онлайн режиме

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