832 lines
45 KiB
C#
832 lines
45 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data.Common;
|
|
using System.Linq;
|
|
using Sarand.Net.Standard.Base.App;
|
|
using Sarand.Net.Standard.Base.Core;
|
|
using Sarand.Net.Standard.Base.Bus;
|
|
using Sarand.Net.Standard.Base.Dbas;
|
|
using Sarand.Net.Standard.Base.Interfaces;
|
|
using Sarand.Net.Standard.Dbas.Data;
|
|
using Sarand.Net.Standard.Dbas.Interfaces.Internal;
|
|
using Sarand.Net.Standard.Base.Utils;
|
|
|
|
namespace Sarand.Net.Standard.Dbas.Interfaces
|
|
{
|
|
//=======================================================================
|
|
public partial class SaInterfaceMgr_Dbas
|
|
{
|
|
//*******************************************************************
|
|
// I n t e r f a c e P r o c e s s e s
|
|
//*******************************************************************
|
|
// Associated data.
|
|
public override int GetInterfaceProcessMessageCount(SysId id)
|
|
{
|
|
String filter = SaInterfaceDbDfn.GetColumnName(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcessMessage_ProcessId) + "=" + SysId.ToString(id);
|
|
return (int)Database.GetRowCount(TableName_InterfaceProcessMessage, filter);
|
|
}
|
|
public override bool InterfaceProcessHasMessages(SysId id)
|
|
{
|
|
return (GetInterfaceProcessMessageCount(id) > 0);
|
|
}
|
|
public override int GetInterfaceProcessDataItemCount(SysId id)
|
|
{
|
|
String filter = SaInterfaceDbDfn.GetColumnName(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcessDataItem_ProcessId) + "=" + SysId.ToString(id);
|
|
return (int)Database.GetRowCount(TableName_InterfaceProcessDataItem, filter);
|
|
}
|
|
public override bool InterfaceProcessHasDataItems(SysId id)
|
|
{
|
|
return (GetInterfaceProcessDataItemCount(id) > 0);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Create Interface Process.
|
|
public override SaInterfaceProcess CreateInterfaceProcess(SysId interfaceId, SaInterfaceProcessDirection direction, String reference, int sequence)
|
|
{
|
|
ClearErrorState();
|
|
return new SaInterfaceProcess_Dbas(null, interfaceId, direction, reference, sequence, 0);
|
|
}
|
|
private SaInterfaceProcess CreateInterfaceProcess(SaInterfaceProcess_Db dbInterfaceProcess)
|
|
{
|
|
ClearErrorState();
|
|
SaInterfaceProcess interfaceProcess = new SaInterfaceProcess_Dbas(new SysId(dbInterfaceProcess._Id), new SysId(dbInterfaceProcess._InterfaceId), (SaInterfaceProcessDirection)dbInterfaceProcess._Direction, dbInterfaceProcess._ProcRef, dbInterfaceProcess._ProcSeq, (ushort)dbInterfaceProcess._Flags);
|
|
PopulateFrom(dbInterfaceProcess, interfaceProcess);
|
|
return interfaceProcess;
|
|
}
|
|
private SaInterfaceProcess CreateInterfaceProcess(DbDataReader dataReader)
|
|
{
|
|
SaInterfaceProcess_Db dbInterfaceProcess = new SaInterfaceProcess_Db_Local(DbInfo);
|
|
dbInterfaceProcess.PopulateFrom(dataReader);
|
|
return CreateInterfaceProcess(dbInterfaceProcess);
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Interface Process exists.
|
|
public override bool InterfaceProcessExistsById(SysId id)
|
|
{
|
|
ClearErrorState();
|
|
if (!SysId.IsValid(id)) return false;
|
|
return GetInterfaceProcessCount(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Id, aliasInterfaceProcess) + "=" + SysId.ToString(id)) == 1;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Get Interface Process.
|
|
public override SaInterfaceProcess GetInterfaceProcess(SaInterfaceProcess.Params prm)
|
|
{
|
|
return GetInterfaceProcess(GetInterfaceProcessQueryFilter(prm).Concat(" AND ", "(", ")"));
|
|
}
|
|
private SaInterfaceProcess GetInterfaceProcess(String filter)
|
|
{
|
|
ClearErrorState();
|
|
if (GetInterfaceProcessCount(filter) != 1) return null;
|
|
SaInterfaceProcess interfaceProcess = null;
|
|
// Query data.
|
|
using (var dbConnection = Database.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
dbConnection.Open();
|
|
SaInterfaceProcess_Db dbInterfaceProcess = new SaInterfaceProcess_Db_Local(DbInfo);
|
|
dbInterfaceProcess.PopulateFrom(dbCommand, aliasInterfaceProcess, filter);
|
|
interfaceProcess = CreateInterfaceProcess(dbInterfaceProcess);
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
SetErrorState("Database query exception");
|
|
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
|
|
}
|
|
}
|
|
return interfaceProcess;
|
|
}
|
|
public override SaInterfaceProcess GetInterfaceProcessById(SysId id)
|
|
{
|
|
ClearErrorState();
|
|
if (!SysId.IsValid(id)) return null;
|
|
return GetInterfaceProcess("Id=" + SysId.ToString(id));
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Validate Interface Process.
|
|
public override bool IsValidInterfaceProcessData(SaInterfaceProcess.Data interfaceData, SaInterfaceProcess.ErrField errField)
|
|
{
|
|
ClearErrorState();
|
|
if (!base.IsValidInterfaceProcessData(interfaceData, errField)) return false;
|
|
return true;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Insert Interface Process.
|
|
public override bool InsertInterfaceProcess(SaInterfaceProcess interfaceProcess, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
ClearErrorState();
|
|
if (!IsValidInterfaceProcess(interfaceProcess)) return false;
|
|
if (SysId.IsValid(interfaceProcess.Id)) return SetErrorState(ErrorMessage.ValiditemId);
|
|
using (var dbConnection = Database.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
dbConnection.Open();
|
|
SaInterfaceProcess_Db dbInterfaceProcess = new SaInterfaceProcess_Db_Local(DbInfo);
|
|
PopulateTo(dbInterfaceProcess, interfaceProcess, dbUpdateInfo);
|
|
if (SaInterfaceProcess_Db.FieldsNonId.Contains("Id"))
|
|
{
|
|
// Generate next Id.
|
|
dbInterfaceProcess._Id = SysId.ToInt(Database.GetNextId(dbInterfaceProcess.TableName, dbUpdateInfo));
|
|
}
|
|
dbInterfaceProcess.ExecuteInsertCommand(dbCommand);
|
|
interfaceProcess.Id = new SysId(dbInterfaceProcess._Id);
|
|
}
|
|
catch (Exception exc) { SetErrorState(exc.Message); }
|
|
}
|
|
return !HasErrorState();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Update Interface Process.
|
|
public override bool UpdateInterfaceProcess(SaInterfaceProcess interfaceProcess, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
ClearErrorState();
|
|
if (!IsValidInterfaceProcess(interfaceProcess)) return false;
|
|
if (!SysId.IsValid(interfaceProcess.Id)) return SetErrorState(ErrorMessage.InvalidItemId);
|
|
using (var dbConnection = Database.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
// Retrieve interface.
|
|
dbConnection.Open();
|
|
SaInterfaceProcess_Db dbInterfaceProcess = new SaInterfaceProcess_Db_Local(DbInfo);
|
|
dbInterfaceProcess.PopulateFrom(dbCommand, aliasInterfaceProcess, "Id=" + SysId.ToString(interfaceProcess.Id));
|
|
// Update properties.
|
|
PopulateTo(dbInterfaceProcess, interfaceProcess, dbUpdateInfo);
|
|
dbInterfaceProcess.ExecuteUpdateCommand(dbCommand);
|
|
}
|
|
catch (Exception exc) { SetErrorState(exc.Message); }
|
|
}
|
|
return !HasErrorState();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Delete Item.
|
|
public override bool InterfaceProcessCanBeDeleted(SaInterfaceProcess interfaceProcess)
|
|
{
|
|
ClearErrorState();
|
|
if (!base.InterfaceProcessCanBeDeleted(interfaceProcess)) return false;
|
|
return true;
|
|
}
|
|
public override bool ClearInterfaceProcessMessages(List<SysId> interfaceProcessIdsToClear, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
ClearErrorState();
|
|
using (var dbConnection = Database.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
dbConnection.Open();
|
|
dbCommand.CommandType = System.Data.CommandType.Text;
|
|
// Copy list to avoid modifying original.
|
|
List<SysId> interfaceProcessIds = new List<SysId>(interfaceProcessIdsToClear);
|
|
// Delete interface process messages in batches of 20.
|
|
while (!HasErrorState())
|
|
{
|
|
List<SysId> interfaceProcessIdsBatch = interfaceProcessIds.ExtractIds(20);
|
|
if (interfaceProcessIdsBatch.Count < 1) break;
|
|
dbCommand.CommandText = "DELETE FROM " + TableName_InterfaceProcessMessage + " WHERE " + SaInterfaceDbDfn.GetColumnName(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcessMessage_ProcessId) + " In (" + interfaceProcessIdsBatch.Concat(",") + ")";
|
|
if (SacsSystem.DebugMode) SaLogger.Debug("ClearInterfaceProcessMessages Query: " + dbCommand.CommandText);
|
|
dbCommand.ExecuteNonQuery();
|
|
}
|
|
}
|
|
catch (Exception exc) { SetErrorState(exc.Message); }
|
|
}
|
|
return !HasErrorState();
|
|
}
|
|
public override bool ClearInterfaceProcessDataItems(List<SysId> interfaceProcessIdsToClear, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
ClearErrorState();
|
|
using (var dbConnection = Database.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
dbConnection.Open();
|
|
dbCommand.CommandType = System.Data.CommandType.Text;
|
|
// Copy list to avoid modifying original.
|
|
List<SysId> interfaceProcessIds = new List<SysId>(interfaceProcessIdsToClear);
|
|
// Delete interface process messages in batches of 20.
|
|
while (!HasErrorState())
|
|
{
|
|
List<SysId> interfaceProcessIdsBatch = interfaceProcessIds.ExtractIds(20);
|
|
if (interfaceProcessIdsBatch.Count < 1) break;
|
|
dbCommand.CommandText = "DELETE FROM " + TableName_InterfaceProcessDataItem + " WHERE " + SaInterfaceDbDfn.GetColumnName(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcessDataItem_ProcessId) + " In (" + interfaceProcessIdsBatch.Concat(",") + ")";
|
|
if (SacsSystem.DebugMode) SaLogger.Debug("ClearInterfaceProcessDataItems Query: " + dbCommand.CommandText);
|
|
dbCommand.ExecuteNonQuery();
|
|
}
|
|
}
|
|
catch (Exception exc) { SetErrorState(exc.Message); }
|
|
}
|
|
return !HasErrorState();
|
|
}
|
|
public override bool DeleteInterfaceProcess(SaInterfaceProcess interfaceProcess, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
ClearErrorState();
|
|
if (!InterfaceProcessCanBeDeleted(interfaceProcess)) return false;
|
|
using (var dbConnection = Database.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
// Retrieve item.
|
|
dbConnection.Open();
|
|
SaInterfaceProcess_Db dbInterfaceProcess = new SaInterfaceProcess_Db_Local(DbInfo);
|
|
dbInterfaceProcess.PopulateFrom(dbCommand, aliasInterfaceProcess, "Id=" + SysId.ToString(interfaceProcess.Id));
|
|
// Delete item.
|
|
dbCommand.CommandType = System.Data.CommandType.Text;
|
|
dbCommand.CommandText = "DELETE FROM " + TableName_InterfaceProcess + " WHERE Id=" + SysId.ToString(interfaceProcess.Id) + ";";
|
|
dbCommand.ExecuteNonQuery();
|
|
}
|
|
catch (Exception exc) { SetErrorState(exc.Message); }
|
|
}
|
|
return !HasErrorState();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Copy data properties to and from database.
|
|
private void PopulateTo(SaInterfaceProcess_Db dbInterfaceProcess, SaInterfaceProcess interfaceProcess, DbUpdateInfo dbUpdateInfo)
|
|
{
|
|
dbInterfaceProcess._Id = interfaceProcess.Id.ToInt();
|
|
dbInterfaceProcess._InterfaceId = SysId.ToInt(interfaceProcess.InterfaceId);
|
|
dbInterfaceProcess._Direction = (short)interfaceProcess.Direction;
|
|
dbInterfaceProcess._ProcRef = interfaceProcess.Reference;
|
|
dbInterfaceProcess._ProcSeq = interfaceProcess.Sequence;
|
|
dbInterfaceProcess._ProcessAt = interfaceProcess.ProcessAt;
|
|
dbInterfaceProcess._BatchAt = interfaceProcess.BatchAt;
|
|
dbInterfaceProcess._ElapseSecs = interfaceProcess.ElapseSecs;
|
|
dbInterfaceProcess._Status = SacsSystem.GetStatusCode(interfaceProcess.Status);
|
|
dbInterfaceProcess._Flags = (short)interfaceProcess.Flags;
|
|
if (!SysId.IsValid(interfaceProcess.Id))
|
|
{
|
|
dbInterfaceProcess._CreateOn = DateTime.Now;
|
|
dbInterfaceProcess._CreateBy = dbUpdateInfo.UserId.ToInt();
|
|
dbInterfaceProcess._CreateHost = dbUpdateInfo.Host;
|
|
}
|
|
dbInterfaceProcess._UpdateOn = DateTime.Now;
|
|
dbInterfaceProcess._UpdateBy = dbUpdateInfo.UserId.ToInt();
|
|
dbInterfaceProcess._UpdateHost = dbUpdateInfo.Host;
|
|
}
|
|
private void PopulateFrom(SaInterfaceProcess_Db dbInterfaceProcess, SaInterfaceProcess interfaceProcess)
|
|
{
|
|
//interface.Id = new SysId(dbInterfaceProcess._Id);
|
|
//interfaceProcess.InterfaceId = new SysId(dbInterfaceProcess._InterfaceId);
|
|
//interfaceProcess.Direction = (SaInterfaceProcessDirection)dbInterfaceProcess._Direction;
|
|
//interfaceProcess.Reference = dbInterfaceProcess._ProcRef;
|
|
//interfaceProcess.Sequence = dbInterfaceProcess._ProcSeq;
|
|
interfaceProcess.ProcessAt = dbInterfaceProcess._ProcessAt;
|
|
interfaceProcess.BatchAt = dbInterfaceProcess._BatchAt;
|
|
interfaceProcess.ElapseSecs = dbInterfaceProcess._ElapseSecs;
|
|
interfaceProcess.Status = SacsSystem.GetStatusForCode(dbInterfaceProcess._Status);
|
|
interfaceProcess.SetCreateStamp(dbInterfaceProcess._CreateOn, new SysId(dbInterfaceProcess._CreateBy), dbInterfaceProcess._CreateHost);
|
|
interfaceProcess.SetUpdateStamp(dbInterfaceProcess._UpdateOn, new SysId(dbInterfaceProcess._UpdateBy), dbInterfaceProcess._UpdateHost);
|
|
interfaceProcess.AcceptChanges();
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Interface Process column definitions.
|
|
private static readonly String aliasInterfaceProcess = "aIntPrc";
|
|
private static readonly String aliasInterfaceProcess_Interface = "aIpInt";
|
|
private static readonly String prefixInterfaceProcess_Interface = "IpInt_";
|
|
private static readonly String colInterfaceProcess_MessageCount = "IntPrcMessageCount";
|
|
private static readonly String colInterfaceProcess_DataItemCount = "IntPrcDataItemCount";
|
|
private void SetInterfaceProcessColDfn
|
|
(ColumnDfn col, String caption, int width, SaInterfaceDbDfn.ColumnIdx dbCol,
|
|
ColumnAlignment align = ColumnAlignment.Default, DataValue.DataType dataType = DataValue.DataType.String,
|
|
String alias = "", String prefix = "")
|
|
{
|
|
if (String.IsNullOrEmpty(alias) && SaInterfaceDbDfn.GetTableForColumn(dbCol) == SaInterfaceDbDfn.TableIdx.SaInterfaceProcess)
|
|
alias = aliasInterfaceProcess;
|
|
col.Set(caption, width, (int)dbCol, prefix + SaInterfaceDbDfn.GetColumnName(dbCol, false), SaInterfaceDbDfn.GetColumnNameQual(dbCol, alias), dataType, align);
|
|
}
|
|
public override ColumnDfn GetInterfaceProcessColumnDfn(SaInterfaceProcess.Column columnId, string caption = "", int width = 0)
|
|
{
|
|
ColumnDfn columnDfn = new ColumnDfn((int)columnId, caption, width);
|
|
switch (columnId)
|
|
{
|
|
case SaInterfaceProcess.Column.Pos:
|
|
SetInterfaceProcessColDfn(columnDfn, "Pos", 45, SaInterfaceDbDfn.ColumnIdx.Unknown, ColumnAlignment.Right);
|
|
columnDfn.SortMode = ColumnDfn.ColumnSortMode.Off;
|
|
columnDfn.ReadOnly = true;
|
|
columnDfn.Resizable = false;
|
|
break;
|
|
case SaInterfaceProcess.Column.Id:
|
|
SetInterfaceProcessColDfn(columnDfn, "Id", 60, SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Id, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
columnDfn.ReadOnly = true;
|
|
break;
|
|
// Interface properties.
|
|
case SaInterfaceProcess.Column.InterfaceId:
|
|
SetInterfaceProcessColDfn(columnDfn, "Interface #", 90, SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_InterfaceId, ColumnAlignment.Right, DataValue.DataType.Long);
|
|
break;
|
|
case SaInterfaceProcess.Column.Interface_Context:
|
|
SetInterfaceProcessColDfn(columnDfn, "Context", 90, SaInterfaceDbDfn.ColumnIdx.SaInterface_Context, ColumnAlignment.Center, DataValue.DataType.String, aliasInterfaceProcess_Interface, prefixInterfaceProcess_Interface);
|
|
break;
|
|
case SaInterfaceProcess.Column.Interface_Category:
|
|
SetInterfaceProcessColDfn(columnDfn, "Category", 80, SaInterfaceDbDfn.ColumnIdx.SaInterface_Category, ColumnAlignment.Center, DataValue.DataType.Long, aliasInterfaceProcess_Interface, prefixInterfaceProcess_Interface);
|
|
break;
|
|
case SaInterfaceProcess.Column.Interface_Category_Desc:
|
|
SetInterfaceProcessColDfn(columnDfn, "Interface Category", 100, SaInterfaceDbDfn.ColumnIdx.SaInterface_Category, ColumnAlignment.Left, DataValue.DataType.String, aliasInterfaceProcess_Interface, prefixInterfaceProcess_Interface);
|
|
break;
|
|
case SaInterfaceProcess.Column.Interface_Type:
|
|
SetInterfaceProcessColDfn(columnDfn, "Type", 80, SaInterfaceDbDfn.ColumnIdx.SaInterface_Type, ColumnAlignment.Center, DataValue.DataType.Long, aliasInterfaceProcess_Interface, prefixInterfaceProcess_Interface);
|
|
break;
|
|
case SaInterfaceProcess.Column.Interface_Type_Desc:
|
|
SetInterfaceProcessColDfn(columnDfn, "Interface Type", 100, SaInterfaceDbDfn.ColumnIdx.SaInterface_Type, ColumnAlignment.Left, DataValue.DataType.String, aliasInterfaceProcess_Interface, prefixInterfaceProcess_Interface);
|
|
break;
|
|
case SaInterfaceProcess.Column.Interface_Code:
|
|
SetInterfaceProcessColDfn(columnDfn, "Code", 100, SaInterfaceDbDfn.ColumnIdx.SaInterface_Code, ColumnAlignment.Center, DataValue.DataType.String, aliasInterfaceProcess_Interface, prefixInterfaceProcess_Interface);
|
|
break;
|
|
case SaInterfaceProcess.Column.Interface_Caption:
|
|
SetInterfaceProcessColDfn(columnDfn, "Caption", 160, SaInterfaceDbDfn.ColumnIdx.SaInterface_Caption, ColumnAlignment.Center, DataValue.DataType.String, aliasInterfaceProcess_Interface, prefixInterfaceProcess_Interface);
|
|
break;
|
|
// Interface Process properties.
|
|
case SaInterfaceProcess.Column.ProcessDirection:
|
|
SetInterfaceProcessColDfn(columnDfn, "Direction", 80, SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Direction, ColumnAlignment.Center, DataValue.DataType.Long);
|
|
break;
|
|
case SaInterfaceProcess.Column.ProcessDirection_Desc:
|
|
SetInterfaceProcessColDfn(columnDfn, "Direction", 100, SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Direction, ColumnAlignment.Center, DataValue.DataType.String);
|
|
break;
|
|
case SaInterfaceProcess.Column.ProcessReference:
|
|
SetInterfaceProcessColDfn(columnDfn, "Reference", 100, SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcRef, ColumnAlignment.Center, DataValue.DataType.String);
|
|
break;
|
|
case SaInterfaceProcess.Column.ProcessSequence:
|
|
SetInterfaceProcessColDfn(columnDfn, "Sequence", 80, SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcSeq, ColumnAlignment.Center, DataValue.DataType.Long);
|
|
break;
|
|
case SaInterfaceProcess.Column.ProcessAt:
|
|
SetInterfaceProcessColDfn(columnDfn, "Processed", 100, SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcessAt, ColumnAlignment.Center, DataValue.DataType.DateTime);
|
|
if (!ColumnExists(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcessAt) && Database.ColumnExists(TableName_InterfaceProcess, "ProcDate"))
|
|
{
|
|
// Legacy column.
|
|
columnDfn.DataName = "ProcDate";
|
|
columnDfn.SortDataName = aliasInterfaceProcess + "." + columnDfn.DataName;
|
|
}
|
|
break;
|
|
case SaInterfaceProcess.Column.ProcessAt_Date:
|
|
SetInterfaceProcessColDfn(columnDfn, "Process on", 90, SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcessAt, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
if (!ColumnExists(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcessAt) && Database.ColumnExists(TableName_InterfaceProcess, "ProcDate"))
|
|
{
|
|
// Legacy column.
|
|
columnDfn.DataName = "ProcDate";
|
|
columnDfn.SortDataName = aliasInterfaceProcess + "." + columnDfn.DataName;
|
|
}
|
|
break;
|
|
case SaInterfaceProcess.Column.ProcessAt_Time:
|
|
SetInterfaceProcessColDfn(columnDfn, "Process at", 80, SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcessAt, ColumnAlignment.Center, DataValue.DataType.Time);
|
|
if (!ColumnExists(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcessAt) && Database.ColumnExists(TableName_InterfaceProcess, "ProcTime"))
|
|
{
|
|
// Legacy column.
|
|
columnDfn.DataName = "ProcTime";
|
|
columnDfn.SortDataName = aliasInterfaceProcess + "." + columnDfn.DataName;
|
|
}
|
|
break;
|
|
case SaInterfaceProcess.Column.BatchAt:
|
|
SetInterfaceProcessColDfn(columnDfn, "Batch at", 100, SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_BatchAt, ColumnAlignment.Center, DataValue.DataType.DateTime);
|
|
if (!ColumnExists(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_BatchAt) && Database.ColumnExists(TableName_InterfaceProcess, "BatchDate"))
|
|
{
|
|
// Legacy column.
|
|
columnDfn.DataName = "BatchDate";
|
|
columnDfn.SortDataName = aliasInterfaceProcess + "." + columnDfn.DataName;
|
|
}
|
|
break;
|
|
case SaInterfaceProcess.Column.BatchAt_Date:
|
|
SetInterfaceProcessColDfn(columnDfn, "Batch on", 90, SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_BatchAt, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
if (!ColumnExists(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_BatchAt) && Database.ColumnExists(TableName_InterfaceProcess, "BatchDate"))
|
|
{
|
|
// Legacy column.
|
|
columnDfn.DataName = "BatchDate";
|
|
columnDfn.SortDataName = aliasInterfaceProcess + "." + columnDfn.DataName;
|
|
}
|
|
break;
|
|
case SaInterfaceProcess.Column.BatchAt_Time:
|
|
SetInterfaceProcessColDfn(columnDfn, "Batch at", 80, SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_BatchAt, ColumnAlignment.Center, DataValue.DataType.Time);
|
|
if (!ColumnExists(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_BatchAt) && Database.ColumnExists(TableName_InterfaceProcess, "BatchTime"))
|
|
{
|
|
// Legacy column.
|
|
columnDfn.DataName = "BatchTime";
|
|
columnDfn.SortDataName = aliasInterfaceProcess + "." + columnDfn.DataName;
|
|
}
|
|
break;
|
|
case SaInterfaceProcess.Column.Elapsed_Secs:
|
|
SetInterfaceProcessColDfn(columnDfn, "Elapsed", 80, SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ElapseSecs, ColumnAlignment.Center, DataValue.DataType.Long);
|
|
break;
|
|
case SaInterfaceProcess.Column.Elapsed_Fmt:
|
|
SetInterfaceProcessColDfn(columnDfn, "Elapsed", 80, SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ElapseSecs, ColumnAlignment.Center, DataValue.DataType.String);
|
|
break;
|
|
// Derived properties.
|
|
case SaInterfaceProcess.Column.Message_Count:
|
|
SetInterfaceProcessColDfn(columnDfn, "Messages", 70, SaInterfaceDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
|
|
columnDfn.DataName = colInterfaceProcess_MessageCount;
|
|
break;
|
|
case SaInterfaceProcess.Column.Message_Status_Desc:
|
|
SetInterfaceProcessColDfn(columnDfn, "Message stat", 80, SaInterfaceDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.String);
|
|
break;
|
|
case SaInterfaceProcess.Column.Message_Status_Ind:
|
|
SetInterfaceProcessColDfn(columnDfn, "Message stat", 80, SaInterfaceDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.TriState);
|
|
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
|
|
break;
|
|
case SaInterfaceProcess.Column.DataItem_Count:
|
|
SetInterfaceProcessColDfn(columnDfn, "Data items", 70, SaInterfaceDbDfn.ColumnIdx.Unknown, ColumnAlignment.Center, DataValue.DataType.Long);
|
|
columnDfn.DataName = colInterfaceProcess_DataItemCount;
|
|
break;
|
|
// Common properties.
|
|
/*
|
|
case SaInterfaceProcess.Column.Notes:
|
|
SetInterfaceProcessColDfn(columnDfn, "Notes", 200, SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Notes);
|
|
break;
|
|
*/
|
|
case SaInterfaceProcess.Column.Status:
|
|
SetInterfaceProcessColDfn(columnDfn, "Status", 80, SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Status, ColumnAlignment.Center);
|
|
break;
|
|
case SaInterfaceProcess.Column.Status_Desc:
|
|
SetInterfaceProcessColDfn(columnDfn, "Status", 90, SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Status, ColumnAlignment.Center);
|
|
break;
|
|
case SaInterfaceProcess.Column.Status_Ind:
|
|
SetInterfaceProcessColDfn(columnDfn, "Status", 80, SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Status, ColumnAlignment.Center, DataValue.DataType.TriState);
|
|
columnDfn.TriStateFormat = ColumnTriStateFormat.Lights;
|
|
break;
|
|
case SaInterfaceProcess.Column.CreateOn_Date:
|
|
SetInterfaceProcessColDfn(columnDfn, "Created", 80, SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_CreateOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
columnDfn.ReadOnly = true;
|
|
break;
|
|
case SaInterfaceProcess.Column.UpdateOn_Date:
|
|
SetInterfaceProcessColDfn(columnDfn, "Updated", 80, SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_UpdateOn, ColumnAlignment.Center, DataValue.DataType.Date);
|
|
columnDfn.ReadOnly = true;
|
|
break;
|
|
case SaInterfaceProcess.Column.UpdateHost:
|
|
SetInterfaceProcessColDfn(columnDfn, "Update host", 80, SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_UpdateHost, ColumnAlignment.Center);
|
|
columnDfn.ReadOnly = true;
|
|
break;
|
|
}
|
|
if (!String.IsNullOrEmpty(caption))
|
|
columnDfn.Caption = caption;
|
|
if (width > 0)
|
|
columnDfn.Width = width;
|
|
return columnDfn;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Interface Process query filter.
|
|
public override List<string> GetInterfaceProcessQueryFilter(SaInterfaceProcess.Params prm)
|
|
{
|
|
List<String> filter = new List<String>();
|
|
|
|
// Interface Process Id.
|
|
String colInterfaceProcess_Id = SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Id, aliasInterfaceProcess);
|
|
String includedIds = prm.IdsIncluded.Concat(",");
|
|
if (!includedIds.IsEmpty())
|
|
filter.Add(colInterfaceProcess_Id + " IN (" + includedIds + ")");
|
|
String excludedIds = prm.IdsExcluded.Concat(",");
|
|
if (!excludedIds.IsEmpty())
|
|
filter.Add(colInterfaceProcess_Id + " NOT IN (" + excludedIds + ")");
|
|
|
|
// Interface.
|
|
String colInterfaceProcess_InterfaceId = SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_InterfaceId, aliasInterfaceProcess);
|
|
if (SysId.IsValid(prm.InterfaceId))
|
|
filter.Add(colInterfaceProcess_InterfaceId + "=" + SysId.ToString(prm.InterfaceId));
|
|
|
|
// Process direction.
|
|
String colInterfaceProcess_Direction = SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Direction, aliasInterfaceProcess);
|
|
if ((int)prm.Direction > 0)
|
|
filter.Add(colInterfaceProcess_Direction + "=" + ((int)prm.Direction).ToString());
|
|
|
|
// Reference.
|
|
String colInterfaceProcess_ProcRef = SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcRef, aliasInterfaceProcess);
|
|
if (!StringUtil.IsEmpty(prm.Reference))
|
|
filter.Add(colInterfaceProcess_ProcRef + "='" + DbQuery.FormatForCondition(prm.Reference) + "'");
|
|
if (!StringUtil.IsEmpty(prm.ReferencePartial))
|
|
filter.Add(colInterfaceProcess_ProcRef + " LIKE '%" + DbQuery.FormatForLike(prm.Reference) + "%'");
|
|
|
|
// Processed date.
|
|
String colInterfaceProcess_ProcessAt = SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcessAt, aliasInterfaceProcess);
|
|
if (ColumnExists(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcessAt))
|
|
{
|
|
colInterfaceProcess_ProcessAt = SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcessAt, aliasInterfaceProcess);
|
|
if (DateUtil.IsValid(prm.ProcessedOn))
|
|
{
|
|
filter.Add(colInterfaceProcess_ProcessAt + ">=" + DbQuery.FormatDateForCondition(prm.ProcessedOn.Date));
|
|
filter.Add(colInterfaceProcess_ProcessAt + "<" + DbQuery.FormatDateForCondition(DateUtil.IncrementDate(prm.ProcessedOn.Date, 1)));
|
|
}
|
|
if (DateUtil.IsValid(prm.ProcessedFrom))
|
|
filter.Add(colInterfaceProcess_ProcessAt + ">=" + DbQuery.FormatDateForCondition(prm.ProcessedFrom.Date));
|
|
if (DateUtil.IsValid(prm.ProcessedTo))
|
|
filter.Add(colInterfaceProcess_ProcessAt + "<" + DbQuery.FormatDateForCondition(DateUtil.IncrementDate(prm.ProcessedTo.Date, 1)));
|
|
}
|
|
else if (Database.ColumnExists(TableName_InterfaceProcess, "ProcDate"))
|
|
{
|
|
// Legacy database - ProcDate/Time (integer values) istead of ProcessAt (DateTime).
|
|
String colInterfaceProcess_ProcDate = aliasInterfaceProcess + ".ProcDate";
|
|
if (DateUtil.IsValid(prm.ProcessedOn))
|
|
{
|
|
filter.Add(colInterfaceProcess_ProcDate + ">=" + DateUtil.DateToInt32(prm.ProcessedOn.Date));
|
|
filter.Add(colInterfaceProcess_ProcDate + "<" + DateUtil.DateToInt32(DateUtil.IncrementDate(prm.ProcessedOn.Date, 1)));
|
|
}
|
|
if (DateUtil.IsValid(prm.ProcessedFrom))
|
|
filter.Add(colInterfaceProcess_ProcDate + ">=" + DateUtil.DateToInt32(prm.ProcessedFrom.Date));
|
|
if (DateUtil.IsValid(prm.ProcessedTo))
|
|
filter.Add(colInterfaceProcess_ProcDate + "<" + DateUtil.DateToInt32(DateUtil.IncrementDate(prm.ProcessedTo.Date, 1)));
|
|
}
|
|
|
|
// Associated messages.
|
|
String aliasIntProcMsg = "ipm";
|
|
List<String> messageFilter = new List<string>();
|
|
// Message text.
|
|
String colInterfaceProcessMessage_Msg = SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcessMessage_Msg, aliasIntProcMsg);
|
|
if (!StringUtil.IsEmpty(prm.MessageText))
|
|
messageFilter.Add(colInterfaceProcessMessage_Msg + "='" + DbQuery.FormatForCondition(prm.MessageText) + "'");
|
|
if (!StringUtil.IsEmpty(prm.MessageTextPartial))
|
|
messageFilter.Add(colInterfaceProcessMessage_Msg + " LIKE '%" + DbQuery.FormatForLike(prm.MessageTextPartial) + "%'");
|
|
// Process message filter.
|
|
if (messageFilter.Count > 0)
|
|
{
|
|
String colInterfaceProcessMessage_ProcessId = SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcessMessage_ProcessId, aliasIntProcMsg);
|
|
filter.Add(colInterfaceProcess_Id + " In (SELECT " + colInterfaceProcessMessage_ProcessId + " FROM " + TableName_InterfaceProcessMessage + " As [" + aliasIntProcMsg + "] WHERE " + messageFilter.Concat(" AND ", "(", ")") + ")");
|
|
}
|
|
|
|
// Status.
|
|
String colStatus = SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Status, aliasInterfaceProcess);
|
|
if (prm.StatusCat == SaInterfaceProcess.StatusCat.AwaitingOnly)
|
|
filter.Add(colStatus + " In ('" + SacsSystem.GetStatusCode(SaStatus.Awaiting) + ")");
|
|
else if (prm.StatusCat == SaInterfaceProcess.StatusCat.InProgressOnly)
|
|
filter.Add(colStatus + " In ('" + SacsSystem.GetStatusCode(SaStatus.InProgress) + ")");
|
|
else if (prm.StatusCat == SaInterfaceProcess.StatusCat.CompletedOnly)
|
|
filter.Add(colStatus + " In ('" + SacsSystem.GetStatusCode(SaStatus.Completed) + ")");
|
|
|
|
if (filter.Count < 1 && prm.IncludeDefaultFilter) filter.Add("1=1");
|
|
return filter;
|
|
}
|
|
// Interface Process sort columns.
|
|
public List<String> GetInterfaceProcessSortColumns(SaInterfaceProcess.Params prm)
|
|
{
|
|
// Sort sequence:
|
|
List<String> sortColumnNames = new List<String>();
|
|
foreach (var columnDfn in prm.SortColumns)
|
|
{
|
|
// Need to ensure correct alias used for InterfaceProcess columns in case of conflict.
|
|
String sortCol = String.Empty;
|
|
if (SaInterfaceDbDfn.GetTableForColumn((SaInterfaceDbDfn.ColumnIdx)columnDfn.DbColumn) == SaInterfaceDbDfn.TableIdx.SaInterfaceProcess)
|
|
{
|
|
// Sep2019 Previously assigning alias+column directly but should be unecessary
|
|
// as column DataName/SortDataName should have correct alias populated.
|
|
// Also Process/Batch date/time columns may reference legacy column names.
|
|
//sortCol = SaInterfaceDbDfn.GetColumnNameQual((SaInterfaceDbDfn.ColumnIdx)columnDfn.DbColumn, aliasInterfaceProcess);
|
|
sortCol = columnDfn.DataName;
|
|
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
|
|
sortCol = columnDfn.SortDataName;
|
|
}
|
|
else
|
|
{
|
|
sortCol = columnDfn.DataName;
|
|
if (!StringUtil.IsEmpty(columnDfn.SortDataName))
|
|
sortCol = columnDfn.SortDataName;
|
|
}
|
|
if (!sortCol.IsEmpty())
|
|
{
|
|
DbOrderByNullMode orderByNullMode = DbOrderByNullMode.Default; // eSaOrderByDemoteNulls, eSaOrderByPromoteNulls
|
|
sortColumnNames.Add(DbQuery.FormatForOrderBy(sortCol, columnDfn.SortAscending, orderByNullMode).Concat(", "));
|
|
if (SaInterfaceDbDfn.GetTableForColumn((SaInterfaceDbDfn.ColumnIdx)columnDfn.DbColumn) == SaInterfaceDbDfn.TableIdx.SaInterfaceProcess)
|
|
{
|
|
if (sortCol.EqualsCI("ProcDate") || sortCol.EndsWithCI(".ProcDate"))
|
|
sortColumnNames.Add(DbQuery.FormatForOrderBy("ProcTime", columnDfn.SortAscending, orderByNullMode).Concat(", "));
|
|
else if (sortCol.EqualsCI("BatchDate") || sortCol.EndsWithCI(".BatchDate"))
|
|
sortColumnNames.Add(DbQuery.FormatForOrderBy("BatchTime", columnDfn.SortAscending, orderByNullMode).Concat(", "));
|
|
}
|
|
}
|
|
}
|
|
sortColumnNames.RemoveBlanks();
|
|
if (sortColumnNames.IsEmpty())
|
|
{
|
|
// Default sort columns:
|
|
sortColumnNames.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_InterfaceId, aliasInterfaceProcess) + " ASC");
|
|
if (ColumnExists(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcessAt))
|
|
sortColumnNames.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcessAt, aliasInterfaceProcess) + " ASC");
|
|
else if (Database.ColumnExists(TableName_InterfaceProcess, "Procdate"))
|
|
{
|
|
sortColumnNames.Add(aliasInterfaceProcess + ".ProcDate DESC");
|
|
sortColumnNames.Add(aliasInterfaceProcess + ".ProcTime DESC");
|
|
}
|
|
}
|
|
return sortColumnNames;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Interface Process count.
|
|
private long GetInterfaceProcessCount(String filter)
|
|
{
|
|
ClearErrorState();
|
|
return Database.GetRowCount(TableName_InterfaceProcess + " As " + aliasInterfaceProcess, filter);
|
|
}
|
|
public override long GetInterfaceProcessCount(SaInterfaceProcess.Params prm)
|
|
{
|
|
ClearErrorState();
|
|
return GetInterfaceProcessCount(GetInterfaceProcessQueryFilter(prm).Concat(" AND ", "(", ")"));
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Interface Process list.
|
|
public override List<SaInterfaceProcess> GetInterfaceProcessList(SaInterfaceProcess.Params prm)
|
|
{
|
|
ClearErrorState();
|
|
List<SaInterfaceProcess> interfaces = new List<SaInterfaceProcess>();
|
|
DbQuery qry = new DbQuery(Database.DbmsType);
|
|
qry.Tables.Add(TableName_InterfaceProcess, aliasInterfaceProcess);
|
|
SaInterfaceProcess_Db dbInterfaceProcess = new SaInterfaceProcess_Db_Local(DbInfo);
|
|
qry.Columns.AddRange(dbInterfaceProcess.ExistingColumnNames);
|
|
qry.Filters.AddRange(GetInterfaceProcessQueryFilter(prm));
|
|
qry.OrderBy.AddRange(GetInterfaceProcessSortColumns(prm));
|
|
// Query data.
|
|
using (var dbConnection = Database.CreateConnection())
|
|
using (var dbCommand = dbConnection.CreateCommand())
|
|
{
|
|
try
|
|
{
|
|
dbConnection.Open();
|
|
dbCommand.CommandText = qry.BuildQuery(prm.ResultsPaging);
|
|
using (DbDataReader dbDataReader = dbCommand.ExecuteReader())
|
|
{
|
|
while (dbDataReader.Read())
|
|
interfaces.Add(CreateInterfaceProcess(dbDataReader));
|
|
}
|
|
}
|
|
catch (Exception exc)
|
|
{
|
|
SetErrorState("Database query exception");
|
|
SaLogger.Warn($"{SysUtil.Fn}\n\tQuery: {dbCommand.CommandText}\n\t{ExceptionUtil.GetErrorStateMessage(exc)}");
|
|
}
|
|
}
|
|
return interfaces;
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
// Interface Process query.
|
|
public override DbResultSet ExecuteInterfaceProcessQuery(List<ColumnDfn> columns, SaInterfaceProcess.Params prm)
|
|
{
|
|
ClearErrorState();
|
|
|
|
//---------------------------------------------------------------------
|
|
// Construct query.
|
|
DbQuery query = new DbQuery(Database.DbmsType);
|
|
query.Tables.Add(TableName_InterfaceProcess, aliasInterfaceProcess);
|
|
|
|
// Add columns as defined in query list.
|
|
if (columns.HasId(SaInterfaceProcess.Column.Id))
|
|
query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Id, aliasInterfaceProcess));
|
|
if (columns.HasId(SaInterfaceProcess.Column.InterfaceId))
|
|
query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_InterfaceId, aliasInterfaceProcess));
|
|
if (columns.HasId(SaInterfaceProcess.Column.ProcessDirection) || columns.HasId(SaInterfaceProcess.Column.ProcessDirection_Desc))
|
|
query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Direction, aliasInterfaceProcess));
|
|
if (columns.HasId(SaInterfaceProcess.Column.ProcessReference))
|
|
query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcRef, aliasInterfaceProcess));
|
|
if (columns.HasId(SaInterfaceProcess.Column.ProcessSequence))
|
|
query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcSeq, aliasInterfaceProcess));
|
|
if (columns.HasId(SaInterfaceProcess.Column.ProcessAt) || columns.HasId(SaInterfaceProcess.Column.ProcessAt_Date) || columns.HasId(SaInterfaceProcess.Column.ProcessAt_Time))
|
|
{
|
|
if (ColumnExists(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcessAt))
|
|
query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcessAt, aliasInterfaceProcess));
|
|
else if (Database.ColumnExists(TableName_InterfaceProcess, "ProcDate"))
|
|
{
|
|
// Legacy columns.
|
|
query.Columns.Add(aliasInterfaceProcess + ".ProcDate");
|
|
query.Columns.Add(aliasInterfaceProcess + ".ProcTime");
|
|
}
|
|
}
|
|
if (columns.HasId(SaInterfaceProcess.Column.BatchAt) || columns.HasId(SaInterfaceProcess.Column.BatchAt_Date) || columns.HasId(SaInterfaceProcess.Column.BatchAt_Time))
|
|
{
|
|
if (ColumnExists(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_BatchAt))
|
|
query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_BatchAt, aliasInterfaceProcess));
|
|
else if (Database.ColumnExists(TableName_InterfaceProcess, "BatchDate"))
|
|
{
|
|
// Legacy columns.
|
|
query.Columns.Add(aliasInterfaceProcess + ".BatchDate");
|
|
query.Columns.Add(aliasInterfaceProcess + ".BatchTime");
|
|
}
|
|
}
|
|
if (columns.HasId(SaInterfaceProcess.Column.Elapsed_Secs) || columns.HasId(SaInterfaceProcess.Column.Elapsed_Fmt))
|
|
query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ElapseSecs, aliasInterfaceProcess));
|
|
/*
|
|
if (columns.HasId(SaInterfaceProcess.Column.Notes))
|
|
query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Notes, aliasInterfaceProcess));
|
|
*/
|
|
if (columns.HasId(SaInterfaceProcess.Column.Status) || columns.HasId(SaInterfaceProcess.Column.Status_Desc) || columns.HasId(SaInterfaceProcess.Column.Status_Ind))
|
|
query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Status, aliasInterfaceProcess));
|
|
if (columns.HasId(SaInterfaceProcess.Column.CreateOn_Date))
|
|
query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_CreateOn, aliasInterfaceProcess));
|
|
if (columns.HasId(SaInterfaceProcess.Column.UpdateOn_Date))
|
|
query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_UpdateOn, aliasInterfaceProcess));
|
|
if (columns.HasId(SaInterfaceProcess.Column.UpdateHost))
|
|
query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_UpdateHost, aliasInterfaceProcess));
|
|
|
|
//---------------------------------------------------------------------
|
|
// Interface properties.
|
|
bool hasInterfaceCols =
|
|
(columns.HasId(SaInterfaceProcess.Column.Interface_Context) ||
|
|
columns.HasId(SaInterfaceProcess.Column.Interface_Category) ||
|
|
columns.HasId(SaInterfaceProcess.Column.Interface_Category_Desc) ||
|
|
columns.HasId(SaInterfaceProcess.Column.Interface_Type) ||
|
|
columns.HasId(SaInterfaceProcess.Column.Interface_Type_Desc) ||
|
|
columns.HasId(SaInterfaceProcess.Column.Interface_Code) ||
|
|
columns.HasId(SaInterfaceProcess.Column.Interface_Caption));
|
|
if (hasInterfaceCols)
|
|
{
|
|
DbQueryJoin joinInt = new DbQueryJoin(DbJoinType.LeftOuter);
|
|
joinInt.Table = new StringPair(TableName_Interface, aliasInterfaceProcess_Interface);
|
|
joinInt.Filters.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterface_Id, aliasInterfaceProcess_Interface) + "=" + SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_InterfaceId, aliasInterfaceProcess));
|
|
query.Joins.Add(joinInt);
|
|
List<SaInterfaceDbDfn.ColumnIdx> cols = new List<SaInterfaceDbDfn.ColumnIdx>();
|
|
cols.Add(SaInterfaceDbDfn.ColumnIdx.SaInterface_Context);
|
|
cols.Add(SaInterfaceDbDfn.ColumnIdx.SaInterface_Category);
|
|
cols.Add(SaInterfaceDbDfn.ColumnIdx.SaInterface_Type);
|
|
cols.Add(SaInterfaceDbDfn.ColumnIdx.SaInterface_Code);
|
|
cols.Add(SaInterfaceDbDfn.ColumnIdx.SaInterface_Caption);
|
|
foreach (var col in cols)
|
|
query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(col, aliasInterfaceProcess_Interface), prefixInterfaceProcess_Interface + SaInterfaceDbDfn.GetColumnName(col, false));
|
|
}
|
|
|
|
//---------------------------------------------------------------------
|
|
// Message count.
|
|
if (columns.HasId(SaInterfaceProcess.Column.Message_Count))
|
|
{
|
|
String alias = "IpMsg";
|
|
DbQuery queryProcess = new DbQuery(Database.DbmsType);
|
|
queryProcess.Tables.Add(TableName_InterfaceProcessMessage, alias);
|
|
queryProcess.Columns.Add("Count(*)");
|
|
queryProcess.Filters.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcessMessage_ProcessId, alias) + "=" + SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Id, aliasInterfaceProcess));
|
|
query.Columns.Add("(" + queryProcess.BuildQuery() + ")", colInterfaceProcess_MessageCount);
|
|
}
|
|
|
|
//---------------------------------------------------------------------
|
|
// Message status.
|
|
if (columns.HasId(SaInterfaceProcess.Column.Message_Status_Desc) || columns.HasId(SaInterfaceProcess.Column.Message_Status_Ind))
|
|
{
|
|
// Count messages by type: error, warning, other.
|
|
String messageTypeFatal = MessageLevels.GetCodeForType(SaMessageLevel.Fatal);
|
|
String messageTypeException = MessageLevels.GetCodeForType(SaMessageLevel.Exception);
|
|
String messageTypeError = MessageLevels.GetCodeForType(SaMessageLevel.Error);
|
|
String messageTypeWarning = MessageLevels.GetCodeForType(SaMessageLevel.Warning);
|
|
|
|
// Error message count.
|
|
String alias = "IpMsg";
|
|
DbQuery queryProcess = new DbQuery(Database.DbmsType);
|
|
queryProcess.Tables.Add(TableName_InterfaceProcessMessage, alias);
|
|
queryProcess.Columns.Add("Count(*)");
|
|
queryProcess.Filters.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcessMessage_ProcessId, alias) + "=" + SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Id, aliasInterfaceProcess));
|
|
queryProcess.Filters.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcessMessage_MsgType, alias) + " IN (" + new List<String>() { messageTypeFatal, messageTypeException, messageTypeError }.Concat(",", "'", "'") + ")");
|
|
query.Columns.Add("(" + queryProcess.BuildQuery() + ")", colInterfaceProcess_MessageStatusErr);
|
|
|
|
// Warning message count.
|
|
queryProcess = new DbQuery(Database.DbmsType);
|
|
queryProcess.Tables.Add(TableName_InterfaceProcessMessage, alias);
|
|
queryProcess.Columns.Add("Count(*)");
|
|
queryProcess.Filters.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcessMessage_ProcessId, alias) + "=" + SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Id, aliasInterfaceProcess));
|
|
queryProcess.Filters.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcessMessage_MsgType, alias) + " IN (" + new List<String>() { messageTypeWarning, MessageTypeWarningAlt }.Concat(",", "'", "'") + ")");
|
|
query.Columns.Add("(" + queryProcess.BuildQuery() + ")", colInterfaceProcess_MessageStatusWrn);
|
|
|
|
// Other message count.
|
|
queryProcess = new DbQuery(Database.DbmsType);
|
|
queryProcess.Tables.Add(TableName_InterfaceProcessMessage, alias);
|
|
queryProcess.Columns.Add("Count(*)");
|
|
queryProcess.Filters.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcessMessage_ProcessId, alias) + "=" + SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Id, aliasInterfaceProcess));
|
|
queryProcess.Filters.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcessMessage_MsgType, alias) + " NOT IN (" + new List<String>() { messageTypeFatal, messageTypeException, messageTypeError, messageTypeWarning, MessageTypeWarningAlt }.Concat(",", "'", "'") + ")");
|
|
query.Columns.Add("(" + queryProcess.BuildQuery() + ")", colInterfaceProcess_MessageStatusInf);
|
|
}
|
|
|
|
//---------------------------------------------------------------------
|
|
// Data Item count.
|
|
if (columns.HasId(SaInterfaceProcess.Column.DataItem_Count))
|
|
{
|
|
String alias = "IpDatItm";
|
|
DbQuery queryDataItem = new DbQuery(Database.DbmsType);
|
|
queryDataItem.Tables.Add(TableName_InterfaceProcess, alias);
|
|
queryDataItem.Columns.Add("Count(*)");
|
|
queryDataItem.Filters.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcessDataItem_ProcessId, alias) + "=" + SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Id, aliasInterfaceProcess));
|
|
query.Columns.Add("(" + queryDataItem.BuildQuery() + ")", colInterfaceProcess_DataItemCount);
|
|
}
|
|
|
|
//---------------------------------------------------------------------
|
|
// Populate filter.
|
|
query.Filters.AddRange(GetInterfaceProcessQueryFilter(prm));
|
|
|
|
if (prm.IdsIncluded.Count != 1)
|
|
{
|
|
// Configure sort sequence.
|
|
foreach (String sortColumn in GetInterfaceProcessSortColumns(prm))
|
|
query.OrderBy.Add(sortColumn);
|
|
}
|
|
|
|
//---------------------------------------------------------------------
|
|
//return new DbResultSet_DataTableReader(Database, query.BuildQuery(prm.ResultsPaging));
|
|
return DbResultSet_DataReader.ExecuteQuery(Database, query.BuildQuery(prm.ResultsPaging));
|
|
}
|
|
|
|
//-------------------------------------------------------------------
|
|
}
|
|
//=======================================================================
|
|
}
|