最近のプロジェクトで、受注、請求書、見積書の更新を自動化するためにQuickBooks Desktop (QBD)を統合したところ、予期せぬバグが発生しました。売上注文と請求書では税金の更新が問題なく動作しましたが、見積書では時々失敗しました。

このブログ記事では、問題、デバッグプロセス、および解決策について詳しく説明します。

問題

見積書の税額を更新しようとした場合、税金が計算されませんでした。さらに調査したところ、税金計算に不可欠なShipAddressフィールドとBillAddressフィールドがXMLレスポンスに含まれていないことがわかりました。

この問題は、売上注文や請求書では発生せず、税金計算は期待通りに動作していました。

根本原因

XMLリクエストペイロードとレスポンスを調べた結果、根本原因はXMLクエリで使用されているQuickBooks Desktop SDK (QBD SDK)のバージョンが古くなっていたことであることがわかりました。
 

  • QBXMLクエリフォーマットのバージョン5.0では、見積書のShipAddressまたはBillAddressフィールドを取得できません。
     

  • バージョン16.0(2024年現在の最新バージョン)では、これらのフィールドがサポートされています。

デバッグプロセス

リクエストとレスポンスの分析

バージョン5.0リクエストペイロード:

< ?xml version="1.0" encoding="utf-8"?>< ?qbxml version="5.0"?>
< QBXML>
    < QBXMLMsgsRq onError="stopOnError">
        < EstimateQueryRq>
            < TxnID>3F2-1735802902< /TxnID>
            < IncludeLineItems>true< /IncludeLineItems>
       < /EstimateQueryRq>
    < /QBXMLMsgsRq>
< /QBXML>

バージョン5.0レスポンス:

レスポンスには、重要なShipAddressフィールドとBillAddressフィールドがありませんでした。

< EstimateRet>
   ...
   < ShipAddress/>
   < BillAddress/>
< /EstimateRet>

QBXMLバージョンのアップグレード

クエリをバージョン16.0に更新することで、問題は解決しました。

< ?xml version="1.0" encoding="utf-8"?>< ?qbxml version="16.0"?>
< QBXML>
    < QBXMLMsgsRq onError="stopOnError">
        < EstimateQueryRq>
            < TxnID>3F2-1735802902< /TxnID>
            < IncludeLineItems>true< /IncludeLineItems>
        < /EstimateQueryRq>
    < /QBXMLMsgsRq>
< /QBXML>

バージョン16.0レスポンス: ShipAddressフィールドとBillAddressフィールドの両方がレスポンスに含まれるようになりました。

< EstimateRet>
   < ShipAddress>
      < Addr1>4320 Winfield Rd< /Addr1>
      < City>Warrenville< /City>
      < State>IL< /State>
      < PostalCode>60555< /PostalCode>
      < Country>USA< /Country>
   < /ShipAddress>
   < BillAddress>
      < Addr1>123 Example St< /Addr1>
      < City>Exampleville< /City>
      < State>EX< /State>
      < PostalCode>12345< /PostalCode>
      < Country>USA< /Country>
   < /BillAddress>
< /EstimateRet>

解決策

問題を解決するには、
 

  1. QBXMLバージョンの更新: XMLクエリペイロードをバージョン16.0に変更し、最新のQBD SDK機能との互換性を確保します。
     

  2. レスポンスの検証: 見積書のレスポンスにShipAddressフィールドとBillAddressフィールドの両方が含まれていることを確認します。

  教訓
 
  • 最新の状態を維持する: 統合作業を行う際には、常に最新のSDKとクエリ形式を確認してください。
     

  • 徹底的なデバッグ: ペイロードとレスポンスを比較することで、問題を段階的に解決します。
     

  • ドキュメントへの意識: 更新情報や変更点については、公式のQuickBooks SDKドキュメントを参照してください。