4D QuickBooks Integrator - FAQ
Yes, through the use of the 4D Connector. The 4D Connector is a distributable utility that acts as a specialized web server, listening for requests from the components, and issuing those same requests to the request processor in QuickBooks, just as the 4D QuickBooks Integrator does. The application needs only one additional line of code to instruct the object to communicate with the 4D Connector (The setting of the QBConnectionString property).
QuickBooks does not need to be running when the request arrives, but the request processor will launch QuickBooks as a background process if it is not already running. You will need only to configure the QuickBooks Integrator with the location of the company file (via the QBConnectionString property) to read if you would like to communicate with QuickBooks when it is not running.
We support QuickBooks Desktop Editions 2002 or higher, the Pro Edition or higher (this includes specialized editions such as the Accountant Edition, Contractor Edition, Nonprofit Edition, etc.), U.S. or Canadian version. The request processor is not available in earlier editions of QuickBooks or in QuickBooks Basic Edition. We also support QuickBooks Enterprise Solutions.
We communicate with QuickBooks over a communication layer Intuit has exposed in certain versions of QuickBooks called QBXML. A request processor in QuickBooks listens for communications over QBXML and responds to requests from the QuickBooks Integrator. The outgoing and incoming XML data is mapped to an object so that key information (i.e. a customer’s name, an invoice reference number, etc.) can be easily set or retrieved.
The QuickBooks Integrator only supports the Desktop edition of QuickBooks. QuickBooks Online has a separate API that is not currently supported.
A persistent connection to QuickBooks can be opened using the OpenQBConnection method. This will do one of two things:
- If a URL is not specified in the QBConnectionString, the component will open a persistent connection to QuickBooks. The connection can only be used by that instance of the object.
- If a URL is specified in the QBConnectionString, the component instructs the 4D Connector to open a persistent connection to QuickBooks. Multiple instances of the components can pass through the 4D Connector using the 4D Connector’s persistent connection. The 4D Connector’s connection is maintained until a call to CloseQBConnection is made by any of the components using the 4D Connector, or the 4D Connector application is terminated.
I keep getting Error 661: "Automatic login access denied".
You have to enable Automatic Login from within QuickBooks itself. From Edit|Preferences, select the Integrated Applications tab. Under Company Preferences, you will see the list of applications that have tried to access QuickBooks before. You can allow or deny access to these applications, and under the Properties button, you can enable automatic login for an application.
Yes. The QBXML layer is the same as that of QuickBooks Premier Edition, and is supported by QuickBooks Integrator.
Unfortunately, no. QuickBooks Point of Sale implements a separate SDK that is not currently supported by the QuickBooks Integrator.
QuickBooks Simple Start requires different connection settings than the other desktop editions of QuickBooks, and only supports a limited subset of the QuickBooks SDK. Because of this, Intuit does not allow COM connections to Simple Start unless certain connection flags are set. These connection flags are available using the "AuthFlags" configuration setting of the components. Setting this to "1" will enable connecting to Simple Start.
Yes. These are variants of the Premier Edition of QuickBooks, and are supported by QuickBooks Integrator.
Unfortunately, we do not officially support the non-U.S., non-Canadian versions of QuickBooks as Intuit does not officially support qbXML for these editions. As Intuit does not publish the qbXML documentation for these editions, we have no way of knowing what is required by requests issued to these editions.
That said, as long as the localization does not significantly alter the qbXML layer, you should be able to perform most functionality with the components, as long as you set the QBXMLVersion to match the edition of QuickBooks that you wish to support (i.e. "UK2.0" for the UK edition, "OZ2.0" for the Australian edition).
QuickBooks requires that you set an ID and an EditSequence for all modification requests. These fields are kept by QuickBooks internally, but you can query QuickBooks for them. The easiest way to do this for all entity objects (Customer, Vendor, Employee, Item, etc) is to use the GetByName method. After it returns, the object will be populated with the Id and EditSequence fields that are needed for modifications, and you’ll only need to set those properties that need to be modified before performing the update. For transactions (like Bills and Invoices), you do not have a GetByName method, and you should use ObjSearch to issue the request and pass the resulting aggregate to an instance of the corresponding object.
QuickBooks has particular requirements for connecting in Vista
First, open QuickBooks directly. From the Edit->Preferences menu select Integrated Applications. From there, remove the existing applications listed. Then, with QuickBooks still open try running your code. QuickBooks should pop up to confirm with you that you’re granting access to the connecting application. After you grant access, close QuickBooks and try to run your code again.
Note that currently, the only release of QuickBooks supported on Windows Vista is QuickBooks 2007 or 2008. However, in order for integrated applications to work with QuickBooks, the latest service updates must be applied to QuickBooks 2007 (at least the R5 patch). In addition, UAC must be turned on and neither QuickBooks nor the connecting application must be run under elevated permissions as "Administrator".
Unfortunately, you cannot add non-wage payroll items into QuickBooks or add existing non-wage payroll items for an employee. You can add wage payroll items (i.e. Salary, Hourly Rate, etc.) with our QBObject component, but the best you can do for non-wage items is to query what they are. Unfortunately, we are limited in this case by what Intuit has exposed for payroll.