543 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			543 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
// ========================================================================
 | 
						|
// Copyright 2006 - Volian Enterprises, Inc. All rights reserved.          
 | 
						|
// Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
 | 
						|
// ------------------------------------------------------------------------
 | 
						|
// $Workfile: $     $Revision: $                                           
 | 
						|
// $Author: $   $Date: $                                                   
 | 
						|
//                                                                         
 | 
						|
// $History: $                                                             
 | 
						|
// ========================================================================
 | 
						|
using System;
 | 
						|
using System.Drawing;
 | 
						|
using System.Collections;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Windows.Forms;
 | 
						|
using System.Data;
 | 
						|
using System.Data.OleDb;
 | 
						|
using System.Collections.Specialized;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.Xml;
 | 
						|
using System.Xml.XPath;
 | 
						|
using System.IO;
 | 
						|
using System.Text;
 | 
						|
using VEPROMS.CSLA.Library;
 | 
						|
 | 
						|
 | 
						|
namespace DataLoader
 | 
						|
{
 | 
						|
	public partial class Loader
 | 
						|
	{
 | 
						|
		private Dictionary<string, int> dicOldToNew;
 | 
						|
		private Item AddSection(Item procitem, string Number, string Title, string SecType, DateTime Dts, string Userid, ConfigInfo ci, string stpseq, string fmt, int libdocid, string pth, Item FromItem, DocVersion docver)
 | 
						|
		{
 | 
						|
			frmMain.UpdateLabels(0, 1, 0);
 | 
						|
			try
 | 
						|
			{
 | 
						|
                FormatInfo format = null;
 | 
						|
 | 
						|
                // Tie the section to format used, this will add the format xml if it doesn't exist in
 | 
						|
				// the database yet. Note that if there is no format at this level then none should
 | 
						|
				// be set so that the inheritance works correctly.
 | 
						|
				if (fmt != null && fmt != "") format = GetFormat(fmt);
 | 
						|
				
 | 
						|
				// Find the docstyle based on the section type (step[1]) & the 'type' from the dbf 
 | 
						|
				// record sectype[0])
 | 
						|
				string	dstyleindx = ((stpseq == null || stpseq == "") ? " " : stpseq.Substring(1, 1)) + ((SecType==null||SecType == "") ? " " : SecType.Substring(0, 1));
 | 
						|
				int docstyleindx = GetDocStyleIndx(dstyleindx, format, procitem, docver);
 | 
						|
 | 
						|
				// tack on the column mode - add to config xml for node.      
 | 
						|
				if (stpseq != null && stpseq.Substring(1, 1) == "0" && stpseq.Substring(5, 1) != " ")
 | 
						|
				{
 | 
						|
					if (ci == null) ci = new ConfigInfo(null);
 | 
						|
					ci.AddItem("Section", "ColumnMode", stpseq.Substring(5, 1));
 | 
						|
				}
 | 
						|
 | 
						|
				// find rtf file (or use the library document temp file) & read it into the field 
 | 
						|
				// acccontent
 | 
						|
                int Documentid=0;
 | 
						|
				bool needEntry = false;
 | 
						|
				if (libdocid != 0 || stpseq.Substring(1, 1) != "0")
 | 
						|
				{
 | 
						|
					needEntry = true;
 | 
						|
					string fname = null;
 | 
						|
					if (libdocid != 0)
 | 
						|
					{
 | 
						|
						Documentid = libdocid;
 | 
						|
					}
 | 
						|
					else
 | 
						|
					{
 | 
						|
						int num = Convert.ToInt32(stpseq[0]) - 64;
 | 
						|
						string thenum = num.ToString("d2");
 | 
						|
						fname = string.Format("{0}\\rtffiles\\{1}.A{2}", pth, ProcFileName, thenum);
 | 
						|
						Application.DoEvents();
 | 
						|
						SaveSectionDocument(fname, stpseq, SecType, ref Documentid);
 | 
						|
						if (Documentid == 0)
 | 
						|
						{
 | 
						|
							if (MissingDocument==null) MissingDocument = Document.MakeDocument("MISSING FILE IN CONVERSION", null, null, null);
 | 
						|
							Documentid = MissingDocument.DocID;
 | 
						|
						}
 | 
						|
					}
 | 
						|
				}
 | 
						|
                if (Userid == null || Userid == "") Userid = "Migration";
 | 
						|
 | 
						|
				// test for performance 
 | 
						|
								Content cont;
 | 
						|
				using(Format fmt2 = format == null ? null : format.Get())
 | 
						|
					cont = Content.New(Number, Title, 10000+docstyleindx, fmt2, ci==null?null:ci.ToString(), Dts, Userid);
 | 
						|
				Entry entry = cont.MyEntry;
 | 
						|
				if (needEntry)
 | 
						|
				{
 | 
						|
					entry.MyDocument = Document.Get(Documentid);
 | 
						|
					entry.DTS = Dts;
 | 
						|
					entry.UserID = Userid;
 | 
						|
					//entry = Entry.MakeEntry(cont.ContentID, Document.Get(Documentid), Dts, Userid);
 | 
						|
				}
 | 
						|
				cont.MyZContent.OldStepSequence = ProcNumber + "|" + stpseq;
 | 
						|
				Item itm = null;
 | 
						|
				// the stpseq for section records may include a space & some other data.  This
 | 
						|
				// was  not part of what is stored in the transition records, so just look at
 | 
						|
				// the sequence before the space for section records. Then use the first character
 | 
						|
				// with a '0'.  This is what's stored in the transition record, for example, if the
 | 
						|
				// section was BI, the transition record would have B0 (the reasoning is that
 | 
						|
				// for steps, this is what could be stored if there were enough steps.
 | 
						|
				int trindxsp = stpseq.IndexOf(' ');
 | 
						|
				string trstpseq = trindxsp < 0 ? stpseq : stpseq.Substring(0, 1)+ "0";
 | 
						|
				if (dicTrans_ItemIds.ContainsKey(ProcNumber + "|" + trstpseq))
 | 
						|
				{
 | 
						|
					itm = dicTrans_ItemIds[ProcNumber + "|" + trstpseq];
 | 
						|
					itm.MyContent = cont;
 | 
						|
					itm.MyPrevious = FromItem;
 | 
						|
					itm.DTS = Dts;
 | 
						|
					itm.UserID = Userid;
 | 
						|
					if (!itm.IsSavable) ErrorRpt.ErrorReport(itm);
 | 
						|
					itm.Save();
 | 
						|
					dicTrans_ItemIds.Remove(ProcNumber + "|" + trstpseq);
 | 
						|
					dicTrans_MigrationErrors.Remove(ProcNumber + "|" + trstpseq);
 | 
						|
				}
 | 
						|
				else
 | 
						|
					itm = Item.MakeItem(FromItem, cont, Dts, Userid);
 | 
						|
				dicTrans_ItemDone[ProcNumber+"|"+trstpseq] = itm;
 | 
						|
				dicOldStepSequence[itm] = stpseq;
 | 
						|
				return itm;
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				log.Error("Save Section");
 | 
						|
				log.ErrorFormat("oldstepsequence = {0}", stpseq);
 | 
						|
                log.ErrorFormat("{0}\r\n\r\n{1}", ex.Message, ex.InnerException);
 | 
						|
                log.ErrorFormat(ex.StackTrace);
 | 
						|
			}
 | 
						|
			return null;
 | 
						|
		}
 | 
						|
		
 | 
						|
		private int LookupOldToNew(string lkup)
 | 
						|
		{
 | 
						|
			if (dicOldToNew == null)
 | 
						|
			{
 | 
						|
				dicOldToNew = new Dictionary<string, int>();
 | 
						|
				//dicOldToNew.Add("", 1);
 | 
						|
				dicOldToNew.Add("0", 1);
 | 
						|
				dicOldToNew.Add("0 ", 1);
 | 
						|
				dicOldToNew.Add("00", 1);
 | 
						|
				dicOldToNew.Add("01", 2);
 | 
						|
				dicOldToNew.Add("02", 4);
 | 
						|
				dicOldToNew.Add("03", 8);
 | 
						|
				dicOldToNew.Add("04", 16);
 | 
						|
				dicOldToNew.Add("I", 32);
 | 
						|
				dicOldToNew.Add("I ", 32);
 | 
						|
				dicOldToNew.Add("I0", 32);
 | 
						|
				dicOldToNew.Add("I1", 64);
 | 
						|
				dicOldToNew.Add("I2", 128);
 | 
						|
				dicOldToNew.Add("I3", 256);
 | 
						|
				dicOldToNew.Add("I4", 512);
 | 
						|
				dicOldToNew.Add("A", 1024);
 | 
						|
				dicOldToNew.Add("A ", 1024);
 | 
						|
				dicOldToNew.Add("A0", 1024);
 | 
						|
				dicOldToNew.Add("A1", 2048);
 | 
						|
				dicOldToNew.Add("A2", 4096);
 | 
						|
				dicOldToNew.Add("A3", 8192);
 | 
						|
				dicOldToNew.Add("A4", 16384);
 | 
						|
				dicOldToNew.Add("F", 32768);
 | 
						|
				dicOldToNew.Add("F ", 32768);
 | 
						|
				dicOldToNew.Add("F0", 32768);
 | 
						|
				dicOldToNew.Add("F1", 65536);
 | 
						|
				dicOldToNew.Add("F2", 131072);
 | 
						|
				dicOldToNew.Add("F3", 262144);
 | 
						|
				dicOldToNew.Add("F4", 524288);
 | 
						|
				dicOldToNew.Add("05", 1048576);
 | 
						|
				dicOldToNew.Add("06", 2097152);
 | 
						|
				dicOldToNew.Add("07", 4194304);
 | 
						|
				dicOldToNew.Add("08", 8388608);
 | 
						|
				dicOldToNew.Add("09", 16777216);
 | 
						|
				dicOldToNew.Add("0:", 33554432);
 | 
						|
				dicOldToNew.Add("0;", 67108864);
 | 
						|
				dicOldToNew.Add("0<", 134217728);
 | 
						|
				dicOldToNew.Add("0=", 268435456);
 | 
						|
				dicOldToNew.Add("0>", 536870912);
 | 
						|
			}
 | 
						|
			int retval = -1;
 | 
						|
			try
 | 
						|
			{
 | 
						|
				retval = dicOldToNew[lkup];
 | 
						|
			}
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				Console.WriteLine(string.Format("Error in oldtonew {0}", lkup));
 | 
						|
				Console.WriteLine(string.Format("Error = {0}", ex.Message));
 | 
						|
			}
 | 
						|
			return retval;
 | 
						|
		}
 | 
						|
		private int GetDocStyleIndx(string dstyleindx, FormatInfo format, Item procitem, DocVersion docver)
 | 
						|
		{
 | 
						|
			// get the format, if format is set, use it, otherwise walk 
 | 
						|
			if (format == null)
 | 
						|
			{
 | 
						|
				format = GetFormat(procitem, docver);
 | 
						|
			}
 | 
						|
			int docstyle = LookupOldToNew(dstyleindx);
 | 
						|
			foreach (DocStyle ds in format.PlantFormat.DocStyles.DocStyleList)
 | 
						|
			{
 | 
						|
				if ((ds.OldToNew & docstyle)>0) return (int)ds.Index;
 | 
						|
			}
 | 
						|
			Console.WriteLine("Error getting docstyle index");
 | 
						|
			return 0;
 | 
						|
		}
 | 
						|
		private FormatInfo GetFormat(Item procitem, DocVersion docver)
 | 
						|
		{
 | 
						|
			return procitem.MyItemInfo.ActiveFormat;
 | 
						|
			//while (procitem.MyItemInfo.a .MyContent.MyFormat == null)
 | 
						|
			//{
 | 
						|
			//  // find the first sibling
 | 
						|
			//  while (procitem.PreviousID != null)
 | 
						|
			//    procitem = procitem.MyPrevious;
 | 
						|
			//  if (procitem.ItemPartCount == 0) return docver.MyDocVersionInfo.ActiveFormat;
 | 
						|
			//  // find the parent node
 | 
						|
			//  procitem = procitem.ItemParts[0].MyContent.ContentItems[0].MyItem;
 | 
						|
			//}
 | 
						|
			//return procitem.MyContent.MyFormat;
 | 
						|
		}
 | 
						|
		//private FormatInfo GetFormat(DocVersion docver)
 | 
						|
		//{
 | 
						|
		//  if (docver.MyDocVersionInfo.MyFormat != null) return docver.MyDocVersionInfo.MyFormat;
 | 
						|
		//  return GetFormat(docver.MyDocVersionInfo.MyFolder);
 | 
						|
		//}
 | 
						|
		//private FormatInfo GetFormat(FolderInfo folder)
 | 
						|
		//{
 | 
						|
		//  if (folder.MyFormat != null) return folder.MyFolderInfo.MyFormat;
 | 
						|
		//  return GetFormat(folder.MyParent);
 | 
						|
		//}
 | 
						|
		private string SectTitle(OleDbConnection cn, DataRowView dr, bool UseMultiLineSectionTitle, bool ConvertCaret)
 | 
						|
		{
 | 
						|
			string tbuff = null;
 | 
						|
			string menustr = null;
 | 
						|
 | 
						|
			if (UseMultiLineSectionTitle)
 | 
						|
			{
 | 
						|
				bool titleInMemo = false;
 | 
						|
				// for accessory pages...
 | 
						|
				if (dr["Step"].ToString().Substring(1, 1) != "0")
 | 
						|
				{
 | 
						|
					// The long section title is stored on a record with the "~" character.
 | 
						|
					// This was done since originally the actual accessory page data was stored in the memo
 | 
						|
					// field, so the long title could not be stored there, another record had to be used.
 | 
						|
					OleDbDataAdapter da = new OleDbDataAdapter("select * from " + ProcFileName + " where [Step] like '" + dr["Step"].ToString().Substring(0, 1) + "~';", cn);
 | 
						|
					DataSet ds = new DataSet();
 | 
						|
					try
 | 
						|
					{
 | 
						|
						da.Fill(ds);
 | 
						|
						if (ds.Tables[0].Rows.Count == 1)
 | 
						|
						{
 | 
						|
							DataRow row = ds.Tables[0].Rows[0];
 | 
						|
							tbuff = TextConvert.ConvertText(row["Textm"].ToString(),ConvertCaret);
 | 
						|
							if (tbuff != null && tbuff != "") titleInMemo = true;
 | 
						|
						}
 | 
						|
						else  // no long section title existed for this accessory page
 | 
						|
							tbuff = TextConvert.ConvertText(dr["Text"].ToString().PadRight(130, ' ').Substring(0, 75).TrimEnd(), ConvertCaret);
 | 
						|
					}
 | 
						|
					catch (Exception ex)
 | 
						|
					{
 | 
						|
                        log.ErrorFormat("Error getting long section title {0}", ex.Message);
 | 
						|
					}
 | 
						|
					da.Dispose();
 | 
						|
				}
 | 
						|
				// For step sections, the long section title is stored on the section record
 | 
						|
				// (see above comment for accessory pages to see the difference)
 | 
						|
				else
 | 
						|
				{
 | 
						|
					tbuff = TextConvert.ConvertText(dr["TextM"].ToString().Trim(), ConvertCaret);
 | 
						|
				}
 | 
						|
 | 
						|
				//// TESTS were run & it looked like that whitespace was removed before saving,
 | 
						|
				//// so, put up a message box if find out otherwise....
 | 
						|
				//int nl = tbuff.IndexOf("\n");
 | 
						|
				//if (nl > -1)
 | 
						|
				//    MessageBox.Show("multiline text for section title, fix this!!");
 | 
						|
 | 
						|
				//// remove newlines & any other escape/whitespace chars. 
 | 
						|
				int nl = tbuff.IndexOf("\n");
 | 
						|
				if (nl > -1 || titleInMemo)
 | 
						|
				{
 | 
						|
 | 
						|
					string tmpstr = tbuff.Replace("\r", "");
 | 
						|
					tmpstr = tmpstr.Replace("\t", "");
 | 
						|
					tmpstr = tmpstr.Replace("\n", " ");
 | 
						|
					// get rid of multiple spaces
 | 
						|
					while (tmpstr.IndexOf("  ") > -1) tmpstr = tmpstr.Replace("  ", " ");
 | 
						|
					tbuff = tmpstr;
 | 
						|
					if (tbuff.Substring(tbuff.Length - 1, 1) == " ") tbuff = tbuff.Substring(0, tbuff.Length - 1);
 | 
						|
					menustr = tbuff;
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					menustr = TextConvert.ConvertText(dr["Text"].ToString().PadRight(80, ' ').Substring(0, 75).TrimEnd(), ConvertCaret);
 | 
						|
				}
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{	// format does not include long section title				
 | 
						|
				menustr = TextConvert.ConvertText(dr["Text"].ToString().PadRight(80, ' ').Substring(0, 75).TrimEnd(), ConvertCaret);
 | 
						|
			}
 | 
						|
			return menustr;
 | 
						|
		}
 | 
						|
		private Item MigrateSection(Item procitem, string procnum, OleDbConnection cn, DataRowView dr, DataTable dt, Item FromItem, bool isSubSection, string pth, DocVersion docver)
 | 
						|
		{
 | 
						|
			Int32 thesectid = 0;
 | 
						|
			bool isautogen = false;
 | 
						|
			string stype = dr["type"].ToString();
 | 
						|
			string s = dr["text"].ToString().PadRight(130, ' ');
 | 
						|
			string num = s.Substring(85, 20).TrimEnd();
 | 
						|
			string fmt = s.Substring(75, 10).TrimEnd();
 | 
						|
			if (fmt == "") fmt = null;
 | 
						|
			bool ismulti = false;
 | 
						|
			bool conv_caret = true;
 | 
						|
 | 
						|
			// sectFormat is a local that represents the format to be used by this section.
 | 
						|
			// Note that if the format is set for this section, check it against what the inherited
 | 
						|
			// value would be (for example, what the format is for the set), if they are the same
 | 
						|
			// clear the format at the section level.
 | 
						|
			FormatInfo sectFormat = null;
 | 
						|
			FormatInfo docverFormat = docver.MyDocVersionInfo.ActiveFormat;
 | 
						|
			if (fmt != null&& fmt !="")		// Is there a long section title (from format flag)
 | 
						|
			     sectFormat = GetFormat(fmt);   
 | 
						|
			else    // either from this format, or the plant.
 | 
						|
				 sectFormat = docverFormat;
 | 
						|
			 if (sectFormat != null)
 | 
						|
			 {
 | 
						|
				 ismulti = sectFormat.PlantFormat.FormatData.SectData.StepSectionData.UseMultiLineSectionTitle;
 | 
						|
				 conv_caret = sectFormat.PlantFormat.FormatData.SectData.ConvertCaretToDelta;
 | 
						|
			 }
 | 
						|
			if (fmt != null && fmt != "") if (fmt == docverFormat.Name) fmt = null;
 | 
						|
			string title = SectTitle(cn, dr, ismulti, conv_caret);
 | 
						|
			string init = dr["initials"].ToString().Trim();
 | 
						|
			string sequence = dr["CSequence"].ToString().PadRight(10);
 | 
						|
			string step = dr["CStep"].ToString();
 | 
						|
			int libDocid = 0;
 | 
						|
 | 
						|
			DateTime dts = GetDTS(dr["Date"].ToString(), dr["Time"].ToString());
 | 
						|
 | 
						|
			ConfigInfo ci = new ConfigInfo(null);
 | 
						|
			ci.AddItem("Section", "OldType", stype);
 | 
						|
 | 
						|
			
 | 
						|
			// for steps sections... 
 | 
						|
			//  Step Section Header Format:
 | 
						|
			//	A0 1X2S51 &Y
 | 
						|
			//	^^^^^^^^^^^^
 | 
						|
			//	|||||||||||||
 | 
						|
			//	||||||||||||`- 'Y','N', or blank signals to print section header - lib/section/addsec.c
 | 
						|
			//	|||||||||||`--  (bits) Auto Indent, Editable Data, Checkoff Header Type - lib/section/addsec.c
 | 
						|
			//	||||||||||`---  blank
 | 
						|
			//	||||||||`-----  Link With Enhanced Document ' '-Default(not determined) 0-NO 1-YES
 | 
						|
			//	|||||||`------  MetaSection - number of subsections is given
 | 
						|
			//	||||||`-------  S-Separate(PageBreak); T-Continuous; ' '-Default
 | 
						|
			//	|||||`--------  Column mode (1,2,3,' '-default)
 | 
						|
			//	||||`---------  X -only proc section; x -orig. proc; ' ' -other
 | 
						|
			//	|||`----------  Position within the procedure
 | 
						|
			//	||`-----------  ALWAYS leave blank
 | 
						|
			//	|`------------  Step Section Header marker
 | 
						|
			//	`-------------  Internal section number (starts at A)
 | 
						|
 | 
						|
			if (step.Substring(1, 1) == "0")
 | 
						|
			{
 | 
						|
				// if this section has the original edit section flag (sequence[2]) save the id.
 | 
						|
 | 
						|
				// set pagination, continuous, separate. If blank, don't create attribute - uses format default.
 | 
						|
				if (sequence.Substring(4, 1) == "T")
 | 
						|
				{
 | 
						|
					ci.AddItem("Section", "Pagination", "C");
 | 
						|
				}
 | 
						|
				else if (sequence.Substring(4, 1) == "S")
 | 
						|
				{
 | 
						|
					ci.AddItem("Section", "Pagination", "S");
 | 
						|
				}
 | 
						|
 | 
						|
				// Step: linked to enhanced (!exist = N)
 | 
						|
				if (sequence.Substring(7, 1) == "1")
 | 
						|
				{
 | 
						|
					ci.AddItem("Step", "LnkEnh", "Y");
 | 
						|
				}
 | 
						|
				char cbittst = sequence.PadRight(10)[8];
 | 
						|
				if (cbittst == ' ')
 | 
						|
					cbittst = '\0';
 | 
						|
				else
 | 
						|
				{
 | 
						|
					// determine if TOC element (!exist = N)
 | 
						|
					if ((cbittst & TOC) > 1)
 | 
						|
					{
 | 
						|
						ci.AddItem("Section", "TOC", "Y");
 | 
						|
					}
 | 
						|
					// determine if autogenerated section (!exist = N)
 | 
						|
					if ((cbittst & AUTOGEN) > 1)
 | 
						|
					{
 | 
						|
						isautogen = true;
 | 
						|
						ci.AddItem("Section", "AutoGen", "Y");
 | 
						|
					}
 | 
						|
				}
 | 
						|
				// Here are subsection flags, i.e. the following are only set if this
 | 
						|
				// is a subsection.
 | 
						|
				bool didsub = false;
 | 
						|
				if (isSubSection)
 | 
						|
				{
 | 
						|
					// Subsection: editable (!exist = Y)
 | 
						|
					if ((cbittst & EDDATA) > 0)
 | 
						|
					{
 | 
						|
						ci.AddItem("SubSection", "Edit", "N");
 | 
						|
					}
 | 
						|
 | 
						|
					// Subsection: print section headers (!exist = Y)
 | 
						|
					if ((cbittst & PH) > 0)
 | 
						|
					{
 | 
						|
						didsub = true;
 | 
						|
						ci.AddItem("SubSection", "PH", "N");
 | 
						|
					}
 | 
						|
 | 
						|
					// Subsection: autoindent (!exist = Y)
 | 
						|
					if ((cbittst & AUTOIND) > 0)
 | 
						|
					{
 | 
						|
						ci.AddItem("SubSection", "AutoIndent", "N");
 | 
						|
					}
 | 
						|
				}
 | 
						|
				if (!didsub && sequence.Substring(4, 1) == "N")
 | 
						|
				{
 | 
						|
					ci.AddItem("SubSection", "PH", "N");
 | 
						|
				}
 | 
						|
			}
 | 
						|
			else
 | 
						|
			{
 | 
						|
				//  Accessory Section Format:
 | 
						|
				//	AI 1 2	
 | 
						|
				//	^^ ^ ^	
 | 
						|
				//	|| | |	
 | 
						|
				//	|| | `-	# of pages (ASCII value minus 48)
 | 
						|
				//	|| `---	Position within the procedure
 | 
						|
				//	|`-----	Acc. page type (A,I, or F)
 | 
						|
				//	`------	Internal section number (starts at A)
 | 
						|
				ci.AddItem("Section", "NumPages", sequence.Substring(3, 1));
 | 
						|
 | 
						|
				// see if it's a libdoc too
 | 
						|
				string thekey = procnum.PadRight(20) + step.Substring(0, 1).PadRight(10);
 | 
						|
				if (dicLibDocRef.ContainsKey(thekey))
 | 
						|
				{
 | 
						|
					// if it is a library document, see if the section record has already been 
 | 
						|
					// saved. If it has, just use this section id, otherwise, create the
 | 
						|
					// section record with info from the library document file.
 | 
						|
					libDocid = dicLibDocRef[thekey];
 | 
						|
				}
 | 
						|
			}
 | 
						|
			Item secitem = AddSection(procitem, num, title, stype, dts, init, ci, step + sequence, fmt, libDocid, pth, FromItem, docver);
 | 
						|
			thesectid = secitem.ItemID;
 | 
						|
 | 
						|
			// if the editsectid hasn't been set yet, set it to this section id, i.e. the first
 | 
						|
            // one processed. Then if this section has the original edit section flag (sequence[2]) 
 | 
						|
            // save the id.  The first step is necessary in case there is no original edit section 
 | 
						|
            // flag set, so that the first section is the default one to get opened in edit.
 | 
						|
			if (EditSectId==0)EditSectId = thesectid;
 | 
						|
			 if (libDocid<1 && step[1] == '0' && (sequence[2] == 'x' || sequence[2] == 'X'))
 | 
						|
				EditSectId = thesectid;
 | 
						|
            // ContentType (2 in the following call) are:
 | 
						|
            //  0 = structure,
 | 
						|
            //  1 = procedure,
 | 
						|
            //  2 = section,
 | 
						|
            //  3 = step
 | 
						|
            //  4 = branch
 | 
						|
 | 
						|
            // fromtype values are  (see steps.cs too)         
 | 
						|
            //  1 = procedure,
 | 
						|
            //  2 = section,
 | 
						|
            //  3 = caution
 | 
						|
            //  4 = note
 | 
						|
            //  5 = RNO
 | 
						|
            //  6 = step
 | 
						|
            //  7 = table
 | 
						|
 | 
						|
			if (!isautogen)
 | 
						|
			{
 | 
						|
				// Process the Data Table - First look for High Level Steps	
 | 
						|
				string sQry = string.Format("Step like '[{0}]%' and Sequence='S'", dr["Step"].ToString().Substring(0, 1));
 | 
						|
				DataView dv = new DataView(dt, sQry, "StepNo", DataViewRowState.CurrentRows);
 | 
						|
				Item FrItem = null;
 | 
						|
				frmMain.pbStepMaximum = dt.Rows.Count;
 | 
						|
				frmMain.pbStepValue = 0;
 | 
						|
				foreach (DataRowView drv in dv)
 | 
						|
				{
 | 
						|
					FrItem = MigrateStep(cn, dt, drv, FrItem, conv_caret, pth, docver);
 | 
						|
					if (secitem.MyContent.ContentParts.Count == 0)
 | 
						|
					{
 | 
						|
						// type 6 is step
 | 
						|
						secitem.MyContent.ContentParts.Add(6, FrItem);
 | 
						|
						if (!secitem.MyContent.IsSavable) ErrorRpt.ErrorReport(secitem.MyContent);
 | 
						|
						secitem.MyContent.Save();
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			return secitem;
 | 
						|
		}
 | 
						|
		private void LoadSection(DataSet ds, OleDbDataAdapter da, string FileName)
 | 
						|
		{
 | 
						|
			try
 | 
						|
			{
 | 
						|
				da.Fill(ds, "Sections");
 | 
						|
				DataTable dt = ds.Tables["Sections"];
 | 
						|
				dt.CaseSensitive = true;
 | 
						|
				dt.Columns.Add("CStep", System.Type.GetType("System.String"));
 | 
						|
				dt.Columns.Add("CSequence", System.Type.GetType("System.String"));
 | 
						|
				// set the cstep & csequence - couldn't do it in the add because it needed a sql function
 | 
						|
				foreach (DataRow drw in ds.Tables["Sections"].Rows)
 | 
						|
				{
 | 
						|
					drw["CStep"] = TextConvert.ConvertSeq(drw["Step"].ToString());
 | 
						|
					drw["CSequence"] = TextConvert.ConvertSeq(drw["Sequence"].ToString());
 | 
						|
				}
 | 
						|
				dt.Columns.Add("StepNo", System.Type.GetType("System.Int32"), "Convert(Convert(Substring(CStep,2,1),'System.Char'),'System.Int32')-48");
 | 
						|
				dt.Columns.Add("Level", System.Type.GetType("System.Int32"), "Len(CSequence)");
 | 
						|
				dt.Columns.Add("SubStepNo", System.Type.GetType("System.Int32"), "Convert(Convert(Substring(CSequence,Len(CSequence),1),'System.Char'),'System.Int32')-48");
 | 
						|
				dt.Columns.Add("locb", System.Type.GetType("System.Int32"), "Convert(Convert(Substring(CSequence,2,1),'System.Char'),'System.Int32')-48");
 | 
						|
			}
 | 
						|
 | 
						|
			catch (Exception ex)
 | 
						|
			{
 | 
						|
				FileInfo fi;
 | 
						|
				switch (ex.Message)
 | 
						|
				{
 | 
						|
					case "Index file not found."://	 then delete inf file
 | 
						|
						fi = new FileInfo(frmMain.tbSourceText + "\\" + FileName + ".inf");
 | 
						|
						fi.Delete();
 | 
						|
						LoadSection(ds, da, FileName);// Try Again
 | 
						|
						break;
 | 
						|
					case "External table is not in the expected format.": // then pad dbt file with 128 zeros.
 | 
						|
						fi = new FileInfo(frmMain.tbSourceText + "\\" + FileName + ".dbt");
 | 
						|
						FileStream fs = fi.OpenWrite();
 | 
						|
						fs.Position = fs.Length;
 | 
						|
						byte[] buf = new byte[128];
 | 
						|
						for (int i = 0; i < 128; i++) buf[i] = 0;
 | 
						|
						fs.Write(buf, 0, 128);
 | 
						|
						fs.Close();
 | 
						|
						LoadSection(ds, da, FileName);// Try Again
 | 
						|
						break;
 | 
						|
					default: // Unrecognized error
 | 
						|
						Console.WriteLine("Unrecognized error: error = {0}", ex.Message);
 | 
						|
                        log.ErrorFormat("File - {0}.DBF\r\n\r\n{1}\r\n\r\n{2}", FileName, ex.Message, ex.InnerException);
 | 
						|
						break;
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
} |