211 lines
8.1 KiB
C#
211 lines
8.1 KiB
C#
// Copyright (c) 2015-2017 schick Informatik
|
|
// Description: Speicherobjekt für HIS-Nord Fehlermeldungen
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using System.Linq;
|
|
using System.Xml;
|
|
using System.IO;
|
|
using System.Xml.Linq;
|
|
using log4net;
|
|
|
|
namespace bsmd.database
|
|
{
|
|
|
|
/// <summary>
|
|
/// Diese Klasse bildet den Verbindungsfehler der HIS-Nord Schnittstelle ab. Damit ist ein Fehler der dazwischenliegenden
|
|
/// Kommunikationsschnittstelle gemeint, der Fehler wird nicht im NSW produziert
|
|
/// </summary>
|
|
public class SystemError : DatabaseEntity
|
|
{
|
|
private static ILog _log = LogManager.GetLogger(typeof(SystemError));
|
|
|
|
public SystemError()
|
|
{
|
|
this.tablename = "[dbo].[SystemError]";
|
|
}
|
|
|
|
#region Enums
|
|
|
|
public enum SystemErrorStatus
|
|
{
|
|
NEW,
|
|
ACKNOWLEDGED
|
|
};
|
|
|
|
#endregion
|
|
|
|
#region Properties
|
|
|
|
public DateTime? ErrorAt { get; set; }
|
|
|
|
public string Meldetype { get; set; }
|
|
|
|
public string ReferenceId { get; set; }
|
|
|
|
public int ProcessStatus { get; set; }
|
|
|
|
public string ImportFilename { get; set; }
|
|
|
|
public int ErrorCode { get; set; }
|
|
|
|
public string ErrorMessage { get; set; }
|
|
|
|
public string ErrorDescription { get; set; }
|
|
|
|
public SystemErrorStatus Status { get; set; }
|
|
|
|
public Guid MessageCoreId { get; set; }
|
|
|
|
public DateTime? SendDate { get; set; }
|
|
|
|
#endregion
|
|
|
|
#region DatabaseEntity implementation
|
|
|
|
public override List<DatabaseEntity> LoadList(IDataReader reader)
|
|
{
|
|
List<DatabaseEntity> result = new List<DatabaseEntity>();
|
|
while (reader.Read())
|
|
{
|
|
SystemError se = new SystemError();
|
|
se.id = reader.GetGuid(0);
|
|
|
|
if (!reader.IsDBNull(1)) se.ErrorAt = reader.GetDateTime(1);
|
|
if (!reader.IsDBNull(2)) se.Meldetype = reader.GetString(2);
|
|
if (!reader.IsDBNull(3)) se.ReferenceId = reader.GetString(3);
|
|
if (!reader.IsDBNull(4)) se.ProcessStatus = reader.GetInt32(4);
|
|
if (!reader.IsDBNull(5)) se.ImportFilename = reader.GetString(5);
|
|
if (!reader.IsDBNull(6)) se.ErrorCode = reader.GetInt32(6);
|
|
if (!reader.IsDBNull(7)) se.ErrorMessage = reader.GetString(7);
|
|
if (!reader.IsDBNull(8)) se.ErrorDescription = reader.GetString(8);
|
|
if (!reader.IsDBNull(9)) se.MessageCoreId = reader.GetGuid(9);
|
|
if (!reader.IsDBNull(10)) se.Status = (SystemError.SystemErrorStatus) Enum.ToObject(typeof(SystemError.SystemErrorStatus), reader.GetByte(10));
|
|
|
|
result.Add(se);
|
|
}
|
|
reader.Close();
|
|
return result;
|
|
}
|
|
|
|
public override void PrepareLoadCommand(IDbCommand cmd, Message.LoadFilter filter, params object[] criteria)
|
|
{
|
|
string query = string.Format("SELECT Id, ErrorAt, MeldeType, ReferenceId, ProcessStatus, ImportFilename, ErrorCode, ErrorMessage, ErrorDescription, MessageCoreId, Status FROM {0} ", this.Tablename);
|
|
|
|
switch (filter)
|
|
{
|
|
case Message.LoadFilter.BY_CORE:
|
|
query += "WHERE MessageCoreId = @COREID";
|
|
((SqlCommand)cmd).Parameters.AddWithValue("@COREID", criteria[0]);
|
|
break;
|
|
case Message.LoadFilter.ALL:
|
|
default:
|
|
break;
|
|
}
|
|
|
|
cmd.CommandText = query;
|
|
}
|
|
|
|
public override void PrepareSave(IDbCommand cmd)
|
|
{
|
|
SqlCommand scmd = cmd as SqlCommand;
|
|
|
|
scmd.Parameters.AddWithValue("@EAT", this.ErrorAt);
|
|
scmd.Parameters.AddWithValue("@MT", this.Meldetype);
|
|
scmd.Parameters.AddWithValue("@REFID", this.ReferenceId);
|
|
scmd.Parameters.AddWithValue("@PS", this.ProcessStatus);
|
|
scmd.Parameters.AddWithValue("@IF", this.ImportFilename);
|
|
scmd.Parameters.AddWithValue("@EC", this.ErrorCode);
|
|
scmd.Parameters.AddWithValue("@EM", this.ErrorMessage);
|
|
scmd.Parameters.AddWithValue("@ED", this.ErrorDescription);
|
|
scmd.Parameters.AddWithValue("@MCID", this.MessageCoreId);
|
|
scmd.Parameters.AddWithValue("@STATUS", (byte)this.Status);
|
|
|
|
if (this.IsNew)
|
|
{
|
|
scmd.CommandText = string.Format("INSERT INTO {0} (ErrorAt, MeldeType, ReferenceId, ProcessStatus, ImportFilename, ErrorCode, ErrorMessage, ErrorDescription, MessageCoreId, Status) " +
|
|
"VALUES (@EAT, @MT, @REFID, @PS, @IF, @EC, @EM, @ED, @MCID, @STATUS)", this.Tablename);
|
|
}
|
|
else
|
|
{
|
|
scmd.Parameters.AddWithValue("@ID", this.Id);
|
|
scmd.CommandText = string.Format("UPDATE {0} SET ErrorAt = @EAT, MeldeType = @MT, ReferenceId = @REFID, ProcessStatus = @PS, ImportFilename = @IF, " +
|
|
"ErrorCode = @EC, ErrorMessage = @EM, ErrorDescription = @ED, MessageCoreId = @MCID, Status = @STATUS WHERE Id = @ID", this.Tablename);
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region public static methods
|
|
|
|
public static SystemError createFromXml(XElement xml)
|
|
{
|
|
SystemError systemError = new SystemError();
|
|
try
|
|
{
|
|
if (xml.Descendants("ErrorAt").Count() > 0)
|
|
{
|
|
systemError.ErrorAt = DateTime.Parse(xml.Descendants("ErrorAt").FirstOrDefault().Value);
|
|
}
|
|
|
|
systemError.Meldetype = xml.Descendants("Meldetype").First()?.Value;
|
|
systemError.ReferenceId = xml.Descendants("ReferenceId").First()?.Value;
|
|
if (xml.Descendants("ProcessStatus").Count() > 0)
|
|
{
|
|
systemError.ProcessStatus = Int32.Parse(xml.Descendants("ProcessStatus").FirstOrDefault().Value);
|
|
}
|
|
|
|
systemError.ImportFilename = xml.Descendants("ImportFilename").FirstOrDefault()?.Value;
|
|
|
|
if (!systemError.ImportFilename.IsNullOrEmpty())
|
|
{
|
|
systemError.ImportFilename = Path.GetFileNameWithoutExtension(systemError.ImportFilename);
|
|
int ind = systemError.ImportFilename.IndexOf('-');
|
|
Guid aGuid;
|
|
if (Guid.TryParse(systemError.ImportFilename.Substring(ind + 1), out aGuid))
|
|
systemError.MessageCoreId = aGuid;
|
|
DateTime aDate;
|
|
if (DateTime.TryParse(systemError.ImportFilename.Substring(0, ind), out aDate))
|
|
systemError.SendDate = aDate;
|
|
}
|
|
|
|
|
|
if (xml.Descendants("ErrorCode").Count() > 0)
|
|
{
|
|
systemError.ErrorCode = Int32.Parse(xml.Descendants("ErrorCode").First().Value);
|
|
}
|
|
|
|
systemError.ErrorMessage = xml.Descendants("ErrorMessage").FirstOrDefault()?.Value;
|
|
systemError.ErrorDescription = xml.Descendants("ErrorDescription").FirstOrDefault()?.Value;
|
|
|
|
|
|
string coreIdString = xml.Descendants("ConveyanceCode").FirstOrDefault()?.Value;
|
|
|
|
if(!coreIdString.IsNullOrEmpty())
|
|
{
|
|
Guid aCoreId;
|
|
if(Guid.TryParse(coreIdString, out aCoreId))
|
|
{
|
|
systemError.MessageCoreId = aCoreId;
|
|
} else
|
|
{
|
|
_log.WarnFormat("cannot parse conveyance code to Guid: {0}", coreIdString);
|
|
}
|
|
}
|
|
|
|
}
|
|
catch(Exception ex)
|
|
{
|
|
_log.WarnFormat("Error parsing system error: {0} ERROR-XML: {1}", ex.ToString(), xml.ToString());
|
|
}
|
|
|
|
return systemError;
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
}
|