Xbase++
Xbase++
Quickbooks Query an Invoice
See more QuickBooks Examples
Demonstrates how to query for invoices matching a SELECT statement via the Quickbooks REST API.Chilkat Xbase++ Downloads
LOCAL nSuccess
LOCAL oJsonToken
LOCAL oRest
LOCAL nBTls
LOCAL nPort
LOCAL nBAutoReconnect
LOCAL oSbAuth
LOCAL oSbResponseBody
LOCAL nRespStatusCode
LOCAL oJson
LOCAL cDocNumber
LOCAL cSyncToken
LOCAL cDomain
LOCAL cBalance
LOCAL cBillAddrCity
LOCAL cBillAddrLine1
LOCAL cBillAddrPostalCode
LOCAL cBillAddrLat
LOCAL cBillAddrLong
LOCAL cBillAddrCountrySubDivisionCode
LOCAL cBillAddrId
LOCAL cTxnDate
LOCAL cTotalAmt
LOCAL cCustomerRefName
LOCAL cCustomerRefValue
LOCAL cShipAddrCity
LOCAL cShipAddrLine1
LOCAL cShipAddrPostalCode
LOCAL cShipAddrLat
LOCAL cShipAddrLong
LOCAL cShipAddrCountrySubDivisionCode
LOCAL cShipAddrId
LOCAL cDueDate
LOCAL cPrintStatus
LOCAL nDeposit
LOCAL nSparse
LOCAL cEmailStatus
LOCAL nApplyTaxAfterDiscount
LOCAL cId
LOCAL nTxnTaxDetailTotalTax
LOCAL cMetaDataCreateTime
LOCAL cMetaDataLastUpdatedTime
LOCAL j
LOCAL nCount_j
LOCAL nLineNum
LOCAL cAmount
LOCAL cSalesItemLineDetailTaxCodeRefValue
LOCAL cSalesItemLineDetailItemRefName
LOCAL cSalesItemLineDetailItemRefValue
LOCAL cDetailType
LOCAL cDefinitionId
LOCAL cInvType
LOCAL cName
LOCAL nQueryResponseStartPosition
LOCAL nQueryResponseTotalCount
LOCAL nQueryResponseMaxResults
LOCAL cTime
LOCAL i
LOCAL nCount_i
nSuccess := 0
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// First get our previously obtained OAuth2 access token.
oJsonToken := CreateObject("Chilkat.JsonObject")
nSuccess := oJsonToken:LoadFile("qa_data/tokens/qb-access-token.json")
oRest := CreateObject("Chilkat.Rest")
nBTls := 1
nPort := 443
nBAutoReconnect := 1
nSuccess := oRest:Connect("sandbox-quickbooks.api.intuit.com", nPort, nBTls, nBAutoReconnect)
oSbAuth := CreateObject("Chilkat.StringBuilder")
oSbAuth:Append("Bearer ")
oSbAuth:Append(oJsonToken:StringOf("access_token"))
oRest:Authorization := oSbAuth:GetAsString()
// --------------------------------------------------------------------------
// Note: The above REST connection and setup of the AWS credentials
// can be done once. After connecting, any number of REST calls can be made.
// The "auto reconnect" property passed to rest.Connect indicates that if
// the connection is lost, a REST method call will automatically reconnect
// if needed.
// --------------------------------------------------------------------------
// This is a GET request, so there should be no Content-Type
// This line of code is just to make sure..
oRest:RemoveHeader("Content-Type")
oRest:AddHeader("Accept", "application/json")
oRest:AllowHeaderFolding := 0
// Add a SELECT statement
oRest:AddQueryParam("query", "select * from Invoice where id = '239'")
oSbResponseBody := CreateObject("Chilkat.StringBuilder")
nSuccess := oRest:FullRequestNoBodySb("GET", "/v3/company/<realmID>/invoice", oSbResponseBody)
IF (nSuccess != 1)
? oRest:LastErrorText
oJsonToken:destroy()
oRest:destroy()
oSbAuth:destroy()
oSbResponseBody:destroy()
RETURN
ENDIF
nRespStatusCode := oRest:ResponseStatusCode
IF (nRespStatusCode >= 400)
? "Response Status Code = " + Str(nRespStatusCode)
? "Response Header:"
? oRest:ResponseHeader
? "Response Body:"
? oSbResponseBody:GetAsString()
oJsonToken:destroy()
oRest:destroy()
oSbAuth:destroy()
oSbResponseBody:destroy()
RETURN
ENDIF
// Success is indicated by a 200 response status.
? "response status code = " + Str(nRespStatusCode)
oJson := CreateObject("Chilkat.JsonObject")
oJson:LoadSb(oSbResponseBody)
oJson:EmitCompact := 0
? oJson:Emit()
// Sample output:
// Use the this online tool to generate parsing code from sample JSON:
// Generate Parsing Code from JSON
// {
// "QueryResponse": {
// "startPosition": 1,
// "totalCount": 1,
// "maxResults": 1,
// "Invoice": [
// {
// "DocNumber": "1070",
// "SyncToken": "0",
// "domain": "QBO",
// "Balance": 150.0,
// "BillAddr": {
// "City": "Bayshore",
// "Line1": "4581 Finch St.",
// "PostalCode": "94326",
// "Lat": "INVALID",
// "Long": "INVALID",
// "CountrySubDivisionCode": "CA",
// "Id": "2"
// },
// "TxnDate": "2015-07-24",
// "TotalAmt": 150.0,
// "CustomerRef": {
// "name": "Amy's Bird Sanctuary",
// "value": "1"
// },
// "ShipAddr": {
// "City": "Bayshore",
// "Line1": "4581 Finch St.",
// "PostalCode": "94326",
// "Lat": "INVALID",
// "Long": "INVALID",
// "CountrySubDivisionCode": "CA",
// "Id": "109"
// },
// "LinkedTxn": [],
// "DueDate": "2015-08-23",
// "PrintStatus": "NeedToPrint",
// "Deposit": 0,
// "sparse": false,
// "EmailStatus": "NotSet",
// "Line": [
// {
// "LineNum": 1,
// "Amount": 150.0,
// "SalesItemLineDetail": {
// "TaxCodeRef": {
// "value": "NON"
// },
// "ItemRef": {
// "name": "Services",
// "value": "1"
// }
// },
// "Id": "1",
// "DetailType": "SalesItemLineDetail"
// },
// {
// "DetailType": "SubTotalLineDetail",
// "Amount": 150.0,
// "SubTotalLineDetail": {}
// }
// ],
// "ApplyTaxAfterDiscount": false,
// "CustomField": [
// {
// "DefinitionId": "1",
// "Type": "StringType",
// "Name": "Crew #"
// }
// ],
// "Id": "239",
// "TxnTaxDetail": {
// "TotalTax": 0
// },
// "MetaData": {
// "CreateTime": "2015-07-24T10:35:08-07:00",
// "LastUpdatedTime": "2015-07-24T10:35:08-07:00"
// }
// }
// ]
// },
// "time": "2015-07-24T10:38:50.01-07:00"
// }
nQueryResponseStartPosition := oJson:IntOf("QueryResponse.startPosition")
nQueryResponseTotalCount := oJson:IntOf("QueryResponse.totalCount")
nQueryResponseMaxResults := oJson:IntOf("QueryResponse.maxResults")
cTime := oJson:StringOf("time")
i := 0
nCount_i := oJson:SizeOfArray("QueryResponse.Invoice")
DO WHILE i < nCount_i
oJson:I := i
cDocNumber := oJson:StringOf("QueryResponse.Invoice[i].DocNumber")
cSyncToken := oJson:StringOf("QueryResponse.Invoice[i].SyncToken")
cDomain := oJson:StringOf("QueryResponse.Invoice[i].domain")
cBalance := oJson:StringOf("QueryResponse.Invoice[i].Balance")
cBillAddrCity := oJson:StringOf("QueryResponse.Invoice[i].BillAddr.City")
cBillAddrLine1 := oJson:StringOf("QueryResponse.Invoice[i].BillAddr.Line1")
cBillAddrPostalCode := oJson:StringOf("QueryResponse.Invoice[i].BillAddr.PostalCode")
cBillAddrLat := oJson:StringOf("QueryResponse.Invoice[i].BillAddr.Lat")
cBillAddrLong := oJson:StringOf("QueryResponse.Invoice[i].BillAddr.Long")
cBillAddrCountrySubDivisionCode := oJson:StringOf("QueryResponse.Invoice[i].BillAddr.CountrySubDivisionCode")
cBillAddrId := oJson:StringOf("QueryResponse.Invoice[i].BillAddr.Id")
cTxnDate := oJson:StringOf("QueryResponse.Invoice[i].TxnDate")
cTotalAmt := oJson:StringOf("QueryResponse.Invoice[i].TotalAmt")
cCustomerRefName := oJson:StringOf("QueryResponse.Invoice[i].CustomerRef.name")
cCustomerRefValue := oJson:StringOf("QueryResponse.Invoice[i].CustomerRef.value")
cShipAddrCity := oJson:StringOf("QueryResponse.Invoice[i].ShipAddr.City")
cShipAddrLine1 := oJson:StringOf("QueryResponse.Invoice[i].ShipAddr.Line1")
cShipAddrPostalCode := oJson:StringOf("QueryResponse.Invoice[i].ShipAddr.PostalCode")
cShipAddrLat := oJson:StringOf("QueryResponse.Invoice[i].ShipAddr.Lat")
cShipAddrLong := oJson:StringOf("QueryResponse.Invoice[i].ShipAddr.Long")
cShipAddrCountrySubDivisionCode := oJson:StringOf("QueryResponse.Invoice[i].ShipAddr.CountrySubDivisionCode")
cShipAddrId := oJson:StringOf("QueryResponse.Invoice[i].ShipAddr.Id")
cDueDate := oJson:StringOf("QueryResponse.Invoice[i].DueDate")
cPrintStatus := oJson:StringOf("QueryResponse.Invoice[i].PrintStatus")
nDeposit := oJson:IntOf("QueryResponse.Invoice[i].Deposit")
nSparse := oJson:BoolOf("QueryResponse.Invoice[i].sparse")
cEmailStatus := oJson:StringOf("QueryResponse.Invoice[i].EmailStatus")
nApplyTaxAfterDiscount := oJson:BoolOf("QueryResponse.Invoice[i].ApplyTaxAfterDiscount")
cId := oJson:StringOf("QueryResponse.Invoice[i].Id")
nTxnTaxDetailTotalTax := oJson:IntOf("QueryResponse.Invoice[i].TxnTaxDetail.TotalTax")
cMetaDataCreateTime := oJson:StringOf("QueryResponse.Invoice[i].MetaData.CreateTime")
cMetaDataLastUpdatedTime := oJson:StringOf("QueryResponse.Invoice[i].MetaData.LastUpdatedTime")
j := 0
nCount_j := oJson:SizeOfArray("QueryResponse.Invoice[i].LinkedTxn")
DO WHILE j < nCount_j
oJson:J := j
j := j + 1
ENDDO
j := 0
nCount_j := oJson:SizeOfArray("QueryResponse.Invoice[i].Line")
DO WHILE j < nCount_j
oJson:J := j
nLineNum := oJson:IntOf("QueryResponse.Invoice[i].Line[j].LineNum")
cAmount := oJson:StringOf("QueryResponse.Invoice[i].Line[j].Amount")
cSalesItemLineDetailTaxCodeRefValue := oJson:StringOf("QueryResponse.Invoice[i].Line[j].SalesItemLineDetail.TaxCodeRef.value")
cSalesItemLineDetailItemRefName := oJson:StringOf("QueryResponse.Invoice[i].Line[j].SalesItemLineDetail.ItemRef.name")
cSalesItemLineDetailItemRefValue := oJson:StringOf("QueryResponse.Invoice[i].Line[j].SalesItemLineDetail.ItemRef.value")
cId := oJson:StringOf("QueryResponse.Invoice[i].Line[j].Id")
cDetailType := oJson:StringOf("QueryResponse.Invoice[i].Line[j].DetailType")
j := j + 1
ENDDO
j := 0
nCount_j := oJson:SizeOfArray("QueryResponse.Invoice[i].CustomField")
DO WHILE j < nCount_j
oJson:J := j
cDefinitionId := oJson:StringOf("QueryResponse.Invoice[i].CustomField[j].DefinitionId")
cInvType := oJson:StringOf("QueryResponse.Invoice[i].CustomField[j].Type")
cName := oJson:StringOf("QueryResponse.Invoice[i].CustomField[j].Name")
j := j + 1
ENDDO
i := i + 1
ENDDO
oJsonToken:destroy()
oRest:destroy()
oSbAuth:destroy()
oSbResponseBody:destroy()
oJson:destroy()