Устаревшие методы в бизнес процессе

Добрый день столкнулся с проблемой , что при выполнении бп выдало ошибку 
Terrasoft.Common.NullOrEmptyException: Невозможно получить экземпляр схемы типа "Terrasoft.Core.Process.PldLeadManagementIdentification2PaladinPackage3Schema"
   в Terrasoft.Core.SchemaManager`1.InitializeSchema(ISchemaManagerItem schemaManagerItem, Assembly assembly)
   в Terrasoft.Core.SchemaManagerItem`1.get_Instance()
   в Terrasoft.Core.Process.BaseProcessElementFactory.CreateSubProcessInstance(ProcessSchemaSubProcess schemaSubProcess)
   в Terrasoft.Core.Process.ProcessElementFactory.CreateFlowElementInstance(ProcessSchemaBaseElement schemaElement)
   в Terrasoft.Core.Process.ProcessComponentSet.CreateFlowElementInstance(String schemaElementName, Boolean isReExecution)
   в Terrasoft.Core.Process.ProcessComponentSet.ForceGetFlowElementInstance(String schemaFlowElementName)
   в Terrasoft.Core.Process.ProcessComponentSet.Execute(String elementName, FlowContext flowContext)
   в Terrasoft.Core.Process.TaskService.Terrasoft.Core.Process.IHandler<Terrasoft.Core.Process.FlowMessages.ExecuteProcessElementRequest>.Receive(ExecuteProcessElementRequest message)
   в Terrasoft.Core.Process.MediatorBuilder.Mediator.Send[TMessage](TMessage message)
   в Terrasoft.Core.Process.FlowVisitor.ProcessQueueItem(FlowVisitorQueueItem queueItem)
   в Terrasoft.Core.Process.FlowVisitor.Dequeue()
   в Terrasoft.Core.Process.FlowService.<>c__DisplayClass32_0.<Terrasoft.Core.Process.IHandler<Terrasoft.Core.Process.FlowMessages.ExecuteProcessElementResponse>.Receive>b__0()
   в Terrasoft.Core.Process.FlowService.InvokeWithHandleCancelRequestedEvent(FlowVisitor visitor, Action action)
   в Terrasoft.Core.Process.FlowService.Terrasoft.Core.Process.IHandler<Terrasoft.Core.Process.FlowMessages.ExecuteProcessElementResponse>.Receive(ExecuteProcessElementResponse message)
   в Terrasoft.Core.Process.MediatorBuilder.Mediator.Send[TMessage](TMessage message)
   в Terrasoft.Core.Process.TaskService.ProcessFlowElementExecuted(Object sender, ProcessActivityAfterEventArgs args)
   в Terrasoft.Core.Process.ProcessFlowElement.OnExecuted(ProcessActivityAfterEventArgs e)
   в Terrasoft.Core.Process.ProcessUserTask.OnExecuted(ProcessActivityAfterEventArgs e)
   в Terrasoft.Core.Process.ProcessActivity.CompleteExecuting(Object[] parameters)
   в Terrasoft.Core.Process.Configuration.ActivityUserTask.CompleteExecuting(Object[] parameters)
   в Terrasoft.Core.Process.ProcessActivity.Complete(Object[] parameters)
   в Terrasoft.Core.Process.ProcessEngineImpl.CompleteExecutingInternal(Guid elementUId, IReadOnlyDictionary`2 parameterValues, ContinueProcessCommand command, Boolean removeMessageFromStore, Object[] parameters)

После обращение тп выяснилось, что в бп устарел метод GetParentApplicationUrl(HttpRequest) 
И посоветовали просто переименовать его в GetParentApplicationUrl(Terrasoft.Web.Http.Abstractions.HttpRequest)
Но проблема осталась, может кто сталкивался с такой проблемой ? 

Нравится

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

Максим, этот процесс Вы сами создавали? Из каких элементов он состоит, на каком вылетает ошибка? Процесс и его подпроцессы в отдельных схемах перед этим сохранили и публиковали?

 

Функция GetParentApplicationUrl, скорее всего, у Вас использована для получения адреса сайта.

Если просто закомментировать код с GetParentApplicationUrl или заменить его вызов на строку с реальным адресом (или читать из системной настройки), всё остальное работает?

 

А по поводу устарения, это относится к совместимости доработок с сайтами на Net Core, там нужно всё делать через классы из Terrasoft.Web.Http.Abstractions. Возможно, в новых версиях будет только так и работать.

В ходе доступа к сайту поддержки выяснилось, что причина, по которой происходит ошибка при публикации процесса, заключается в вызове метода GetParentApplicationUrl, а именно в параметре, который нужно передавать в метод.
Передавать нужно экземпляр класса HttpRequest из namespace Terrasoft.Web.Http.Abstractions, который можно определить так: HttpContext.Current.Request, например:

HttpRequest request = HttpContext.Current.Request;
applicationUrl = Terrasoft.Web.Common.WebUtilities.GetParentApplicationUrl(request);

При этом нужно добавить namespace "Terrasoft.Web.Http.Abstractions" и убрать "System.Web".

Вторая ошибка связана с LeadId  и появляется по причине использования неизвестного параметра. Получить параметр в методе можно так:

Get<Guid>("Код параметра")

 

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

Все прикрепили согласно инструкциям, заменили аргументы, но всеравно ловим ошибку непонятно из-за чего такое ощущение что просто не видит изменений

На всякий случай ещё раз сохраните и опубликуйте.

Откройте исходный код схемы и найдите строки с этими номерами.

Может, не везде в коде исправили.

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