C2022-030 display message when PROMSFixes is not up to date

C2022030 function to read RevDate from PROMSFixes file located in exe folder
This commit is contained in:
John Jenko 2022-11-01 15:40:44 +00:00
parent 20b645a378
commit 2f4b33b621
2 changed files with 74 additions and 9 deletions

View File

@ -9,6 +9,7 @@ using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Configuration;
using System.Reflection;
using VEPROMS.CSLA.Library;
//using Csla;
using DevComponents;
@ -397,6 +398,27 @@ namespace VEPROMS
_MyLog.InfoFormat("\r\nSession Beginning\r\n<===={0}[SQL:{1:yyMM.ddHH}]====== User: {2}/{3} Started {4} ===============>{5}"
, Application.ProductVersion, Database.RevDate, Environment.UserDomainName, Environment.UserName, DateTime.Now.ToString("dddd MMMM d, yyyy h:mm:ss tt"), FormatInfo.Failed ?? "");
// C2022-030 Notify the user if the stored procedure in the database are not update to date
// with those in the PROMSFixes.sql delivered with the PROMS executable
string pfVersion = ExeInfo.GetAssocicatedPROMSFixesVersion();
string dbpfVersion = string.Format("{0:yyMM.ddHH}", Database.RevDate);
// if pfVersion is null, that means there was a problem finding or reading the PROMSFixes.SQL file in the executable folder
if (pfVersion != null && !pfVersion.Equals(dbpfVersion))
{
_MyLog.WarnFormat("PROMSFixes Version - in Data Version is {0} PROMS is Expecting Version {1}", dbpfVersion, pfVersion);
StringBuilder sbMsg = new StringBuilder();
//sbMsg.Append("The SQL Stored Procedures in the Database are a different version than what PROMS is expecting.");
sbMsg.Append("The SQL Stored Procedures version in the database is different than what PROMS is expecting.");
sbMsg.Append("\nPROMS may not run properly until the lastest SQL Stored Procedures are installed.");
sbMsg.AppendFormat("\n\n The database has SQL Stored Procedures version: {0}", dbpfVersion);
sbMsg.AppendFormat("\n PROMS is expecting SQL Stored Procedures version: {0}", pfVersion);
sbMsg.Append("\n\nPlease have your DBA update the database with the PROMSFixes.sql script file that was\ndelivered with this PROMS executable.");
sbMsg.Append("\n\nThe PROMSFixes.sql file is included with the PROMS installation download.");
sbMsg.Append("\n\nIt can also be found in your PROMS executable folder:");
sbMsg.AppendFormat("\n\t{0}",ExeInfo.PROMSExecutableFolderPath());
FlexibleMessageBox.Show(sbMsg.ToString(),"SQL Stored Procedures Version Difference");
}
foreach (string parameter in parameters)
{
if (parameter.ToUpper().StartsWith("/UF="))

View File

@ -1,23 +1,66 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Linq;
namespace Volian.Base.Library
{
public static class ExeInfo
{
#region Log4Net
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
#endregion
public static string GetROEditorPath()
{
//string roapp = Environment.GetEnvironmentVariable("roapp");
// Get the current location of the PROMS executable and build a path to the RO Editor executable.
// the system call below return a path string with "file:\\" preceeding it.
string roapp = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
if (roapp[7] == ':') // either a local drive or a mapped network drive
roapp = roapp.Substring(6);
else
roapp = @"\" + roapp.Substring(5); // non-mapped network drive - need to add extra back slash in front
roapp = roapp + @"\ROEDITOR.EXE";
string roapp = PROMSExecutableFolderPath() + @"\ROEDITOR.EXE";
return roapp;
}
// returns the path to the executable folder
public static string PROMSExecutableFolderPath()
{
string pathPROMSexe = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
if (pathPROMSexe[7] == ':') // either a local drive or a mapped network drive
pathPROMSexe = pathPROMSexe.Substring(6);
else
pathPROMSexe = @"\" + pathPROMSexe.Substring(5); // non-mapped network drive - need to add extra back slash in front
return pathPROMSexe;
}
// C2022-030 get the version of PROMSFixes associated with this execuable
public static string GetAssocicatedPROMSFixesVersion()
{
try
{
// Build the path to the PROMSFixes.sql file located in the PROMS exe folder
string pathPROMSFixes = PROMSExecutableFolderPath() + @"\PROMSFixes.sql";
// open the PROMSFixes.sql file and grab the line of text containing the PROMSFixes RevDate
// using Linq to open and read the PROMSFixes file
// it returns a list of lines. we look at only the first one (should only be one of these in PROMSFixes)
var lines = from text in File.ReadLines(pathPROMSFixes)
where text.Contains("set @RevDate =")
select new
{
Text = text
};
var txt = lines.First(); // get the first line of text where "set @RevDate =" was found
string dtstring = txt.Text; // this is the actual text line
// Parse out the date/time text that follows "set @RevDate ="
int idx = dtstring.IndexOf('=') + 3;
dtstring = dtstring.Substring(idx);
dtstring = dtstring.Substring(0, dtstring.IndexOf("'"));
// convert the parsed date/time text string to a DateTime and string format it to yyMM.ddHH like used in Help About
string rtnStr = string.Format("{0:yyMM.ddHH}", DateTime.Parse(dtstring));
return rtnStr; // return the PROMSFixes version date stored in the PROMSFixes.sql file that's in the PROMS exe folder
}
catch (Exception ex)
{
_MyLog.ErrorFormat("GetAssociatedPROMSFixesVersion - {0}", ex.Message);
return null; // return null to signal that we could not find or parse the PROMSFixes version date
}
}
}
}