После добавления визирования в стандартный раздел Продаж (Opportunity), перестали приходить уведомления визирования в центр уведомлений
Добрый день!
После добавления визирования в стандартный раздел Продаж (Opportunity), перестали приходить уведомления в Центр уведомлений коммуникационной панели. Уведомления были добавлены отметкой чек-бокса "Enable approval in section" в секции "Approval" мастера разделов. Уведомления перестали приходить в том числе и для разделов Order, Invoice, по которым они ранее приходили. Индикатор визирования в коммуникационной панели отображается, но текст уведомления в коммуникационной панели отсутствует. Добавление схемы "OpportunityVisaNotificationProvider", записи "Terrasoft.Configuration.OpportunityVisaNotificationProvider" в таблицу "NotificationProvider" не помогло.
В консоли браузера выводится ошибка :
POST https://salesbpm.elcoin.co.uk/0/rest/VisaDataService/GetVisaEntities [HTTP/2 400 Bad Request 84ms] Error while sending request response status: 400 (Bad Request) request url: https://salesbpm.elcoin.co.uk/0/rest/VisaDataService/GetVisaEntities method: POST request data: {"sysAdminUnitId":"3190ebaf-a3cf-461d-95f6-29115215bd39","requestOptions":{"isPageable":true,"rowCount":15}}
The server encountered an error processing the request. The exception message is '42601: each UNION query must have the same number of columns'. See server logs for more details. The exception stack trace is: at Npgsql.NpgsqlConnector.<DoReadMessage>d__157.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Npgsql.NpgsqlConnector.<ReadMessage>d__156.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at Npgsql.NpgsqlConnector.<ReadMessage>d__156.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Npgsql.NpgsqlConnector.<ReadExpecting>d__163`1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Npgsql.NpgsqlDataReader.<NextResult>d__32.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Npgsql.NpgsqlDataReader.NextResult() at Npgsql.NpgsqlCommand.<Execute>d__71.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Npgsql.NpgsqlCommand.<ExecuteDbDataReader>d__92.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Npgsql.NpgsqlCommand.ExecuteDbDataReader(CommandBehavior behavior) at Polly.Policy.<>c__DisplayClass119_0`1.<Execute>b__0(Context ctx, CancellationToken ct) at Polly.Policy.<>c__DisplayClass129_0`1.<ExecuteInternal>b__0(Context ctx, CancellationToken ct) at Polly.Policy.<>c__DisplayClass103_0.<NoOp>b__1(Context ctx, CancellationToken ct) at Polly.NoOp.NoOpEngine.Implementation[TResult](Func`3 action, Context context, CancellationToken cancellationToken) at Polly.Policy.<>c.<NoOp>b__103_0(Action`2 action, Context context, CancellationToken cancellationToken) at Polly.Policy.ExecuteInternal[TResult](Func`3 action, Context context, CancellationToken cancellationToken) at Polly.Policy.Execute[TResult](Func`3 action, Context context, CancellationToken cancellationToken) at Polly.Policy.Execute[TResult](Func`1 action) at Terrasoft.Core.DB.DBExecutor.FailoverExecuteReader(DbCommand command, Func`1 func) at Terrasoft.Core.DB.DBExecutor.ExecuteCommand[TResult](Func`2 commandExecutionCallback, String sqlText, QueryParameterCollection queryParameters, CancellationToken cancellationToken) at Terrasoft.Core.DB.DBExecutor.InternalExecuteReader(String sqlText, QueryParameterCollection queryParameters, CommandBehavior behavior, CancellationToken cancellationToken) at Terrasoft.DB.PostgreSql.PostgreSqlExecutor.InternalExecuteReader(String sqlText, QueryParameterCollection queryParameters, CommandBehavior behavior, CancellationToken cancellationToken) at Terrasoft.Core.DB.DBExecutor.InternalExecuteReader(String sqlText, QueryParameterCollection queryParameters) at Terrasoft.Configuration.VisaHelper.GetVisaData(Select entitiesSelect) at Terrasoft.Configuration.VisaHelper.GetEntities(RequestOptions requestOptions) at SyncInvokeGetVisaEntities(Object , Object[] , Object[] ) at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc& rpc) at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
Подскажите, пожалуйста, как это можно исправить?
Нравится
Вам нужно доработать ваш OpportunityVisaNotificationProvider, в методе, где вы добавляете колонки, добавить недостающие, они должны быть аналогичны базовому запросу, поскольку используется конструкция UNION различия в колонках быть не должно.
Чтобы увидеть недостающие, вы можете отловить профайлером запрос и там увидите различия.
Дополнено:
В методе GetEntitiesSelect
Должно работать при таком наборе колонок (на разных версиях возможно может быть больше/меньше):
Id","CreatedOn","CreatedById","ModifiedOn","ModifiedById","ProcessListeners","Objective","VisaOwnerId","IsAllowedToDelegate","DelegatedFromId","StatusId","SetById","SetDate","IsCanceled","Comment","VisaSchemaName","Title","VisaObjectId","Date","Account","Contact","VisaSchemaTypeId","VisaTypeName","VisaSchemaCaption","SchemaName","ImageId".
В методе AddColumns
"Id","Objective","StatusId","IsCanceled","SysAdminUnitId","VisaSchemaName","VisaObjectId","Account","Contact","SchemaName","ImageId"
И
public override void SetColumns(List<string> columns) {
columns.Add("Id");
columns.Add("Title");
columns.Add("Date");
columns.Add("Account");
columns.Add("Contact");
columns.Add("VisaObjectId");
columns.Add("SchemaName");
columns.Add("ImageId");
}
Вам нужно доработать ваш OpportunityVisaNotificationProvider, в методе, где вы добавляете колонки, добавить недостающие, они должны быть аналогичны базовому запросу, поскольку используется конструкция UNION различия в колонках быть не должно.
Чтобы увидеть недостающие, вы можете отловить профайлером запрос и там увидите различия.
Дополнено:
В методе GetEntitiesSelect
Должно работать при таком наборе колонок (на разных версиях возможно может быть больше/меньше):
Id","CreatedOn","CreatedById","ModifiedOn","ModifiedById","ProcessListeners","Objective","VisaOwnerId","IsAllowedToDelegate","DelegatedFromId","StatusId","SetById","SetDate","IsCanceled","Comment","VisaSchemaName","Title","VisaObjectId","Date","Account","Contact","VisaSchemaTypeId","VisaTypeName","VisaSchemaCaption","SchemaName","ImageId".
В методе AddColumns
"Id","Objective","StatusId","IsCanceled","SysAdminUnitId","VisaSchemaName","VisaObjectId","Account","Contact","SchemaName","ImageId"
И
public override void SetColumns(List<string> columns) {
columns.Add("Id");
columns.Add("Title");
columns.Add("Date");
columns.Add("Account");
columns.Add("Contact");
columns.Add("VisaObjectId");
columns.Add("SchemaName");
columns.Add("ImageId");
}
Литвинко Павел,
Подскажите,
1) базовый - это BaseVisaNotificationProvider?
2) должна ли быть запись для нового раздела Opportunity в таблице "NotificationProvider" ?
3) нужно ли добавлять копии БП по подобию "OrderVisaBaseSubprocess",
"OrderVisaBaseSubprocessOrder1",
"OrderVisaBaseProcess",
"OrderVisaBaseProcessOrder1" ?