diff --git a/src/ReC.Application/Common/Procedures/DeleteProcedure/DeleteObjectProcedure.cs b/src/ReC.Application/Common/Procedures/DeleteProcedure/DeleteObjectProcedure.cs index 079f1fa..ecc2721 100644 --- a/src/ReC.Application/Common/Procedures/DeleteProcedure/DeleteObjectProcedure.cs +++ b/src/ReC.Application/Common/Procedures/DeleteProcedure/DeleteObjectProcedure.cs @@ -36,29 +36,33 @@ public class DeleteObjectProcedureHandler(IRepository repo, IOptionsMonitor Handle(DeleteObjectProcedure request, CancellationToken cancel) { - var parameters = new[] + var execSql = new StringBuilder("EXEC @RC = [dbo].[PRREC_DELETE_OBJECT]"); + var parameters = new List(); + var separator = ' '; + + void Add(string name, object? value) { - new SqlParameter("@pENTITY", request.Entity ?? (object)DBNull.Value), - new SqlParameter("@pSTART", request.Start.ToString()), - new SqlParameter("@pEND", request.End.ToString()), - new SqlParameter("@pFORCE", (object?)request.Force ?? DBNull.Value) - }; + if (value is null) return; + execSql.AppendLine($"{separator}@{name} = @{name}"); + separator = ','; + parameters.Add(new SqlParameter($"@{name}", value)); + } + + Add("pENTITY", request.Entity); + Add("pSTART", request.Start.ToString()); + Add("pEND", request.End.ToString()); + Add("pFORCE", request.Force); + + var sql = new StringBuilder() + .AppendLine("DECLARE @RC SMALLINT = 0;") + .Append(execSql).AppendLine(";") + .AppendLine("SELECT @RC;") + .ToString(); try { - var sql = new StringBuilder() - .AppendLine("DECLARE @RC SMALLINT = 0;") - .AppendLine("EXEC @RC = [dbo].[PRREC_DELETE_OBJECT]") - .AppendLine(" @pENTITY = @pENTITY,") - .AppendLine(" @pSTART = @pSTART,") - .AppendLine(" @pEND = @pEND,") - .AppendLine(" @pFORCE = @pFORCE;") - .AppendLine("SELECT @RC;") - .ToString(); + var result = await repo.ExecuteQueryRawAsync(sql, parameters.ToArray(), cancel); - var result = await repo.ExecuteQueryRawAsync(sql, parameters, cancel); - - // The stored procedure returns 0 on success, error codes > 0 on failure if (result > 0) { throw new DeleteObjectFailedException(request, $"DeleteObject stored procedure failed with error code: {result}"); diff --git a/src/ReC.Application/Common/Procedures/InsertProcedure/InsertObjectProcedure.cs b/src/ReC.Application/Common/Procedures/InsertProcedure/InsertObjectProcedure.cs index ed5d2b7..dd13701 100644 --- a/src/ReC.Application/Common/Procedures/InsertProcedure/InsertObjectProcedure.cs +++ b/src/ReC.Application/Common/Procedures/InsertProcedure/InsertObjectProcedure.cs @@ -37,132 +37,90 @@ public class InsertObjectProcedureHandler(IRepository repo, IOptionsMonitor Handle(InsertObjectProcedure request, CancellationToken cancel) { - var parameters = new[] + var sql = new StringBuilder("EXEC [dbo].[PRREC_INSERT_OBJECT]"); + var parameters = new List(); + var separator = ' '; + + void Add(string name, object? value, System.Data.SqlDbType? dbType = null) { - new SqlParameter("@pENTITY", request.Entity ?? (object)DBNull.Value), + if (value is null) return; + sql.AppendLine($"{separator}@{name} = @{name}"); + separator = ','; + if (dbType.HasValue) + parameters.Add(new SqlParameter($"@{name}", dbType.Value) { Value = value }); + else + parameters.Add(new SqlParameter($"@{name}", value)); + } - new SqlParameter("@pADDED_WHO", (object?)request.AddedWho ?? DBNull.Value), - new SqlParameter("@pADDED_WHEN", (object?)DateTime.UtcNow ?? DBNull.Value), + Add("pENTITY", request.Entity); + Add("pADDED_WHO", request.AddedWho); + Add("pADDED_WHEN", DateTime.UtcNow); - new SqlParameter("@pACTION_PROFILE_ID", (object?)request.Action?.ProfileId ?? DBNull.Value), - new SqlParameter("@pACTION_ACTIVE", (object?)request.Action?.Active ?? DBNull.Value), - new SqlParameter("@pACTION_SEQUENCE", System.Data.SqlDbType.TinyInt) { Value = (object?)request.Action?.Sequence ?? DBNull.Value }, - new SqlParameter("@pACTION_ENDPOINT_ID", (object?)request.Action?.EndpointId ?? DBNull.Value), - new SqlParameter("@pACTION_ENDPOINT_AUTH_ID", (object?)request.Action?.EndpointAuthId ?? DBNull.Value), - new SqlParameter("@pACTION_ENDPOINT_PARAMS_ID", System.Data.SqlDbType.SmallInt) { Value = (object?)request.Action?.EndpointParamsId ?? DBNull.Value }, - new SqlParameter("@pACTION_SQL_CONNECTION_ID", System.Data.SqlDbType.SmallInt) { Value = (object?)request.Action?.SqlConnectionId ?? DBNull.Value }, - new SqlParameter("@pACTION_TYPE_ID", System.Data.SqlDbType.TinyInt) { Value = request.Action?.TypeId is not null ? (object)(byte)request.Action.TypeId : DBNull.Value }, - new SqlParameter("@pACTION_PRE_SQL", (object?)request.Action?.PreSql ?? DBNull.Value), - new SqlParameter("@pACTION_HEADER_SQL", (object?)request.Action?.HeaderSql ?? DBNull.Value), - new SqlParameter("@pACTION_BODY_SQL", (object?)request.Action?.BodySql ?? DBNull.Value), - new SqlParameter("@pACTION_POST_SQL", (object?)request.Action?.PostSql ?? DBNull.Value), - new SqlParameter("@pACTION_ERROR_ACTION_ID", System.Data.SqlDbType.TinyInt) { Value = (object?)request.Action?.ErrorActionId ?? DBNull.Value }, + Add("pACTION_PROFILE_ID", request.Action?.ProfileId); + Add("pACTION_ACTIVE", request.Action?.Active); + Add("pACTION_SEQUENCE", request.Action?.Sequence, System.Data.SqlDbType.TinyInt); + Add("pACTION_ENDPOINT_ID", request.Action?.EndpointId); + Add("pACTION_ENDPOINT_AUTH_ID", request.Action?.EndpointAuthId); + Add("pACTION_ENDPOINT_PARAMS_ID", request.Action?.EndpointParamsId, System.Data.SqlDbType.SmallInt); + Add("pACTION_SQL_CONNECTION_ID", request.Action?.SqlConnectionId, System.Data.SqlDbType.SmallInt); + Add("pACTION_TYPE_ID", request.Action?.TypeId is not null ? (byte)request.Action.TypeId : null, System.Data.SqlDbType.TinyInt); + Add("pACTION_PRE_SQL", request.Action?.PreSql); + Add("pACTION_HEADER_SQL", request.Action?.HeaderSql); + Add("pACTION_BODY_SQL", request.Action?.BodySql); + Add("pACTION_POST_SQL", request.Action?.PostSql); + Add("pACTION_ERROR_ACTION_ID", request.Action?.ErrorActionId, System.Data.SqlDbType.TinyInt); - new SqlParameter("@pENDPOINT_ACTIVE", (object?)request.Endpoint?.Active ?? DBNull.Value), - new SqlParameter("@pENDPOINT_DESCRIPTION", (object?)request.Endpoint?.Description ?? DBNull.Value), - new SqlParameter("@pENDPOINT_URI", (object?)request.Endpoint?.Uri ?? DBNull.Value), + Add("pENDPOINT_ACTIVE", request.Endpoint?.Active); + Add("pENDPOINT_DESCRIPTION", request.Endpoint?.Description); + Add("pENDPOINT_URI", request.Endpoint?.Uri); - new SqlParameter("@pENDPOINT_AUTH_ACTIVE", (object?)request.EndpointAuth?.Active ?? DBNull.Value), - new SqlParameter("@pENDPOINT_AUTH_DESCRIPTION", (object?)request.EndpointAuth?.Description ?? DBNull.Value), - new SqlParameter("@pENDPOINT_AUTH_TYPE_ID", System.Data.SqlDbType.TinyInt) { Value = (object?)request.EndpointAuth?.TypeId ?? DBNull.Value }, - new SqlParameter("@pENDPOINT_AUTH_API_KEY", (object?)request.EndpointAuth?.ApiKey ?? DBNull.Value), - new SqlParameter("@pENDPOINT_AUTH_API_VALUE", (object?)request.EndpointAuth?.ApiValue ?? DBNull.Value), - new SqlParameter("@pENDPOINT_AUTH_API_KEY_ADD_TO_ID", (object?)request.EndpointAuth?.ApiKeyAddToId ?? DBNull.Value), - new SqlParameter("@pENDPOINT_AUTH_TOKEN", (object?)request.EndpointAuth?.Token ?? DBNull.Value), - new SqlParameter("@pENDPOINT_AUTH_USERNAME", (object?)request.EndpointAuth?.Username ?? DBNull.Value), - new SqlParameter("@pENDPOINT_AUTH_PASSWORD", (object?)request.EndpointAuth?.Password ?? DBNull.Value), - new SqlParameter("@pENDPOINT_AUTH_DOMAIN", (object?)request.EndpointAuth?.Domain ?? DBNull.Value), - new SqlParameter("@pENDPOINT_AUTH_WORKSTATION", (object?)request.EndpointAuth?.Workstation ?? DBNull.Value), + Add("pENDPOINT_AUTH_ACTIVE", request.EndpointAuth?.Active); + Add("pENDPOINT_AUTH_DESCRIPTION", request.EndpointAuth?.Description); + Add("pENDPOINT_AUTH_TYPE_ID", request.EndpointAuth?.TypeId, System.Data.SqlDbType.TinyInt); + Add("pENDPOINT_AUTH_API_KEY", request.EndpointAuth?.ApiKey); + Add("pENDPOINT_AUTH_API_VALUE", request.EndpointAuth?.ApiValue); + Add("pENDPOINT_AUTH_API_KEY_ADD_TO_ID", request.EndpointAuth?.ApiKeyAddToId); + Add("pENDPOINT_AUTH_TOKEN", request.EndpointAuth?.Token); + Add("pENDPOINT_AUTH_USERNAME", request.EndpointAuth?.Username); + Add("pENDPOINT_AUTH_PASSWORD", request.EndpointAuth?.Password); + Add("pENDPOINT_AUTH_DOMAIN", request.EndpointAuth?.Domain); + Add("pENDPOINT_AUTH_WORKSTATION", request.EndpointAuth?.Workstation); - new SqlParameter("@pPROFILE_ACTIVE", (object?)request.Profile?.Active ?? DBNull.Value), - new SqlParameter("@pPROFILE_TYPE_ID", System.Data.SqlDbType.TinyInt) { Value = (object?)request.Profile?.TypeId ?? DBNull.Value }, - new SqlParameter("@pPROFILE_MANDANTOR", (object?)request.Profile?.Mandantor ?? DBNull.Value), - new SqlParameter("@pPROFILE_NAME", (object?)request.Profile?.Name ?? DBNull.Value), - new SqlParameter("@pPROFILE_DESCRIPTION", (object?)request.Profile?.Description ?? DBNull.Value), - new SqlParameter("@pPROFILE_LOG_LEVEL_ID", System.Data.SqlDbType.TinyInt) { Value = (object?)request.Profile?.LogLevelId ?? DBNull.Value }, - new SqlParameter("@pPROFILE_LANGUAGE_ID", System.Data.SqlDbType.SmallInt) { Value = (object?)request.Profile?.LanguageId ?? DBNull.Value }, + Add("pPROFILE_ACTIVE", request.Profile?.Active); + Add("pPROFILE_TYPE_ID", request.Profile?.TypeId, System.Data.SqlDbType.TinyInt); + Add("pPROFILE_MANDANTOR", request.Profile?.Mandantor); + Add("pPROFILE_NAME", request.Profile?.Name); + Add("pPROFILE_DESCRIPTION", request.Profile?.Description); + Add("pPROFILE_LOG_LEVEL_ID", request.Profile?.LogLevelId, System.Data.SqlDbType.TinyInt); + Add("pPROFILE_LANGUAGE_ID", request.Profile?.LanguageId, System.Data.SqlDbType.SmallInt); - new SqlParameter("@pRESULT_ACTION_ID", (object?)request.Result?.ActionId ?? DBNull.Value), - new SqlParameter("@pRESULT_STATUS_ID", System.Data.SqlDbType.SmallInt) { Value = (object?)request.Result?.StatusId ?? DBNull.Value }, - new SqlParameter("@pRESULT_HEADER", (object?)request.Result?.Header ?? DBNull.Value), - new SqlParameter("@pRESULT_BODY", (object?)request.Result?.Body ?? DBNull.Value), - new SqlParameter("@pRESULT_INFO", (object?)request.Result?.Info ?? DBNull.Value), - new SqlParameter("@pRESULT_ERROR", (object?)request.Result?.Error ?? DBNull.Value), - new SqlParameter("@pRESULT_TYPE_ID", System.Data.SqlDbType.TinyInt) { Value = request.Result?.Type is not null ? (object)(byte)request.Result.Type : DBNull.Value }, + Add("pRESULT_ACTION_ID", request.Result?.ActionId); + Add("pRESULT_STATUS_ID", request.Result?.StatusId, System.Data.SqlDbType.SmallInt); + Add("pRESULT_TYPE_ID", request.Result?.Type is not null ? (byte)request.Result.Type : null, System.Data.SqlDbType.TinyInt); + Add("pRESULT_HEADER", request.Result?.Header); + Add("pRESULT_BODY", request.Result?.Body); + Add("pRESULT_INFO", request.Result?.Info); + Add("pRESULT_ERROR", request.Result?.Error); - new SqlParameter("@pENDPOINT_PARAMS_ACTIVE", (object?)request.EndpointParams?.Active ?? DBNull.Value), - new SqlParameter("@pENDPOINT_PARAMS_DESCRIPTION", (object?)request.EndpointParams?.Description ?? DBNull.Value), - new SqlParameter("@pENDPOINT_PARAMS_GROUP_ID", System.Data.SqlDbType.SmallInt) { Value = (object?)request.EndpointParams?.GroupId ?? DBNull.Value }, - new SqlParameter("@pENDPOINT_PARAMS_SEQUENCE", System.Data.SqlDbType.TinyInt) { Value = (object?)request.EndpointParams?.Sequence ?? DBNull.Value }, - new SqlParameter("@pENDPOINT_PARAMS_KEY", (object?)request.EndpointParams?.Key ?? DBNull.Value), - new SqlParameter("@pENDPOINT_PARAMS_VALUE", (object?)request.EndpointParams?.Value ?? DBNull.Value), + Add("pENDPOINT_PARAMS_ACTIVE", request.EndpointParams?.Active); + Add("pENDPOINT_PARAMS_DESCRIPTION", request.EndpointParams?.Description); + Add("pENDPOINT_PARAMS_GROUP_ID", request.EndpointParams?.GroupId, System.Data.SqlDbType.SmallInt); + Add("pENDPOINT_PARAMS_SEQUENCE", request.EndpointParams?.Sequence, System.Data.SqlDbType.TinyInt); + Add("pENDPOINT_PARAMS_KEY", request.EndpointParams?.Key); + Add("pENDPOINT_PARAMS_VALUE", request.EndpointParams?.Value); - new SqlParameter - { - ParameterName = "@oGUID", - SqlDbType = System.Data.SqlDbType.BigInt, - Direction = System.Data.ParameterDirection.Output - } - }; - - var sql = new StringBuilder() - .AppendLine("EXEC [dbo].[PRREC_INSERT_OBJECT]") - .AppendLine(" @pENTITY = @pENTITY,") - .AppendLine(" @pADDED_WHO = @pADDED_WHO,") - .AppendLine(" @pADDED_WHEN = @pADDED_WHEN,") - .AppendLine(" @pACTION_PROFILE_ID = @pACTION_PROFILE_ID,") - .AppendLine(" @pACTION_ACTIVE = @pACTION_ACTIVE,") - .AppendLine(" @pACTION_SEQUENCE = @pACTION_SEQUENCE,") - .AppendLine(" @pACTION_ENDPOINT_ID = @pACTION_ENDPOINT_ID,") - .AppendLine(" @pACTION_ENDPOINT_AUTH_ID = @pACTION_ENDPOINT_AUTH_ID,") - .AppendLine(" @pACTION_ENDPOINT_PARAMS_ID = @pACTION_ENDPOINT_PARAMS_ID,") - .AppendLine(" @pACTION_SQL_CONNECTION_ID = @pACTION_SQL_CONNECTION_ID,") - .AppendLine(" @pACTION_TYPE_ID = @pACTION_TYPE_ID,") - .AppendLine(" @pACTION_PRE_SQL = @pACTION_PRE_SQL,") - .AppendLine(" @pACTION_HEADER_SQL = @pACTION_HEADER_SQL,") - .AppendLine(" @pACTION_BODY_SQL = @pACTION_BODY_SQL,") - .AppendLine(" @pACTION_POST_SQL = @pACTION_POST_SQL,") - .AppendLine(" @pACTION_ERROR_ACTION_ID = @pACTION_ERROR_ACTION_ID,") - .AppendLine(" @pENDPOINT_ACTIVE = @pENDPOINT_ACTIVE,") - .AppendLine(" @pENDPOINT_DESCRIPTION = @pENDPOINT_DESCRIPTION,") - .AppendLine(" @pENDPOINT_URI = @pENDPOINT_URI,") - .AppendLine(" @pENDPOINT_AUTH_ACTIVE = @pENDPOINT_AUTH_ACTIVE,") - .AppendLine(" @pENDPOINT_AUTH_DESCRIPTION = @pENDPOINT_AUTH_DESCRIPTION,") - .AppendLine(" @pENDPOINT_AUTH_TYPE_ID = @pENDPOINT_AUTH_TYPE_ID,") - .AppendLine(" @pENDPOINT_AUTH_API_KEY = @pENDPOINT_AUTH_API_KEY,") - .AppendLine(" @pENDPOINT_AUTH_API_VALUE = @pENDPOINT_AUTH_API_VALUE,") - .AppendLine(" @pENDPOINT_AUTH_API_KEY_ADD_TO_ID = @pENDPOINT_AUTH_API_KEY_ADD_TO_ID,") - .AppendLine(" @pENDPOINT_AUTH_TOKEN = @pENDPOINT_AUTH_TOKEN,") - .AppendLine(" @pENDPOINT_AUTH_USERNAME = @pENDPOINT_AUTH_USERNAME,") - .AppendLine(" @pENDPOINT_AUTH_PASSWORD = @pENDPOINT_AUTH_PASSWORD,") - .AppendLine(" @pENDPOINT_AUTH_DOMAIN = @pENDPOINT_AUTH_DOMAIN,") - .AppendLine(" @pENDPOINT_AUTH_WORKSTATION = @pENDPOINT_AUTH_WORKSTATION,") - .AppendLine(" @pPROFILE_ACTIVE = @pPROFILE_ACTIVE,") - .AppendLine(" @pPROFILE_TYPE_ID = @pPROFILE_TYPE_ID,") - .AppendLine(" @pPROFILE_MANDANTOR = @pPROFILE_MANDANTOR,") - .AppendLine(" @pPROFILE_NAME = @pPROFILE_NAME,") - .AppendLine(" @pPROFILE_DESCRIPTION = @pPROFILE_DESCRIPTION,") - .AppendLine(" @pPROFILE_LOG_LEVEL_ID = @pPROFILE_LOG_LEVEL_ID,") - .AppendLine(" @pPROFILE_LANGUAGE_ID = @pPROFILE_LANGUAGE_ID,") - .AppendLine(" @pRESULT_ACTION_ID = @pRESULT_ACTION_ID,") - .AppendLine(" @pRESULT_STATUS_ID = @pRESULT_STATUS_ID,") - .AppendLine(" @pRESULT_HEADER = @pRESULT_HEADER,") - .AppendLine(" @pRESULT_BODY = @pRESULT_BODY,") - .AppendLine(" @pRESULT_INFO = @pRESULT_INFO,") - .AppendLine(" @pRESULT_ERROR = @pRESULT_ERROR,") - .AppendLine(" @pRESULT_TYPE_ID = @pRESULT_TYPE_ID,") - .AppendLine(" @pENDPOINT_PARAMS_ACTIVE = @pENDPOINT_PARAMS_ACTIVE,") - .AppendLine(" @pENDPOINT_PARAMS_DESCRIPTION = @pENDPOINT_PARAMS_DESCRIPTION,") - .AppendLine(" @pENDPOINT_PARAMS_GROUP_ID = @pENDPOINT_PARAMS_GROUP_ID,") - .AppendLine(" @pENDPOINT_PARAMS_SEQUENCE = @pENDPOINT_PARAMS_SEQUENCE,") - .AppendLine(" @pENDPOINT_PARAMS_KEY = @pENDPOINT_PARAMS_KEY,") - .AppendLine(" @pENDPOINT_PARAMS_VALUE = @pENDPOINT_PARAMS_VALUE,") - .AppendLine(" @oGUID = @oGUID OUTPUT") - .ToString(); + // output parameter — always added + sql.AppendLine($"{separator}@oGUID = @oGUID OUTPUT"); + parameters.Add(new SqlParameter + { + ParameterName = "@oGUID", + SqlDbType = System.Data.SqlDbType.BigInt, + Direction = System.Data.ParameterDirection.Output + }); try { - await repo.ExecuteQueryRawAsync(sql, parameters, cancel); + await repo.ExecuteQueryRawAsync(sql.ToString(), parameters.ToArray(), cancel); } catch (SqlException ex) { diff --git a/src/ReC.Application/Common/Procedures/UpdateProcedure/UpdateObjectProcedure.cs b/src/ReC.Application/Common/Procedures/UpdateProcedure/UpdateObjectProcedure.cs index eb6721a..5c05772 100644 --- a/src/ReC.Application/Common/Procedures/UpdateProcedure/UpdateObjectProcedure.cs +++ b/src/ReC.Application/Common/Procedures/UpdateProcedure/UpdateObjectProcedure.cs @@ -37,130 +37,89 @@ public class UpdateObjectProcedureHandler(IRepository repo, IOptionsMonitor Handle(UpdateObjectProcedure request, CancellationToken cancel) { - var parameters = new[] + var execSql = new StringBuilder("EXEC @RC = [dbo].[PRREC_UPDATE_OBJECT]"); + var parameters = new List(); + var separator = ' '; + + void Add(string name, object? value, System.Data.SqlDbType? dbType = null) { - new SqlParameter("@pENTITY", request.Entity ?? (object)DBNull.Value), - new SqlParameter("@pGUID", (object?)request.Id ?? DBNull.Value), + if (value is null) return; + execSql.AppendLine($"{separator}@{name} = @{name}"); + separator = ','; + if (dbType.HasValue) + parameters.Add(new SqlParameter($"@{name}", dbType.Value) { Value = value }); + else + parameters.Add(new SqlParameter($"@{name}", value)); + } - new SqlParameter("@pCHANGED_WHO", (object?)request.ChangedWho ?? DBNull.Value), - new SqlParameter("@pCHANGED_WHEN", (object?)DateTime.UtcNow ?? DBNull.Value), + Add("pENTITY", request.Entity); + Add("pGUID", request.Id); + Add("pCHANGED_WHO", request.ChangedWho); + Add("pCHANGED_WHEN", DateTime.UtcNow); - new SqlParameter("@pACTION_PROFILE_ID", (object?)request.Action.ProfileId ?? DBNull.Value), - new SqlParameter("@pACTION_ACTIVE", (object?)request.Action.Active ?? DBNull.Value), - new SqlParameter("@pACTION_SEQUENCE", System.Data.SqlDbType.TinyInt) { Value = (object?)request.Action.Sequence ?? DBNull.Value }, - new SqlParameter("@pACTION_ENDPOINT_ID", (object?)request.Action.EndpointId ?? DBNull.Value), - new SqlParameter("@pACTION_ENDPOINT_AUTH_ID", (object?)request.Action.EndpointAuthId ?? DBNull.Value), - new SqlParameter("@pACTION_ENDPOINT_PARAMS_ID", System.Data.SqlDbType.SmallInt) { Value = (object?)request.Action.EndpointParamsId ?? DBNull.Value }, - new SqlParameter("@pACTION_SQL_CONNECTION_ID", System.Data.SqlDbType.SmallInt) { Value = (object?)request.Action.SqlConnectionId ?? DBNull.Value }, - new SqlParameter("@pACTION_TYPE_ID", System.Data.SqlDbType.TinyInt) { Value = (object?)request.Action.TypeId ?? DBNull.Value }, - new SqlParameter("@pACTION_PRE_SQL", (object?)request.Action.PreSql ?? DBNull.Value), - new SqlParameter("@pACTION_HEADER_SQL", (object?)request.Action.HeaderSql ?? DBNull.Value), - new SqlParameter("@pACTION_BODY_SQL", (object?)request.Action.BodySql ?? DBNull.Value), - new SqlParameter("@pACTION_POST_SQL", (object?)request.Action.PostSql ?? DBNull.Value), - new SqlParameter("@pACTION_ERROR_ACTION_ID", System.Data.SqlDbType.TinyInt) { Value = (object?)request.Action.ErrorActionId ?? DBNull.Value }, + Add("pACTION_PROFILE_ID", request.Action.ProfileId); + Add("pACTION_ACTIVE", request.Action.Active); + Add("pACTION_SEQUENCE", request.Action.Sequence, System.Data.SqlDbType.TinyInt); + Add("pACTION_ENDPOINT_ID", request.Action.EndpointId); + Add("pACTION_ENDPOINT_AUTH_ID", request.Action.EndpointAuthId); + Add("pACTION_ENDPOINT_PARAMS_ID", request.Action.EndpointParamsId, System.Data.SqlDbType.SmallInt); + Add("pACTION_SQL_CONNECTION_ID", request.Action.SqlConnectionId, System.Data.SqlDbType.SmallInt); + Add("pACTION_TYPE_ID", request.Action.TypeId, System.Data.SqlDbType.TinyInt); + Add("pACTION_PRE_SQL", request.Action.PreSql); + Add("pACTION_HEADER_SQL", request.Action.HeaderSql); + Add("pACTION_BODY_SQL", request.Action.BodySql); + Add("pACTION_POST_SQL", request.Action.PostSql); + Add("pACTION_ERROR_ACTION_ID", request.Action.ErrorActionId, System.Data.SqlDbType.TinyInt); - new SqlParameter("@pENDPOINT_ACTIVE", (object?)request.Endpoint.Active ?? DBNull.Value), - new SqlParameter("@pENDPOINT_DESCRIPTION", (object?)request.Endpoint.Description ?? DBNull.Value), - new SqlParameter("@pENDPOINT_URI", (object?)request.Endpoint.Uri ?? DBNull.Value), + Add("pENDPOINT_ACTIVE", request.Endpoint.Active); + Add("pENDPOINT_DESCRIPTION", request.Endpoint.Description); + Add("pENDPOINT_URI", request.Endpoint.Uri); - new SqlParameter("@pENDPOINT_AUTH_ACTIVE", (object?)request.EndpointAuth.Active ?? DBNull.Value), - new SqlParameter("@pENDPOINT_AUTH_DESCRIPTION", (object?)request.EndpointAuth.Description ?? DBNull.Value), - new SqlParameter("@pENDPOINT_AUTH_TYPE_ID", System.Data.SqlDbType.TinyInt) { Value = (object?)request.EndpointAuth.TypeId ?? DBNull.Value }, - new SqlParameter("@pENDPOINT_AUTH_API_KEY", (object?)request.EndpointAuth.ApiKey ?? DBNull.Value), - new SqlParameter("@pENDPOINT_AUTH_API_VALUE", (object?)request.EndpointAuth.ApiValue ?? DBNull.Value), - new SqlParameter("@pENDPOINT_AUTH_API_KEY_ADD_TO_ID", (object?)request.EndpointAuth.ApiKeyAddToId ?? DBNull.Value), - new SqlParameter("@pENDPOINT_AUTH_TOKEN", (object?)request.EndpointAuth.Token ?? DBNull.Value), - new SqlParameter("@pENDPOINT_AUTH_USERNAME", (object?)request.EndpointAuth.Username ?? DBNull.Value), - new SqlParameter("@pENDPOINT_AUTH_PASSWORD", (object?)request.EndpointAuth.Password ?? DBNull.Value), - new SqlParameter("@pENDPOINT_AUTH_DOMAIN", (object?)request.EndpointAuth.Domain ?? DBNull.Value), - new SqlParameter("@pENDPOINT_AUTH_WORKSTATION", (object?)request.EndpointAuth.Workstation ?? DBNull.Value), + Add("pENDPOINT_AUTH_ACTIVE", request.EndpointAuth.Active); + Add("pENDPOINT_AUTH_DESCRIPTION", request.EndpointAuth.Description); + Add("pENDPOINT_AUTH_TYPE_ID", request.EndpointAuth.TypeId, System.Data.SqlDbType.TinyInt); + Add("pENDPOINT_AUTH_API_KEY", request.EndpointAuth.ApiKey); + Add("pENDPOINT_AUTH_API_VALUE", request.EndpointAuth.ApiValue); + Add("pENDPOINT_AUTH_API_KEY_ADD_TO_ID", request.EndpointAuth.ApiKeyAddToId); + Add("pENDPOINT_AUTH_TOKEN", request.EndpointAuth.Token); + Add("pENDPOINT_AUTH_USERNAME", request.EndpointAuth.Username); + Add("pENDPOINT_AUTH_PASSWORD", request.EndpointAuth.Password); + Add("pENDPOINT_AUTH_DOMAIN", request.EndpointAuth.Domain); + Add("pENDPOINT_AUTH_WORKSTATION", request.EndpointAuth.Workstation); - new SqlParameter("@pENDPOINT_PARAMS_ACTIVE", (object?)request.EndpointParams.Active ?? DBNull.Value), - new SqlParameter("@pENDPOINT_PARAMS_DESCRIPTION", (object?)request.EndpointParams.Description ?? DBNull.Value), - new SqlParameter("@pENDPOINT_PARAMS_GROUP_ID", System.Data.SqlDbType.SmallInt) { Value = (object?)request.EndpointParams.GroupId ?? DBNull.Value }, - new SqlParameter("@pENDPOINT_PARAMS_SEQUENCE", System.Data.SqlDbType.TinyInt) { Value = (object?)request.EndpointParams.Sequence ?? DBNull.Value }, - new SqlParameter("@pENDPOINT_PARAMS_KEY", (object?)request.EndpointParams.Key ?? DBNull.Value), - new SqlParameter("@pENDPOINT_PARAMS_VALUE", (object?)request.EndpointParams.Value ?? DBNull.Value), + Add("pENDPOINT_PARAMS_ACTIVE", request.EndpointParams.Active); + Add("pENDPOINT_PARAMS_DESCRIPTION", request.EndpointParams.Description); + Add("pENDPOINT_PARAMS_GROUP_ID", request.EndpointParams.GroupId, System.Data.SqlDbType.SmallInt); + Add("pENDPOINT_PARAMS_SEQUENCE", request.EndpointParams.Sequence, System.Data.SqlDbType.TinyInt); + Add("pENDPOINT_PARAMS_KEY", request.EndpointParams.Key); + Add("pENDPOINT_PARAMS_VALUE", request.EndpointParams.Value); - new SqlParameter("@pPROFILE_ACTIVE", (object?)request.Profile.Active ?? DBNull.Value), - new SqlParameter("@pPROFILE_TYPE_ID", System.Data.SqlDbType.TinyInt) { Value = (object?)request.Profile.TypeId ?? DBNull.Value }, - new SqlParameter("@pPROFILE_MANDANTOR", (object?)request.Profile.Mandantor ?? DBNull.Value), - new SqlParameter("@pPROFILE_NAME", (object?)request.Profile.Name ?? DBNull.Value), - new SqlParameter("@pPROFILE_DESCRIPTION", (object?)request.Profile.Description ?? DBNull.Value), - new SqlParameter("@pPROFILE_LOG_LEVEL_ID", System.Data.SqlDbType.TinyInt) { Value = (object?)request.Profile.LogLevelId ?? DBNull.Value }, - new SqlParameter("@pPROFILE_LANGUAGE_ID", System.Data.SqlDbType.SmallInt) { Value = (object?)request.Profile.LanguageId ?? DBNull.Value }, - new SqlParameter("@pPROFILE_FIRST_RUN", (object?)request.Profile.FirstRun ?? DBNull.Value), - new SqlParameter("@pPROFILE_LAST_RUN", (object?)request.Profile.LastRun ?? DBNull.Value), - new SqlParameter("@pPROFILE_LAST_RESULT", (object?)request.Profile.LastResult ?? DBNull.Value), + Add("pPROFILE_ACTIVE", request.Profile.Active); + Add("pPROFILE_TYPE_ID", request.Profile.TypeId, System.Data.SqlDbType.TinyInt); + Add("pPROFILE_MANDANTOR", request.Profile.Mandantor); + Add("pPROFILE_NAME", request.Profile.Name); + Add("pPROFILE_DESCRIPTION", request.Profile.Description); + Add("pPROFILE_LOG_LEVEL_ID", request.Profile.LogLevelId, System.Data.SqlDbType.TinyInt); + Add("pPROFILE_LANGUAGE_ID", request.Profile.LanguageId, System.Data.SqlDbType.SmallInt); + Add("pPROFILE_FIRST_RUN", request.Profile.FirstRun); + Add("pPROFILE_LAST_RUN", request.Profile.LastRun); + Add("pPROFILE_LAST_RESULT", request.Profile.LastResult); - new SqlParameter("@pRESULT_ACTION_ID", (object?)request.Result.ActionId ?? DBNull.Value), - new SqlParameter("@pRESULT_STATUS_ID", System.Data.SqlDbType.SmallInt) { Value = (object?)request.Result.StatusId ?? DBNull.Value }, - new SqlParameter("@pRESULT_HEADER", (object?)request.Result.Header ?? DBNull.Value), - new SqlParameter("@pRESULT_BODY", (object?)request.Result.Body ?? DBNull.Value) - }; + Add("pRESULT_ACTION_ID", request.Result.ActionId); + Add("pRESULT_STATUS_ID", request.Result.StatusId, System.Data.SqlDbType.SmallInt); + Add("pRESULT_HEADER", request.Result.Header); + Add("pRESULT_BODY", request.Result.Body); + + var sql = new StringBuilder() + .AppendLine("DECLARE @RC SMALLINT = 0;") + .Append(execSql).AppendLine(";") + .AppendLine("SELECT @RC;") + .ToString(); try { - var sql = new StringBuilder() - .AppendLine("DECLARE @RC SMALLINT = 0;") - .AppendLine("EXEC @RC = [dbo].[PRREC_UPDATE_OBJECT]") - .AppendLine(" @pENTITY = @pENTITY,") - .AppendLine(" @pGUID = @pGUID,") - .AppendLine(" @pCHANGED_WHO = @pCHANGED_WHO,") - .AppendLine(" @pCHANGED_WHEN = @pCHANGED_WHEN,") - .AppendLine(" @pACTION_PROFILE_ID = @pACTION_PROFILE_ID,") - .AppendLine(" @pACTION_ACTIVE = @pACTION_ACTIVE,") - .AppendLine(" @pACTION_SEQUENCE = @pACTION_SEQUENCE,") - .AppendLine(" @pACTION_ENDPOINT_ID = @pACTION_ENDPOINT_ID,") - .AppendLine(" @pACTION_ENDPOINT_AUTH_ID = @pACTION_ENDPOINT_AUTH_ID,") - .AppendLine(" @pACTION_ENDPOINT_PARAMS_ID = @pACTION_ENDPOINT_PARAMS_ID,") - .AppendLine(" @pACTION_SQL_CONNECTION_ID = @pACTION_SQL_CONNECTION_ID,") - .AppendLine(" @pACTION_TYPE_ID = @pACTION_TYPE_ID,") - .AppendLine(" @pACTION_PRE_SQL = @pACTION_PRE_SQL,") - .AppendLine(" @pACTION_HEADER_SQL = @pACTION_HEADER_SQL,") - .AppendLine(" @pACTION_BODY_SQL = @pACTION_BODY_SQL,") - .AppendLine(" @pACTION_POST_SQL = @pACTION_POST_SQL,") - .AppendLine(" @pACTION_ERROR_ACTION_ID = @pACTION_ERROR_ACTION_ID,") - .AppendLine(" @pENDPOINT_ACTIVE = @pENDPOINT_ACTIVE,") - .AppendLine(" @pENDPOINT_DESCRIPTION = @pENDPOINT_DESCRIPTION,") - .AppendLine(" @pENDPOINT_URI = @pENDPOINT_URI,") - .AppendLine(" @pENDPOINT_AUTH_ACTIVE = @pENDPOINT_AUTH_ACTIVE,") - .AppendLine(" @pENDPOINT_AUTH_DESCRIPTION = @pENDPOINT_AUTH_DESCRIPTION,") - .AppendLine(" @pENDPOINT_AUTH_TYPE_ID = @pENDPOINT_AUTH_TYPE_ID,") - .AppendLine(" @pENDPOINT_AUTH_API_KEY = @pENDPOINT_AUTH_API_KEY,") - .AppendLine(" @pENDPOINT_AUTH_API_VALUE = @pENDPOINT_AUTH_API_VALUE,") - .AppendLine(" @pENDPOINT_AUTH_API_KEY_ADD_TO_ID = @pENDPOINT_AUTH_API_KEY_ADD_TO_ID,") - .AppendLine(" @pENDPOINT_AUTH_TOKEN = @pENDPOINT_AUTH_TOKEN,") - .AppendLine(" @pENDPOINT_AUTH_USERNAME = @pENDPOINT_AUTH_USERNAME,") - .AppendLine(" @pENDPOINT_AUTH_PASSWORD = @pENDPOINT_AUTH_PASSWORD,") - .AppendLine(" @pENDPOINT_AUTH_DOMAIN = @pENDPOINT_AUTH_DOMAIN,") - .AppendLine(" @pENDPOINT_AUTH_WORKSTATION = @pENDPOINT_AUTH_WORKSTATION,") - .AppendLine(" @pENDPOINT_PARAMS_ACTIVE = @pENDPOINT_PARAMS_ACTIVE,") - .AppendLine(" @pENDPOINT_PARAMS_DESCRIPTION = @pENDPOINT_PARAMS_DESCRIPTION,") - .AppendLine(" @pENDPOINT_PARAMS_GROUP_ID = @pENDPOINT_PARAMS_GROUP_ID,") - .AppendLine(" @pENDPOINT_PARAMS_SEQUENCE = @pENDPOINT_PARAMS_SEQUENCE,") - .AppendLine(" @pENDPOINT_PARAMS_KEY = @pENDPOINT_PARAMS_KEY,") - .AppendLine(" @pENDPOINT_PARAMS_VALUE = @pENDPOINT_PARAMS_VALUE,") - .AppendLine(" @pPROFILE_ACTIVE = @pPROFILE_ACTIVE,") - .AppendLine(" @pPROFILE_TYPE_ID = @pPROFILE_TYPE_ID,") - .AppendLine(" @pPROFILE_MANDANTOR = @pPROFILE_MANDANTOR,") - .AppendLine(" @pPROFILE_NAME = @pPROFILE_NAME,") - .AppendLine(" @pPROFILE_DESCRIPTION = @pPROFILE_DESCRIPTION,") - .AppendLine(" @pPROFILE_LOG_LEVEL_ID = @pPROFILE_LOG_LEVEL_ID,") - .AppendLine(" @pPROFILE_LANGUAGE_ID = @pPROFILE_LANGUAGE_ID,") - .AppendLine(" @pPROFILE_FIRST_RUN = @pPROFILE_FIRST_RUN,") - .AppendLine(" @pPROFILE_LAST_RUN = @pPROFILE_LAST_RUN,") - .AppendLine(" @pPROFILE_LAST_RESULT = @pPROFILE_LAST_RESULT,") - .AppendLine(" @pRESULT_ACTION_ID = @pRESULT_ACTION_ID,") - .AppendLine(" @pRESULT_STATUS_ID = @pRESULT_STATUS_ID,") - .AppendLine(" @pRESULT_HEADER = @pRESULT_HEADER,") - .AppendLine(" @pRESULT_BODY = @pRESULT_BODY;") - .AppendLine("SELECT @RC;") - .ToString(); + var result = await repo.ExecuteQueryRawAsync(sql, parameters.ToArray(), cancel); - var result = await repo.ExecuteQueryRawAsync(sql, parameters, cancel); - - // The stored procedure returns 0 on success, error codes > 0 on failure if (result > 0) { throw new UpdateObjectFailedException(request, $"UpdateObject stored procedure failed with error code: {result}");