При отправке POST из BPM на внешний веб-сервис возникает ошибка. Сайт крутится на https. Сервис тоже на https.

System.Net.WebException: Базовое соединение закрыто: Не удалось установить доверительные отношения для защищенного канала SSL/TLS. ---> System.Security.Authentication.AuthenticationException: Удаленный сертификат недействителен согласно результатам проверки подлинности.
   в System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception)
   в System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest)
   в System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)
   в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   в System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result)
   в System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size)
   в System.Net.ConnectStream.WriteHeaders(Boolean async)
   --- Конец трассировки внутреннего стека исключений ---
   в System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
   в System.Net.HttpWebRequest.GetRequestStream()
   в Terrasoft.Configuration.ContactLoad.ContactLoad.GetResponse()
   в Terrasoft.Configuration.ContactLoad.ContactLoad.GetContacts()
   в Terrasoft.Core.Process.UsrStartContactServiceMethodsWrapper.ScriptTask1Execute(ProcessExecutingContext context)
   в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

Когда отправляю из Postman, респонс приходит корректно. Возможно дело в настройках IIS?

 Вот код запроса : 

 

var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ServerCertificateValidationCallback = delegate (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
httpWebRequest.Method = WebRequestMethods.Http.Post;
httpWebRequest.Timeout = 240000;
httpWebRequest.ContentType = "application/json";
httpWebRequest.ServicePoint.Expect100Continue = false;
httpWebRequest.ContentLength = data.Length;
Stream stream = httpWebRequest.GetRequestStream();
stream.Write(data, 0, data.Length);
stream.Close();
try
{
	var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
	using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
	{
		result = streamReader.ReadToEnd().ToString();
	}
}
catch (Exception ex)
{
	throw new Exception("Failed to get response. : " + ex.Message);
	return ex.Message;
}

 

Нравится

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

В postman проходит успешная проверка из-за того, что вы отключили проверку сертификата

https://stackoverflow.com/questions/777607/the-remote-certificate-is-invalid-according-to-the-validation-procedure-using

Варианты решения вопроса с ошибкой доступны в открытых источниках.

Сергей Кy6риш,

У меня в коде присутствует отключение проверки сертификата 

 

httpWebRequest.ServerCertificateValidationCallback = delegate (object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };

 

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

Показать все комментарии
конфигурационный сервис
веб-сервис
Замещающий модуль
7.10
sales_enterprise

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

Мне необходимо внести изменения в базовый конфигурационный сервис AdministrationServiceUsers.

Возможно ли создать замещающую схему для сервиса? 

Подскажите, как правильно это сделать? В академии не нашел информации.

Нравится

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

Добрый день, Павел.

Вносить изменения в базовые веб сервисы нет возможности.

Для этих целей Вам необходимо реализовать собственный веб - сервис,

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

Подробно вопрос конфигурирования веб-сервисов рассматривается в видео-обучении. https://www.youtube.com/watch?v=rbdB7LFgNf0&feature=youtu.be

Антон Малий,

а случайно ссылки на "День 2" у Вас нет?

Александр О,

Продвинутая разработка, день 2 (внимание, версия 7.11, многое устарело): https://youtu.be/y45IHGDm0WY

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

Добрый день!

Добавил на кастомную страницу базовую деталь FileDetailV2 из пакета UIv2.

При инициализации детали падает ошибка: 

user: Supervisor/7f3b869f-34f3-4f20-ab4d-7480a5fdf647

 file: undefined

 line: undefined

 column: undefined

 message: Cannot read property 'initDropzoneEvents' of undefined 

 date: Fri Apr 20 2018 10:17:45 GMT+0400 (RTZ 3 (зима))

 moduleId: CardModuleV2_fa04f9ca-d9d9-4c1e-bae9-ef23c8b24925_FinApplicationPage_detail_FileDetailV2snIntegrationLogFile

 moduleName: DetailModuleV2

При этом вручную добавить файлы на деталь невозможно.

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

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

 

Нравится

1 комментарий
кнопка
кнопки
цвет
цвет фона
действия
7.10
service_enterprise

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

Реализовал кастомную кнопку закрытия обращения с выпадающим меню. Но никак не могу найти, как установить цвет выпадающих кнопок. Мне необходимо все 5-кнопок сделать разными цветами. 

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

 

А так же интересует каким образом можно добавить для выпадающей кнопки Значок, по аналогии с кнопкой "Экспорт в Excel" в меню "Действия"?

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

Спасибо!

Нравится

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

Добрый день

Чтобы реализовать раскраску цветами, то:

1. Каждое меню должно быть уникальное

2. Добавить css стиль

К примеру, у меня есть 2 пункта меню. Чтобы я мог реализовать корректный selector, то мне нужно их как-то назвать. Поэтому, в методе, где формируется menuItem я явно буду указывать Id этого меню. После чего можно будет писать что-то типа:

#myMenuItem {
    background-color: green;
}

 

Теперь по значкам.

Как вы сами заметили, что хотите добавить значок по аналогии, то вам и нужно сделать по аналогии :). Вот как это сделано в BaseSection

Артем Гура,

Спасибо, но не совсем понято как указать id каждого из меню в методе.

Вот мой метод:

getCustomCloseActions: function() {

	self = this;
	var actionMenuItems = Ext.create("Terrasoft.BaseViewModelCollection");
		actionMenuItems.addItem(this.getButtonMenuItem({
			"Tag": "5",
			"Caption": "Закрыть с оценкой 5",
			"Click": {bindTo: "OnCustomClosedButtonMenuClick"}
		}));
		actionMenuItems.addItem(this.getButtonMenuItem({
			"Tag": "4",
			"Caption": "Закрыть с оценкой 4",
			"Click": {bindTo: "OnCustomClosedButtonMenuClick"}
		}));
		actionMenuItems.addItem(this.getButtonMenuItem({
			"Tag": "3",
			"Caption": "Закрыть с оценкой 3",
			"Click": {bindTo: "OnCustomClosedButtonMenuClick"}
		}));
		actionMenuItems.addItem(this.getButtonMenuItem({
			"Tag": "2",
			"Caption": "Закрыть с оценкой 2",
			"Click": {bindTo: "OnCustomClosedButtonMenuClick"}
		}));
		actionMenuItems.addItem(this.getButtonMenuItem({
			"Tag": "1",
			"Caption": "Закрыть с оценкой 1",
			"Click": {bindTo: "OnCustomClosedButtonMenuClick"}
		}));
	self.set("CloseButtonMenuItems", actionMenuItems);
				
},

 

Обратите внимание на метод getButtonMenuItem: как он работает по умолчанию, и как он работает, например в BaseSection.

Особенно то, как формируется значок Excel и как генерируется Id.

А дальше сделать всё по аналогии.

Показать все комментарии
Фильтры
фильтр
фильтрация
быстрый фильтр
7.10
service_enterprise

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

Проблема в следующем:

При создании стандартного фильтра (по группе ответственных) в разделе Обращения, на страницу выводится список обращений не только данной группы, но и других групп.

Оказалось, что при создании такого фильтра, по умолчанию выставляется  условие сравнения "СОДЕРЖИТ", а не  "=" (равно).  

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

Можно ли как-то изменить "условие сравнения по умолчанию" для стандартного фильтра?

Спасибо!

Нравится

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

Добрый день!

Стандартный фильтр действительно работает по принципу "СОДЕРЖИТ". Внести изменения в его условия сравнения возможности нет. 

Рекомендуем использовать расширенный фильтр, где есть возможность выбрать "=".

Показать все комментарии
деталь история
Обращения
Портал самообслуживания
Пользователи портала
права доступа
email
7.10
service_enterprise

Добрый день!

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

Кейс: cпочты пользователя портала отправляется письмо на почту техподдержки, это письмо регистрируется в системе (активность с типом email), по нему создается обращение в системе со связью с письмом. Можно добавить портальное сообщение. Со стороны бэкофиса на странице Обращения на детали История первой записью будет отображаться письмо от пользователя. Если зайти со стороны портала, то данного письма на детали не будет.

Подскажите, пожалуйста, где можно настроить видимость писем на детали история для пользователей портала?

Спасибо! 

Нравится

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

Вы указали, что пользователь портала не видит писем в «Истории», это корректное поведение системы. В рамках базовой логики – портал самообслуживания не подразумевает общения письмами, в таком случае вообще портал самообслуживания теряет смысл. В системе реализована отдельная логика по работе с обращениями, происхождение у которых «Email». А пользователь, у которого есть портальные учетные данные – предполагается будет общаться с поддержкой и регистрировать обращения через портал.

Мы реализовывали раздачу прав пользователям портала на записи в БП. 



Ключевое здесь - это выдача прав на Activity по полученному письму. 

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



Владмир, спасибо за информацию. Жалко, что на скриншоте ничего не видно. Можно сделать дололнение для маркета.

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

Постараюсь реализовать, но сложно со временем пока что. В том процессе еще много добавлено. 

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

Владимир Соколов,

Владимир, подскажите, пожалуйста, как именно происходила раздача прав (настройка элемента процесса)? Требуется ли дополнительная настройка прав в разделе Администрирования: Доступ к объектам?

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

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

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

Не могу найти, что запускает процесс "Отправка email сообщения контакту обращения при публикации сообщения в канале Портал".

Подскажите пожалуйста как найти что его запускает.

Данный процесс расположен в пакете Portal 7.8.0

Система Service enterprise 7.10.1

Спасибо!

Нравится

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

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

Запуск данного процесса зашит в коде, на объекте PortalMessage. Метод называется NotifyListeners.

Илья Прокопенко,

Спасибо, я так и подумал что этот метод вызывает процесс. Но сам код метода NotifyListeners могу найти. 

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

Вильшанский Дмитрий,

Дмитрий, добрый день!

Проблема в следующем:

Мне необходимо внести изменения в процесс "Отправка email сообщения контакту обращения при публикации сообщения в канале Портал". А при изменении базового процесса, меняется и имя этого процесса, так как сохраняется новая версия в другом пакете.

Но так как этот процесс запускается методом NotifyListeners, мне придётся изменить и этот метод. Так как я подозреваю, что в этом методе жёстко прописано название процесса.

Ну и основная проблема в том, что я никак не могу найти код этого (NotifyListeners) метода, где идёт вызов процесса.

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

Вепроятно, вы ищите не в том пакете. Вот код метода NotifyListeners - http://prntscr.com/izo7zv

Demchenko Olha,

Добрый день!

Да, этот код я видел. Тут идет вызов метода Notify из MessageHisotryManager. А вот вызова процесса я в MessageHisotryManager так и не нашел.

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

Процесс CasePortalMessageHistoryNotificationProcess уже считается старым и вместо него используется такой же, только мультиязычный - CasePortalMessageMultiLanguageProcess. Этот процесс вызывается в CaseMessageListener из системной настройки (http://prntscr.com/izs0wi).

Ранее, в схеме CaseMessageListener напрямую вызывался интересующий вас процесс.

Demchenko Olha,

Спасибо большое! Наконец-то нашлось! =)

Показать все комментарии
перенос данных через SVN
пакеты
7.10
Ninja Forms

Добрый день!

На сервере svn создал новый branch, копию существующей главной ветки head. Вопрос, как настроить в bpmonline, чтобы при заливке в svn изменения фиксировались в эту новую ветку, а не в старую? При том, что хранилище одно и то же.

Нравится

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

Добрый день, Дмитрий.

Для этого необходимо новую ветку выделить в отдельное хранилище и добавить его в список хранилищ в BPM'Online. Чтобы открыть список доступных хранилищ, на вкладке [Действия] в интерфейсе раздела [Конфигурация] нужно выбрать действие [Открыть список хранилищ].

Как настроить хранилище SVN

Показать все комментарии
фильтр
Фильтры
7.10
service_enterprise

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

Нравится

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

Здравствуйте, Павел!

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

Выглядеть он будет так: http://prntscr.com/io67sn

Настройка: http://prntscr.com/io689w

"Количество" потом поменять на "Существует", и внутри указать, собственно, фильтр по текущему контакту.

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

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

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

Установил bpm на Windows Server 2016.

Ввожу логин и пароль на странице авторизации. Реакции никакой. Но в консоли появляются следующие ошибки:

Failed to load resource: the server responded with a status of 404 (Not Found). В ролях сервера установил все галочки для (Веб-сервер(IIS) - Веб-сервер, Веб-сервер(IIS) - Средства управления)

Точно такой же сайт прекрасно работает на Windows Server 2012, но на 2012 IIS 8, а на сервере 2016 IIS 10. Может для 10-й версии какие-то дополнительные настройки нужно указывать?

Прикрепленные файлы

Нравится

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

Здравствуйте, Кирилл!

Дополнительных настроек касаемо iis 10 - нету.

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

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

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