Refactor SQL param and command construction in procedures

Refactored InsertObject, UpdateObject, and DeleteObject procedure handlers to dynamically build SQL command strings and parameter lists. Introduced local Add functions to include only non-null parameters, improving code clarity and reducing unnecessary SQL parameter passing. The logic for handling stored procedure results and exceptions remains unchanged.
This commit is contained in:
2026-03-27 14:58:56 +01:00
parent 210ed9be8d
commit 70dc52139d
3 changed files with 165 additions and 244 deletions

View File

@@ -36,29 +36,33 @@ public class DeleteObjectProcedureHandler(IRepository repo, IOptionsMonitor<SqlE
{ {
public async Task<int> Handle(DeleteObjectProcedure request, CancellationToken cancel) public async Task<int> Handle(DeleteObjectProcedure request, CancellationToken cancel)
{ {
var parameters = new[] var execSql = new StringBuilder("EXEC @RC = [dbo].[PRREC_DELETE_OBJECT]");
var parameters = new List<SqlParameter>();
var separator = ' ';
void Add(string name, object? value)
{ {
new SqlParameter("@pENTITY", request.Entity ?? (object)DBNull.Value), if (value is null) return;
new SqlParameter("@pSTART", request.Start.ToString()), execSql.AppendLine($"{separator}@{name} = @{name}");
new SqlParameter("@pEND", request.End.ToString()), separator = ',';
new SqlParameter("@pFORCE", (object?)request.Force ?? DBNull.Value) 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 try
{ {
var sql = new StringBuilder() var result = await repo.ExecuteQueryRawAsync(sql, parameters.ToArray(), cancel);
.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, cancel);
// The stored procedure returns 0 on success, error codes > 0 on failure
if (result > 0) if (result > 0)
{ {
throw new DeleteObjectFailedException(request, $"DeleteObject stored procedure failed with error code: {result}"); throw new DeleteObjectFailedException(request, $"DeleteObject stored procedure failed with error code: {result}");

View File

@@ -37,132 +37,90 @@ public class InsertObjectProcedureHandler(IRepository repo, IOptionsMonitor<SqlE
{ {
public async Task<long> Handle(InsertObjectProcedure request, CancellationToken cancel) public async Task<long> Handle(InsertObjectProcedure request, CancellationToken cancel)
{ {
var parameters = new[] var sql = new StringBuilder("EXEC [dbo].[PRREC_INSERT_OBJECT]");
var parameters = new List<SqlParameter>();
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), Add("pENTITY", request.Entity);
new SqlParameter("@pADDED_WHEN", (object?)DateTime.UtcNow ?? DBNull.Value), Add("pADDED_WHO", request.AddedWho);
Add("pADDED_WHEN", DateTime.UtcNow);
new SqlParameter("@pACTION_PROFILE_ID", (object?)request.Action?.ProfileId ?? DBNull.Value), Add("pACTION_PROFILE_ID", request.Action?.ProfileId);
new SqlParameter("@pACTION_ACTIVE", (object?)request.Action?.Active ?? DBNull.Value), Add("pACTION_ACTIVE", request.Action?.Active);
new SqlParameter("@pACTION_SEQUENCE", System.Data.SqlDbType.TinyInt) { Value = (object?)request.Action?.Sequence ?? DBNull.Value }, Add("pACTION_SEQUENCE", request.Action?.Sequence, System.Data.SqlDbType.TinyInt);
new SqlParameter("@pACTION_ENDPOINT_ID", (object?)request.Action?.EndpointId ?? DBNull.Value), Add("pACTION_ENDPOINT_ID", request.Action?.EndpointId);
new SqlParameter("@pACTION_ENDPOINT_AUTH_ID", (object?)request.Action?.EndpointAuthId ?? DBNull.Value), Add("pACTION_ENDPOINT_AUTH_ID", request.Action?.EndpointAuthId);
new SqlParameter("@pACTION_ENDPOINT_PARAMS_ID", System.Data.SqlDbType.SmallInt) { Value = (object?)request.Action?.EndpointParamsId ?? DBNull.Value }, Add("pACTION_ENDPOINT_PARAMS_ID", request.Action?.EndpointParamsId, System.Data.SqlDbType.SmallInt);
new SqlParameter("@pACTION_SQL_CONNECTION_ID", System.Data.SqlDbType.SmallInt) { Value = (object?)request.Action?.SqlConnectionId ?? DBNull.Value }, Add("pACTION_SQL_CONNECTION_ID", request.Action?.SqlConnectionId, System.Data.SqlDbType.SmallInt);
new SqlParameter("@pACTION_TYPE_ID", System.Data.SqlDbType.TinyInt) { Value = request.Action?.TypeId is not null ? (object)(byte)request.Action.TypeId : DBNull.Value }, Add("pACTION_TYPE_ID", request.Action?.TypeId is not null ? (byte)request.Action.TypeId : null, System.Data.SqlDbType.TinyInt);
new SqlParameter("@pACTION_PRE_SQL", (object?)request.Action?.PreSql ?? DBNull.Value), Add("pACTION_PRE_SQL", request.Action?.PreSql);
new SqlParameter("@pACTION_HEADER_SQL", (object?)request.Action?.HeaderSql ?? DBNull.Value), Add("pACTION_HEADER_SQL", request.Action?.HeaderSql);
new SqlParameter("@pACTION_BODY_SQL", (object?)request.Action?.BodySql ?? DBNull.Value), Add("pACTION_BODY_SQL", request.Action?.BodySql);
new SqlParameter("@pACTION_POST_SQL", (object?)request.Action?.PostSql ?? DBNull.Value), Add("pACTION_POST_SQL", request.Action?.PostSql);
new SqlParameter("@pACTION_ERROR_ACTION_ID", System.Data.SqlDbType.TinyInt) { Value = (object?)request.Action?.ErrorActionId ?? DBNull.Value }, Add("pACTION_ERROR_ACTION_ID", request.Action?.ErrorActionId, System.Data.SqlDbType.TinyInt);
new SqlParameter("@pENDPOINT_ACTIVE", (object?)request.Endpoint?.Active ?? DBNull.Value), Add("pENDPOINT_ACTIVE", request.Endpoint?.Active);
new SqlParameter("@pENDPOINT_DESCRIPTION", (object?)request.Endpoint?.Description ?? DBNull.Value), Add("pENDPOINT_DESCRIPTION", request.Endpoint?.Description);
new SqlParameter("@pENDPOINT_URI", (object?)request.Endpoint?.Uri ?? DBNull.Value), Add("pENDPOINT_URI", request.Endpoint?.Uri);
new SqlParameter("@pENDPOINT_AUTH_ACTIVE", (object?)request.EndpointAuth?.Active ?? DBNull.Value), Add("pENDPOINT_AUTH_ACTIVE", request.EndpointAuth?.Active);
new SqlParameter("@pENDPOINT_AUTH_DESCRIPTION", (object?)request.EndpointAuth?.Description ?? DBNull.Value), Add("pENDPOINT_AUTH_DESCRIPTION", request.EndpointAuth?.Description);
new SqlParameter("@pENDPOINT_AUTH_TYPE_ID", System.Data.SqlDbType.TinyInt) { Value = (object?)request.EndpointAuth?.TypeId ?? DBNull.Value }, Add("pENDPOINT_AUTH_TYPE_ID", request.EndpointAuth?.TypeId, System.Data.SqlDbType.TinyInt);
new SqlParameter("@pENDPOINT_AUTH_API_KEY", (object?)request.EndpointAuth?.ApiKey ?? DBNull.Value), Add("pENDPOINT_AUTH_API_KEY", request.EndpointAuth?.ApiKey);
new SqlParameter("@pENDPOINT_AUTH_API_VALUE", (object?)request.EndpointAuth?.ApiValue ?? DBNull.Value), Add("pENDPOINT_AUTH_API_VALUE", request.EndpointAuth?.ApiValue);
new SqlParameter("@pENDPOINT_AUTH_API_KEY_ADD_TO_ID", (object?)request.EndpointAuth?.ApiKeyAddToId ?? DBNull.Value), Add("pENDPOINT_AUTH_API_KEY_ADD_TO_ID", request.EndpointAuth?.ApiKeyAddToId);
new SqlParameter("@pENDPOINT_AUTH_TOKEN", (object?)request.EndpointAuth?.Token ?? DBNull.Value), Add("pENDPOINT_AUTH_TOKEN", request.EndpointAuth?.Token);
new SqlParameter("@pENDPOINT_AUTH_USERNAME", (object?)request.EndpointAuth?.Username ?? DBNull.Value), Add("pENDPOINT_AUTH_USERNAME", request.EndpointAuth?.Username);
new SqlParameter("@pENDPOINT_AUTH_PASSWORD", (object?)request.EndpointAuth?.Password ?? DBNull.Value), Add("pENDPOINT_AUTH_PASSWORD", request.EndpointAuth?.Password);
new SqlParameter("@pENDPOINT_AUTH_DOMAIN", (object?)request.EndpointAuth?.Domain ?? DBNull.Value), Add("pENDPOINT_AUTH_DOMAIN", request.EndpointAuth?.Domain);
new SqlParameter("@pENDPOINT_AUTH_WORKSTATION", (object?)request.EndpointAuth?.Workstation ?? DBNull.Value), Add("pENDPOINT_AUTH_WORKSTATION", request.EndpointAuth?.Workstation);
new SqlParameter("@pPROFILE_ACTIVE", (object?)request.Profile?.Active ?? DBNull.Value), Add("pPROFILE_ACTIVE", request.Profile?.Active);
new SqlParameter("@pPROFILE_TYPE_ID", System.Data.SqlDbType.TinyInt) { Value = (object?)request.Profile?.TypeId ?? DBNull.Value }, Add("pPROFILE_TYPE_ID", request.Profile?.TypeId, System.Data.SqlDbType.TinyInt);
new SqlParameter("@pPROFILE_MANDANTOR", (object?)request.Profile?.Mandantor ?? DBNull.Value), Add("pPROFILE_MANDANTOR", request.Profile?.Mandantor);
new SqlParameter("@pPROFILE_NAME", (object?)request.Profile?.Name ?? DBNull.Value), Add("pPROFILE_NAME", request.Profile?.Name);
new SqlParameter("@pPROFILE_DESCRIPTION", (object?)request.Profile?.Description ?? DBNull.Value), Add("pPROFILE_DESCRIPTION", request.Profile?.Description);
new SqlParameter("@pPROFILE_LOG_LEVEL_ID", System.Data.SqlDbType.TinyInt) { Value = (object?)request.Profile?.LogLevelId ?? DBNull.Value }, Add("pPROFILE_LOG_LEVEL_ID", request.Profile?.LogLevelId, System.Data.SqlDbType.TinyInt);
new SqlParameter("@pPROFILE_LANGUAGE_ID", System.Data.SqlDbType.SmallInt) { Value = (object?)request.Profile?.LanguageId ?? DBNull.Value }, Add("pPROFILE_LANGUAGE_ID", request.Profile?.LanguageId, System.Data.SqlDbType.SmallInt);
new SqlParameter("@pRESULT_ACTION_ID", (object?)request.Result?.ActionId ?? DBNull.Value), Add("pRESULT_ACTION_ID", request.Result?.ActionId);
new SqlParameter("@pRESULT_STATUS_ID", System.Data.SqlDbType.SmallInt) { Value = (object?)request.Result?.StatusId ?? DBNull.Value }, Add("pRESULT_STATUS_ID", request.Result?.StatusId, System.Data.SqlDbType.SmallInt);
new SqlParameter("@pRESULT_HEADER", (object?)request.Result?.Header ?? DBNull.Value), Add("pRESULT_TYPE_ID", request.Result?.Type is not null ? (byte)request.Result.Type : null, System.Data.SqlDbType.TinyInt);
new SqlParameter("@pRESULT_BODY", (object?)request.Result?.Body ?? DBNull.Value), Add("pRESULT_HEADER", request.Result?.Header);
new SqlParameter("@pRESULT_INFO", (object?)request.Result?.Info ?? DBNull.Value), Add("pRESULT_BODY", request.Result?.Body);
new SqlParameter("@pRESULT_ERROR", (object?)request.Result?.Error ?? DBNull.Value), Add("pRESULT_INFO", request.Result?.Info);
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_ERROR", request.Result?.Error);
new SqlParameter("@pENDPOINT_PARAMS_ACTIVE", (object?)request.EndpointParams?.Active ?? DBNull.Value), Add("pENDPOINT_PARAMS_ACTIVE", request.EndpointParams?.Active);
new SqlParameter("@pENDPOINT_PARAMS_DESCRIPTION", (object?)request.EndpointParams?.Description ?? DBNull.Value), Add("pENDPOINT_PARAMS_DESCRIPTION", request.EndpointParams?.Description);
new SqlParameter("@pENDPOINT_PARAMS_GROUP_ID", System.Data.SqlDbType.SmallInt) { Value = (object?)request.EndpointParams?.GroupId ?? DBNull.Value }, Add("pENDPOINT_PARAMS_GROUP_ID", request.EndpointParams?.GroupId, System.Data.SqlDbType.SmallInt);
new SqlParameter("@pENDPOINT_PARAMS_SEQUENCE", System.Data.SqlDbType.TinyInt) { Value = (object?)request.EndpointParams?.Sequence ?? DBNull.Value }, Add("pENDPOINT_PARAMS_SEQUENCE", request.EndpointParams?.Sequence, System.Data.SqlDbType.TinyInt);
new SqlParameter("@pENDPOINT_PARAMS_KEY", (object?)request.EndpointParams?.Key ?? DBNull.Value), Add("pENDPOINT_PARAMS_KEY", request.EndpointParams?.Key);
new SqlParameter("@pENDPOINT_PARAMS_VALUE", (object?)request.EndpointParams?.Value ?? DBNull.Value), Add("pENDPOINT_PARAMS_VALUE", request.EndpointParams?.Value);
new SqlParameter // output parameter — always added
{ sql.AppendLine($"{separator}@oGUID = @oGUID OUTPUT");
ParameterName = "@oGUID", parameters.Add(new SqlParameter
SqlDbType = System.Data.SqlDbType.BigInt, {
Direction = System.Data.ParameterDirection.Output 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();
try try
{ {
await repo.ExecuteQueryRawAsync(sql, parameters, cancel); await repo.ExecuteQueryRawAsync(sql.ToString(), parameters.ToArray(), cancel);
} }
catch (SqlException ex) catch (SqlException ex)
{ {

View File

@@ -37,130 +37,89 @@ public class UpdateObjectProcedureHandler(IRepository repo, IOptionsMonitor<SqlE
{ {
public async Task<int> Handle(UpdateObjectProcedure request, CancellationToken cancel) public async Task<int> Handle(UpdateObjectProcedure request, CancellationToken cancel)
{ {
var parameters = new[] var execSql = new StringBuilder("EXEC @RC = [dbo].[PRREC_UPDATE_OBJECT]");
var parameters = new List<SqlParameter>();
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;
new SqlParameter("@pGUID", (object?)request.Id ?? DBNull.Value), 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), Add("pENTITY", request.Entity);
new SqlParameter("@pCHANGED_WHEN", (object?)DateTime.UtcNow ?? DBNull.Value), 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), Add("pACTION_PROFILE_ID", request.Action.ProfileId);
new SqlParameter("@pACTION_ACTIVE", (object?)request.Action.Active ?? DBNull.Value), Add("pACTION_ACTIVE", request.Action.Active);
new SqlParameter("@pACTION_SEQUENCE", System.Data.SqlDbType.TinyInt) { Value = (object?)request.Action.Sequence ?? DBNull.Value }, Add("pACTION_SEQUENCE", request.Action.Sequence, System.Data.SqlDbType.TinyInt);
new SqlParameter("@pACTION_ENDPOINT_ID", (object?)request.Action.EndpointId ?? DBNull.Value), Add("pACTION_ENDPOINT_ID", request.Action.EndpointId);
new SqlParameter("@pACTION_ENDPOINT_AUTH_ID", (object?)request.Action.EndpointAuthId ?? DBNull.Value), Add("pACTION_ENDPOINT_AUTH_ID", request.Action.EndpointAuthId);
new SqlParameter("@pACTION_ENDPOINT_PARAMS_ID", System.Data.SqlDbType.SmallInt) { Value = (object?)request.Action.EndpointParamsId ?? DBNull.Value }, Add("pACTION_ENDPOINT_PARAMS_ID", request.Action.EndpointParamsId, System.Data.SqlDbType.SmallInt);
new SqlParameter("@pACTION_SQL_CONNECTION_ID", System.Data.SqlDbType.SmallInt) { Value = (object?)request.Action.SqlConnectionId ?? DBNull.Value }, Add("pACTION_SQL_CONNECTION_ID", request.Action.SqlConnectionId, System.Data.SqlDbType.SmallInt);
new SqlParameter("@pACTION_TYPE_ID", System.Data.SqlDbType.TinyInt) { Value = (object?)request.Action.TypeId ?? DBNull.Value }, Add("pACTION_TYPE_ID", request.Action.TypeId, System.Data.SqlDbType.TinyInt);
new SqlParameter("@pACTION_PRE_SQL", (object?)request.Action.PreSql ?? DBNull.Value), Add("pACTION_PRE_SQL", request.Action.PreSql);
new SqlParameter("@pACTION_HEADER_SQL", (object?)request.Action.HeaderSql ?? DBNull.Value), Add("pACTION_HEADER_SQL", request.Action.HeaderSql);
new SqlParameter("@pACTION_BODY_SQL", (object?)request.Action.BodySql ?? DBNull.Value), Add("pACTION_BODY_SQL", request.Action.BodySql);
new SqlParameter("@pACTION_POST_SQL", (object?)request.Action.PostSql ?? DBNull.Value), Add("pACTION_POST_SQL", request.Action.PostSql);
new SqlParameter("@pACTION_ERROR_ACTION_ID", System.Data.SqlDbType.TinyInt) { Value = (object?)request.Action.ErrorActionId ?? DBNull.Value }, Add("pACTION_ERROR_ACTION_ID", request.Action.ErrorActionId, System.Data.SqlDbType.TinyInt);
new SqlParameter("@pENDPOINT_ACTIVE", (object?)request.Endpoint.Active ?? DBNull.Value), Add("pENDPOINT_ACTIVE", request.Endpoint.Active);
new SqlParameter("@pENDPOINT_DESCRIPTION", (object?)request.Endpoint.Description ?? DBNull.Value), Add("pENDPOINT_DESCRIPTION", request.Endpoint.Description);
new SqlParameter("@pENDPOINT_URI", (object?)request.Endpoint.Uri ?? DBNull.Value), Add("pENDPOINT_URI", request.Endpoint.Uri);
new SqlParameter("@pENDPOINT_AUTH_ACTIVE", (object?)request.EndpointAuth.Active ?? DBNull.Value), Add("pENDPOINT_AUTH_ACTIVE", request.EndpointAuth.Active);
new SqlParameter("@pENDPOINT_AUTH_DESCRIPTION", (object?)request.EndpointAuth.Description ?? DBNull.Value), Add("pENDPOINT_AUTH_DESCRIPTION", request.EndpointAuth.Description);
new SqlParameter("@pENDPOINT_AUTH_TYPE_ID", System.Data.SqlDbType.TinyInt) { Value = (object?)request.EndpointAuth.TypeId ?? DBNull.Value }, Add("pENDPOINT_AUTH_TYPE_ID", request.EndpointAuth.TypeId, System.Data.SqlDbType.TinyInt);
new SqlParameter("@pENDPOINT_AUTH_API_KEY", (object?)request.EndpointAuth.ApiKey ?? DBNull.Value), Add("pENDPOINT_AUTH_API_KEY", request.EndpointAuth.ApiKey);
new SqlParameter("@pENDPOINT_AUTH_API_VALUE", (object?)request.EndpointAuth.ApiValue ?? DBNull.Value), Add("pENDPOINT_AUTH_API_VALUE", request.EndpointAuth.ApiValue);
new SqlParameter("@pENDPOINT_AUTH_API_KEY_ADD_TO_ID", (object?)request.EndpointAuth.ApiKeyAddToId ?? DBNull.Value), Add("pENDPOINT_AUTH_API_KEY_ADD_TO_ID", request.EndpointAuth.ApiKeyAddToId);
new SqlParameter("@pENDPOINT_AUTH_TOKEN", (object?)request.EndpointAuth.Token ?? DBNull.Value), Add("pENDPOINT_AUTH_TOKEN", request.EndpointAuth.Token);
new SqlParameter("@pENDPOINT_AUTH_USERNAME", (object?)request.EndpointAuth.Username ?? DBNull.Value), Add("pENDPOINT_AUTH_USERNAME", request.EndpointAuth.Username);
new SqlParameter("@pENDPOINT_AUTH_PASSWORD", (object?)request.EndpointAuth.Password ?? DBNull.Value), Add("pENDPOINT_AUTH_PASSWORD", request.EndpointAuth.Password);
new SqlParameter("@pENDPOINT_AUTH_DOMAIN", (object?)request.EndpointAuth.Domain ?? DBNull.Value), Add("pENDPOINT_AUTH_DOMAIN", request.EndpointAuth.Domain);
new SqlParameter("@pENDPOINT_AUTH_WORKSTATION", (object?)request.EndpointAuth.Workstation ?? DBNull.Value), Add("pENDPOINT_AUTH_WORKSTATION", request.EndpointAuth.Workstation);
new SqlParameter("@pENDPOINT_PARAMS_ACTIVE", (object?)request.EndpointParams.Active ?? DBNull.Value), Add("pENDPOINT_PARAMS_ACTIVE", request.EndpointParams.Active);
new SqlParameter("@pENDPOINT_PARAMS_DESCRIPTION", (object?)request.EndpointParams.Description ?? DBNull.Value), Add("pENDPOINT_PARAMS_DESCRIPTION", request.EndpointParams.Description);
new SqlParameter("@pENDPOINT_PARAMS_GROUP_ID", System.Data.SqlDbType.SmallInt) { Value = (object?)request.EndpointParams.GroupId ?? DBNull.Value }, Add("pENDPOINT_PARAMS_GROUP_ID", request.EndpointParams.GroupId, System.Data.SqlDbType.SmallInt);
new SqlParameter("@pENDPOINT_PARAMS_SEQUENCE", System.Data.SqlDbType.TinyInt) { Value = (object?)request.EndpointParams.Sequence ?? DBNull.Value }, Add("pENDPOINT_PARAMS_SEQUENCE", request.EndpointParams.Sequence, System.Data.SqlDbType.TinyInt);
new SqlParameter("@pENDPOINT_PARAMS_KEY", (object?)request.EndpointParams.Key ?? DBNull.Value), Add("pENDPOINT_PARAMS_KEY", request.EndpointParams.Key);
new SqlParameter("@pENDPOINT_PARAMS_VALUE", (object?)request.EndpointParams.Value ?? DBNull.Value), Add("pENDPOINT_PARAMS_VALUE", request.EndpointParams.Value);
new SqlParameter("@pPROFILE_ACTIVE", (object?)request.Profile.Active ?? DBNull.Value), Add("pPROFILE_ACTIVE", request.Profile.Active);
new SqlParameter("@pPROFILE_TYPE_ID", System.Data.SqlDbType.TinyInt) { Value = (object?)request.Profile.TypeId ?? DBNull.Value }, Add("pPROFILE_TYPE_ID", request.Profile.TypeId, System.Data.SqlDbType.TinyInt);
new SqlParameter("@pPROFILE_MANDANTOR", (object?)request.Profile.Mandantor ?? DBNull.Value), Add("pPROFILE_MANDANTOR", request.Profile.Mandantor);
new SqlParameter("@pPROFILE_NAME", (object?)request.Profile.Name ?? DBNull.Value), Add("pPROFILE_NAME", request.Profile.Name);
new SqlParameter("@pPROFILE_DESCRIPTION", (object?)request.Profile.Description ?? DBNull.Value), Add("pPROFILE_DESCRIPTION", request.Profile.Description);
new SqlParameter("@pPROFILE_LOG_LEVEL_ID", System.Data.SqlDbType.TinyInt) { Value = (object?)request.Profile.LogLevelId ?? DBNull.Value }, Add("pPROFILE_LOG_LEVEL_ID", request.Profile.LogLevelId, System.Data.SqlDbType.TinyInt);
new SqlParameter("@pPROFILE_LANGUAGE_ID", System.Data.SqlDbType.SmallInt) { Value = (object?)request.Profile.LanguageId ?? DBNull.Value }, Add("pPROFILE_LANGUAGE_ID", request.Profile.LanguageId, System.Data.SqlDbType.SmallInt);
new SqlParameter("@pPROFILE_FIRST_RUN", (object?)request.Profile.FirstRun ?? DBNull.Value), Add("pPROFILE_FIRST_RUN", request.Profile.FirstRun);
new SqlParameter("@pPROFILE_LAST_RUN", (object?)request.Profile.LastRun ?? DBNull.Value), Add("pPROFILE_LAST_RUN", request.Profile.LastRun);
new SqlParameter("@pPROFILE_LAST_RESULT", (object?)request.Profile.LastResult ?? DBNull.Value), Add("pPROFILE_LAST_RESULT", request.Profile.LastResult);
new SqlParameter("@pRESULT_ACTION_ID", (object?)request.Result.ActionId ?? DBNull.Value), Add("pRESULT_ACTION_ID", request.Result.ActionId);
new SqlParameter("@pRESULT_STATUS_ID", System.Data.SqlDbType.SmallInt) { Value = (object?)request.Result.StatusId ?? DBNull.Value }, Add("pRESULT_STATUS_ID", request.Result.StatusId, System.Data.SqlDbType.SmallInt);
new SqlParameter("@pRESULT_HEADER", (object?)request.Result.Header ?? DBNull.Value), Add("pRESULT_HEADER", request.Result.Header);
new SqlParameter("@pRESULT_BODY", (object?)request.Result.Body ?? DBNull.Value) Add("pRESULT_BODY", request.Result.Body);
};
var sql = new StringBuilder()
.AppendLine("DECLARE @RC SMALLINT = 0;")
.Append(execSql).AppendLine(";")
.AppendLine("SELECT @RC;")
.ToString();
try try
{ {
var sql = new StringBuilder() var result = await repo.ExecuteQueryRawAsync(sql, parameters.ToArray(), cancel);
.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, cancel);
// The stored procedure returns 0 on success, error codes > 0 on failure
if (result > 0) if (result > 0)
{ {
throw new UpdateObjectFailedException(request, $"UpdateObject stored procedure failed with error code: {result}"); throw new UpdateObjectFailedException(request, $"UpdateObject stored procedure failed with error code: {result}");