B2017-011: Complete report, sorted by setpoint id, crashes if duplicate setpoint id

B2017-011: Complete report, don’t crash if requested ro is not in database
This commit is contained in:
Kathy Ruffing 2017-01-19 17:51:45 +00:00
parent 431503a104
commit 3e5741ef75
2 changed files with 63 additions and 57 deletions

View File

@ -90,15 +90,15 @@ namespace CmpRpt
/// The main entry point for the application. /// The main entry point for the application.
/// </summary> /// </summary>
[STAThread] [STAThread]
static void Main(string[] args) static void Main(string[] args)
{ {
if (args.Length <= 0) return; // nothing to do if (args.Length <= 0) return; // nothing to do
bool success; bool success;
VlnXmlElement rootXml; VlnXmlElement rootXml;
VlnXmlDocument myroXmlDoc; VlnXmlDocument myroXmlDoc;
string recid=null; string recid = null;
string tbl=null; string tbl = null;
RODB myrodb=null; RODB myrodb = null;
// the next two lists contain group headers for the reports. // the next two lists contain group headers for the reports.
ArrayList headers = new ArrayList(); ArrayList headers = new ArrayList();
ArrayList reversehdrs = new ArrayList(); ArrayList reversehdrs = new ArrayList();
@ -126,7 +126,7 @@ namespace CmpRpt
// recid = args[0].Substring(4, 8); // recid = args[0].Substring(4, 8);
// // myrodb = new RODB(Directory.GetCurrentDirectory()); // // myrodb = new RODB(Directory.GetCurrentDirectory());
//} //}
/******/ /******/
// if an RO directory path was passed in, then change the // if an RO directory path was passed in, then change the
// current working directory to it. // current working directory to it.
// this path will also be used to generate a connection string // this path will also be used to generate a connection string
@ -139,12 +139,12 @@ namespace CmpRpt
Directory.SetCurrentDirectory(path); Directory.SetCurrentDirectory(path);
} }
myrodb = new RODB(Directory.GetCurrentDirectory()); myrodb = new RODB(Directory.GetCurrentDirectory());
VlnXmlElement rptele=null; VlnXmlElement rptele = null;
// Add the root to the tree // Add the root to the tree
myroXmlDoc = myrodb.RODB_GetRoot(); myroXmlDoc = myrodb.RODB_GetRoot();
rootXml = (VlnXmlElement) myroXmlDoc.FirstChild; rootXml = (VlnXmlElement)myroXmlDoc.FirstChild;
success = myrodb.RODB_GetRootGroups(rootXml); success = myrodb.RODB_GetRootGroups(rootXml);
if (success == false) return; if (success == false) return;
@ -171,8 +171,8 @@ namespace CmpRpt
showStatBar.StatMsg = string.Format("Retrieving RO {0} of {1}", inc++, bmax); showStatBar.StatMsg = string.Format("Retrieving RO {0} of {1}", inc++, bmax);
showStatBar.BarValue = inc; showStatBar.BarValue = inc;
} }
tbl = roid.Substring(0, 4); tbl = roid.Substring(0, 4);
recid = (roid.Length > 4) ? roid.Substring(4, 8) : null; recid = (roid.Length > 4) ? roid.Substring(4, 8) : null;
// if the table & recid = all zeros, we have a request // if the table & recid = all zeros, we have a request
// for all ROs, otherwise it's a request for specific RO(s) // for all ROs, otherwise it's a request for specific RO(s)
@ -191,62 +191,64 @@ namespace CmpRpt
// read in this element from the table. // read in this element from the table.
rptele = myrodb.RODB_ReadRO(tbname, recid); rptele = myrodb.RODB_ReadRO(tbname, recid);
if (rptele != null)
VlnXmlElement parent;
string parentid;
parentid = rptele.GetAttribute("ParentID");
string rpteleParentid = parentid;
// walk up tree to get the path through the tree.
VlnXmlElement child = rptele;
while (parentid != null && parentid != "00000000")
{ {
parent = myrodb.RODB_ReadRO(tbname, parentid); VlnXmlElement parent;
if (parent != null) string parentid;
parentid = rptele.GetAttribute("ParentID");
string rpteleParentid = parentid;
// walk up tree to get the path through the tree.
VlnXmlElement child = rptele;
while (parentid != null && parentid != "00000000")
{ {
parentid = parent.GetAttribute("ParentID"); parent = myrodb.RODB_ReadRO(tbname, parentid);
if (parentid == "00000000") if (parent != null)
{ {
reversehdrs.Add(parent.InnerText); parentid = parent.GetAttribute("ParentID");
if (parentid == "00000000")
{
reversehdrs.Add(parent.InnerText);
break;
}
parent.AppendChild(child);
child = parent;
reversehdrs.Add(parent.GetAttribute("MenuTitle"));
}
else
parentid = null;
}
// Now hook this into the top part of tree by looking at the table
// names.
VlnXmlElement group = (VlnXmlElement)rootXml.FirstChild;
while (group != null)
{
string curtbname = group.GetAttribute("Table");
// hook it in here.
if (curtbname == tbname)
{
if (rpteleParentid != "00000000")
group.AppendChild(child);
else // if this is a top group, just reset rept ele
rptele = group;
break; break;
} }
parent.AppendChild(child); group = (VlnXmlElement)group.NextSibling;
child = parent;
reversehdrs.Add(parent.GetAttribute("MenuTitle"));
} }
else // Set up the headers array, it's in reverse order since we walked
parentid = null; // up the tree, not down.
int cnt = reversehdrs.Count;
for (int i = cnt - 1; i >= 0; i--)
headers.Add(reversehdrs[i]);
myrodb.MyDBID = tbl;
rptele.Show(myrodb, headers, showStat);
Application.DoEvents();
headers.Clear();
reversehdrs.Clear();
} }
// Now hook this into the top part of tree by looking at the table
// names.
VlnXmlElement group = (VlnXmlElement)rootXml.FirstChild;
while (group != null)
{
string curtbname = group.GetAttribute("Table");
// hook it in here.
if (curtbname == tbname)
{
if (rpteleParentid != "00000000")
group.AppendChild(child);
else // if this is a top group, just reset rept ele
rptele = group;
break;
}
group = (VlnXmlElement)group.NextSibling;
}
// Set up the headers array, it's in reverse order since we walked
// up the tree, not down.
int cnt = reversehdrs.Count;
for (int i = cnt - 1; i >= 0; i--)
headers.Add(reversehdrs[i]);
} }
myrodb.MyDBID = tbl; }// end foreach roid
rptele.Show(myrodb, headers, showStat);
Application.DoEvents();
headers.Clear();
reversehdrs.Clear();
}// end foreach roid
if (showStat != null) if (showStat != null)
showStat.Dispose(); showStat.Dispose();
if (showStatBar != null) if (showStatBar != null)

View File

@ -187,6 +187,10 @@ namespace Volian.Controls.Library
{ {
rtnstr = rodbidPrefix + string.Format("{0}", roc.roid); rtnstr = rodbidPrefix + string.Format("{0}", roc.roid);
keystr = ((roc.appid == "") ? GetNextBlankKey() : roc.appid) + chld.roid.Substring(0, 4); keystr = ((roc.appid == "") ? GetNextBlankKey() : roc.appid) + chld.roid.Substring(0, 4);
if (AccIDROIDdic.ContainsKey(keystr)) // For duplicates, append the parent title (B2017-011) so adding to dictionary doesn't crash.
{
keystr = keystr + "|" + chld.title;
}
AccIDROIDdic.Add(keystr, rtnstr); AccIDROIDdic.Add(keystr, rtnstr);
} }
} }