Added getDRoUsagesByROIDsAndVersions and getRoUsagesByROIDsAndVersions to speed-up RO Value Update process.

Added logic to speed up RO Value Update Process.
Added logic to keep SvgImages from failing if the ImagePath is null.
This commit is contained in:
Rich
2013-11-22 16:39:32 +00:00
parent f36317757d
commit 4994f19997
5 changed files with 289 additions and 6 deletions

View File

@@ -175,5 +175,72 @@ namespace VEPROMS.CSLA.Library
}
this.RaiseListChangedEvents = true;
}
[Serializable()]
private class GetDROUsagesByROIDsAndVersionsCriteria
{
public GetDROUsagesByROIDsAndVersionsCriteria(string roids,string versions)
{
_ROIDs = roids;
_Versions = versions;
}
private string _ROIDs;
public string ROIDs
{
get { return _ROIDs; }
set { _ROIDs = value; }
}
private string _Versions;
public string Versions
{
get { return _Versions; }
set { _Versions = value; }
}
}
public static DROUsageInfoList GetDROUsagesByROIDsAndVersions(string roids,string versions)
{
try
{
DROUsageInfoList tmp = DataPortal.Fetch<DROUsageInfoList>(new GetDROUsagesByROIDsAndVersionsCriteria(roids,versions));
DROUsageInfo.AddList(tmp);
tmp.AddEvents();
return tmp;
}
catch (Exception ex)
{
throw new DbCslaException("Error on DROUsageInfoList.GetDROUsagesByROIDsAndVersions", ex);
}
}
private void DataPortal_Fetch(GetDROUsagesByROIDsAndVersionsCriteria criteria)
{
this.RaiseListChangedEvents = false;
if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] DROUsageInfoList.DataPortal_FetchByROIDsAndVersions", GetHashCode());
try
{
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
{
using (SqlCommand cm = cn.CreateCommand())
{
cm.CommandType = CommandType.StoredProcedure;
cm.CommandText = "getDRoUsagesByROIDsAndVersions";
cm.Parameters.AddWithValue("@ROIDs", criteria.ROIDs);
cm.Parameters.AddWithValue("@Versions", criteria.Versions);
cm.CommandTimeout = Database.DefaultTimeout;
using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
{
IsReadOnly = false;
while (dr.Read())
this.Add(new DROUsageInfo(dr));
IsReadOnly = true;
}
}
}
}
catch (Exception ex)
{
if (_MyLog.IsErrorEnabled) _MyLog.Error("DROUsageInfoList.DataPortal_FetchByROIDsAndVersions", ex);
throw new DbCslaException("DROUsageInfoList.DataPortal_FetchByROIDsAndVersions", ex);
}
this.RaiseListChangedEvents = true;
}
}
}

View File

@@ -351,12 +351,19 @@ namespace VEPROMS.CSLA.Library
}
private static void UpdateROValuesText(ROFstInfo origROFstInfo, ROFst newROFst, string versionList)
{
//DateTime dtStart = DateTime.Now;
//DateTime dtLast = DateTime.Now;
ROFSTLookup origLU = new ROFSTLookup(origROFstInfo);
//dtLast = ShowDuration(dtLast, "origLU");
ROFSTLookup newLU = new ROFSTLookup(newROFst);
//dtLast = ShowDuration(dtLast, "newLU");
List<string> delList = new List<string>();
List<string> chgList = newLU.GetValueDifferences(origLU, ref delList);
//dtLast = ShowDuration(dtLast, "chgList");
string RoidList = GetRoidList(newROFst.RODbID, chgList);
List<string> activeRoids = BuildActiveROIDsForRoUsages(RoidList);
//dtLast = ShowDuration(dtLast, "RoidList");
List<string> activeRoids = BuildActiveROIDsForRoUsages(RoidList, versionList);
//dtLast = ShowDuration(dtLast, "activeRoids");
foreach (string chg in chgList)
{
if (activeRoids.Contains(chg))
@@ -389,7 +396,9 @@ namespace VEPROMS.CSLA.Library
}
}
}
activeRoids = BuildActiveROIDsForDRoUsages(RoidList);
//dtLast = ShowDuration(dtLast, "chg loop");
activeRoids = BuildActiveROIDsForDRoUsages(RoidList, versionList);
//dtLast = ShowDuration(dtLast, "activeRoids Doc");
foreach (string chg in chgList)
{
if (activeRoids.Contains(chg))
@@ -408,6 +417,7 @@ namespace VEPROMS.CSLA.Library
}
}
}
//dtLast = ShowDuration(dtLast, "chg loop Doc");
foreach (string del in delList)
{
string desc = string.Format("Deleted RO: Value = {0}", origLU.GetRoValue(del));
@@ -437,6 +447,15 @@ namespace VEPROMS.CSLA.Library
}
}
}
//dtLast = ShowDuration(dtLast, "delList");
//dtStart = ShowDuration(dtStart, "Total");
}
private static DateTime ShowDuration(DateTime dtLast, string message)
{
DateTime dtNext = DateTime.Now;
Console.WriteLine("{0,10:#####0.00},'{1}'", TimeSpan.FromTicks(dtNext.Ticks - dtLast.Ticks).TotalSeconds, message);
return dtNext;
}
private static List<string> BuildActiveROIDsForRoUsages(string RoidList)
{
@@ -453,6 +472,21 @@ namespace VEPROMS.CSLA.Library
}
return activeRoids;
}
private static List<string> BuildActiveROIDsForRoUsages(string RoidList,string versions)
{
List<string> activeRoids = new List<string>();
using (RoUsageInfoList activeList = RoUsageInfoList.GetROUSagesByROIDsAndVersions(RoidList,versions))
{
foreach (RoUsageInfo roui in activeList)
{
string roid = roui.ROID.ToUpper();
if (roid.EndsWith("0000")) roid = roid.Substring(0, 12);
if (!activeRoids.Contains(roid))
activeRoids.Add(roid);
}
}
return activeRoids;
}
private static List<string> BuildActiveROIDsForDRoUsages(string RoidList)
{
List<string> activeRoids = new List<string>();
@@ -468,6 +502,21 @@ namespace VEPROMS.CSLA.Library
}
return activeRoids;
}
private static List<string> BuildActiveROIDsForDRoUsages(string RoidList,string versions)
{
List<string> activeRoids = new List<string>();
using (DROUsageInfoList activeList = DROUsageInfoList.GetDROUsagesByROIDsAndVersions(RoidList,versions))
{
foreach (DROUsageInfo roui in activeList)
{
string roid = roui.ROID;
if (roid.EndsWith("0000")) roid = roid.Substring(0, 12);
if (!activeRoids.Contains(roid))
activeRoids.Add(roid);
}
}
return activeRoids;
}
private static string GetRoidList(int dbid, List<string> chgList)
{
StringBuilder sb = new StringBuilder(string.Format("{0}", dbid));

View File

@@ -174,6 +174,73 @@ namespace VEPROMS.CSLA.Library
}
this.RaiseListChangedEvents = true;
}
[Serializable]
private class GetROUsagesByROIDsAndVersionsCriteria
{
public GetROUsagesByROIDsAndVersionsCriteria(string roids, string versions)
{
_ROIDS = roids;
_Versions = versions;
}
private string _ROIDS;
public string ROIDS
{
get { return _ROIDS; }
set { _ROIDS = value; }
}
private string _Versions;
public string Versions
{
get { return _Versions; }
set { _Versions = value; }
}
}
public static RoUsageInfoList GetROUSagesByROIDsAndVersions(string roids,string versions)
{
try
{
RoUsageInfoList tmp = DataPortal.Fetch<RoUsageInfoList>(new GetROUsagesByROIDsAndVersionsCriteria(roids,versions));
RoUsageInfo.AddList(tmp);
tmp.AddEvents();
return tmp;
}
catch (Exception ex)
{
throw new DbCslaException("Error on ROUsageInfoList.FindROUSagesByROIDs", ex);
}
}
private void DataPortal_Fetch(GetROUsagesByROIDsAndVersionsCriteria criteria)
{
this.RaiseListChangedEvents = false;
if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] ROUsageInfoList.DataPortal_FetchFindByRoids", GetHashCode());
try
{
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
{
using (SqlCommand cm = cn.CreateCommand())
{
cm.CommandType = CommandType.StoredProcedure;
cm.CommandText = "getRoUsagesByRoidsAndVersions";
cm.Parameters.AddWithValue("@ROIDS", criteria.ROIDS);
cm.Parameters.AddWithValue("@Versions", criteria.Versions);
cm.CommandTimeout = Database.DefaultTimeout;
using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
{
IsReadOnly = false;
while (dr.Read())
this.Add(new RoUsageInfo(dr));
IsReadOnly = true;
}
}
}
}
catch (Exception ex)
{
if (_MyLog.IsErrorEnabled) _MyLog.Error("ROUsageInfoList.DataPortal_FetchFindByRoidsAndVersions", ex);
throw new DbCslaException("ROUsageInfoList.DataPortal_Fetch", ex);
}
this.RaiseListChangedEvents = true;
}
}
public partial class RoUsageInfo
{