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) { SaLogger.Warn(GetType().Name + ".GetInterfaceProcess\n\tQuery: " + dbCommand.CommandText + "\n\t" + ExceptionUtil.GetLogMessage(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 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 interfaceProcessIds = new List(interfaceProcessIdsToClear); // Delete interface process messages in batches of 20. while (!HasErrorState()) { List 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 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 interfaceProcessIds = new List(interfaceProcessIdsToClear); // Delete interface process messages in batches of 20. while (!HasErrorState()) { List 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 GetInterfaceProcessQueryFilter (SaInterfaceProcess.Params prm) { List filter = new List(); // Interface Process Id. String colInterfaceProcess_Id = SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Id, aliasInterfaceProcess); String includedIds = prm.IncludedIds.Concat(","); if (!includedIds.IsEmpty()) filter.Add(colInterfaceProcess_Id + " IN (" + includedIds + ")"); String excludedIds = prm.ExcludedIds.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 messageFilter = new List(); // 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 GetInterfaceProcessSortColumns (SaInterfaceProcess.Params prm) { // Sort sequence: List sortColumnNames = new List(); 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 GetInterfaceProcessList (SaInterfaceProcess.Params prm) { List interfaces = new List(); 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) { SaLogger.Warn(GetType().Name + ".GetInterfaceProcessList\n\tQuery: " + dbCommand.CommandText + "\n\t" + ExceptionUtil.GetLogMessage(exc)); } } return interfaces; } //------------------------------------------------------------------- // Interface Process query. public override DbResultSet ExecuteInterfaceProcessQuery (List 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((int)SaInterfaceProcess.Column.Id)) query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Id, aliasInterfaceProcess)); if (columns.HasId((int)SaInterfaceProcess.Column.InterfaceId)) query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_InterfaceId, aliasInterfaceProcess)); if (columns.HasId((int)SaInterfaceProcess.Column.ProcessDirection) || columns.HasId((int)SaInterfaceProcess.Column.ProcessDirection_Desc)) query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Direction, aliasInterfaceProcess)); if (columns.HasId((int)SaInterfaceProcess.Column.ProcessReference)) query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcRef, aliasInterfaceProcess)); if (columns.HasId((int)SaInterfaceProcess.Column.ProcessSequence)) query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ProcSeq, aliasInterfaceProcess)); if (columns.HasId((int)SaInterfaceProcess.Column.ProcessAt) || columns.HasId((int)SaInterfaceProcess.Column.ProcessAt_Date) || columns.HasId((int)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((int)SaInterfaceProcess.Column.BatchAt) || columns.HasId((int)SaInterfaceProcess.Column.BatchAt_Date) || columns.HasId((int)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((int)SaInterfaceProcess.Column.Elapsed_Secs) || columns.HasId((int)SaInterfaceProcess.Column.Elapsed_Fmt)) query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_ElapseSecs, aliasInterfaceProcess)); /* if (columns.HasId((int)SaInterfaceProcess.Column.Notes)) query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Notes, aliasInterfaceProcess)); */ if (columns.HasId((int)SaInterfaceProcess.Column.Status) || columns.HasId((int)SaInterfaceProcess.Column.Status_Desc) || columns.HasId((int)SaInterfaceProcess.Column.Status_Ind)) query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_Status, aliasInterfaceProcess)); if (columns.HasId((int)SaInterfaceProcess.Column.CreateOn_Date)) query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_CreateOn, aliasInterfaceProcess)); if (columns.HasId((int)SaInterfaceProcess.Column.UpdateOn_Date)) query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_UpdateOn, aliasInterfaceProcess)); if (columns.HasId((int)SaInterfaceProcess.Column.UpdateHost)) query.Columns.Add(SaInterfaceDbDfn.GetColumnNameQual(SaInterfaceDbDfn.ColumnIdx.SaInterfaceProcess_UpdateHost, aliasInterfaceProcess)); //--------------------------------------------------------------------- // Interface properties. bool hasInterfaceCols = (columns.HasId((int)SaInterfaceProcess.Column.Interface_Context) || columns.HasId((int)SaInterfaceProcess.Column.Interface_Category) || columns.HasId((int)SaInterfaceProcess.Column.Interface_Category_Desc) || columns.HasId((int)SaInterfaceProcess.Column.Interface_Type) || columns.HasId((int)SaInterfaceProcess.Column.Interface_Type_Desc) || columns.HasId((int)SaInterfaceProcess.Column.Interface_Code) || columns.HasId((int)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 cols = new List(); 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((int)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((int)SaInterfaceProcess.Column.Message_Status_Desc) || columns.HasId((int)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() { 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() { 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() { messageTypeFatal, messageTypeException, messageTypeError, messageTypeWarning, MessageTypeWarningAlt }.Concat(",", "'", "'") + ")"); query.Columns.Add("(" + queryProcess.BuildQuery() + ")", colInterfaceProcess_MessageStatusInf); } //--------------------------------------------------------------------- // Data Item count. if (columns.HasId((int)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.IncludedIds.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)); } //------------------------------------------------------------------- } //======================================================================= }