У меня есть приложение, которое подключается к QuickBooks через QBFC13, загружает клиентов (просто имя, идентификатор и некоторые другие данные) и все известные адреса этих клиентов. Кажется, все это работает просто отлично, за исключением того, что нет GUID или другого уникального идентификатора, который, как я вижу, однозначно идентифицирует адрес. Так, например, заказчик меняет адрес в QuickBooks, мне нужно знать, какой изменился в приложении. Или я отправляю информацию в QuickBooks, используя идентификатор адреса, а не весь блок адресов 1-5. Я думал, что имя адреса будет уникальным, но это не так и может быть пустым. Непрактично и нецелесообразно отключать поля адреса. Этот GUID вообще существует? Я пропустил что-то действительно простое? Есть лучший способ это сделать? Документы QB ужасны!
Далее следует VBA, используемый для захвата клиентов и их адресов (некоторые фрагменты кода вырезаны для ясности).
Dim respType As IResponseType
Set respType = curResp.Type
If (respType.getValue = rtCustomerQueryRs) Then
Dim custList As ICustomerRetList
Set custList = curResp.Detail
Dim curCust As ICustomerRet
Dim i As Integer
Dim insSQL As String
For i = 0 To custList.Count - 1
insSQL = "INSERT INTO " & CustomerTableName _
& "(CustomerID, QBEditSequence, Name, PhoneNumber, EMailAddress) " _
& "VALUES " _
& "("
Set curCust = custList.GetAt(i)
If (curCust.Sublevel.getValue = 0) Then
insSQL = insSQL & "'" & curCust.ListID.getValue & "',"
insSQL = insSQL & "'" & curCust.EditSequence.getValue & "',"
insSQL = insSQL & "'" & Replace(curCust.Name.getValue, "'", "''") & "',"
If (Not curCust.Phone Is Nothing) Then
insSQL = insSQL & "'" & curCust.Phone.getValue & "',"
Else
insSQL = insSQL & "'',"
End If
If (Not curCust.Email Is Nothing) Then
insSQL = insSQL & "'" & curCust.Email.getValue & "');"
Else
insSQL = insSQL & "'');"
End If
accessDB.Execute insSQL
' Add Bill to address
If Not curCust.BillAddressBlock Is Nothing Then
If curCust.BillAddressBlock.Addr1 Is Nothing = False Then
rs.AddNew
rs!CustomerID = curCust.ListID.getValue
rs!AddressType = "B"
rs!Addr1 = curCust.BillAddressBlock.Addr1.getValue
If curCust.BillAddressBlock.Addr2 Is Nothing = False Then rs!Addr2 = curCust.BillAddressBlock.Addr2.getValue
If curCust.BillAddressBlock.Addr3 Is Nothing = False Then rs!Addr3 = curCust.BillAddressBlock.Addr3.getValue
If curCust.BillAddressBlock.Addr4 Is Nothing = False Then rs!Addr4 = curCust.BillAddressBlock.Addr4.getValue
If curCust.BillAddressBlock.Addr5 Is Nothing = False Then rs!Addr5 = curCust.BillAddressBlock.Addr5.getValue
rs.Update
End If
End If
' Add Shipping Addresses
Dim shpList As IShipToAddressList
Set shpList = curCust.ShipToAddressList
If Not shpList Is Nothing Then
Dim s As Integer
For s = 0 To shpList.Count - 1
Dim saddr As IShipToAddress
Set saddr = shpList.GetAt(s)
rs.AddNew
rs!CustomerID = curCust.ListID.getValue
rs!AddressType = "S"
rs!AddressName = saddr.Name.getValue
rs!IsDefault = saddr.DefaultShipTo.getValue
rs!Addr1 = saddr.Addr1.getValue
If saddr.Addr2 Is Nothing = False Then rs!Addr2 = saddr.Addr2.getValue
If saddr.Addr3 Is Nothing = False Then rs!Addr3 = saddr.Addr3.getValue
If saddr.Addr4 Is Nothing = False Then rs!Addr4 = saddr.Addr4.getValue
If saddr.Addr5 Is Nothing = False Then rs!Addr5 = saddr.Addr5.getValue
rs.Update
Next s
End If
End If
Next i
End If
End If