Вопрос

В нативном пакете FinAppLanding есть процесс "Синхронизация анкетных данных с данными физ. лица " который падает на последней строке :

appFormToContactHelper.SynchronizeContactByAppForm(appFormId);

вызывая ошибку "Недостаточно прав для изменения записи в объекте" , конкретно :

System.Security.SecurityException: Недостаточно прав для изменения записи в объекте "Contact" at Terrasoft.Core.Entities.Entity.UpdateInDB(Boolean validateRequired) at Terrasoft.Core.Entities.Entity.InternalSave(Boolean validateRequired, Boolean setColumnDefValue) at Terrasoft.Core.Entities.Entity.Save(Boolean validateRequired, Boolean setColumnDefValue) at Terrasoft.Configuration.AppFormToContactHelper.AppFormToContact(Dictionary`2 columnValues, Guid appFormId) at Terrasoft.Configuration.AppFormToContactHelper.SynchronizationContact(Guid appFormId) at Terrasoft.Configuration.AppFormToContactHelper.SynchronizeContactByAppForm(Guid appFormId) at Terrasoft.Core.Process.AppFormToContactSyncProcessCustom1.AppFormToContactSyncScriptTaskExecute(ProcessExecutingContext context) at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context) The Zone of the assembly that failed was: MyComputer

Что с ним не так и как исправить ?

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

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

Значит, у пользователя, под которым запущен БП, нет прав на изменение этого физ. лица или одного из полей. Проверьте права доступа на запись в разделе физ. лиц, есть ли права на изменение у этого пользователя или какой-то из его групп.

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

 это я уже догадался. Вопрос как узнать КТО ЭТОТ пользователь ?

Вы.

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

В процессе пытаюсь получить UserConnection :

var userConnection = HttpContext.Current.Session["UserConnection"] as UserConnection;

однако получаю ошибку :

System.NullReferenceException: Object reference not set to an instance of an object. at Terrasoft.Core.Process.AppFormToContactSyncProcessMethodsWrapper.AppFormToContactSyncScriptTaskExecute(ProcessExecutingContext context) at Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

В чем может быть причина? Как исправить ?

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

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

Такое может быть, например, если метод вызван из БП, который запущен по расписанию, тогда никакой сессии не будет. В качестве решения, если это сервис - сделать UserConnection свойством класса с возможностью задать извне, и вызывать сервис как-то так.

var service = MyService();
service.UserConnection = userConnection;
service.MyMethod(param1, param2);

В самом бизнес-процессе UserConnection стоит получать как context.UserConnection или Get<UserConnection>("UserConnection"). Во встроенном процессе просто свойство UserConnection есть.

Такое может быть, например, если метод вызван из БП, который запущен по расписанию, тогда никакой сессии не будет. В качестве решения, если это сервис - сделать UserConnection свойством класса с возможностью задать извне, и вызывать сервис как-то так.

var service = MyService();
service.UserConnection = userConnection;
service.MyMethod(param1, param2);

В самом бизнес-процессе UserConnection стоит получать как context.UserConnection или Get<UserConnection>("UserConnection"). Во встроенном процессе просто свойство UserConnection есть.

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

добрый день.

прошу помощи зала: мне необходимо понять, разобраться и научиться программировать веб-страницы в BPM.

подскажите, пожалуйста, где найти информацию, вот буквально азы? самое-самое начало, с чего начать? Если возможно с примерами.

основы JavaScript известны. А вот структура и принципы формирования страниц и их редактирование в версии ВРМ мягко говоря плохо понятны. Где что находится и как это редактировать-исправлять. На сайте ничего такого не нашел.Там вообще сложно хоть что-то найти даже если оно там есть.

Как вы сами изучали ? Методом научного тыка ?

P/S.

помимо ниже следующего ещё что-то есть ?

https://academy.terrasoft.ru/api/jscoreapi/7.12.0/
https://academy.terrasoft.ru/documents/technic-sdk/7-13/sozdanie-web-ca…
https://academy.terrasoft.ru/documents/technic-sdk/7-13/opisanie-platfo…

https://academy.terrasoft.ru/documents/technic-sdk/7-13/integraciya-sto…
https://academy.terrasoft.ru/documents/technic-sdk/7-13/otladka-klients…
https://academy.terrasoft.ru/documents/technic-sdk/7-13/sozdanie-klient…
https://academy.terrasoft.ru/documents/technic-sdk/7-13/kak-sozdat-polz…
https://academy.terrasoft.ru/documents/technic-sdk/7-13/ispolzovanie-en…

https://academy.terrasoft.ru/documents/technic-sdk/7-13/web-object-ispo…

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

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

Вам сюда.

Вам сюда.

Варфоломеев Данила, мда. Юмор оценил.

Есть бесплатные тренинги, в том числе и по разработке.

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

Добрый день!

Подскажите пожалуйста, как получить доступ к полям обьекта из кода с# если нам известен ID обьекта?

лезть в БД и тянуть селектом или есть какая-нибудь функция типа GetObjectByID ?

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

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

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

Можно слегка упростить синтаксис :)

var _caseFile = new Terrasoft.Configuration.CaseFile(UserConnection);
_caseFile.FetchFromDB(recordId); 
var typeId = _caseFile.GetColumnValue("TypeId");
var name = _caseFile.GetColumnValue("Name");

 

В 5.Х была готовая функция для этой цели. Можно было указать объект, колонку и запись, получить в ответ значение колонки. Если в 7.Х нет, можно скопировать:

public static T GetEntityTypedColumnValue<T>(UserConnection userConnection, string schemaName, string columnName, Guid id) {	
	var schema = userConnection.EntitySchemaManager.GetInstanceByName(schemaName);
	var esq = new EntitySchemaQuery(schema);
	var queryColumnName = esq.AddColumn(columnName).Name;
	var filter = esq.CreateFilterWithParameters(FilterComparisonType.Equal, schema.PrimaryColumn.Name, id);
	esq.Filters.Add(filter);
	var entities = esq.GetEntityCollection(userConnection);
	foreach (var entity in entities) {
return entity.GetTypedColumnValue<T>(queryColumnName);
	}
	return default(T);
}

Пример вызова в коде:

accountId = Terrasoft.Configuration.MsgServiceUtilities.GetEntityTypedColumnValue<Guid>(UserConnection, "Contact", "Account.Id", singleContactId);

 

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

Можно слегка упростить синтаксис :)

var _caseFile = new Terrasoft.Configuration.CaseFile(UserConnection);
_caseFile.FetchFromDB(recordId); 
var typeId = _caseFile.GetColumnValue("TypeId");
var name = _caseFile.GetColumnValue("Name");

 

Григорий, скорее всего, так вытянутся все колонки объекта, что может быть излишним.

Зверев Александр,Спасибо огромное!!!

 

Григорий Чех,

 и вам спасибо за вариант !!! ситуации бывают разные  :))) это тоже пригодится

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

Попытался вставить  console.log("test") в текст модуля замещающего  FileDetailV2

получил ошибку 'console' is not defined

почему? как исправить?

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

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

показалось что нашел решение в примерах сообщества = есть вариант (правда непонятно почему не работает классика - она в примерах так же присутствует) :


 
window.console.log("test")

однако он позволяет обойтись без ругани BPM на ошибки не работая фактически - в консоль ничего не выводится все равно

Это зависит от браузера. Например, в IE они доступны только если открыта панель разработчика. См. обсуждения.

Зверев Александр, прошу прощения , я видимо неточно выразился. НЕРАБОТАЕТ имеется ввиду что BPM отказывается вообще его воспринимать в коде - выдает ошибку 'console' is not defined при попытке сохранить модуль. Вариант window.console.log такой ошибки не выдает - хотя и не выводит ничего в консоль. Естественно - я пользуюсь панелью разработчика.

Значит, в Вашем браузере такого объекта не предусмотрено.

Пробуйте обратиться через window.console.log()

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

Подскажите пожалуйста чего не хватает? 

В дизайнере страницы я добавил виджет "веб-страница". В настройках виджета одно единственное поле - веб адрес страницы. Ради теста вставил туда www.yandex.ru однако после сохранения и релогона на месте виджета отображается пустое поле, а в HTML коде на его месте написано <div id="undefinedContainer"></div>

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

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

Вот ссылки на документацию на Академию

https://academy.terrasoft.ua/documents/base/7-13/paneli-itogov?document…

https://academy.terrasoft.ua/documents/base/7-13/blok-itogov-web-strani…

Если вы все делаете так как описано на Сайте Академии то прошу прислать скриншоты Настройки "Блока Итогов Web-Страница"

Вот ссылки на документацию на Академию

https://academy.terrasoft.ua/documents/base/7-13/paneli-itogov?document…

https://academy.terrasoft.ua/documents/base/7-13/blok-itogov-web-strani…

Если вы все делаете так как описано на Сайте Академии то прошу прислать скриншоты Настройки "Блока Итогов Web-Страница"

Власов Михаил Викторович,

 более менее разобрался. BPM таким образом блочит все внешние ресурсы. Типа он лучше меня знает что опасно, а что нет. Внутри доверенных доменов - все открывается.

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

Подскажите пожалуйста в чем проблема и кк ее решить. Я настроил по инструкции Visual Studio, выгрузил проект, запустил на компиляцию. В итоге - 250 ошибок следующего содержания (например) :

Ошибка    CS0121    Неоднозначный вызов следующих методов или свойств: 'Terrasoft.Configuration.ExchangeUtility.IsEmpty(Microsoft.Exchange.WebServices.Data.PhysicalAddressEntry)" и "Terrasoft.Configuration.ExchangeUtility.IsEmpty(Microsoft.Exchange.WebServices.Data.PhysicalAddressEntry)"    Terrasoft.Configuration.Dev    C:\wwwroot\DEV\Terrasoft.WebApp\Terrasoft.Configuration\Autogenerated\Src\ExchangeContactSyncProvider.Exchange_Entity.cs

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

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

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

Литвинко Павел,

Это не мои методы я еще ничего не писал. Это ругается на базовые методы самого Террасофта. 11 ошибок такого рода я смог исправить в ручную (когда забыли подставить Terrasoft вместо System например), в оставшихся типа вышеприведенного примера непонятно чего подставлять потому что в качестве конфликтных он пишет два идентичных навания

Terrasoft.Configuration.ExchangeUtility.IsEmpty(Microsoft.Exchange.WebServices.Data.PhysicalAddressEntry)

BVG,

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

Обратите внимание, что при разработке в студии компилировать нужно не стандартной кнопкой, а особой командой, которую перед этим нужно создать. Если так и делали, нужно смотреть подробнее, что и как настроили.

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

Добрый день! Столкнулся со следующей проблемой. Cайт работает по протоколу https. При настройке подключения к сайту в интерфейсе плагина ReportDesigner, для указанной строки подключения не подтягивается конфигурация для входа.
Подскажите, если ли какие-то дополнительные настройки для работы плагина с сайтом на https.

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

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

Подключился в BPMonlineReportDesigner к демо-сайту, по https пускает нормально.

Настройки разных веб-сервисов сайта для работы по http и https прописываются в config-файлах, находящихся в папках Terrasoft.WebApp\ServiceModel\http\ и Terrasoft.WebApp\ServiceModel\https\.

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

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

Александр, спасибо за рекомендацию. Все получилось

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

Добрый день!

Хочу сделать актуализацию курсов валют, указывая актуальные значения, полученные через веб-сервис. Возникает проблема с сохранением значения курса. Пишу новое значение как новую запись в таблицу CurrencyRate, заполняю поля CurrencyId, Rate, StartDate. Проблема в том, что система обрабатывает значения Rate, вычисляя обратный курс, мантиссу и на выходе в интерфейсе имею совсем другой курс и при расчетах получаю неверные значения. Подскажите каким образом корректно сохранить полученное прямое значение курса в системе и корректно вывести его в интерфейсе в справочнике Валюты.

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

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

Добрый день, вам нужно учесть что система производит расчеты относительно базовой валюты соответсвенно вам необходимо указывать курсы валют относительно базовой валюты. Так же следует учитывать что курс валют кешируется на уровне сессии пользователя, тоесть новый курс валюты при расчете на стороне клиента будет использоваться только после того как пользователь выйдет и войдет в систему(после обновления курса).
Пример реализации логики можете посмотреть тут https://marketplace.terrasoft.ru/app/exchange-rate-update-bpmonline

Добрый день, вам нужно учесть что система производит расчеты относительно базовой валюты соответсвенно вам необходимо указывать курсы валют относительно базовой валюты. Так же следует учитывать что курс валют кешируется на уровне сессии пользователя, тоесть новый курс валюты при расчете на стороне клиента будет использоваться только после того как пользователь выйдет и войдет в систему(после обновления курса).
Пример реализации логики можете посмотреть тут https://marketplace.terrasoft.ru/app/exchange-rate-update-bpmonline

Добрый день!

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

System.ServiceModel.EndpointNotFoundException: Прослушивание на http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx не выполняла ни одна конечная точка, которая могла бы принять сообщение. Среди прочих причин это могло быть вызвано неправильным адресом или действием SOAP. Подробнее см. в описании InnerException (если имеется). ---> System.Net.WebException: Невозможно соединиться с удаленным сервером ---> System.Net.Sockets.SocketException: Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера 212.40.192.49:80
   в System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
   в System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)
   --- Конец трассировки внутреннего стека исключений ---
   в System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
   в System.Net.HttpWebRequest.GetRequestStream()
   в System.ServiceModel.Channels.HttpOutput.WebRequestHttpOutput.GetOutputStream()
   --- Конец трассировки внутреннего стека исключений ---
 
Server stack trace: 
   в System.ServiceModel.Channels.HttpOutput.WebRequestHttpOutput.GetOutputStream()
   в System.ServiceModel.Channels.HttpOutput.Send(TimeSpan timeout)
   в System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.SendRequest(Message message, TimeSpan timeout)
   в System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
   в System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
   в System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
   в System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
   в System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
 
Exception rethrown at [0]: 
   в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   в Terrasoft.Configuration.CbrfDI.DailyInfoSoap.GetCursOnDate(DateTime On_date)
   в Terrasoft.Configuration.TscCbrfLoader.Load()
   в Terrasoft.Core.Process.TscLoadCurrencyRateMethodsWrapper.RunLoadCurrencyRateExecute(ProcessExecutingContext context)
   в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

Сталкивались ли вы с этим? В чем может быть причина?

Этот механизм реализован компанией «Техносерв консалтинг», лучше связаться с ними. А по тексту в журнале, может, с Вашего веб-сервера не было доступа к адресу http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx.

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

Добрый день! Производил привязку данных по правам на администрируемые операции. Написал скрипт по предварительному удалению записей по фильтру и привязал данные. При обновлении из свн на другом сайте, после обновления сайт перестал работать. В логах приложения ошибка. Будьте добры, подскажите как решить данную проблему.

 

2018-10-26 17:22:07,220 [5] ERROR IIS APPPOOL\ArdshinBank7102-3 Terrasoft.WebApp.FileWebEventProvider ProcessEvent - Date: 26.10.2018 17:22:07
Date (UTC): 26.10.2018 13:22:07

Exception Message: Вложенный запрос вернул больше одного значения. Это запрещено, когда вложенный запрос следует после =, !=, <, <=, >, >= или используется в качестве выражения.
Exception Type: System.Data.SqlClient.SqlException
Exception Source: .Net SqlClient Data Provider

Exception Stack Trace:
   в System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   в System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
   в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
   в System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
   в System.Data.SqlClient.SqlDataReader.TryHasMoreRows(Boolean& moreRows)
   в System.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more)
   в System.Data.SqlClient.SqlDataReader.Read()
   в Terrasoft.Core.DB.DBSecurityEngine.GetCurrentUserAdminOperationsFromDB()
   в Terrasoft.Core.DB.DBSecurityEngine.InitializeCurrentUserAdministratedOperations(String code)
   в Terrasoft.Core.DB.DBSecurityEngine.GetCanExecuteOperation(String code)
   в Terrasoft.Core.DB.DBSecurityEngine.GetEntitySchemaOperationsRightLevels(String schemaName)
   в Terrasoft.Core.DB.DBSecurityEngine.GetEntitySchemaOperationsRightLevel(String schemaName)
   в Terrasoft.Core.DB.DBSecurityEngine.GetIsEntitySchemaReadingAllowed(String schemaName)
   в Terrasoft.Core.Entities.EntitySchemaQuery.CreateSelect()
   в Terrasoft.Core.Entities.EntitySchemaQuery.GetSelectQuery(UserConnection userConnection)
   в Terrasoft.Core.Entities.EntitySchemaQuery.GetEntityCollection(UserConnection userConnection)
   в Terrasoft.Configuration.FeatureUtilities.GetFeatureState(UserConnection source, String code)
   в Terrasoft.Configuration.FeatureUtilities.GetIsFeatureEnabled(UserConnection source, String code)
   в Terrasoft.Configuration.ConfigurationSectionHelper.GetModuleStructure(UserConnection userConnection)
   в Terrasoft.Configuration.ConfigurationSectionHelper.GetConfigurationScript(UserConnection userConnection)
   в Terrasoft.Configuration.SectionHelper.GetConfigurationScript(UserConnection userConnection)
   в Terrasoft.WebApp.Nui.ViewModuleHelper.CreateModulesConfigScript(UserConnection userConnection, HttpResponse response)
   в Terrasoft.WebApp.Nui.ViewModule.SetupModulesConfig()
   в Terrasoft.WebApp.Nui.ViewModule.Page_Load(Object sender, EventArgs e)
   в System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
   в System.Web.UI.Control.OnLoad(EventArgs e)
   в System.Web.UI.Control.LoadRecursive()
   в System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

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

6 комментариев
Лучший ответ
SELECT SysAdminOperationId, SysAdminUnitId, COUNT(*)
FROM dbo.SysAdminOperationGrantee
GROUP BY SysAdminOperationId, SysAdminUnitId
HAVING COUNT(*) > 1
 
 
SELECT SysAdminOperationId, Position, COUNT(*)
FROM dbo.SysAdminOperationGrantee
GROUP BY SysAdminOperationId, Position
HAVING COUNT(*) > 1

Если любой из этих запросов вернул что-то, то в этом проблема. Необходимо почистить данную таблицу дублирующих данных.

Без ошибок из лога  и сообщений в консоли броузера трудно чтото сказать. Разве что посоветовать обратится в тех поддержку.

Запросите у поддержке sql скрипты для перераздачи прав на существующие обекты и выполните их для тех объектов что вы меняли! Свежий бэкап есть или вы делали на среде разработки?

Есть приложение на маркет плэйсе  которое раздает права на созданные записи (актуальнот если изминили права и хотите распространить это на существующие объекты)  но если входа не происходит это вам не поможет!

Где-то есть подзапрос, который выдаёт более одной строки, хотя логика внешнего SQL-запроса ожидает одну. Вызывается он в стандартной функции ядра GetCurrentUserAdminOperationsFromDB. Видимо, при работе скрипта или переносе залилось некорректное наполнение в таблицы прав.

Где именно, можно увидеть, записав в профайлере запрос, происходящий перед падением.

вот же

TOP (1) ставьте 

Я так понимаю что это из-за неправильно разданных прав происходит ошибка, в явном виде никто sql не корректировал. Так что  про TOP 1 єто не в тему 

SELECT SysAdminOperationId, SysAdminUnitId, COUNT(*)
FROM dbo.SysAdminOperationGrantee
GROUP BY SysAdminOperationId, SysAdminUnitId
HAVING COUNT(*) > 1
 
 
SELECT SysAdminOperationId, Position, COUNT(*)
FROM dbo.SysAdminOperationGrantee
GROUP BY SysAdminOperationId, Position
HAVING COUNT(*) > 1

Если любой из этих запросов вернул что-то, то в этом проблема. Необходимо почистить данную таблицу дублирующих данных.

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