Добрый день столкнулся с проблемой , что при выполнении бп выдало ошибку 

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.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..Receive>b__0()

   в Terrasoft.Core.Process.FlowService.InvokeWithHandleCancelRequestedEvent(FlowVisitor visitor, Action action)

   в Terrasoft.Core.Process.FlowService.Terrasoft.Core.Process.IHandler.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&lt;Guid&gt;("Код параметра")

 

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

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

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

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

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

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

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

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

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

Нравится

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

Попробуйте onRender. Была похожая необходимость

Парамонов Роман,

да, так работает, спасибо!

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

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

Нравится

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

Может быть тогда привязывать изменение на самого себя?

"SmrOwner": {
    dataValueType: Terrasoft.DataValueType.LOOKUP,
        dependencies: [
        {
            columns: ["SmrOwner"],
            methodName: "changeOwnerInformation"
        }
    ]
}

А вот уже внутри метода присваивать все необходимые поля.

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

В метод приходят аргументы, среди которых есть и название измененного атрибута, но я не помню, какой он по счету. Точно могу только сказать, что первый аргумент - это новое значение.
Сделайте точку останова внутри метода и посмотрите значение объекта "arguments", будте понятно.

Действительно)

arguments[1]

ага, спасибо) всего два аргумента (первый пока что всегда undefined, второй - название поля)

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