Проблемы и способы устранения

💥 - проблема изучается и ищется вариант решения ✅ - решение найдено и зафиксировано 📛 - на текущий момент решение отсутствует

✅ Ошибка загрузки DLL в глобальных модулях при обновлении библиотек

При обновлении пакетов, если были установлены новые внешние пакеты, в глобальных модулях возникают ошибки следующего вида:

ERROR 2020-07-31 12:05:33,589 [14] EleWise.ELMA.Logging.Logger - Error at load types from assembly HMS.Configuration, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null System.IO.FileLoadException: Could not load file or assembly 'DiadocApi, Version=2.2.0.0, Culture=neutral, PublicKeyToken=d18fd4c7ad3c243e' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'DiadocApi, Version=2.2.0.0, Culture=neutral, PublicKeyToken=d18fd4c7ad3c243e'


Варианта проблемы может быть два:

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

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

✅ System.Data.SqlClient.SqlException (0x80131904): Invalid column name 'Status'

При попутке обновления страницы в мониторе процессов с ошибками возникает следующее окно с ошибкой:

image-1596520973170.png

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

В логах сервера видим следующее:

ERROR 2020-08-04 09:00:05,925 [114] EleWise.ELMA.Workflow.Processes.Web.Controllers.WorkflowQueueController - System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> NHibernate.Exceptions.GenericADOException: could not execute query
[ SELECT top(20) tv.Id as Id613_0_, tv.Uid as Uid613_0_, tv.ElementUid as ElementUid613_0_, tv.CreationDate as Creation4_613_0_, tv.Attempt as Attempt613_0_, tv.LastExecuteDate as LastExec6_613_0_, tv.NextExecuteDate as NextExec7_613_0_, tv.LastError as LastError613_0_, tv.SkipExecution as SkipExec9_613_0_, tv.SkipConnectorUid as SkipCon10_613_0_, tv.Timeout as Timeout613_0_, tv.LastExceptionData as LastExc12_613_0_, tv.ServerConnectionUid as ServerC13_613_0_, tv.Instance as Instance613_0_, tv.Author as Author613_0_, tv.BackgroundOperation as Backgro16_613_0_ FROM (SELECT wqi.Id, wqi.Uid, wqi.Instance, wqi.ElementUid, wqi.CreationDate, wqi.Attempt, wqi.LastExecuteDate, wqi.NextExecuteDate, wqi.LastError, wqi.Author, wqi.SkipExecution, wqi.SkipConnectorUid, wqi.Timeout, wqi.LastExceptionData, 0 OnceExecuteStatus, wqi.ServerConnectionUid, wqi.BackgroundOperation
FROM WorkflowQueueItem wqi WITH(NOLOCK)
LEFT JOIN WorkflowInstance wi WITH(NOLOCK) ON wi.Id = wqi.Instance
LEFT JOIN WorkflowProcess wp WITH(NOLOCK) ON wi.Process = wp.Id
LEFT JOIN ProcessHeader ph WITH(NOLOCK) ON wp.Header = ph.Id
WHERE Attempt > 0 ) tv ORDER BY Status ]
[SQL: SELECT top(20) tv.Id as Id613_0_, tv.Uid as Uid613_0_, tv.ElementUid as ElementUid613_0_, tv.CreationDate as Creation4_613_0_, tv.Attempt as Attempt613_0_, tv.LastExecuteDate as LastExec6_613_0_, tv.NextExecuteDate as NextExec7_613_0_, tv.LastError as LastError613_0_, tv.SkipExecution as SkipExec9_613_0_, tv.SkipConnectorUid as SkipCon10_613_0_, tv.Timeout as Timeout613_0_, tv.LastExceptionData as LastExc12_613_0_, tv.ServerConnectionUid as ServerC13_613_0_, tv.Instance as Instance613_0_, tv.Author as Author613_0_, tv.BackgroundOperation as Backgro16_613_0_ FROM (SELECT wqi.Id, wqi.Uid, wqi.Instance, wqi.ElementUid, wqi.CreationDate, wqi.Attempt, wqi.LastExecuteDate, wqi.NextExecuteDate, wqi.LastError, wqi.Author, wqi.SkipExecution, wqi.SkipConnectorUid, wqi.Timeout, wqi.LastExceptionData, 0 OnceExecuteStatus, wqi.ServerConnectionUid, wqi.BackgroundOperation
FROM WorkflowQueueItem wqi WITH(NOLOCK)
LEFT JOIN WorkflowInstance wi WITH(NOLOCK) ON wi.Id = wqi.Instance
LEFT JOIN WorkflowProcess wp WITH(NOLOCK) ON wi.Process = wp.Id
LEFT JOIN ProcessHeader ph WITH(NOLOCK) ON wp.Header = ph.Id
WHERE Attempt > 0 ) tv ORDER BY Status ] ---> System.Data.SqlClient.SqlException: Invalid column name 'Status'.


Получено решение от СП вендора:

Создать резервную копию базы данных. После этого выполнить следующий запрос в БД:
delete from BlobStoreHolder where [Key] like '%WorkflowQueueItems%'
Он удалит все закешированные данные по таблице, в которой возникает ошибка.

Обязательно надо перезапустить сервер.
Для процессов, которые прерваны, но имеют счетчик ошибок 9+ придется ручками Выполнить обработку, чтобы они ушли из списка:

image-1596521847871.png

✅ Ошибка JSON на странице "Очередь исполнения"

При переходе с версии 3.13 (и возможно более ранних) на 3.15 может возникнуть вот такая проблема:

image-1598868529415.png

А в логах видим:

ERROR [CallContextUid=366d0238-be7b-46e0-b0a2-c74447312d0b] 2020-08-31 12:28:32,965 [82] EleWise.ELMA.Workflow.Processes.Web.Controllers.WorkflowQueueController - System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> NHibernate.Exceptions.GenericADOException: could not execute query
[ SELECT top(15) tv.Id as Id509_0_, tv.Uid as Uid509_0_, tv.ElementUid as ElementUid509_0_, tv.CreationDate as Creation4_509_0_, tv.Attempt as Attempt509_0_, tv.LastExecuteDate as LastExec6_509_0_, tv.NextExecuteDate as NextExec7_509_0_, tv.LastError as LastError509_0_, tv.SkipExecution as SkipExec9_509_0_, tv.SkipConnectorUid as SkipCon10_509_0_, tv.Timeout as Timeout509_0_, tv.LastExceptionData as LastExc12_509_0_, tv.ServerConnectionUid as ServerC13_509_0_, tv.Instance as Instance509_0_, tv.Author as Author509_0_, tv.BackgroundOperation as Backgro16_509_0_ FROM (SELECT wqi.Id, wqi.Uid, wqi.Instance, wqi.ElementUid, wqi.CreationDate, wqi.Attempt, wqi.LastExecuteDate, wqi.NextExecuteDate, wqi.LastError, wqi.Author, wqi.SkipExecution, wqi.SkipConnectorUid, wqi.Timeout, wqi.LastExceptionData, 0 OnceExecuteStatus, wqi.ServerConnectionUid, wqi.BackgroundOperation
FROM WorkflowQueueItem wqi WITH(NOLOCK)
LEFT JOIN WorkflowInstance wi WITH(NOLOCK) ON wi.Id = wqi.Instance
LEFT JOIN WorkflowProcess wp WITH(NOLOCK) ON wi.Process = wp.Id
LEFT JOIN ProcessHeader ph WITH(NOLOCK) ON wp.Header = ph.Id
WHERE Attempt = 0 ) tv ORDER BY Status ]
[SQL: SELECT top(15) tv.Id as Id509_0_, tv.Uid as Uid509_0_, tv.ElementUid as ElementUid509_0_, tv.CreationDate as Creation4_509_0_, tv.Attempt as Attempt509_0_, tv.LastExecuteDate as LastExec6_509_0_, tv.NextExecuteDate as NextExec7_509_0_, tv.LastError as LastError509_0_, tv.SkipExecution as SkipExec9_509_0_, tv.SkipConnectorUid as SkipCon10_509_0_, tv.Timeout as Timeout509_0_, tv.LastExceptionData as LastExc12_509_0_, tv.ServerConnectionUid as ServerC13_509_0_, tv.Instance as Instance509_0_, tv.Author as Author509_0_, tv.BackgroundOperation as Backgro16_509_0_ FROM (SELECT wqi.Id, wqi.Uid, wqi.Instance, wqi.ElementUid, wqi.CreationDate, wqi.Attempt, wqi.LastExecuteDate, wqi.NextExecuteDate, wqi.LastError, wqi.Author, wqi.SkipExecution, wqi.SkipConnectorUid, wqi.Timeout, wqi.LastExceptionData, 0 OnceExecuteStatus, wqi.ServerConnectionUid, wqi.BackgroundOperation
FROM WorkflowQueueItem wqi WITH(NOLOCK)
LEFT JOIN WorkflowInstance wi WITH(NOLOCK) ON wi.Id = wqi.Instance
LEFT JOIN WorkflowProcess wp WITH(NOLOCK) ON wi.Process = wp.Id
LEFT JOIN ProcessHeader ph WITH(NOLOCK) ON wp.Header = ph.Id
WHERE Attempt = 0 ) tv ORDER BY Status ] ---> System.Data.SqlClient.SqlException: Invalid column name 'Status'.


В результате обновления изменились параметры сортировки по полю Статус. Необходимо просто выбрать колонку сортировку "мышкой" по колонке Статус или какой-то другой и ошибка уйдет.

image-1598870528011.png