/********************************************************************************************* * Copyright 2002 - Volian Enterprises, Inc. All rights reserved. * Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE * ------------------------------------------------------------------------------ * $Workfile: CmpRpt.cs $ $Revision: 3 $ * $Author: Jsj $ $Date: 6/08/05 4:31p $ * * $History: CmpRpt.cs $ * * ***************** Version 3 ***************** * User: Jsj Date: 6/08/05 Time: 4:31p * Updated in $/EXE/RefObj/CmpRpt * cleanup * * ***************** Version 2 ***************** * User: Jsj Date: 1/08/04 Time: 2:51p * Updated in $/EXE/RefObj/CmpRpt * constructor of RODB() class changed * * ***************** Version 1 ***************** * User: Kathy Date: 11/11/02 Time: 7:17a * Created in $/EXE/RefObj/CmpRpt *********************************************************************************************/ using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.IO; using System.Data; using RODBInterface; using VlnStatus; // CmpRpt reads data for the RO database and puts the data into the // temporary file, 'print.tmp'. After this, it is sorted and printed. namespace CmpRpt { // Form1 just acts as the container for this app. public class Form1 : System.Windows.Forms.Form { /// /// Required designer variable. /// private System.ComponentModel.Container components = null; public Form1() { // // Required for Windows Form Designer support // InitializeComponent(); } /// /// Clean up any resources being used. /// protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 273); this.Name = "Form1"; this.Text = "Form1"; } #endregion /// /// The main entry point for the application. /// [STAThread] static void Main(string[] args) { if (args.Length <= 0) return; // nothing to do bool success; VlnXmlElement rootXml; VlnXmlDocument myroXmlDoc; string recid=null; string tbl=null; RODB myrodb=null; // the next two lists contain group headers for the reports. ArrayList headers = new ArrayList(); ArrayList reversehdrs = new ArrayList(); //if (args.Length <= 0) return; //// if an RO directory path was passed in, then change the //// current working directory to it. //// this path will also be used to generate a connection string //// for the Access database. //if (args.Length == 2) //{ // // MessageBox.Show(args[1],"args[1]"); // string path = args[0]; // Directory.SetCurrentDirectory(path); // tbl = args[1].Substring(0, 4); // //tbl = args[1].Substring(13,4); // // recid = args[1].Substring(17,8); // if (args[1].Length > 4) // recid = args[1].Substring(4, 8); // // myrodb = new RODB(path); //} //else //{ // tbl = args[0].Substring(0, 4); // recid = args[0].Substring(4, 8); // // myrodb = new RODB(Directory.GetCurrentDirectory()); //} /******/ // if an RO directory path was passed in, then change the // current working directory to it. // this path will also be used to generate a connection string // for the Access database. string roIdArg = BuildROList(args); string[] roIDList = roIdArg.Split(','); if (args.Length == 2) { string path = args[0]; Directory.SetCurrentDirectory(path); } myrodb = new RODB(Directory.GetCurrentDirectory()); VlnXmlElement rptele=null; // Add the root to the tree myroXmlDoc = myrodb.RODB_GetRoot(); rootXml = (VlnXmlElement) myroXmlDoc.FirstChild; success = myrodb.RODB_GetRootGroups(rootXml); if (success == false) return; VlnStatusMessage showStat = null; VlnStatusBar showStatBar = null; int inc = 0; int bmax = roIDList.Length; if (roIDList.Length > 50) { showStatBar = new VlnStatusBar("Retrieving RO Information"); showStatBar.BarMax = bmax; showStatBar.StatMsg = "Retrieving RO Information"; } else { showStat = new VlnStatusMessage("Retrieving RO Information"); showStat.StatusMessage = "Reading RO Information"; } Application.DoEvents(); foreach (string roid in roIDList) { if (showStatBar != null) { showStatBar.StatMsg = string.Format("Retrieving RO {0} of {1}", inc++, bmax); showStatBar.BarValue = inc; } tbl = roid.Substring(0, 4); recid = (roid.Length > 4) ? roid.Substring(4, 8) : null; // if the table & recid = all zeros, we have a request // for all ROs, otherwise it's a request for specific RO(s) if (tbl == "0000" && recid != null && recid == "00000000") { // the report element becomes the root. rptele = rootXml; } else { // from the input tbl string, get a table name. int itbl = System.Convert.ToInt32(tbl, 16); string stbl = System.Convert.ToString(itbl, 10); string pstbl = stbl.PadLeft(6, '0'); string tbname = "RO" + pstbl; // read in this element from the table. rptele = myrodb.RODB_ReadRO(tbname, recid); 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); if (parent != null) { 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; } 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]); } rptele.Show(myrodb, headers, showStat); Application.DoEvents(); headers.Clear(); reversehdrs.Clear(); }// end foreach roid if (showStat != null) showStat.Dispose(); if (showStatBar != null) showStatBar.Dispose(); } private static string BuildROList(string[] args) { string parm2 = args[args.Length - 1]; string roIdArg = null; if (parm2.StartsWith("/f=")) { FileInfo fi = new FileInfo(parm2.Substring(3)); using (StreamReader sr = fi.OpenText()) { roIdArg = sr.ReadToEnd(); sr.Close(); } } else roIdArg = parm2; return roIdArg; } } }