Вопрос

devexpress подключение библиотеки для использования в отчете.

Подскажите как подключить?

Пробовал в Дизайнере отчетов bpm в свойстве подключаемые модули указать название свое dll и добавить ее в папку BIN в системе и потом вызвать в коде скрипта. Но библиотеку дизайнер отчетов не видит.

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

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

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

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

Выполнил загрузку пакета по инструкции: 

https://academy.terrasoft.ru/documents/technic-sdk/7-12/zagruzka-paketo…

Командой: 

C:\bpmonline7.9.2\Terrasoft.WebApp\DesktopBin\WorkspaceConsole\Terrasoft.Tools.WorkspaceConsole.exe -packageName=userPackage -workspaceName=Default -operation=InstallFromRepository -sourcePath=C:\SavedPackages -destinationPath=C:\TempPackages -skipConstraints=false -skipValidateActions=true -regenerateSchemaSources=true -updateDBStructure=true -updateSystemDBStructure=true -installPackageSqlScript=true -installPackageData=false -continueIfError=true -logPath=C:\Log

Где параметр "-packageName=userPackage" заменил на собственное название пакета.

Вместе с моим пакетом, подтянулись все другие пакеты, включая базовые. Сейчас стоит вопрос о том, как можно(если можно) вернуть Bpm  в исходное состояние(до загрузки нового пакета), а так же стоит вопрос, по какой причине такое могло произойти, если на параметр "-packageName" должен устанавливать только указанный пакет? 

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

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

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

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

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

Очередь настроена так:

Активность:

- Категория: Email

- Тип сообщения: Входящее

- Статус: Не начата

 

Проблема:

1) в списке Единого окна отображается разное кол-во записей. У одного пользователя не видны некоторые записи. Например у Supervisor 10 входящих, а у Artem 8 входящих, 2 записи должны отображаться, но их нет.

2) в списке Единого окна есть записи у которых Статус = Завершена, хотя в фильтре установлено отображать только Не начатые.

 

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

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

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

Здравствуйте, Дмитрий!

По порядку:

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

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

http://prntscr.com/k45uj4

2) Вы можете построить в разделе, по которому строится "Единое Окно", фильтр из очереди, чтобы убедиться в том какие записи попадут в очередь. По данному вопросу необходимо увидеть какие у Вас выполнены настройки в очереди. Возможно у Вас стоит условие фильтрации "ИЛИ", вместо "И"

 

Гриценко Игорь пишет:
Так же запись должна быть в Едином Окне в статусе "Не обработана" или "В работе", тогда она будет отображаться

Это неправильно. Поскольку отсутствует возможность настроить очередь. Я не знаю как, но там появились записи, которые не соответствуют фильтру и в статусе В работе или Не завершена. Такого не должно быть, это нонсенс. Человек ожидает - настроил фильтр очереди - и в этом списке четко именно те записи, которые удовлетворяют фильтру. Я считаю это баг, или вы недостаточно проработали этот вопрос. 

Гриценко Игорь пишет:
Вы можете построить в разделе, по которому строится "Единое Окно", фильтр из очереди, чтобы убедиться в том какие записи попадут в очередь

Эта опция не работает! сколько угодно строишь очередь, меняешь фильтр, все одно - записи не соответствуют фильтру. Там какой-то баг дополнительно. У меня все правильно с фильтрами, это самое простое что можно сделать, фильтр "И". Права раздать элементарно, да и при чем тут права, если записи, которые отображаются - не соответствуют фильтру, там присутствуют кроме фильтра - дополнительные записи. 

Т.е. вывод - этот баг, или недоработка, что в очереди присутствуют записи по фильтру + записи В работе или Не обработана. Вопрос решился только путем удаления старой очереди и создания НОВОЙ, что исключает возможность переноса очереди посредством Данных. это БАГ. Предлагаю рассмотреть этот вопрос и исправить в новых версиях, чтобы записи были только в соответсвии с фильтром, или добавить дополнительный фильтр, которым можно включать выключать фильтр непосредственно очередей (статусы и т.д. ) поскольку реально этими статусами с помощью очереди управлять нельзя.

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

Напишите на почту тех. поддержки - support@terrasoft.ru по данной проблеме.

Так же необходим будет кейс воспроизведения данной ошибки на базовой версии(без доработок) bpm'online (https://www.terrasoft.ru/trial?product=service).

Гриценко Игорь,

хорошо спасибо. 

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

Здравствуйте! Возникла следующая задача: есть БП, в нём выполняется шарпный код, по таймеру, и при завершении процесса, в параметры этого процесса, записываются значения, и мне необходимо после выполнения этого БП, на клиенте анализировать эти параметры и выводить соответствующие информационные уведомления. Но я чего-то не пойму как передать в callback, выполнения БП, эти самые параметры?

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

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

Здравствуйте! Попробуйте передавать по каналу web-socket
Код на стороне БП

var userConnection = Get<UserConnection>("UserConnection");
var messageToUser = Get<string>("AbMessageToUser");
Terrasoft.Configuration.MsgChannelUtilities.PostMessage(userConnection, "AbCreatingSmsAudienceProcess", messageToUser);
return true;

На клиенте следующий код
 

define("ContactSectionV2", [], function() {
	return {
		entitySchemaName: "Contact",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		methods: {
			init: function () {
				this.callParent(arguments);
				this.subscriptionFunction();
			},
			subscriptionFunction: function() {
				Terrasoft.ServerChannel.on(Terrasoft.EventName.ON_MESSAGE,
				this.onAbCreatingSmsAudienceProcessMessage, this);
			},
			onAbCreatingSmsAudienceProcessMessage: function(scope, message) {
				if (!message || message.Header.Sender !== "AbCreatingSmsAudienceProcess") {
					return;
				}
				var message2 = message.Body;
				if (!this.Ext.isEmpty(message2)) {
					this.Terrasoft.showInformation(message2);
				}
			}
		},
		messages: {}
	};
});

 

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

 

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

Есть простая возможность (без использования MultiMaskEdit) ограничить ввод в текстовое поле:

- чтобы вводились только цифры

- количество - не более 12ти

(например опциями в diff.values)

?

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

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

Такой возможности вероятнее всего нет из коробки. Стандартными средствами JavaScript обрабатывая клавиатурные события, можно посмотреть, например по ссылке - https://learn.javascript.ru/keyboard-events

Можно, например, добавить обработчик на keypress/keydown, и если это не цифра или в поле ввода уже 12 симоволов просто игнорировать нажатия

Спасибо

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

Здравствуйте! Такой вопрос, возможно ли получить Id записи добавленной в бизнесс-процессе с помощью элемента [Открыть страницу редактирования] или как получить Id добавленной записи, когда делаешь добавление через класс insert?

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

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

Добрый день.

Вы можете сначала добавить новую запись с помощью действия [Добавить данные], который вернет Id добавленной записи, в потом в элементе [Открыть страницу редактирования] в параметре 'Идентификатор записи' указать этот Id как параметр процесса.

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

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

Здравствуйте! Может кто-нибудь объяснить почему не работают следующие команды в конфигураторе:
- Сгенерировать требующих генерации
- Обновить для требующих обновления (Структура БД)
- Установить для требующих установки
И я уверен что они не работают, "Обновить для требующих обновления" уж точно, т.к. начал через пару секунд вышло сообщение о том, что выполнено успешно, НО в БД структура не обновилась, а обновилась оно после того команды "Обновить для выбранных", на выбранном объекте. Неужели нужно каждый объект в ручную выделять и обновлять?

P.S.: пакеты были установлены, точнее обновлены при помощи встроенной утилиты "Установка приложений", и она автоматически почему-то не обновила структуру

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

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

Добрый день!

В коробке функционал этих команд работает. Попробуйте вывести колонку "Текст последней ошибки", вбить в поиск "%" и отсортировать по этой колонке - есть ли в конфигурации объекты с ошибками?

Антон Малий,

нет таких объектов

На community такой вопрос решить сложно. В коробке данный функционал работает корректно. Если вопрос актуален - создайте обращение в поддержку и предоставьте пакеты и копию БД до накатки.

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

Добрый день! Подскажите пожалуйста как зарегистрировать dll-ку в bpmonline и как использовать его в бизнес процессах, напримере у меня смс агрегатор, спасибо!

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

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

Добрый день, 

Вы можете добавить библиотеку на вкладке [Внешние сборки]. Детальнее тут: https://academy.terrasoft.ru/documents/technic-sdk/7-11/razdel-konfigur…

Для использования функционала внешней библиотеки в бизнес-процессе необходимо добавить ее в using. На вкладке [Методы] дизайнера процессов. https://academy.terrasoft.ru/documents/technic-bpms/7-12/rabochee-prost…

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

При отправке 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, и посмотреть в сторону сертификата, предположительно, проблема в нем.

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

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

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

Ниже код вызова бизнес процесса из ContactPageV2:

GetCLStatus: function() {
 
var ContactId = this.get("Id");
 
var ContactName = this.get("Name");
 
var ContactBirthDate = this.get("BirthDate").toDateString();
 
var ContactTranslitName = this.get("TsTranslitName");
 
var ContactAdminUnitId = Terrasoft.SysValue.CURRENT_USER.value;
 
var ContactCLStatus;
 
var processArgs = {
 
sysProcessName: "CLCheckClientProc",
 
parameters: {
 
Id: ContactId,
 
FullName: ContactName,
 
BirthDate: ContactBirthDate,
 
TranslitName: ContactTranslitName,
 
AdminUnitId: ContactAdminUnitId,
 
CLStatus: ContactCLStatus
 
}
 
};
 
ProcessModuleUtilities.executeProcess(processArgs);
 
}

Еще ниже уже код вызова хранимой процедуры (сценарий в БП):

var sContactId = Get<string>("Id");
 
var sName = Get<string>("FullName");
 
var sBirthDate = Get<string>("BirthDate");
 
var sTranslitName = Get<string>("TranslitName");
 
var sAdminUnitId = Get<string>("AdminUnitId");
 
 
//var sName = "Иван Иванов";
 
 
string sCLStatus = "XXX";
 
var userConnection = Get<UserConnection>("UserConnection");
 
 
DataValueTypeManager dataValueTypeManager = userConnection.DataValueTypeManager;
 
var textDataValueType = new TextDataValueType(dataValueTypeManager);
 
 
StoredProcedure storedProcedure = new StoredProcedure(userConnection, "ACCCHECKCLIENT")
 
.WithParameter("sName", sName)
 
.WithParameter("dob", sBirthDate)
 
.WithParameter("sTranslitName", sTranslitName)
 
.WithParameter("sContactId", sContactId)
 
.WithParameter("sSysAdminUnitId", sAdminUnitId)
 
.WithOutputParameter("sStatus", textDataValueType) as StoredProcedure;
 
 
storedProcedure.Execute();
 
sCLStatus = storedProcedure.Parameters.FindByName("sStatus").Value as string;
 
Set("CLStatus", sCLStatus);

При таком вызове мне в базу пишутся только нечитаемые символы. Если в коде C# не читать из параметров, а вызывать напрямую, к примеру, "Иван Иванов" – все ок.

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

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

Отсюда я делаю вывод, что проблема либо при передаче параметров в БП, либо при начитке параметров в сценарии.

Подскажите, пожалуйста, в чем может быть проблема? Есть ли какая-то возможность посмотреть вообще, что передается в параметры бизнес процесса? Есть может какая-то возможность отладки БП?

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

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

Попробуйте добавить в скриптаске логгер, 

Для этого необходимо самом бизнес-процесса добавить 

        using global::Common.Logging;

После, в самой скриптаске можно вызывать Log.Debug("Message"); или Log.Error("Message");.

Сообщение можно будет просмотреть в логах приложения, которые по умолчанию находятся C:\Windows\TEMP\[id сайта], а именно в файле Common.

Также, что бы однозначно увидеть ошибку в логах, стоит использовать Log.Error("Message"); либо повысить уровень логгирования, это можно сделать в log4net.config.

 

Также, можно просмотреть какие запросы приходят в БД при помощи MS SQL Profiler, в случае если Вы используете MS SQL.

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