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

 

Проблема с ExchangeListener, никак не удаётся победить.

Exchange локальный, все виды авторизации включены.

Сервис ExchangeListener развернут, проверки проходят успешно.

Изображение удалено.

При попытке добавить ящик, в интерфейсе вываливается ошибка

"Указан неправильный email или пароль"

Изображение удалено.

Пробовал различным образом вводить логин. И полный email, и  domain\username.

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

Не помогает.

Изображение удалено.

Попытки авторизоваться в exchangeOWA и exchange/ews/exchange.asmx - проходят успешно по базовой авторизации.

В логах на вебе Creatio вижу ошибку, которую отдаёт Exchange. Такое ощущение, что ему прилетает что-то очень неожиданное.

2021-11-01 12:32:04,970 [87] WARN NT AUTHORITY\NETWORK SERVICE IsServerValid - Mailbox maxim.sedov@***.ru didn't pass validation with these credentials, info: Microsoft.Exchange.WebServices.Data.ServiceRequestException: The request failed. Resource temporarily unavailable Resource temporarily unavailable

 ---> System.Net.WebException: Resource temporarily unavailable Resource temporarily unavailable

 ---> System.Net.Http.HttpRequestException: Resource temporarily unavailable

 ---> System.Net.Sockets.SocketException (11): Resource temporarily unavailable

   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)

   --- End of inner exception stack trace ---

   at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)

   at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean allowHttp2, CancellationToken cancellationToken)

   at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)

   at System.Net.Http.HttpConnectionPool.GetHttpConnectionAsync(HttpRequestMessage request, CancellationToken cancellationToken)

   at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)

   at System.Net.Http.AuthenticationHelper.SendWithAuthAsync(HttpRequestMessage request, Uri authUri, ICredentials credentials, Boolean preAuthenticate, Boolean isProxyAuth, Boolean doRequestAuth, HttpConnectionPool pool, CancellationToken cancellationToken)

   at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)

   at System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)

   at System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)

   at System.Net.HttpWebRequest.SendRequest()

   at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)

   --- End of inner exception stack trace ---

   at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)

   at System.Net.WebRequest.<>c.b__68_2(IAsyncResult iar)

   at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)

--- End of stack trace from previous location where exception was thrown ---

   at Microsoft.Exchange.WebServices.Data.EwsHttpWebRequest.Microsoft.Exchange.WebServices.Data.IEwsHttpWebRequest.GetResponse()

   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest request)

   --- End of inner exception stack trace ---

   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.GetEwsHttpWebResponse(IEwsHttpWebRequest request)

   at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ValidateAndEmitRequest()

   at Microsoft.Exchange.WebServices.Data.SimpleServiceRequestBase.InternalExecuteAsync()

   at Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.ExecuteAsync()

   at Microsoft.Exchange.WebServices.Data.ExchangeService.BindToFolder(FolderId folderId, PropertySet propertySet)

   at Microsoft.Exchange.WebServices.Data.ExchangeService.BindToFolder[TFolder](FolderId folderId, PropertySet propertySet)

   at ExchangeListener.EwsApi.ExchangeListenerService.b__5_0() in /src/ExchangeListener/EwsApi/ExchangeListenerService.cs:line 80

   at ListenerBase.Utils.Tracking.TimeElapsedProfiler.MeasureTime(Func`1 action) in /src/ListenerBase/Utils/Tracking/TimeElapsedProfiler.cs:line 23

   at ExchangeListener.EwsApi.ExchangeListenerService.ValidateSynchronizationCredentials() in /src/ExchangeListener/EwsApi/ExchangeListenerService.cs:line 78

   at ListenerBase.Service.Service.Validate() in /src/ListenerBase/Service/Service.cs:line 224

 

Куда рыть?

Идеи уже кончились.

 

Спасибо!

Нравится

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

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



1. Используется ли двухфакторная авторизация для входа в почтовый аккаунт? 

2. Не блокирует ли почтовый сервер адрес Creatio? 

3. Нет ли нюансов по работе с ресурсами в плане SSL? Возможно сервер не может доверять Вашему экземпляру приложения по этой причине.

4. Проверьте доступность к почтовому сервису из микросервиса Exchange listener. Есть несколько вариантов:

 

   - http://cweiske.de/tagebuch/curl-mail.htm (только добавьте аутентификацию)



-v --user "логин:пароль" --login-options AUTH=PLAIN

 

Полный пример:

curl smtps://адрес сервера smtp -v --user "логин ящика:пароль" --login-options AUTH=PLAIN 



    - либо второй вариант:

 

curl адрес почтового сервера.

Максим, добрый день!



Подскажите, пожалуйста, какую версию Creatio Вы используете?

Lev Kuptsov, добрый день! 7.18.4.1532

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



1. Используется ли двухфакторная авторизация для входа в почтовый аккаунт? 

2. Не блокирует ли почтовый сервер адрес Creatio? 

3. Нет ли нюансов по работе с ресурсами в плане SSL? Возможно сервер не может доверять Вашему экземпляру приложения по этой причине.

4. Проверьте доступность к почтовому сервису из микросервиса Exchange listener. Есть несколько вариантов:

 

   - http://cweiske.de/tagebuch/curl-mail.htm (только добавьте аутентификацию)



-v --user "логин:пароль" --login-options AUTH=PLAIN

 

Полный пример:

curl smtps://адрес сервера smtp -v --user "логин ящика:пароль" --login-options AUTH=PLAIN 



    - либо второй вариант:

 

curl адрес почтового сервера.

Максим Седов,

Приветствую, удалось победить проблему? столкнулся с тем же самым.

Бакалов Павел Вячеславович,

Да, привет! Победили. сервис был развёрнут в кубе. В кубе был неправильно настроен DNS. Сервис ходил не на Exchange, а куда-то еще. Как раз продиагностировали по вышеуказанному мануалу.

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

Здравствуйте. Добавил Tost в систему как в дополнении https://marketplace.terrasoft.ru/app/toast-notifications-creatio, добавил в него элемент процесса что бы из бизнес процесса было удобно на фронт отправлять сообщения в Tost, работает отлично и красиво, спасибо ребятам за их реализацию, но проблема в том что работает только когда включен режим "Отладки" в системных настройках, кода он выключен выдает ошибку

Изображение удалено.

Нравится

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

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

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

Подскажите пожалуйста, можно ли на страницу контрагента добавить новое поле - ИНН, ОГРН, КПП юридического лица с валидацией? Т.е. уже готовое поле ИНН, которое будет проверять правильность ввода ИНН (валидировать по правилам "ключевания"). Или придется писать собственную валидацию поля? 

Нравится

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

Добрый день.

 

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

Для решения нужно прибегнуть к средствам разработки. При помощи поиска на Community можно найти ряд релевантных статей по данному вопросу.

 

Похожее обсуждали тут и тут. Также см. статью. Похожий вопрос и разные подходы к его решению обсуждались тут. Также валидация детали описана в статье SDK в п. 2.

Как-то приходилось делать валидацию ИНН. Вот готовый код.

			setValidationConfig: function() {
				// Вызывает инициализацию валидаторов родительской модели представления.
				this.callParent(arguments);
				this.addColumnValidator("UsrINN", this.innValidator);
			},
 
			innValidator: function() {
				// Переменная для хранения сообщения об ошибке валидации.
				var inn = this.$UsrINN;
				var invalidMessage = this.validateInn(inn);
				// Если валидация прошла успешна, в объекте возвращаются пустые строки.
				return {
					// Сообщение об ошибке валидации, которое отображается в информационном окне
					// при сохранении страницы.
					fullInvalidMessage: invalidMessage,
					// Сообщение об ошибке валидации, которое отображается под элементом управления.
					invalidMessage: invalidMessage
				};
			},
 
			validateInn: function(inn) {
				var error = "";
				var result = false;
				if (typeof inn === "number") {
					inn = inn.toString();
				} else if (typeof inn !== "string") {
					inn = "";
				}
				if (!inn.length) {
					error = "необходимо заполнить";
				} else if (/[^0-9]/.test(inn)) {
					error = "ИНН может состоять только из цифр";
				} else if ([10, 12].indexOf(inn.length) === -1) {
					error = "ИНН может состоять только из 10 или 12 цифр";
				} else {
					var checkDigit = function (inn, coefficients) {
						var n = 0;
						for (var i in coefficients) {
							n += coefficients[i] * inn[i];
						}
						return parseInt(n % 11 % 10);
					};
					switch (inn.length) {
						case 10:
							var n10 = checkDigit(inn, [2, 4, 10, 3, 5, 9, 4, 6, 8]);
							if (n10 === parseInt(inn[9])) {
								result = true;
							}
							break;
						case 12:
							var n11 = checkDigit(inn, [7, 2, 4, 10, 3, 5, 9, 4, 6, 8]);
							var n12 = checkDigit(inn, [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8]);
							if ((n11 === parseInt(inn[10])) &amp;&amp; (n12 === parseInt(inn[11]))) {
								result = true;
							}
							break;
					}
					if (!result) {
						error = "Неправильное контрольное число";
					}
				}
				return error;
			}

 

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

Добрый день

 

Существует БП, который в режиме онлайн в Детали из текстового поля (фио) создает контакт в разделе Физ лица. 

Затем возвращает обратно в Деталь этот контакт как ссылочное поле (справочник)

 

Вопрос:

Как сделать такой же механизм, но за прошлые периоды?

 

Я пробовала в Читать данные добавить в действие месяц (напр, июль), но отрабатывает одного и того же...

 

 

Нравится

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

я бы пошел следующим образом. В этот процесс (Назовем его Процесс 1) добавил ручной запуск. Добавил параметр Id записи которую надо обработать. Сделал второй процесс в котором бы выбрал все записи которые надо обработать и передал их как коллекцию данных в этот процесс через вызов подпроцесса.  Вкачество подпроцесса использовать Процесс 1. 

А породробнее можно. Что за процесс? как стартует? что хотите получить.

Если хотите обработать текстовые поля ФИО в контакты, как задумано процессом, то надо просто поменять условия для чтения данных. А уж что именно без подробностей подсказать не получится

 

Алексей Следь,

 

1. Процесс стартует с добавления данных.

2. Из 1С интегрируется и добавляется сумма выплаты и фио в деталь "Получатели", где поле фио  текстовое. (Это отдельно созданный раздел и в нем деталь)

 

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

 

3. Затем, с помощью БП фио попадает в раздел Физ лица в поле ФИО. 

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

 

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



frown 

я бы пошел следующим образом. В этот процесс (Назовем его Процесс 1) добавил ручной запуск. Добавил параметр Id записи которую надо обработать. Сделал второй процесс в котором бы выбрал все записи которые надо обработать и передал их как коллекцию данных в этот процесс через вызов подпроцесса.  Вкачество подпроцесса использовать Процесс 1. 

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

Было такое приложение Custom filter constructor for Creatio от Banza. https://marketplace.terrasoft.ru/app/custom-filter-constructor-creatio  Перенастройка фильтра на быстрый поиск. Удобно в целом. Было потому что теперь по ссылке доступ запрещен. 

Приложение с ошибками, но работало.

Изображение удалено.

На версии 7.17.4. Поставили 7.18.4 - приложение умерло. Поддержка от Банзы по почте молчит.

Что случилось с приложением? Как вернуть к жизни? или как отключить его в уже настроенном разделе? Т.к. пропало все, в том числе возможность вернуть стандартный механизм установки фильтров.

Вариант как отключить нашел - удалить приложение. Так что теперь вопрос как его вернуть? т.к. пользователям понравилось и они его требуют.

Нравится

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

Добрый день!

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

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

Есть ли у кого-нибудь опыт использования OAuth 2.0 или OpenIdConnect для аутентификации пользователей Creatio? В частости при использовании Creatio на платформе Linux

Нравится

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

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

 

Однако OAuth 2.0 авторизация доступна для внешних приложений и веб-сервисов. Ссылка на документацию. Этот функционал пока что доступен для NetFramework-сборок.

 

Кроме того, в приложении реализована поддержка протокола SAML 2.0, поэтому возможно использование любого провайдера идентификации, совместимого с SAML 2.0, возможно подойдёт этот вариант.

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

Добрый день.

При переходе с версии 7.14 на 7.18.3 у портальных пользователей начали возникать проблемы, при этом в консоли отображаются ошибки, при попытке получить данные по адресам:

../DataService/ssp/json/SyncReply/SelectQuery

../DataService/ssp/json/SyncReply/QuerySysSettings

в теле ответа от сервера указываются, в основном, 403 ошибки:

- Current user does not have sufficient permissions to read values of system setting with code

- Access to non-SSP API is denied for portal users

У обычных пользователей данные ошибки не возникают.

Подскажите, пожалуйста, в чем может быть проблема?

Нравится

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

Большая часть ошибок, как я писал в обращении, возникала, когда портальный пользователь обращался к странице, где были вложения. Чисто случайно, мне на глаза попалась настройка system setting "ShowPreview". В данной настройке не была установлена галочка "Allow reading for portal users", и получалось, когда шел запрос от портального пользователя на необходимость отображения preview вложения, возникала ошибка.

Добрый день.

 

Касаемо возникшей ошибки, попробуйте выполнить следующие действия: 

1. В справочник "Список объектов, доступных пользователям портала" попробуйте добавить следующие объекты:

1) Новая функциональность

2) Статус функциональности.



2. Включите фичу UsePortalDataService, выполнив скрипт, что доступен в статье:

https://academy.terrasoft.ru/docs/developer/elements_and_components/interface_control_tools/feature_toggle

После выполнения скрипта потребуется очистить кэш сервера Redis.



3. Проверьте флаг в web.config приложения, строку: <add key="UsePortalDataService" value="true" />

Флаг должен быть в true. 



4. Объекты Feature и AdminUNitFeatureState должны администрироваться по операциям (как должны все объекты используемые на портале). 

После выполнения выше указанных действий, необходимо сделать очистку кэша сервера Redis и повторить попытку входа на портал.

Ivan Kuchma,

 

Добрый день.

Проверил все 4 пункта:

1. Таблицы Feature и AdminUnitFeatureState уже добавлены в Lookup "List of objects available for portal users";

2. SQL скрип выполнил;

3. Проверил web.config из каталога Terrasoft.WebApp - ключ UsePortalDataService в значении True;

4. Объект AdminUNitFeatureState имел настройку админ. по операциям, для объекта Feature добавил данную настройку.

Redis чистил.

К сожалению, выполнение данных пунктов не привело к положительному результату. Ошибки остались.

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

Дмитрий В.,

Добрый день.

 

Уточните, какие ошибки остались сейчас? Те ошибки, что были изначально ушли? 

Большая часть ошибок, как я писал в обращении, возникала, когда портальный пользователь обращался к странице, где были вложения. Чисто случайно, мне на глаза попалась настройка system setting "ShowPreview". В данной настройке не была установлена галочка "Allow reading for portal users", и получалось, когда шел запрос от портального пользователя на необходимость отображения preview вложения, возникала ошибка.

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

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

В менеджере лицензий и в конфигурации не подтягиваются подписи:

Изображение удалено.

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

Нравится

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

Алла Савельева, добрый день!

Возможно Вам поможет информация из данного обсуждения.

 

Sorotiuk Anna,

 

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

К сожалению, информация из Вашего обсуждения мне не помогла решить описанную проблему.

Есть ещё какие-то варианты?

Алла Савельева, добрый день!

Проверьте, пожалуйста, есть ли в IIS в списке MIME-types - ".json" "application/json".

Если нет добавьте его вручную и проверьте воспроизведение.

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

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