diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ROFSTExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ROFSTExt.cs
index 1748f57a..27f1c291 100644
--- a/PROMS/VEPROMS.CSLA.Library/Extension/ROFSTExt.cs
+++ b/PROMS/VEPROMS.CSLA.Library/Extension/ROFSTExt.cs
@@ -17,7 +17,10 @@ using System.Xml.Serialization;
using System.Xml;
using System.Xml.XPath;
using System.Text.RegularExpressions;
-//using Config;
+using System.Data;
+using System.Data.SqlClient;
+using Csla;
+using Csla.Data;
namespace VEPROMS.CSLA.Library
{
@@ -167,17 +170,20 @@ namespace VEPROMS.CSLA.Library
/// ROFst: Returns the created rofst object
public static ROFst UpdateRoFst(RODbInfo rdi, DocVersionAssociation dva, DocVersion docver, ROFstInfo origROFst)
{
- // file validity checks are done before getting here - just do the import
- // here.
- string rofstfilepath = rdi.FolderPath + @"\ro.fst";
-
DirectoryInfo di = new DirectoryInfo(rdi.FolderPath);
-
- // There may be more than 1 'ro' as the 'ROName' field (ROName is derived from the ropath).
- // Get new name be incrementing, if so.
- string newname = NewROName(di.Name);
-
- // Next read in the rofst & make the rofst record.
+
+ // check if this rofst has been loaded, i.e. dts on file versus dts in db...
+ // if so, just make association to existing with docversion.
+ ROFst rofst = ROFst.GetByRODbID_DTS(rdi.RODbID, di.LastWriteTime);
+ if (rofst != null)
+ {
+ docver.DocVersionAssociations[0].MyROFst = rofst;
+ docver.Save();
+ return rofst;
+ }
+
+ // Read in the rofst & make the rofst record.
+ string rofstfilepath = rdi.FolderPath + @"\ro.fst";
FileStream fsIn = new FileStream(rofstfilepath, FileMode.Open, FileAccess.Read, FileShare.Read);
// Create an instance of StreamReader that can read characters from the FileStream.
BinaryReader r = new BinaryReader(fsIn);
@@ -186,7 +192,7 @@ namespace VEPROMS.CSLA.Library
using (RODb rd = RODb.Get(rdi.RODbID))
{
- ROFst rofst = ROFst.MakeROFst(rd, ab, null, di.LastWriteTime, rdi.UserID);
+ rofst = ROFst.MakeROFst(rd, ab, null, di.LastWriteTime, rdi.UserID);
// Hook this into the current docversion by replacing the rofstid field in the doc version
// association object:
dva.MyROFst = rofst;
@@ -351,4 +357,74 @@ namespace VEPROMS.CSLA.Library
return false;
}
}
+ public partial class ROFstInfoList
+ {
+ [Serializable()]
+ private class RoFstSizeCriteria
+ {
+ public RoFstSizeCriteria(int roDbID, int len)
+ {
+ _RODbID = roDbID;
+ _Len = len;
+ }
+ private int _RODbID;
+ public int RODbID
+ {
+ get { return _RODbID; }
+ set { _RODbID = value; }
+ }
+ private int _Len;
+ public int Len
+ {
+ get { return _Len; }
+ set { _Len = value; }
+ }
+ }
+ public static ROFstInfoList GetBySize(int roDbID, int len)
+ {
+ try
+ {
+ ROFstInfoList tmp = DataPortal.Fetch(new RoFstSizeCriteria(roDbID, len));
+ ROFstInfo.AddList(tmp);
+ tmp.AddEvents();
+ return tmp;
+ }
+ catch (Exception ex)
+ {
+ throw new DbCslaException("Error on RoFstInfoList.GetBySize", ex);
+ }
+ }
+ private void DataPortal_Fetch(RoFstSizeCriteria criteria)
+ {
+ this.RaiseListChangedEvents = false;
+ if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] ROFstInfoList.DataPortal_FetchBySize", GetHashCode());
+ try
+ {
+ using (SqlConnection cn = Database.VEPROMS_SqlConnection)
+ {
+ using (SqlCommand cm = cn.CreateCommand())
+ {
+ cm.CommandType = CommandType.StoredProcedure;
+ cm.CommandText = "getRoFstBySize";
+ cm.Parameters.AddWithValue("@RODbID", criteria.RODbID);
+ cm.Parameters.AddWithValue("@Len", criteria.Len);
+
+ using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
+ {
+ IsReadOnly = false;
+ while (dr.Read())
+ this.Add(new ROFstInfo(dr));
+ IsReadOnly = true;
+ }
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ if (_MyLog.IsErrorEnabled) _MyLog.Error("ROFstInfoList.DataPortal_FetchBySize", ex);
+ throw new DbCslaException("ROFstInfoList.DataPortal_FetchBySize", ex);
+ }
+ this.RaiseListChangedEvents = true;
+ }
+ }
}