using Microsoft.Office.InfoPath; using System; using System.Windows.Forms; using System.Xml; using System.Xml.XPath; using mshtml; using System.IO; using System.Collections.Generic; namespace DRAFT_Single_Cost_Center_Form_v1_With { public partial class FormCode { // Member variables are not supported in browser-enabled forms. // Instead, write and read these values from the FormState // dictionary using code such as the following: // // private object _memberVariable // { // get // { // return FormState["_memberVariable"]; // } // set // { // FormState["_memberVariable"] = value; // } // } // NOTE: The following procedure is required by Microsoft InfoPath. // It can be modified using Microsoft InfoPath. public void InternalStartup() { ((ButtonEvent)EventManager.ControlEvents["CTRL2070_5"]).Clicked += new ClickedEventHandler(CTRL2070_5_Clicked); EventManager.FormEvents.Loading += new LoadingEventHandler(FormEvents_Loading); ((ButtonEvent)EventManager.ControlEvents["CTRL4206_5"]).Clicked += new ClickedEventHandler(CTRL4206_5_Clicked); } public void CTRL2070_5_Clicked(object sender, ClickedEventArgs e) { // Write your code here.//save and continue } public void FormEvents_Loading(object sender, LoadingEventArgs e) { // Write your code here. // Still need to figure out how to write to current location of calling InfoPath Form StreamWriter sw = new StreamWriter("Single_Cost.xls"); //XPathNavigator nav; //XPathDocument docNav; XPathNavigator nav = this.MainDataSource.CreateNavigator(); //.SelectSingleNode("//my:YourTextBox", this.NamespaceManager); XmlWriter writer = XmlWriter.Create(sw); // if (writer != null) // { nav.WriteSubtree(writer); writer.Close(); } void PrintTabSeparated(ref List fields, ref List values, ref StreamWriter sw) { foreach (string i in fields) { sw.Write(i); sw.Write("\t"); } sw.Write("\r\n"); foreach (string j in values) { sw.Write(j); sw.Write("\t"); } } void PrintEmptyFields(ref List emptyfields) { string message = ""; foreach (string i in emptyfields) { message = message + i + "\r\n"; } MessageBox.Show("These required fields cannot be empty: \r\n\r\n" + message + "\r\nPlease fill in before proceeding."); } void AddIfRequiredNotEmpty(ref XPathNavigator node, ref List fields, ref List values, ref List emptyfields, ref XPathNavigator nav, ref XmlNamespaceManager manager, ref string xPath, string fieldname) { string fieldname2 = fieldname.Replace(" ", "_"); node = nav.SelectSingleNode("/my:Single_Cost_Center/my:" + xPath + "/my:" + xPath + "_" + fieldname2, manager); if (node.Value == "") { emptyfields.Add(fieldname); } else { fields.Add(fieldname); values.Add(node.Value); } } void AddIfNotEmpty(ref XPathNavigator node, ref List fields, ref List values, ref List emptyfields, string fieldname) { if (node.Value == "") { emptyfields.Add(fieldname); } else { fields.Add(fieldname); values.Add(node.Value); } } void AddFieldAndValue(ref XPathNavigator node, ref List fields, ref List values, ref XPathNavigator nav, ref XmlNamespaceManager manager, ref string xPath, string fieldname) { string fieldname2 = fieldname.Replace(" ", "_"); node = nav.SelectSingleNode("/my:Single_Cost_Center/my:" + xPath + "/my:" + xPath + "_" + fieldname2, manager); fields.Add(fieldname);//my:Date_Requested in every form by default values.Add(node.Value); } void AddFieldWithNA(ref List fields, ref List values, string fieldname) { fields.Add(fieldname); values.Add("N/A"); } public void CTRL4206_5_Clicked(object sender, ClickedEventArgs e) { //MUST WRITE CODE TO CHECK IF FILE EXISTS BEFORE CREATING NEW FILE //EXPORT BUTTON, BOX POPS UP IF REQUIRED FIELDS ARE EMPTY, ALL OTHERS FILLED WITH N/A if blank // MUST ACCOUNT FOR THE CASE WHERE EXPORT BUTTON IS PUSHED WITH REQUIRED FIELD EMPTY, then user changes previous filed(Bug because this //required a new array to be created from scrath!!! //this.MainDataSource is XPathDocument XPathNavigator nav = this.MainDataSource.CreateNavigator(); StreamWriter writer = new StreamWriter("Error.txt"); writer.WriteLine("Current Directory: " + Directory.GetCurrentDirectory() ); writer.WriteLine("System.AppDomain.CurrentDomain.BaseDirectory: " + System.AppDomain.CurrentDomain.BaseDirectory); string filename = DateTime.Now.ToString("M/d/yyyy"); filename = "Universal Master Data Template Cost Center " + filename + DateTime.Now.TimeOfDay + ".xls"; filename = filename.Replace("/", "-"); filename = filename.Replace(":", "."); DirectoryInfo dir = new DirectoryInfo(System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments)); FileInfo file = new FileInfo(Path.Combine(dir.FullName, filename)); Stream stream = file.OpenWrite(); StreamWriter sw = new StreamWriter(stream); //Corporate US (PRC) - New CC - 2011-08-30T15:27:24 //Universal Master Data Template Cost Center 08-16-2011 11.42.23 ///my:Single_Cost_Center/my:Title //above will actually made from data gathered XmlNamespaceManager manager = new XmlNamespaceManager(nav.NameTable); manager.AddNamespace("my", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-06-08T18:22:45"); // nav.MoveToFollowing("field3", "http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-08-24T16:21:41"); string fileName = nav.Name; //Single_Cost_Center List fields = new List(); List values = new List(); List emptyfields = new List(); XPathNavigator node = nav.SelectSingleNode("/my:Single_Cost_Center/my:Date_Requested", manager); fields.Add("Date Requested");//my:Date_Requested in every form by default values.Add(node.Value); node = nav.SelectSingleNode("/my:Single_Cost_Center/my:Requestor_Name", manager); AddIfNotEmpty(ref node, ref fields, ref values,ref emptyfields, "Requestor Name"); node = nav.SelectSingleNode("/my:Single_Cost_Center/my:Requestor_Phone", manager); AddIfNotEmpty(ref node, ref fields, ref values, ref emptyfields, "Requestor Phone"); node = nav.SelectSingleNode("/my:Single_Cost_Center/my:Requestor_Email", manager); AddIfNotEmpty(ref node, ref fields, ref values, ref emptyfields, "Requestor Email"); node = nav.SelectSingleNode("/my:Single_Cost_Center/my:Affected_Stream", manager); AddIfNotEmpty(ref node, ref fields, ref values, ref emptyfields, "Affected Stream"); string xPath = ""; xPath = xPath + node.Value; xPath = xPath.Replace("(", ""); xPath = xPath.Replace(")", ""); node = nav.SelectSingleNode("/my:Single_Cost_Center/my:Request_Type", manager); AddIfNotEmpty(ref node, ref fields, ref values, ref emptyfields, "Request Type"); xPath = xPath + " " + node.Value; xPath = xPath.Replace(" ", "_"); // xPath = "/my:Single_Cost_Center/my:" + xPath; //errorsw.WriteLine("xPath: " + xPath + System.Environment.NewLine); // nav.MoveToFollowing(xPath, "http://schemas.microsoft.com/office/infopath/2003/myXSD/2011-08-24T16:21:41"); //copy to array //need to know which are required fields, then pop up box. can stop copying once a required field is not filled out. //keep adding fields and values to arrays until a required field is found, pop up box telling them to fill in. then continue // try to keep state memory so don't have to start all over when pressing export button again, having to start // copying into array all over again!!! //sw.WriteLine("xPath: " + xPath); switch(xPath) { case "Corporate_US_PRC_New_CC": AddFieldWithNA(ref fields, ref values, "Cost Center Number"); AddFieldWithNA(ref fields, ref values, "Temporary or Permanent"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "Valid From Date"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "Valid To Date"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "Cost Center Name"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "Cost Center Description"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "User Responsible"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "Valid From Date"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "Person Responsible"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "Department"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "Cost Center Category"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "Hierarchy Node"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "Company Code"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Business Area"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Functional Area"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "Profit Center"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Name 1"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Name 2"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "Address"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Address 2"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "City"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "County"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "Country"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "State"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "Zip Code"); AddFieldWithNA(ref fields, ref values, "Joint Venture No."); AddFieldWithNA(ref fields, ref values, "Recovery Indicator"); AddFieldWithNA(ref fields, ref values, "Equity Type"); AddFieldWithNA(ref fields, ref values, "JV Object Type"); AddFieldWithNA(ref fields, ref values, "JIB/JIBE Class"); AddFieldWithNA(ref fields, ref values, "JIB/JIBE Subclass A"); AddFieldWithNA(ref fields, ref values, "Legacy Property No."); AddFieldWithNA(ref fields, ref values, "BP RROS Field No."); AddFieldWithNA(ref fields, ref values, "Operated/Non-Operated"); AddFieldWithNA(ref fields, ref values, "GRA Number"); AddFieldWithNA(ref fields, ref values, "District"); AddFieldWithNA(ref fields, ref values, "Currency"); AddFieldWithNA(ref fields, ref values, "Pipe Type 1A"); AddFieldWithNA(ref fields, ref values, "Pipe Type 1B"); AddFieldWithNA(ref fields, ref values, "Carrier Type"); AddFieldWithNA(ref fields, ref values, "Pipe Type 2"); AddFieldWithNA(ref fields, ref values, "Gathering %"); AddFieldWithNA(ref fields, ref values, "Expense Type"); AddFieldWithNA(ref fields, ref values, "Signature Verified Billing # (SVB)"); AddFieldWithNA(ref fields, ref values, "Facility Number"); AddFieldWithNA(ref fields, ref values, "Channel of Trade"); break; case "Corporate_US_PRC_Change_CC": AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "Cost Center Number"); AddFieldWithNA(ref fields, ref values, "Temporary or Permanent"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "Valid From Date"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "Valid To Date"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Cost Center Name"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Cost Center Description"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "User Responsible"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Person Responsible"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Department"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Cost Center Category"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Hierarchy Node"); AddFieldWithNA(ref fields, ref values, "Company Code"); AddFieldWithNA(ref fields, ref values, "Business Area"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Functional Area"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Profit Center"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Name 1"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Name 2"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Address"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "City"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "County"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Country"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "State"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Zip Code"); AddFieldWithNA(ref fields, ref values, "Joint Venture No."); AddFieldWithNA(ref fields, ref values, "Recovery Indicator"); AddFieldWithNA(ref fields, ref values, "Equity Type"); AddFieldWithNA(ref fields, ref values, "JV Object Type"); AddFieldWithNA(ref fields, ref values, "JIB/JIBE Class"); AddFieldWithNA(ref fields, ref values, "JIB/JIBE Subclass A"); AddFieldWithNA(ref fields, ref values, "Legacy Property No."); AddFieldWithNA(ref fields, ref values, "BP RROS Field No."); AddFieldWithNA(ref fields, ref values, "Operated/Non-Operated"); AddFieldWithNA(ref fields, ref values, "GRA Number"); AddFieldWithNA(ref fields, ref values, "District"); AddFieldWithNA(ref fields, ref values, "Currency"); AddFieldWithNA(ref fields, ref values, "Pipe Type 1A"); AddFieldWithNA(ref fields, ref values, "Pipe Type 1B"); AddFieldWithNA(ref fields, ref values, "Carrier Type"); AddFieldWithNA(ref fields, ref values, "Pipe Type 2"); AddFieldWithNA(ref fields, ref values, "Gathering %"); AddFieldWithNA(ref fields, ref values, "Expense Type"); AddFieldWithNA(ref fields, ref values, "Signature Verified Billing # (SVB)"); AddFieldWithNA(ref fields, ref values, "Facility Number"); AddFieldWithNA(ref fields, ref values, "Channel of Trade"); break; case "Corporate_US_PRC_Block_Close_CC": AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "Cost Center Number"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "Temporary or Permanent"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "Valid From Date"); AddIfRequiredNotEmpty(ref node, ref fields, ref values, ref emptyfields, ref nav, ref manager, ref xPath, "Valid To Date"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Cost Center Name"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Cost Center Description"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "User Responsible"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Person Responsible"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Department"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Cost Center Category"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Hierarchy Node"); AddFieldWithNA(ref fields, ref values, "Company Code"); AddFieldWithNA(ref fields, ref values, "Business Area"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Functional Area"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Profit Center"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Name 1"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Name 2"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Address"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "City"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "County"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Country"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "State"); AddFieldAndValue(ref node, ref fields, ref values, ref nav, ref manager, ref xPath, "Zip Code"); AddFieldWithNA(ref fields, ref values, "Joint Venture No."); AddFieldWithNA(ref fields, ref values, "Recovery Indicator"); AddFieldWithNA(ref fields, ref values, "Equity Type"); AddFieldWithNA(ref fields, ref values, "JV Object Type"); AddFieldWithNA(ref fields, ref values, "JIB/JIBE Class"); AddFieldWithNA(ref fields, ref values, "JIB/JIBE Subclass A"); AddFieldWithNA(ref fields, ref values, "Legacy Property No."); AddFieldWithNA(ref fields, ref values, "BP RROS Field No."); AddFieldWithNA(ref fields, ref values, "Operated/Non-Operated"); AddFieldWithNA(ref fields, ref values, "GRA Number"); AddFieldWithNA(ref fields, ref values, "District"); AddFieldWithNA(ref fields, ref values, "Currency"); AddFieldWithNA(ref fields, ref values, "Pipe Type 1A"); AddFieldWithNA(ref fields, ref values, "Pipe Type 1B"); AddFieldWithNA(ref fields, ref values, "Carrier Type"); AddFieldWithNA(ref fields, ref values, "Pipe Type 2"); AddFieldWithNA(ref fields, ref values, "Gathering %"); AddFieldWithNA(ref fields, ref values, "Expense Type"); AddFieldWithNA(ref fields, ref values, "Signature Verified Billing # (SVB)"); AddFieldWithNA(ref fields, ref values, "Facility Number"); AddFieldWithNA(ref fields, ref values, "Channel of Trade"); break; } if (emptyfields.Count == 0) { PrintTabSeparated(ref fields, ref values, ref sw); } else { PrintEmptyFields(ref emptyfields); } writer.Close(); sw.Close(); } } }