Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
integration:csharp-reading-xmldatafeed-with-xmlserializer [2012/08/22 09:02] – [Access the data] babbleintegration:csharp-reading-xmldatafeed-with-xmlserializer [2019/10/18 03:15] (current) – [Data entry] adam
Line 1: Line 1:
 ---- dataentry integration ---- ---- dataentry integration ----
-type          : integration     # do not change this line +type                           : integration # do not change this line 
-supports-foxycart-version-from :     1.0 +supports-foxycart-version-from : 1.0  
-supports-foxycart-version-to   :     # Last FoxyCart version that supports this (leave empty if unknown) +supports-foxycart-version-to   : 1.0 # Last FoxyCart version that supports this (leave empty if unknown) 
-systems                       cSharp, .netasp.net +systems                        ASP.NetC\# #  
-name                          Reading the transaction feed using XmlSerializer in cSharp.net +name                           : Reading the transaction feed using XmlSerializer in cSharp.net  
-description                    +description                    Shows how to use the .net XmlSerializer object to easily read the FoxyCart transaction feed in cSharp.net #  
-tags_tags                     cSharp, .net, datafeed, xml +tags                           : cSharp, .net, datafeed, xml  
-date_dt                       2012-08-22 +date_dt                        : 2012-08-22  
-version                       v0.1 +version                        : v0.1  
-developer_url :                 # if you'd like a link back to your site, stick it here+developer_url                  http://www.babblebib.com # if you'd like a link back to your site, stick it here
 ---- ----
  
  
  
-====== csharp-reading-xmldatafeed-with-xmlserializer ======+ 
 +====== Reading the transaction datafeed with XmlSerializer class in c# ======
  
 <WRAP important round> <WRAP important round>
Line 23: Line 24:
 ===== Description ===== ===== Description =====
 This post outlines the most effective way of reading the FoxyCart transaction data feed in c#.net and asp.net. It is written in c#, but could apply to any .net language. This post outlines the most effective way of reading the FoxyCart transaction data feed in c#.net and asp.net. It is written in c#, but could apply to any .net language.
 +
 +The post is based on FoxyCart v1.0, but the logic works just as well for any version. However if you are using previous versions, you'll have to go through the entire article without skipping any steps.
  
 The post is based around the ''XmlSerializer'' class which can serialize an XML file and give you a very easy way to the data using code such as ''transaction.customer_name''. See here for details on XmlSerializer class [[http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx]] The post is based around the ''XmlSerializer'' class which can serialize an XML file and give you a very easy way to the data using code such as ''transaction.customer_name''. See here for details on XmlSerializer class [[http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx]]
Line 44: Line 47:
   * Enter the following command, this will generated a file called FoxyData_v1.xsd: ''xsd.exe FoxyData_v1.xml''   * Enter the following command, this will generated a file called FoxyData_v1.xsd: ''xsd.exe FoxyData_v1.xml''
   * Open FoxyData_v1.xsd in **Notepad**   * Open FoxyData_v1.xsd in **Notepad**
-  * **Find and replace** ''</xs:sequence>'' with ''</xs:sequence><xs:attribute name="tmp" type="xs:string" />''. Save the updated XSD file.+  * **Find and replace** ''</xs:sequence>'' with ''</xs:sequence><xs:attribute name="tmp" type="xs:string" />''. NOTE: You may experience problems wit the way the speech marks are copied and pasted, watch out for errors related to this in the next section, if you see them, just do another find and replace but re-type the speech marks. Save the updated XSD file.
   * In the **Visual Studio 2010 command prompt** enter the following command. This will generate a file called FoxyData_v1.cs: ''xsd.exe /c FoxyData_v1.xsd''    * In the **Visual Studio 2010 command prompt** enter the following command. This will generate a file called FoxyData_v1.cs: ''xsd.exe /c FoxyData_v1.xsd'' 
  
Line 73: Line 76:
 foxydataTransactionsTransaction transaction = foxyData.transactions[0].transaction[0]; foxydataTransactionsTransaction transaction = foxyData.transactions[0].transaction[0];
 string customerLastName = transaction.customer_last_name; string customerLastName = transaction.customer_last_name;
-</code>+</code>  
 + 
 +==== (OPTIONAL) Tidy-up the class names ==== 
 +By default the XSD tool creates classes based on their location in the XML structure. In the case of FoxyCart, this can generate some fairly long and unfriendly class names, the worse example being: 
 + 
 +''foxydataTransactionsTransactionTransaction_detailsTransaction_detailTransaction_detail_optionsTransaction_detail_option'' 
 + 
 +In order to make your code more manageable, I recommend you rename these classes. The name is up to you, but I use the formula of replacing everything but the last element (the last word beginning with a capital letter) with FD. The only exceptions are the ''foxydata'' and ''newdataset'' classes which must remain what they are called by default.  
 + 
 +When you rename the class in Visual Studio, ensure you use the smart-tag that pops-up to rename all references too. 
 + 
 +This is how I rename the classes (note that the samples below have NOT been renamed, to avoid confusion): 
 +''foxydataTransactions > FDTransactions'' 
 + 
 +''foxydataTransactionsTransaction > FDTransaction'' 
 + 
 +''foxydataTransactionsTransactionProcessor_response_details > FDProcessor_response_details'' 
 + 
 +''foxydataTransactionsTransactionDiscounts > FDDiscounts'' 
 + 
 +''foxydataTransactionsTransactionDiscountsDiscount > FDDiscount'' 
 + 
 +''foxydataTransactionsTransactionTransaction_details > FDTransactionDetails'' 
 + 
 +''foxydataTransactionsTransactionTransaction_detailsTransaction_detail > FDTransaction_detail'' 
 + 
 +''foxydataTransactionsTransactionTransaction_detailsTransaction_detailTransaction_detail_options > FDTransaction_detail_options'' 
 + 
 +''foxydataTransactionsTransactionTransaction_detailsTransaction_detailTransaction_detail_optionsTransaction_detail_option > FDTransaction_detail_option'' 
 +'' 
 ===== Requirements ===== ===== Requirements =====
 Visual Studio 2010 (or newer). Visual Studio 2010 (or newer).
  
-A Foxy Cart transaction feed XML file (v1.0). Decrypted and decoded. See other articles on how to decrypt and decode the FoxyCart transaction feed in .net.+A Foxy Cart transaction feed XML file (v1.0 - see description section for previous versions). Decrypted and decoded. See other articles on how to decrypt and decode the FoxyCart transaction feed in .net.
  
  
 ===== Code ===== ===== Code =====
 +
 +==== FoxyDataTest.aspx.cs ====
 +This is the complete code for the test ASPX page we create in the 'Access the data' section.
 +
 +<code html>
 +using System;
 +using System.Collections.Generic;
 +using System.Linq;
 +using System.Web;
 +using System.Web.UI;
 +using System.Web.UI.WebControls;
 +using System.IO;
 +using System.Xml.Serialization;
 +
 +namespace BabbleBibAdmin.Secure
 +{
 +    public partial class FoxyDataTest : System.Web.UI.Page
 +    {
 +        protected void Page_Load(object sender, EventArgs e)
 +        {
 +            using (FileStream feedStream = new FileStream("c:\\transaction.xml", FileMode.Open))
 +            {
 +                XmlSerializer foxyDataSerializer = new XmlSerializer(typeof(foxydata));
 +                foxydata foxyData = (foxydata)foxyDataSerializer.Deserialize(feedStream);
 +
 +                foxydataTransactionsTransaction transaction = foxyData.transactions[0].transaction[0];
 +                string customerLastName = transaction.customer_last_name;
 +            }
 +        }
 +    }
 +}
 +</code>
 +
  
 ==== FoxyData_v1.cs ==== ==== FoxyData_v1.cs ====
Line 88: Line 154:
 // <auto-generated> // <auto-generated>
 //     This code was generated by a tool. //     This code was generated by a tool.
-//     Runtime Version:4.0.30319.269+//     Runtime Version:4.0.30319.17929
 // //
 //     Changes to this file may cause incorrect behavior and will be lost if //     Changes to this file may cause incorrect behavior and will be lost if
Line 303: Line 369:
          
     private string customer_password_hash_configField;     private string customer_password_hash_configField;
-     
-    private string custom_fieldsField; 
          
     private string shipto_addressesField;     private string shipto_addressesField;
Line 313: Line 377:
          
     private foxydataTransactionsTransactionDiscounts[] discountsField;     private foxydataTransactionsTransactionDiscounts[] discountsField;
 +    
 +    private foxydataTransactionsTransactionCustom_fields[] custom_fieldsField;
          
     private foxydataTransactionsTransactionTransaction_details[] transaction_detailsField;     private foxydataTransactionsTransactionTransaction_details[] transaction_detailsField;
Line 920: Line 986:
         set {         set {
             this.customer_password_hash_configField = value;             this.customer_password_hash_configField = value;
-        } 
-    } 
-     
-    /// <remarks/> 
-    [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 
-    public string custom_fields { 
-        get { 
-            return this.custom_fieldsField; 
-        } 
-        set { 
-            this.custom_fieldsField = value; 
         }         }
     }     }
Line 975: Line 1030:
         set {         set {
             this.discountsField = value;             this.discountsField = value;
 +        }
 +    }
 +    
 +    /// <remarks/>
 +    [System.Xml.Serialization.XmlElementAttribute("custom_fields", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
 +    public foxydataTransactionsTransactionCustom_fields[] custom_fields {
 +        get {
 +            return this.custom_fieldsField;
 +        }
 +        set {
 +            this.custom_fieldsField = value;
         }         }
     }     }
Line 1169: Line 1235:
         set {         set {
             this.coupon_discount_detailsField = value;             this.coupon_discount_detailsField = value;
 +        }
 +    }
 +    
 +    /// <remarks/>
 +    [System.Xml.Serialization.XmlAttributeAttribute()]
 +    public string tmp {
 +        get {
 +            return this.tmpField;
 +        }
 +        set {
 +            this.tmpField = value;
 +        }
 +    }
 +}
 +
 +/// <remarks/>
 +[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
 +[System.SerializableAttribute()]
 +[System.Diagnostics.DebuggerStepThroughAttribute()]
 +[System.ComponentModel.DesignerCategoryAttribute("code")]
 +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
 +public partial class foxydataTransactionsTransactionCustom_fields {
 +    
 +    private foxydataTransactionsTransactionCustom_fieldsCustom_field[] custom_fieldField;
 +    
 +    private string tmpField;
 +    
 +    /// <remarks/>
 +    [System.Xml.Serialization.XmlElementAttribute("custom_field", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
 +    public foxydataTransactionsTransactionCustom_fieldsCustom_field[] custom_field {
 +        get {
 +            return this.custom_fieldField;
 +        }
 +        set {
 +            this.custom_fieldField = value;
 +        }
 +    }
 +    
 +    /// <remarks/>
 +    [System.Xml.Serialization.XmlAttributeAttribute()]
 +    public string tmp {
 +        get {
 +            return this.tmpField;
 +        }
 +        set {
 +            this.tmpField = value;
 +        }
 +    }
 +}
 +
 +/// <remarks/>
 +[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
 +[System.SerializableAttribute()]
 +[System.Diagnostics.DebuggerStepThroughAttribute()]
 +[System.ComponentModel.DesignerCategoryAttribute("code")]
 +[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
 +public partial class foxydataTransactionsTransactionCustom_fieldsCustom_field {
 +    
 +    private string custom_field_nameField;
 +    
 +    private string custom_field_valueField;
 +    
 +    private string custom_field_is_hiddenField;
 +    
 +    private string tmpField;
 +    
 +    /// <remarks/>
 +    [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
 +    public string custom_field_name {
 +        get {
 +            return this.custom_field_nameField;
 +        }
 +        set {
 +            this.custom_field_nameField = value;
 +        }
 +    }
 +    
 +    /// <remarks/>
 +    [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
 +    public string custom_field_value {
 +        get {
 +            return this.custom_field_valueField;
 +        }
 +        set {
 +            this.custom_field_valueField = value;
 +        }
 +    }
 +    
 +    /// <remarks/>
 +    [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
 +    public string custom_field_is_hidden {
 +        get {
 +            return this.custom_field_is_hiddenField;
 +        }
 +        set {
 +            this.custom_field_is_hiddenField = value;
         }         }
     }     }

Site Tools