New function to fix the ro values in the link text within the content text (for example, if the rodbid is updated in the link text)
Add menu item for ro fixer. Fix ro values correctly if containing a dash and/or in a grid
This commit is contained in:
113
PROMS/DataLoader/ROFixer.cs
Normal file
113
PROMS/DataLoader/ROFixer.cs
Normal file
@@ -0,0 +1,113 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using VEPROMS.CSLA.Library;
|
||||
|
||||
namespace DataLoader
|
||||
{
|
||||
public delegate void ROFixerEvent(object sender, ROFixerEventArgs args);
|
||||
public class ROFixerEventArgs
|
||||
{
|
||||
private string _MyStatus;
|
||||
|
||||
public string MyStatus
|
||||
{
|
||||
get { return _MyStatus; }
|
||||
set { _MyStatus = value; }
|
||||
}
|
||||
public ROFixerEventArgs(string myStatus)
|
||||
{
|
||||
_MyStatus = myStatus;
|
||||
}
|
||||
}
|
||||
class ROFixer
|
||||
{
|
||||
public static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||
public event ROFixerEvent StatusChanged;
|
||||
private void OnStatusChanged(object sender, ROFixerEventArgs args)
|
||||
{
|
||||
if (StatusChanged != null)
|
||||
StatusChanged(sender, args);
|
||||
}
|
||||
private string _Status;
|
||||
|
||||
public string Status
|
||||
{
|
||||
get { return _Status; }
|
||||
set
|
||||
{
|
||||
_Status = value;
|
||||
OnStatusChanged(this, new ROFixerEventArgs(_Status));
|
||||
}
|
||||
}
|
||||
private int _ErrorCount = 0;
|
||||
|
||||
public int ErrorCount
|
||||
{
|
||||
get { return _ErrorCount; }
|
||||
set { _ErrorCount = value; }
|
||||
}
|
||||
private string _LogPath;
|
||||
public ROFixer(string logpath)
|
||||
{
|
||||
_LogPath = logpath;
|
||||
}
|
||||
public TimeSpan Process()
|
||||
{
|
||||
DateTime tstart = DateTime.Now;
|
||||
ProcessROs();
|
||||
return DateTime.Now - tstart;
|
||||
}
|
||||
private void ProcessROs()
|
||||
{
|
||||
Status = "Getting List...";
|
||||
// get list of content records
|
||||
List<int> myContentList = new List<int>();
|
||||
RoUsageInfoList myRoUsages = RoUsageInfoList.Get();
|
||||
Dictionary<int, ROFSTLookup> roFstLookups = new Dictionary<int,ROFSTLookup>();
|
||||
foreach (RoUsageInfo rou in myRoUsages)
|
||||
{
|
||||
if (!myContentList.Contains(rou.ContentID))
|
||||
{
|
||||
myContentList.Add(rou.ContentID);
|
||||
}
|
||||
}
|
||||
int i = 0;
|
||||
foreach (int cid in myContentList)
|
||||
{
|
||||
Status = string.Format("Processing {0} of {1} steps", ++i, myContentList.Count);
|
||||
ContentInfo myContentInfo = ContentInfo.Get(cid);
|
||||
DocVersionInfo dvi = myContentInfo.ContentItems[0].MyProcedure.MyDocVersion;
|
||||
int versionId = dvi.VersionID;
|
||||
if (!roFstLookups.ContainsKey(versionId))
|
||||
{
|
||||
ROFstInfo myRoFst = dvi.DocVersionAssociations[0].MyROFst;
|
||||
roFstLookups.Add(versionId, myRoFst.GetROFSTLookup(dvi));
|
||||
}
|
||||
ROFSTLookup myLookup = roFstLookups[versionId];
|
||||
using (Content ctmp = myContentInfo.Get())
|
||||
{
|
||||
ItemInfo ii = myContentInfo.ContentItems[0];
|
||||
foreach (RoUsageInfo ru in myContentInfo.ContentRoUsages)
|
||||
{
|
||||
//ROFSTLookup.rochild rocc = myLookup.GetRoChild12(ru.ROID);
|
||||
//if (rocc.value == null)
|
||||
ROFSTLookup.rochild rocc = myLookup.GetRoChild(ru.ROID);
|
||||
//string myValue = rocc.value;
|
||||
|
||||
int myType = rocc.type;
|
||||
string myValue = myLookup.GetTranslatedRoValue(ru.ROID, ii.ActiveFormat.PlantFormat.FormatData.SectData.ConvertCaretToDelta);
|
||||
ctmp.FixContentText(ru, myValue, myType, null);
|
||||
if (ctmp.IsDirty) Console.WriteLine("{0}, {1}", myValue, ru.ROID);
|
||||
}
|
||||
if (ctmp.IsDirty)
|
||||
{
|
||||
ctmp.DTS = DateTime.Now;
|
||||
ctmp.Save();
|
||||
ContentInfo.Refresh(ctmp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user