Mukarram Mukhtar

Quickbooks (Reloaded)

When I was writing 1st part of this article (to see, click here), I was so sure that this article will get least amount of viewers from web. And the main reason behind this thought was, integration of Quickbooks with .NET is certainly a headache of very small amount of .NET programmers. I’m glad I was wrong. Because what I forgot was, there is not much help on this topic on web too. So almost every programmer who has to do such kind of integration would Google on the topic and eventually come to my article. Thus this topic came out to be my 2nd most popular article (1st most popular is here).

In 1st part of this article, I explained how you can connect your web application with Quickbooks, also I dwelled upon application architecture, after successfully connecting with QB I retrieved some records from Vendor table and at the end I explained some necessary settings you need to do in QB so that you can successfully connect you .NET application with it. In this article, I’ll demonstrate how you can add new records in any of the QB tables. I’ll take Vendor table’s example again. I’ll use the same windows desktop application that I created in part 1, and I’m going to add one more win form into it. I’ll make my new win form as start up form of the project and along with other controls that will help in adding a new Vendor, I’ll add a button that will open the View Vendor List form that I created in part 1.

So, if you have not yet read and understood part 1 yet then it’s time that you do so (click here). Because following contents are completely dependant upon the discussion we had in part 1. And if you haven’t received your FREE copy of source code of the project yet then it’s better that you get it now by requesting me nicely in the comments section of this or part 1 of this article.

Now let’s start coding!

In first step, I opened the project I explained in part 1 and added a new form into it, named it frmVendor.cs. Second step I took was, I opened Program.cs and changed its code as follows:

static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmVendor());
//Application.Run(new frmViewVendorList());
}

So as I said before, I made my frmVendor class as start up form. Third step is a little bit lengthy to explain, so I’ll act upon the famous adage i.e. a picture is worth thousand words. So in third step made UI of frmVendor and made it look like this:

FormVendorUI

Okay, now let me explain this form, top to bottom, step by step:

  • The File field is to make QB file selection dynamic. In part 1, it was hard coded in app.config; so in this form I made it little easier for my fellow programmers so that they can select their own QB file with whatever name they want rather than using my QB file name or going into the code and changing the hard coded name. I’ve defaulted the value in text box with my Quick Book file path but you can use Browse button to select any other file that you would want to work with. Line of code for Browse button is coming in short.
  • After adding File name & Browse button, I added a Group box and added some controls for some mandatory fields of Vendor table namely, Name, Type, Company, Contact, Phone, Fax etc.
  • Then I added a row of command buttons to:
  1. Add Vendor: Adds a new Vendor
  2. Get List: Gets a complete list of vendors from QB and populates the grid control below
  3. Search: Searches on a particular Vendor on the basis of Vendor Name criteria entered by the user in text box above. This will get a vendor and populate the text boxes placed on the form.
  4. Clear: This is a typical clear button, clears the form i.e. the text boxes on the form.
  5. Complete List: Finally the last button, which simply calls the Show All Vendors form that we created in Part 1.
  • After row of command buttons, I added a grid view control. This is the smaller and pretty similar version of the grid view I had in part 1. The main purpose of this grid view is to see if the vendor we add from this control really gets added in the QB.
  • In the bottom of the form, I have a multiline text box, which will simply serve the purpose of a gigantic status bas. After any operation, we’ll get either success or failure messages in this text box.

Now let’s start coding this form. Again, I’ll start from top to bottom, so let’s see Browse button first:

private void btnBrowse_Click(object sender, EventArgs e)
{
OpenFileDialog ofdQuickBookSelect = new OpenFileDialog();
if (ofdQuickBookSelect.ShowDialog() == DialogResult.OK)
this.txtFile.Text = ofdQuickBookSelect.FileName;
}

This is 2nd simplest piece of code so I’m not explaining any of its part and going to jump to the 1st simplest piece of code i.e. code behind Complete List button:

private void btnShow_Click(object sender, EventArgs e)
{
new frmViewVendorList().ShowDialog(this);
}

Clicking on this button opens Vendor List form as a dialogue box of our current form. Together the two forms look like this, pretty cool huh?

FormsVendorTwo

Well, Okay, not that cool, let’s get back to Vendor Form; next, I choose the 3rd simplest piece of code in this form, Clear button’s code:

private void btnClear_Click(object sender, EventArgs e)
{
this.txtResults.Text = this.txtVendorCompany.Text = this.txtVendorContact.Text =
this.txtVendorFax.Text = this.txtVendorName.Text = this.txtVendorPhone.Text = string.Empty;
this.cmbVendorType.SelectedIndex = 1;
}

So simple, no explanation needed, let’s move forward without wasting our time on trinkets. But before going into some difficult piece of code, let me copy-paste two more code snippets that are quite simple on their own, I’m talking about two methods, GetFormVendor() and SetFormVendor(Vendor vendor). These two methods are basically getter and setter of form’s vendor object. If Vendor class looks unfamiliar to you then I can bet you didn’t understand Part 1 of QB integration series of articles. Hence, last warning to you, please go back to Part 1 (click here) and see how I made Vendor class and what this class is capable of; otherwise you won’t understand any of the following discussion. Let’s see the code of the two methods:

private Vendor GetFormVendor()
{
Vendor vendor = new Vendor();
vendor.Name = this.txtVendorName.Text;
vendor.Type = this.cmbVendorType.Text;
vendor.CompanyName = this.txtVendorCompany.Text;
vendor.PhoneNumber = this.txtVendorPhone.Text;
vendor.FaxNumber = this.txtVendorFax.Text;
vendor.ContactName = this.txtVendorContact.Text;
return vendor;
}
private void SetFormVendor(Vendor vendor)
{
this.txtVendorName.Text = vendor.Name;
this.txtVendorCompany.Text = vendor.CompanyName;
this.txtVendorPhone.Text = vendor.PhoneNumber;
this.txtVendorFax.Text = vendor.FaxNumber;
this.txtVendorContact.Text = vendor.ContactName;
this.cmbVendorType.Text = vendor.Type;
}

First method is very simple one, it simply instantiates Vendor class, populate its properties with the values entered in the text boxes on form and returns the object to the caller method. Second method is even simpler, it accepts a Vendor object as a method parameter and sets corresponding text boxes’ values with object properties. Method returns without any return argument. Now as we are moving forward, we are getting out of simple pieces of code snippets. There is only one method left in this category which is as follows:

private void frmVendor_Load(object sender, EventArgs e)
{
string[] vendorTypes = { "Consultant", "Service", "ServiceProviders", "Suppliers",
"Constructor", "Mover", "Builder" };
for (int i = 0; i < vendorTypes.Length; i++)
this.cmbVendorType.Items.Add(new ComboBoxItem(vendorTypes[i].ToString(), i));
}

Yes, that’s right, form load event; this method simply adds some Vendor Types in the drop down list. I hard coded these vendor types, mainly because I know these types are present in my QB file. You can change them as you want or write your own method to get a list of vendor types from QB. If you add a vendor type in this list which, you already know, is not present in QB file, don’t worry, my code is capable of adding that vendor type in QB file first and then adding the vendor you were trying to add. Now we are truly officially out of simple code snippets and going to code little hard piece of code. However, if you have read and understood part 1, even the hardest piece of code in this article will be kids’ stuff for you. It’s the turn of Search button’s code behind, but before I show that code, let me show the top part of frmVendor.cs, the class frmVendor starts like this:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace prjQuickBookIntegration
{
public partial class frmVendor : Form
{
private RequestBroker broker = new RequestBroker();
public frmVendor()
{
InitializeComponent();
}
private Vendor GetFormVendor()

The frmVendor.cs starts with including some standard namespaces, followed by its own namespace. Then we start frmVendor class which has a class level variable as:

private RequestBroker broker = new RequestBroker();

Recall part 1 and the significance of RequestBroker class in this whole story. This class is Data Access Layer of this project, in other words, classes RequestBroker and Vendor together, make the brain of this application. Let’s see Search button’s code behind (line numbers are given for explanation and are not part of the actual code):

private void btnSearch_Click(object sender, EventArgs e)
{
01            broker = (this.txtFile.Text.Length > 0) ? new RequestBroker(this.txtFile.Text) : new RequestBroker();
02            if (this.txtVendorName.Text.Length > 0)
{
03                Vendor vendor = broker.GetVendorsByName(this.txtVendorName.Text);
04                if (vendor.Name.Length > 0)
{
05                    SetFormVendor(vendor);
06                    this.txtResults.Text = "Vendor found.";
}
else
07                    this.txtResults.Text = "Vendor could not be found.";
}
}

Line 01 checks if there is anything given in txtFile then it instantiates RequestBroker class with the file path of QB file, else it instantiates the class by empty constructor. If you give file path in the constructor then RequestBroker will use that particular file otherwise it will use the file path from app.config. A line 02 check if there is some text entered in txtVendorName, since we are searching on vendor name, this field is important. If both of the above two If statements come out to be true then we are all set for vendor search. Line 03 does the actual job. In this line we call broker’s method, GetVendorsByName() and pass vendor name as parameter. This method will go to QB file and search and return a Vendor object if it finds one. Rest of the lines are all decorations, if broker finds a vendor with that name, it will SetFormVendor() method at line 05 and displays a friend message in our big status bar text box that “Vendor found.”; otherwise, display message “Vendor could not be found.”.

Before we move forward in this, let me explain GetVendorsByName() method in broker class, since I didn’t explain it Part 1.

/// <summary>
/// This method gets an active vendor matching name criteria
/// </summary>
/// <returns></returns>
public Vendor GetVendorsByName(string vendorName)
{
QBOperationStatus opStatus = new QBOperationStatus();
01            QBList<Vendor> qblAllVendors = this.GetVendorList(ref opStatus, true);
02            Vendor searchedVendor = qblAllVendors.GetEntity("Name", vendorName);
03            if (searchedVendor == null)
04                searchedVendor = new Vendor();
return searchedVendor;
}

Logic of this method is little nasty, in line 01, I get the complete list of vendors from QB by calling GetVendorList() method. Code of this method is given and explained in Part 1. After we populate our QBList<Vendor> qblAllVendors, we’ll use its own method GetEntity() to filter on “Name” field. If there exists such a vendor with the given name (checked in line 03), then that vendor object will be returned, else line 04, return an empty vendor object. Let’s see how our form looks like when we search on a vendor name, I entered Sam in vendor name text box and selected search button and got the following screen:

FormVendorSearch

At this point, let me clearly mention that all vendor names and their details in these articles are fake and entered by myself. If there is any match found with a real person, company or contact number, it would be a mere coincidence. Anyways, you have to enter such disclaimers clearly in your articles in US in order to save your rear J

After searching a vendor in QB, now let’s see the code behind Get List button:

private void btnVendorList_Click(object sender, EventArgs e)
{
01            broker = (this.txtFile.Text.Length > 0) ? new RequestBroker(this.txtFile.Text) : new RequestBroker();
02            QBOperationStatus opStatus = new QBOperationStatus();
03            this.grdVendors.DataSource = new QBList<Vendor>();
04            QBList<Vendor> qblVendor = broker.GetVendorList(ref opStatus, true);
05            this.grdVendors.DataSource = qblVendor;
06            if (opStatus.OperationResult == QBOperationResult.Succeeded)
07                this.txtResults.Text = qblVendor.Count.ToString() + " records retrieved successfully.";
else
08                this.txtResults.Text = "Vendors could not be retrieved successfully.\r\n" + opStatus.Message;
}

Logic of this method is exactly the same as you’ve already seen in part 1 of QB integration. Let’s briefly skim through the lines of this method. Line 01 checks if QB file path is given or not. Line 02 instantiates QBOperationStatus class, which will be used in next step when we’ll be getting vendor list from broker object; QBOperationStatus has been explained in detail in Part 1. In line 03, I’m assigning an empty vendor list to gird view control just to clear & clean the grid from previous data. Line 04 gets all the vendors from QB by calling broker’s method GetVendorList(). In line 05, I assign the list returned by broker class to the grid view, so if the list is empty, it will have no effect on the grid; if there is some data in the list, then it will populate the grid view. Rest of the lines are decorative again. Line 06 checks if the recent operation with QB was successful or not; if yes, then show a friendly message in status bar; if no, then show failure message in status bar. Selecting Get list button will give you the following screen:

FormVendorGetList

Now let’s see the crux of this article, Add Vendor. Code behind Add Vendor button is as follows:

private void btnAddVendor_Click(object sender, EventArgs e)
{
01            Vendor vendor = GetFormVendor();
02            broker = (this.txtFile.Text.Length > 0) ? new RequestBroker(this.txtFile.Text) : new RequestBroker();
03            QBOperationStatus opStatus = broker.AddVendor(vendor);
04            if (opStatus.OperationResult == QBOperationResult.Succeeded)
this.txtResults.Text = "Vendor added successfully.";
else
this.txtResults.Text = "Vendor could not be added successfully.\r\n" + opStatus.Message;
}

This method is a clear example of the fact that how easy and convenient, programming becomes if the application is well designed and well architected in multi layers. Line 01 populates a Vendor object from the form text boxes. In this version of the application, there are no required field validation and no data validation checks; so it is advised not to play with the application with the intention to break the code or to crash it; because at this point the application is very fragile. Line 02 instantiates RequestBroker class. Line 03 calls broker’s AddVendor() method and passes Vendor object to it as an input parameter. AddVendor() method either adds the vendor into QB and returns the status successful; or, it fails for some reason and returns the status failed. Depending upon the status, line 04 displays the message in status bar. Broker’s AddVendor() is as follows:

public QBOperationStatus AddVendor(Vendor vendor)
{
QBOperationStatus opStatus = new QBOperationStatus();
try
{
01                opStatus = this.AddVendorType(vendor);
02                if (opStatus.OperationResult == QBOperationResult.Succeeded)
{
03                    opStatus = BeginSession();
04                    if (opStatus.OperationResult == QBOperationResult.Succeeded)
{
05                        IMsgSetRequest requestSet = CreateRequestMsgSet();
06                        IVendorAdd vendorAddRequest = requestSet.AppendVendorAddRq();
07                        vendor.FillAddRequest(ref vendorAddRequest);
try
{
08                            IMsgSetResponse responseSet = this.GetResponse(requestSet);
09                            this.sessionManager.CloseConnection();
10                            opStatus = GetResponseStatus(responseSet);
}
catch (Exception ex)
{
11                            opStatus.OperationResult = QBOperationResult.Failed;
12                            opStatus.Message += " Unexpected error " + "\r\n";
}
}
}
}
catch (Exception ex)
{
13                opStatus.Message = ex.Message;
}
finally
{
14                this.sessionManager.EndSession();
}
15            return opStatus;
}

In line 01, I’m calling AddVendorType() method of broker class. I’m passing fully populated vendor object to this method and it will add its type in Quickbooks. If the type is already there, it won’t add a duplicate one; if it’s not there, then vendor type will be added. Code of AddVendorType() is coming shortly. Line 02 checks what is the operation status after adding vendor type. Line 03 begins the session with QB (code of method BeginSession() coming shortly), followed by line 04, which again checks the operation status after beginning session with QB. Line 05 calls CreateRequestMsgSet() method (code coming shortly); the purpose of this method is, while adding a new vendor we need to set a message request of QBSessionManager class which is part of Interop.QBFC7 namespace and explained in Part 1 of this article. CreateRequestMsgSet() method returns an object of IMsgSetRequest which is again a part of Interop.QBFC7. This class is used in line 06, where we call its AppendVendorAddRq() method and get an object of IVendorAdd class. The logic behind getting an object of IVendorAdd is, QB doesn’t know our Vendor business object; it has its own business objects and what you have to do is, before asking QB to add a vendor, you have to populate its IVendorAdd object. Doing so is tantamount to calling an INSERT statement of SQL Server. Thus, when you populate IVendorAdd object, it actually adds a vendor in QB if all validations are successful. In line 06 we just created this object, but in line 07 we call Vendor class’s method FillAddRequest() to populate IVendorAdd object. Code of FillAddRequest() is coming shortly. In line 08, 09 and 10, I’m get the response from QB, closing session and getting operation status respectively. In case of an exception, I’ll set operation status and status message in line 11, 12 and 13. Line 14 ends the session with QB and line 15 returns the status of the above operation to the caller method.

Let’s take a look at AddVendorType() method called in line 01. This method is a public method of broker class and its code is as follows:

public QBOperationStatus AddVendorType(Vendor vendor)
{
QBOperationStatus opStatus = new QBOperationStatus();
try
{
opStatus = BeginSession();
if (opStatus.OperationResult == QBOperationResult.Succeeded)
{
IMsgSetRequest requestSet = CreateRequestMsgSet();
IVendorTypeAdd vendorTypeAddRequest = requestSet.AppendVendorTypeAddRq();
vendor.FillAddTypeRequest(ref vendorTypeAddRequest);
IMsgSetResponse responseSet = this.GetResponse(requestSet);
this.sessionManager.CloseConnection();
opStatus = GetResponseStatus(responseSet);
if (opStatus.Message.IndexOf("the list element is already in use") > -1)
opStatus.OperationResult = QBOperationResult.Succeeded;
}
}
catch (Exception ex)
{
opStatus.Message = ex.Message;
}
finally
{
this.sessionManager.EndSession();
}
return opStatus;
}

The above method adds a vendor type, if it’s not already there. Some other methods that you might need to see are as follows:

private QBOperationStatus BeginSession()
{
QBOperationStatus opResult = new QBOperationStatus();
try
{
this.sessionManager = new QBSessionManagerClass();
this.sessionManager.OpenConnection(string.Empty, RequestBroker.ApplicationName);
opResult.Message = "\r\nConnection opened successfully.";
this.sessionManager.BeginSession(RequestBroker.CompanyFilePath, ENOpenMode.omMultiUser);
opResult.Message += "\r\nSession begin Successfully";
opResult.OperationResult = QBOperationResult.Succeeded;
}
catch (Exception ex)
{
opResult.OperationResult = QBOperationResult.Failed;
opResult.Message += "\r\n" + ex.Message + " App name: " + RequestBroker.ApplicationName + " Company file: " + RequestBroker.CompanyFilePath;
//opResult.Message += "\r\n---" + ex.ToString();
}
return opResult;
}
private IMsgSetRequest CreateRequestMsgSet()
{
IMsgSetRequest requestMsgSet = null;
try
{
requestMsgSet = this.sessionManager.CreateMsgSetRequest(RequestBroker.QBVersion.country,
RequestBroker.QBVersion.majorVersion, RequestBroker.QBVersion.minorVersion);
requestMsgSet.Attributes.OnError = ENRqOnError.roeContinue;
}
catch (Exception ex)
{
}
return requestMsgSet;
}

The above given methods are part of RequestBroker class. After the above two methods now we need to go to Vendor class and add the following two methods:

public void FillAddTypeRequest(ref IVendorTypeAdd vendorTypeAddRequest)
{
vendorTypeAddRequest.Name.SetValue(this.type.ToString());
vendorTypeAddRequest.IsActive.SetValue(true);
}
public void FillAddRequest(ref IVendorAdd request)
{
if (this.name.Length > 0)
{
request.Name.SetValue(this.name);
request.NameOnCheck.SetValue(this.name);
}
if (this.companyName.Length > 0)
{
request.CompanyName.SetValue(this.companyName);
request.NameOnCheck.SetValue(this.companyName);
}
if (this.phoneNumber.Length > 0)
request.Phone.SetValue(this.phoneNumber);
if (this.faxNumber.Length > 0)
request.Fax.SetValue(this.faxNumber);
if (this.contactName.Length > 0)
request.Contact.SetValue(this.contactName);
request.IsActive.SetValue(this.isActive);
request.VendorTypeRef.FullName.SetValue(this.type);
}

Remember: All the code given in this article is addition to the code written in Part 1 of the article. So in order to get complete code of your classes you’ll have to merge code from Part 1 and this part. Well, after placing all the code at proper places, my Add Vendor button is ready to roll. I filled in all the fields and selected Add Vendor button, I got a message saying “Vendor added successfully”. To confirm, I clicked on “Get List” button and I got the following screenshot with the newly added vendor in the bottom of the list:

FormVendorAdded

I hope you’ve noticed that previously there were 51 total vendors in the system and now after adding the new one, we’ve got 52.

So all of the folks who have to integrate Quickbooks with .NET applications, I hope I’ve made your lives little easier by posting this article, if I really did then don’t forget to post your feedback.

And yes, don’t forget to request for your FREE copy of the source code; have a great day and happy programming!

🙂

81 Comments »

  1. Hi,

    Great Article.
    I would like to appreciate your affort in writing this article. Great work.
    Can you please sent me the project code/files.

    I need to develop a mediator application to transfer data from Practice Partners to Quick books.
    Just studying he requirements..

    It would be of great help.

    Here are my emailIds
    mallesh.varri@gmail.com
    mallesh.varri@hotmail.com
    malleshv@convene-tech.com

    Thanks in Advance..

    Comment by Mallesh — July 10, 2009 @ 11:51 am

  2. Hi,

    please send me the code.

    KHAN

    Comment by Khan — July 22, 2009 @ 10:44 am

  3. This is a great article

    Could you please send me the complete code at j4v4jive@yahoo.com

    Thanks in advance

    Comment by John — August 3, 2009 @ 10:59 pm

  4. Hey there buddy – can I get a copy of that code? I’m running a proof of concept and this would be perfect.

    Thanks for the great kickstart!

    Comment by William — August 5, 2009 @ 4:25 pm

    • Dude I’m so sorry my hotmail id is screwed up and i’m unable to send any e-mails to gmail addresses. Give me your hotmail or yahoo id so that I can forward you the zip file with source code.

      Comment by Mukarram Mukhtar — August 5, 2009 @ 5:41 pm

  5. Great article (and the first one, too). Could I have a copy of the source for both articles? Thanks!

    Comment by Scott — August 9, 2009 @ 2:12 pm

  6. Great article.. Please send me the source code to my email:thanukk@yahoo.com

    Comment by Thanu K — January 27, 2010 @ 4:12 am

  7. As you’ll see in the comments, I was unable to get a copy of the source, but looking at this post and his other, I was able to generate all the proof of concepts that I needed. I was able to “fill in the gaps” so to speak. And built a functioning app to connect to QB. You should make this source code downloadable!

    Comment by William — January 28, 2010 @ 10:42 pm

  8. Great article (and the first one, also). Can you forward source code of both to my email.bavna14@yahoo.com

    Comment by bavna — January 31, 2010 @ 2:47 pm

  9. Hei Mukarram,

    Which all are the softwares and tools to be installed for doing QuickBook integration with .Net.If trail/free versions of QuickBook are available,plz give the link for the same.

    Thanks,
    Binto

    Comment by Binto — February 4, 2010 @ 5:36 am

    • Not much idea buddy, I never intended to use the free version. You can check out their official website ( http://quickbooks.intuit.com/ ), if not the free version, they might be offering big discounts in the begining of the year.

      Comment by Mukarram Mukhtar — February 4, 2010 @ 10:10 pm

  10. Great Article regarding quick book integration.I have few more queries regarding this.Can you please clear the following queries:
    1)Which all are the file formats supported by Quick Book?
    2) Can .qbw files be opened in windows?
    3)Using asp.net,can we create a file with .qbw extension?

    Thanks in advance
    Binto

    Comment by Binto — March 11, 2010 @ 11:51 am

  11. Thanks a lot again for such a great article.It would be appreciated,If you could clear my queries.
    1)Are .QLX files support QuickBook?
    2)Can we able to make any QuickBook supported files using ASP.net and integrate the created files with QuickBook?

    Thanks in Advance,
    Bavna

    Comment by Bavna — March 11, 2010 @ 12:17 pm

  12. @ Binto & Bavna,

    I’ll try to do some research on the questions you asked, and will send e-mails to you instead of replying here. These days I’m very busy at my work and studies so I’m sorry if it takes a little long. Secondly I would encourage you to find out a solution of these questions and write your own blog; this might help other novice programmers to share your knowledge.

    Comment by Mukarram Mukhtar — March 16, 2010 @ 12:21 pm

  13. Saludos desde Ecuador:

    Muy buen artículo me podrías enviar el código fuente de la aplicación a mi correo luisico52@hotmail.com y gracias por este muy buen aporte sigue adelante

    Hasta pronto
    Javier

    Comment by Javierq — May 14, 2010 @ 9:56 pm

  14. This is really Great Article regarding Quick Book Integration. Can you please send the source code to rahulmtc@hotmail.com

    Comment by Rahul — July 26, 2010 @ 5:46 am

  15. Hi,

    Great artical, only issue i have is that i’m more of a VB.NET developer and it took me a while but i was able to rewrite this code in VB.NET. Also, this code was written for a desktop application, but i’ve had to create a web application. I ended up creating my own base classes instead of using the collectionsBase class i’ve created a base class from the List(Of T) Generics.

    This artical was excellent. Good work!!

    Comment by Shurland Moore — August 20, 2010 @ 5:02 pm

  16. Great Article for QuickBook Integration. Can you send me the source code for this article.
    My e-mail ID is pinky_1863@yahoo.co.in

    Comment by Pinky Patel — August 27, 2010 @ 2:32 pm

  17. Hi Mukarram,
    Fantastic article! Please can you send me the source code. ty_moodley@yahoo.com

    Comment by Tyrone Moodley — September 13, 2010 @ 4:41 am

  18. Hello Mukarram.
    Great article.
    I would appreciate it if you could send me the code to hazal_29@hotmail.com.
    Thank you ver much.

    Comment by Axel — September 20, 2010 @ 5:52 pm

  19. Can you send me source coce on anant.radadia@gmail.com.Thank you very much.

    Comment by anant — October 21, 2010 @ 8:09 pm

  20. Great artical
    can you send me the code to kajal_2811@yahoo.co.in

    Comment by kajal — October 27, 2010 @ 6:42 pm

  21. Nice job on the articles! Since I am actually trying to do that now, is there any chance that you could also send me the source code? I am sure it would help me a lot.

    Thanks

    Comment by J Theonetti — December 5, 2010 @ 8:40 pm

  22. Really great work. It would be appreciated, if you please send me the sample application for generating invoice application to my above mentioned mail id.I hope it would help me a lot. Thanks in advance.

    Comment by Aparna Chanda — December 6, 2010 @ 5:57 pm

    • Aparna, I don’t have a sample application for invoice generation. The one that I have is for vendor read and insert. You can see its code and get help from it and write your own invoice generating app. Let me know if you’re interested in that, I’ll forward the code to you 🙂

      Comment by Mukarram Mukhtar — December 6, 2010 @ 6:08 pm

  23. Thanks for the provided information. Can you please send the code files to the below id ?
    kabilan.vk@proteam.in

    Regards
    Kabilan

    Comment by KABILAN — December 27, 2010 @ 6:47 am

  24. Hi,

    Very useful article. Your explanation for everything is also very good.
    I would really appreciate if you could send me the source code.
    My email address is: aarti.rukari@gmail.com and aartirukari82@yahoo.com

    Many Thanks

    Comment by Arti — January 6, 2011 @ 4:57 am

  25. I would like to appreciate your great work, i think this is the only place in internet where i can get this kind of information, can you please send me the code files, am trying to read data from a quick book file and save it to a Mysql database.

    Comment by Abdul Fayas — January 24, 2011 @ 7:00 am

  26. Great Articles 1 and 2 – I have found them most instructive, would you please send me the code so i can explore further.

    Thanks in Advance

    Comment by Powder Bird — February 27, 2011 @ 8:07 am

  27. It’s the resource that I was looking for, great job.
    I would really appreciate if you could send me the source code.
    Here is my email address : transcore_e@hotmail.com

    Regards,
    Transcore

    Comment by Transcore — March 16, 2011 @ 2:02 am

  28. Job well done…I have a similar requirement now…appreciate if you could send me the source code.
    Thanks

    Comment by Pranay — April 26, 2011 @ 3:19 pm

  29. Very useful article and nice Explanation given by you. I just want to ask you that this code is applicable for only desktop application or can we use it for web application.(ASP.Net Application)

    Thanks and Regards,

    Dipti Chalke

    Comment by Dipti Chalke — May 18, 2011 @ 10:52 am

    • In the start my team and I tried doing it as an ASP.NET web application but we were having troubles. Maybe it was lack of knowledge at that time, but due to very tight deadline we dropped that idea at pretty early stage and decided to do it as a windows app. Having said that, I would encourage you that if time permits try it in web app and share your findings with us here 🙂

      Comment by Mukarram Mukhtar — May 18, 2011 @ 2:08 pm

      • Sir,

        If we need to work with the asp.net with quickbook,Would the asp.net web application also communicate with the .qbw file or it has to communicate with the Quickbook Online edition ? Desperately waiting for your reply..

        Comment by Sumit — August 4, 2011 @ 10:00 am

  30. Hello. I have been following both your tutorials on connecting to quickbooks. It’s been very helpful, but i seem to be missing some method definitions. Could you provide the source code? Thank you

    Comment by Luis — May 26, 2011 @ 8:23 pm

  31. This is great stuff, can you send me a copy of this code. I need to link a POS with quickbooks. diras.beats@gmail.com

    Comment by Ras Demina — June 5, 2011 @ 6:30 am

  32. Thank you for your time and knowledge.
    It is always good to see the work of a great programmer.

    Please forward your source code. xbmnet@comcast.net

    Best Regards

    Comment by Henry Z — June 10, 2011 @ 9:32 pm

  33. I have been following both your tutorials on connecting to quickbooks. Please can you send me the source code. Here is my email address thindo@yahoo.com

    Comment by thindo — June 13, 2011 @ 4:10 am

  34. hi ,
    This is such a nice article.I am also developing on integration tool with Quick book .I am highly thankful to you if u send source code of this demo project.
    My mail id is ashu.sajwan@gmail.com
    Ashish sajwan

    Comment by ashish sajwan — June 20, 2011 @ 3:33 pm

  35. Hi,
    My yahoo mail Id is ashu_cool490@yahoo.co.in
    Ashish sajwan

    Comment by ashish sajwan — June 20, 2011 @ 3:35 pm

  36. hi can you send me code please to edsmith.21@gmail.com. thank you

    Comment by ed — July 7, 2011 @ 8:05 pm

  37. Hi ,
    Great and neat article….

    can you mail the code please….

    Comment by sounthariya — August 4, 2011 @ 7:40 am

  38. Mail your code sounthariya@proteam.in…..

    Comment by sounthariya — August 4, 2011 @ 7:41 am

  39. Hello sir,

    Can you send the code for this application.I desperately need the code as i have to create one such application.
    My email id is sumitthapar@hotmail.com

    Thanks & Regards
    Sumit

    Comment by Sumit — August 4, 2011 @ 9:57 am

  40. Hey there,

    I appreciate this article. It helped. Can you send me a copy of the source code/project for this application? My email address is kyoungd@hotmail.com.

    Thanks.

    -Young

    Comment by Young K — August 12, 2011 @ 12:33 am

  41. Excellent articles on working with C#.Net and QB data. Would you please send me a copy of the source code? Thanks!

    Comment by Leslie Van Parys — August 20, 2011 @ 9:23 pm

  42. I have a need to integrate with quick books and would very much appreciate a copy of the source code. Thank you for your had work and willingness to share.

    David

    Comment by mcwdgerhartavid — August 22, 2011 @ 3:15 pm

  43. Can you please forward the ziped project files to me as well.
    email – mamarobindvd@gmail.com

    Comment by Mama — August 31, 2011 @ 10:07 am

  44. Could you pls. send me a code at rohit421991@hotmail.com.

    I tried to run my intuit Quick book Application in Microsoft Visual studio 2010 using C# but it gives me error
    An error requires the application to close:
    Logging File: CRITICAL
    Log File: c:\ProgramData\Intuit\QBSDK\log\MyTestApplicationLog.txt
    Exception Caught:
    Cannot create QBXMLRP2 COM component.

    Comment by Rohit Kesharwani — September 9, 2011 @ 11:37 am

    • Source code is on its way 🙂

      Comment by Mukarram Mukhtar — September 9, 2011 @ 2:01 pm

  45. This was an amazing article…a great help. Could you send me the source code?

    p2lundquist@hotmail.com

    Comment by Phillip Lundquist — October 31, 2011 @ 9:02 pm

  46. Really, very important and useful article for a developer. i appreciate your work.

    Please send the code on given email id.

    ranvir.singh@livialegal.com
    ranvirsen@rediffmail.com

    Thanks.

    Regards,

    Ranvir

    Comment by Ranvir — November 24, 2011 @ 2:34 pm

  47. Great Work You have done but i am not still getting connected to quick book where to add those reference files and namespaces to the application and i am working on quick book 2011-12 ore edition will this code work with that version or not.could you pls mail me the source code for help.
    my email id is
    anuj.thakur57@gmail.com
    Anuj Thakur
    thanks

    Comment by Anuj Thakur — November 30, 2011 @ 7:33 am

  48. Really working well, i try it with quickbooks 10.0 edition to add vendor and customer entry form and it working very well.
    i try it for Employee entry form but it throws an errors.

    Employee could not be added successfully.
    There was an error when saving a Employees list, element “”. QuickBooks error message: The name of the list element cannot be blank.

    if you have Employee entry form code Please send the code on given email id.

    you have solution for web based application.

    ranvir.singh@livialegal.com
    ranvirsen@rediffmail.com

    Thanks.

    Regards,
    Ranvir

    Comment by Ranvir — December 2, 2011 @ 12:46 pm

  49. Great set of articles on QuickBooks integration. I would like to adapt this to a VB version if possible. Could I please have a zip of the source? Much appreciated.
    timmy.stephani@gmail.com

    Comment by Tim — December 4, 2011 @ 12:55 am

    • You mistyped your e-mail address, Tim. I’m getting the following message:

      Sorry, we were unable to deliver your message to the following address.

      timmy.stephani@gmail.com

      Comment by Mukarram Mukhtar — December 5, 2011 @ 4:11 pm

  50. Its very good article, could ypu pls pass the sample application source code so that can see the complete workflow.

    Comment by Rvai — December 21, 2011 @ 9:14 am

  51. may I please have this code, thanks
    nguyenjg AT gmail.com

    Comment by jgnguyen — December 22, 2011 @ 3:40 pm

  52. Hi Mukarram,
    I try my level best to edit the vendor entry but still i am not getting the proper solution to edit the vendor.
    so can you help for it by sending the edit code on given email id.

    ranvir.singh@livialegal.com
    ranvirkuma@gmail.com

    Regards,
    Ranvir

    Comment by Ranvir — December 26, 2011 @ 12:37 pm

  53. Abe:
    Can you please forward that zip file of this application
    to my email. I would really appreciate for your help on this

    abe@wpsconsultingservices.com

    Thank you

    Comment by Abe — March 20, 2012 @ 1:13 pm

  54. Very good article. Could you please send me the source for both the: How to integrate Quick Books with .Net application
    and Quickbooks (Reloaded)

    Thanks
    Mike H

    Comment by Mike Hammers — April 9, 2012 @ 12:31 pm

  55. Thanks for a very nice article, could you please share your project files.

    Thanks,
    Purna.

    Comment by Purna Gaddam — April 18, 2012 @ 7:01 am

  56. I would be interested in the source if still available. kylermw [at] gmail [dot] com

    Comment by Kyler — April 20, 2012 @ 7:22 pm

  57. Kindly send me the code for exporting data into Quickbook on raj111sharp@gmail.com Thanks, – Raj

    Comment by Raj — May 3, 2012 @ 4:27 pm

  58. Very nice article. Can you please forward that zip file of this application
    to my email. I would really appreciate.

    temp@dmhone.com

    Thanks

    Comment by Mike — July 3, 2012 @ 8:23 pm

  59. Hi Sir,

    please provide the sample code for us

    my mail is vivek.pal@durlabhcomputers.com

    Comment by vivekpal — July 11, 2012 @ 3:21 pm

  60. thanks for sharing your knowledge. Could you please send me the source code to the following email. kajavatana@yahoo.co.uk
    thanks in advance

    Comment by kaja — August 7, 2012 @ 8:11 pm

  61. Thanks for a very nice article. Could you please send me the source for both the: How to integrate Quick Books with .Net application
    and Quick books (Reloaded)

    Thank you
    John B

    laser3g@manx.net

    Comment by John B — August 11, 2012 @ 12:27 pm

  62. Hi,this is indeed a good article.Can you send me a copy of the source code to;
    stevekaiy@gmail.com
    steve@kaiynetconsulting.com

    Comment by Steve Kagiri — August 15, 2012 @ 10:00 am

  63. Very interesting and I would like to intergrate with my database. Would you also send this source code? Thank you very much.

    Comment by Susette — November 2, 2012 @ 4:52 am

  64. I too need this source code.
    Please send it to me on meena01.acs@gmail.com
    Thanks in advance

    Comment by Meena Trivedi — November 16, 2012 @ 11:33 am

  65. Great Work. I would love to get the source Code. Kindly mail it to hoseki210@gmail.com

    Comment by Sunder — December 3, 2012 @ 6:24 pm

  66. Very interesting articles. I am trying to integrate a different language (WInDev) with QuickBooks and I have it working EXCEPT for the authorization parts using AuthPreferences from the InterOp.QBXMLRP2 Nothing makes sense to me there. Do you have any experience with AuthPreferences? If you do I would greatly appreciate it if you would contact me. spudman at wybatap.com thank you very much.

    Comment by Bob Roos — December 4, 2012 @ 1:58 am

  67. Great articule. Could you send the source code to jmorelos@softelligence.com.mx.

    Thanks!

    Comment by jmorelos — December 11, 2012 @ 8:10 pm

  68. Greetings! I’ve been reading your weblog for a while now and finally got the bravery to go ahead and give you a shout out from New Caney Texas! Just wanted to tell you keep up the good job!

    Comment by Wayne — December 13, 2012 @ 11:57 pm

  69. Hi, Can you please send the code to access QuickBooks from C# .NET app to: andreizilla@gmail.com

    Thank you,

    Comment by Andrei — March 27, 2013 @ 6:53 pm

  70. Thank you for your great article. Could you send the code to me?

    Comment by Paul — April 20, 2013 @ 12:11 am

  71. hi there,
    Trust all is well at your end. Well is it possible for you to share me the source code. Below is my email address
    nguyennx@gmail.com

    Comment by guruvn — May 8, 2013 @ 1:30 am

  72. Awesome! can you please send me copy of code?

    Thank you

    Comment by Alex Kay — May 18, 2013 @ 1:38 am

  73. Very nice article and great work. Please send code to me @ nnagasaibabu@live.com

    Thanks,
    Naga Sai

    Comment by Naga Sai Babu — June 10, 2013 @ 12:36 pm


RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Create a free website or blog at WordPress.com.

%d bloggers like this: