From a519f0f31a63cbc0678d2472d8bfb7f77691ade6 Mon Sep 17 00:00:00 2001 From: Daniel Schick Date: Sat, 12 Jun 2021 06:44:02 +0000 Subject: [PATCH] Core Delete Tool, Tests und anderes --- ENI-2/ENI2/ENI2/App.config | 8 +- nsw/S-211/2021_06_03_STM Conference.docx | Bin 0 -> 36249 bytes nsw/Source/CoreDeleteTool/App.config | 3 +- nsw/Source/CoreDeleteTool/Main.Designer.cs | 179 +++++++++++++++--- nsw/Source/CoreDeleteTool/Main.cs | 81 ++++---- nsw/Source/CoreDeleteTool/Main.resx | 3 + nsw/Source/SendNSWMessageService/App.config | 6 +- .../Properties/Settings.Designer.cs | 31 +-- .../Properties/Settings.settings | 6 +- nsw/Source/bsmd.database/DBManager.cs | 16 ++ nsw/Source/bsmd.database/Message.cs | 3 +- nsw/Source/bsmd.database/MessageCore.cs | 8 +- 12 files changed, 256 insertions(+), 88 deletions(-) create mode 100644 nsw/S-211/2021_06_03_STM Conference.docx diff --git a/ENI-2/ENI2/ENI2/App.config b/ENI-2/ENI2/ENI2/App.config index e173ff53..3e273a78 100644 --- a/ENI-2/ENI2/ENI2/App.config +++ b/ENI-2/ENI2/ENI2/App.config @@ -26,12 +26,12 @@ 1000 - http://192.168.2.24/LockingService/LockingService.svc - + + http://heupferd/bsmd.LockingService/LockingService.svc - Initial Catalog=nsw;Data Source=192.168.2.24\SQLEXPRESS;Uid=dfuser;pwd=dfpasswd;Persist Security Info=False;Connection Reset=false - + + Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=E:\DATA\DB\NSW.MDF;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False diff --git a/nsw/S-211/2021_06_03_STM Conference.docx b/nsw/S-211/2021_06_03_STM Conference.docx new file mode 100644 index 0000000000000000000000000000000000000000..49ad9cb144431f932d5adf122341826e1d328d26 GIT binary patch literal 36249 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 - Data Source=(localdb)\Projects;Initial Catalog=nsw;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False + Initial Catalog=nsw;Data Source=192.168.2.24\SQLEXPRESS;Uid=dfuser;pwd=dfpasswd;Persist Security Info=False;Connection Reset=false + diff --git a/nsw/Source/CoreDeleteTool/Main.Designer.cs b/nsw/Source/CoreDeleteTool/Main.Designer.cs index 6e58e014..213aed4c 100644 --- a/nsw/Source/CoreDeleteTool/Main.Designer.cs +++ b/nsw/Source/CoreDeleteTool/Main.Designer.cs @@ -31,12 +31,24 @@ this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Main)); this.dataGridView = new System.Windows.Forms.DataGridView(); - this.buttonClose = new System.Windows.Forms.Button(); - this.buttonDelete = new System.Windows.Forms.Button(); this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.buttonClose = new System.Windows.Forms.Button(); + this.buttonDelete = new System.Windows.Forms.Button(); + this.buttonLoadAll = new System.Windows.Forms.Button(); + this.buttonLoadOld = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); + this.label2 = new System.Windows.Forms.Label(); + this.labelLoadResult = new System.Windows.Forms.Label(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.toolStripProgressBar = new System.Windows.Forms.ToolStripProgressBar(); + this.toolStripStatusLabel = new System.Windows.Forms.ToolStripStatusLabel(); + this.buttonDeleteAll = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit(); this.contextMenuStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); + this.statusStrip1.SuspendLayout(); this.SuspendLayout(); // // dataGridView @@ -49,37 +61,14 @@ this.dataGridView.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells; this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dataGridView.ContextMenuStrip = this.contextMenuStrip; - this.dataGridView.Location = new System.Drawing.Point(12, 12); - this.dataGridView.MultiSelect = false; + this.dataGridView.Location = new System.Drawing.Point(12, 73); this.dataGridView.Name = "dataGridView"; this.dataGridView.ReadOnly = true; this.dataGridView.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; - this.dataGridView.Size = new System.Drawing.Size(624, 328); + this.dataGridView.Size = new System.Drawing.Size(624, 244); this.dataGridView.TabIndex = 0; this.dataGridView.DataBindingComplete += new System.Windows.Forms.DataGridViewBindingCompleteEventHandler(this.dataGridView_DataBindingComplete); // - // buttonClose - // - this.buttonClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonClose.Location = new System.Drawing.Point(561, 346); - this.buttonClose.Name = "buttonClose"; - this.buttonClose.Size = new System.Drawing.Size(75, 23); - this.buttonClose.TabIndex = 1; - this.buttonClose.Text = "Close"; - this.buttonClose.UseVisualStyleBackColor = true; - this.buttonClose.Click += new System.EventHandler(this.buttonClose_Click); - // - // buttonDelete - // - this.buttonDelete.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.buttonDelete.Location = new System.Drawing.Point(12, 346); - this.buttonDelete.Name = "buttonDelete"; - this.buttonDelete.Size = new System.Drawing.Size(75, 23); - this.buttonDelete.TabIndex = 2; - this.buttonDelete.Text = "Delete"; - this.buttonDelete.UseVisualStyleBackColor = true; - this.buttonDelete.Click += new System.EventHandler(this.buttonDelete_Click); - // // contextMenuStrip // this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -94,11 +83,131 @@ this.deleteToolStripMenuItem.Text = "Delete"; this.deleteToolStripMenuItem.Click += new System.EventHandler(this.buttonDelete_Click); // + // buttonClose + // + this.buttonClose.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonClose.Location = new System.Drawing.Point(561, 323); + this.buttonClose.Name = "buttonClose"; + this.buttonClose.Size = new System.Drawing.Size(75, 23); + this.buttonClose.TabIndex = 1; + this.buttonClose.Text = "Close"; + this.buttonClose.UseVisualStyleBackColor = true; + this.buttonClose.Click += new System.EventHandler(this.buttonClose_Click); + // + // buttonDelete + // + this.buttonDelete.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonDelete.Location = new System.Drawing.Point(12, 323); + this.buttonDelete.Name = "buttonDelete"; + this.buttonDelete.Size = new System.Drawing.Size(75, 23); + this.buttonDelete.TabIndex = 2; + this.buttonDelete.Text = "Delete"; + this.buttonDelete.UseVisualStyleBackColor = true; + this.buttonDelete.Click += new System.EventHandler(this.buttonDelete_Click); + // + // buttonLoadAll + // + this.buttonLoadAll.Location = new System.Drawing.Point(12, 44); + this.buttonLoadAll.Name = "buttonLoadAll"; + this.buttonLoadAll.Size = new System.Drawing.Size(75, 23); + this.buttonLoadAll.TabIndex = 3; + this.buttonLoadAll.Text = "Load all"; + this.buttonLoadAll.UseVisualStyleBackColor = true; + this.buttonLoadAll.Click += new System.EventHandler(this.buttonLoadAll_Click); + // + // buttonLoadOld + // + this.buttonLoadOld.Location = new System.Drawing.Point(202, 7); + this.buttonLoadOld.Name = "buttonLoadOld"; + this.buttonLoadOld.Size = new System.Drawing.Size(75, 23); + this.buttonLoadOld.TabIndex = 4; + this.buttonLoadOld.Text = "Load"; + this.buttonLoadOld.UseVisualStyleBackColor = true; + this.buttonLoadOld.Click += new System.EventHandler(this.buttonLoadOld_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 12); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(81, 13); + this.label1.TabIndex = 5; + this.label1.Text = "Load older than"; + // + // numericUpDown1 + // + this.numericUpDown1.Location = new System.Drawing.Point(99, 10); + this.numericUpDown1.Name = "numericUpDown1"; + this.numericUpDown1.Size = new System.Drawing.Size(50, 20); + this.numericUpDown1.TabIndex = 6; + this.numericUpDown1.Value = new decimal(new int[] { + 18, + 0, + 0, + 0}); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(155, 12); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(41, 13); + this.label2.TabIndex = 7; + this.label2.Text = "months"; + // + // labelLoadResult + // + this.labelLoadResult.AutoSize = true; + this.labelLoadResult.Location = new System.Drawing.Point(283, 12); + this.labelLoadResult.Name = "labelLoadResult"; + this.labelLoadResult.Size = new System.Drawing.Size(0, 13); + this.labelLoadResult.TabIndex = 8; + // + // statusStrip1 + // + this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripProgressBar, + this.toolStripStatusLabel}); + this.statusStrip1.Location = new System.Drawing.Point(0, 356); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(648, 22); + this.statusStrip1.TabIndex = 9; + this.statusStrip1.Text = "statusStrip1"; + // + // toolStripProgressBar + // + this.toolStripProgressBar.Name = "toolStripProgressBar"; + this.toolStripProgressBar.Size = new System.Drawing.Size(100, 16); + // + // toolStripStatusLabel + // + this.toolStripStatusLabel.Name = "toolStripStatusLabel"; + this.toolStripStatusLabel.Size = new System.Drawing.Size(0, 17); + // + // buttonDeleteAll + // + this.buttonDeleteAll.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonDeleteAll.Location = new System.Drawing.Point(99, 323); + this.buttonDeleteAll.Name = "buttonDeleteAll"; + this.buttonDeleteAll.Size = new System.Drawing.Size(75, 23); + this.buttonDeleteAll.TabIndex = 10; + this.buttonDeleteAll.Text = "Delete all"; + this.buttonDeleteAll.UseVisualStyleBackColor = true; + this.buttonDeleteAll.Click += new System.EventHandler(this.buttonDeleteAll_Click); + // // Main // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(648, 377); + this.ClientSize = new System.Drawing.Size(648, 378); + this.Controls.Add(this.buttonDeleteAll); + this.Controls.Add(this.statusStrip1); + this.Controls.Add(this.labelLoadResult); + this.Controls.Add(this.label2); + this.Controls.Add(this.numericUpDown1); + this.Controls.Add(this.label1); + this.Controls.Add(this.buttonLoadOld); + this.Controls.Add(this.buttonLoadAll); this.Controls.Add(this.buttonDelete); this.Controls.Add(this.buttonClose); this.Controls.Add(this.dataGridView); @@ -107,7 +216,11 @@ this.Text = "ENI message core removal tool"; ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit(); this.contextMenuStrip.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); + this.statusStrip1.ResumeLayout(false); + this.statusStrip1.PerformLayout(); this.ResumeLayout(false); + this.PerformLayout(); } @@ -118,6 +231,16 @@ private System.Windows.Forms.Button buttonDelete; private System.Windows.Forms.ContextMenuStrip contextMenuStrip; private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem; + private System.Windows.Forms.Button buttonLoadAll; + private System.Windows.Forms.Button buttonLoadOld; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.NumericUpDown numericUpDown1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label labelLoadResult; + private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.ToolStripProgressBar toolStripProgressBar; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel; + private System.Windows.Forms.Button buttonDeleteAll; } } diff --git a/nsw/Source/CoreDeleteTool/Main.cs b/nsw/Source/CoreDeleteTool/Main.cs index 0f3e9b73..5bfcc848 100644 --- a/nsw/Source/CoreDeleteTool/Main.cs +++ b/nsw/Source/CoreDeleteTool/Main.cs @@ -1,11 +1,5 @@ using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; + using System.Windows.Forms; using bsmd.database; @@ -29,33 +23,14 @@ namespace CoreDeleteTool if (DBManager.Instance.Connect(Properties.Settings.Default.ConnectionString)) { - foreach (MessageCore mc in DBManager.Instance.GetMessageCoresByStatus(MessageCore.BSMDStatus.PREPARE)) - this.messageCores.Add(mc); + } else { - MessageBox.Show("Cannot connect to database!"); - - // create a dummy cores - MessageCore mc = new MessageCore(); - mc.IMO = "1234567"; - mc.ETA = DateTime.Now; - mc.PoC = "ZZUKN"; - mc.Portname = "Hamburg"; - - this.messageCores.Add(mc); - - mc = new MessageCore(); - mc.IMO = "9999999"; - mc.ETA = DateTime.Now + TimeSpan.FromHours(1); - mc.PoC = "DEBRE"; - mc.Portname = "Bremen"; - - this.messageCores.Add(mc); - + MessageBox.Show("Cannot connect to database!"); } - this.dataGridView.DataSource = this.messageCores; + } #endregion @@ -68,17 +43,19 @@ namespace CoreDeleteTool { if (MessageBox.Show("Delete selected item(s)?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes) { + this.toolStripProgressBar.Maximum = this.dataGridView.SelectedRows.Count; + this.toolStripStatusLabel.Text = string.Format("Removing {0} items..", this.dataGridView.SelectedRows.Count); + for (int i = 0; i < this.dataGridView.SelectedRows.Count; i++) { MessageCore selectedCore = this.dataGridView.SelectedRows[i].DataBoundItem as MessageCore; if (selectedCore != null) { DBManager.Instance.DeleteCore(selectedCore); - this.messageCores.Remove(selectedCore); + this.toolStripProgressBar.Value = i; } - } - // TODO:refresh data source? + } } } } @@ -97,6 +74,46 @@ namespace CoreDeleteTool private void menuStripDelete_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { this.buttonDelete_Click(sender, new EventArgs()); + } + + private void buttonLoadOld_Click(object sender, EventArgs e) + { + this.messageCores.Clear(); + foreach (MessageCore mc in DBManager.Instance.GetMessageCoresOlderThan((int)this.numericUpDown1.Value)) + this.messageCores.Add(mc); + this.dataGridView.DataSource = this.messageCores; + this.toolStripStatusLabel.Text = string.Format("{0} cores found", this.messageCores.Count); + } + + private void buttonLoadAll_Click(object sender, EventArgs e) + { + foreach (MessageCore mc in DBManager.Instance.GetMessageCoresByStatus(MessageCore.BSMDStatus.PREPARE)) + this.messageCores.Add(mc); + this.dataGridView.DataSource = this.messageCores; + this.toolStripStatusLabel.Text = string.Format("{0} cores found", this.messageCores.Count); + } + + private void buttonDeleteAll_Click(object sender, EventArgs e) + { + if (DBManager.Instance.IsConnected) + { + if (MessageBox.Show("Delete all items?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes) + { + Application.UseWaitCursor = true; + this.toolStripProgressBar.Maximum = this.messageCores.Count; + this.toolStripStatusLabel.Text = string.Format("Removing {0} items..", this.messageCores.Count); + + for (int i = 0; i < this.messageCores.Count; i++) + { + MessageCore selectedCore = this.messageCores[i]; + DBManager.Instance.DeleteCore(selectedCore); + this.messageCores.Remove(selectedCore); + this.toolStripProgressBar.Value = i; + Application.DoEvents(); + } + Application.UseWaitCursor = false; + } + } } #endregion diff --git a/nsw/Source/CoreDeleteTool/Main.resx b/nsw/Source/CoreDeleteTool/Main.resx index b8a508a8..00fb699f 100644 --- a/nsw/Source/CoreDeleteTool/Main.resx +++ b/nsw/Source/CoreDeleteTool/Main.resx @@ -120,6 +120,9 @@ 17, 17 + + 166, 17 + diff --git a/nsw/Source/SendNSWMessageService/App.config b/nsw/Source/SendNSWMessageService/App.config index b34426a9..3b6ac0f4 100644 --- a/nsw/Source/SendNSWMessageService/App.config +++ b/nsw/Source/SendNSWMessageService/App.config @@ -28,12 +28,12 @@ - - Data Source=(localdb)\Projects;Initial Catalog=nsw;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False - 0 + + Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=E:\DATA\DB\NSW.MDF;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False + \ No newline at end of file diff --git a/nsw/Source/SendNSWMessageService/Properties/Settings.Designer.cs b/nsw/Source/SendNSWMessageService/Properties/Settings.Designer.cs index 6e71f153..72ce9f8a 100644 --- a/nsw/Source/SendNSWMessageService/Properties/Settings.Designer.cs +++ b/nsw/Source/SendNSWMessageService/Properties/Settings.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.34209 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -12,7 +12,7 @@ namespace SendNSWMessageService.Properties { [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.8.1.0")] internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); @@ -23,19 +23,6 @@ namespace SendNSWMessageService.Properties { } } - [global::System.Configuration.UserScopedSettingAttribute()] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("Data Source=(localdb)\\Projects;Initial Catalog=nsw;Integrated Security=True;Conne" + - "ct Timeout=30;Encrypt=False;TrustServerCertificate=False")] - public string ConnectionString { - get { - return ((string)(this["ConnectionString"])); - } - set { - this["ConnectionString"] = value; - } - } - [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("0")] @@ -47,5 +34,19 @@ namespace SendNSWMessageService.Properties { this["SleepSeconds"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=E:\\DATA\\DB\\NSW.MDF;Integrated " + + "Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;Appl" + + "icationIntent=ReadWrite;MultiSubnetFailover=False")] + public string ConnectionString { + get { + return ((string)(this["ConnectionString"])); + } + set { + this["ConnectionString"] = value; + } + } } } diff --git a/nsw/Source/SendNSWMessageService/Properties/Settings.settings b/nsw/Source/SendNSWMessageService/Properties/Settings.settings index 6429ec72..5ec10162 100644 --- a/nsw/Source/SendNSWMessageService/Properties/Settings.settings +++ b/nsw/Source/SendNSWMessageService/Properties/Settings.settings @@ -2,11 +2,11 @@ - - Data Source=(localdb)\Projects;Initial Catalog=nsw;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False - 0 + + Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=E:\DATA\DB\NSW.MDF;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False + \ No newline at end of file diff --git a/nsw/Source/bsmd.database/DBManager.cs b/nsw/Source/bsmd.database/DBManager.cs index 51f0dc3f..48167b0d 100644 --- a/nsw/Source/bsmd.database/DBManager.cs +++ b/nsw/Source/bsmd.database/DBManager.cs @@ -234,6 +234,22 @@ namespace bsmd.database return result; } + public List GetMessageCoresOlderThan(int months) + { + List result = new List(); + MessageCore aMessageCore = new MessageCore(); + SqlCommand cmd = new SqlCommand(); + aMessageCore.PrepareLoadCommand(cmd, Message.LoadFilter.BY_AGE, months); + + SqlDataReader reader = this.PerformCommand(cmd); + if (reader != null) + { + foreach (MessageCore core in aMessageCore.LoadList(reader)) + result.Add(core); + } + return result; + } + public int? GetNumCoresWithFilters(Dictionary filters) { MessageCore aMessageCore = new MessageCore(); diff --git a/nsw/Source/bsmd.database/Message.cs b/nsw/Source/bsmd.database/Message.cs index a9074c75..595b2d24 100644 --- a/nsw/Source/bsmd.database/Message.cs +++ b/nsw/Source/bsmd.database/Message.cs @@ -138,7 +138,8 @@ namespace bsmd.database NOT_DELETED, DELETED, IMPORTHEADER_ID, - BY_CORE_AND_CLASS + BY_CORE_AND_CLASS, + BY_AGE } /// diff --git a/nsw/Source/bsmd.database/MessageCore.cs b/nsw/Source/bsmd.database/MessageCore.cs index 013f2d6c..31dfe0d3 100644 --- a/nsw/Source/bsmd.database/MessageCore.cs +++ b/nsw/Source/bsmd.database/MessageCore.cs @@ -57,7 +57,8 @@ namespace bsmd.database FAILURE, REPORTREQUESTED, ARCHIVED, - HIS_FAILURE_DBH + HIS_FAILURE_DBH, + INVALID } /// @@ -571,6 +572,11 @@ namespace bsmd.database sb.Append("WHERE QueryNSWStatus = 1"); break; } + case Message.LoadFilter.BY_AGE: + { + sb.AppendFormat("WHERE Created < DATEADD(month, -{0}, GETDATE())", criteria[0]); + break; + } case Message.LoadFilter.SEARCH_CORE_FILTERS: { // object ist jetzt ein dict aus filtertyp und filterparameter