3

QuickBooksに支払いが表示されません。

顧客を正常に作成および更新できます。請求書を正常に作成および更新することもできます。支払いを作成できません。ただし、PaymentオブジェクトでUpdateコマンドを実行すると、適切なIDとドメイン(NG)が返されます。同期の実行後に同期ログファイル(IntuitSyncManagerLogger.log)を確認しましたが、エラーメッセージが表示されません。QuickBooksの請求書に関連する支払いはありません。

必須フィールドはすべて設定していると思いますが、そのうちの2つについてはよくわかりません。

1)PaymentLineにはTxnIdという名前のフィールドがあります。InvoiceHeaderのIDとドメインに設定していますが、これが正しいかどうかはわかりません。

2)別の必須フィールド(ドキュメントによる)がありますが、何を入力すればよいかわからないため、空白のままにしておきます。これはDiscountAccountIdフィールドです。請求書に関連付けられた割引は必要ありません。

これが私のコードです...

SqlConnection connection = new SqlConnection(m_connectionString);
connection.Open();

SqlCommand cmd = new SqlCommand("dbo.Intuit_GetPayment", connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@glmvSyncId", SqlDbType.Int).Value = glmvSyncId;

SqlDataReader rdr = cmd.ExecuteReader();
rdr.Read();

Intuit.Ipp.Data.Qbd.PaymentHeader paymentHeader = new Intuit.Ipp.Data.Qbd.PaymentHeader();
paymentHeader.ARAccountId = new Intuit.Ipp.Data.Qbd.IdType() {
    idDomain = Intuit.Ipp.Data.Qbd.idDomainEnum.QB,
    Value = "37"
};
paymentHeader.ARAccountName = "Accounts Receivable";
paymentHeader.DepositToAccountId = new Intuit.Ipp.Data.Qbd.IdType() {
    idDomain = Intuit.Ipp.Data.Qbd.idDomainEnum.QB,
    Value = "35"
};
paymentHeader.DepositToAccountName = "Undeposited Funds";
paymentHeader.CustomerId = new Intuit.Ipp.Data.Qbd.IdType() {
    idDomain = (rdr["cust_iddomain"].ToString() == "QB" ? Intuit.Ipp.Data.Qbd.idDomainEnum.QB : Intuit.Ipp.Data.Qbd.idDomainEnum.NG),
    Value = rdr["cust_idvalue"].ToString()
}; // cust_iddomain and cust_idvalue are from the Customer
paymentHeader.DocNumber = rdr["invoicekey"].ToString();
paymentHeader.TxnDate = DateTime.Now; 

List<Intuit.Ipp.Data.Qbd.PaymentLine> listLine = new List<Intuit.Ipp.Data.Qbd.PaymentLine>();

var paymentLine = new Intuit.Ipp.Data.Qbd.PaymentLine();
paymentLine.Amount = Convert.ToDecimal(rdr["amount"]);
paymentLine.TxnId = new Intuit.Ipp.Data.Qbd.IdType() {
    idDomain = (rdr["invc_iddomain"].ToString() == "QB" ? Intuit.Ipp.Data.Qbd.idDomainEnum.QB : Intuit.Ipp.Data.Qbd.idDomainEnum.NG),
    Value = rdr["invc_idvalue"].ToString()
}; // invc_iddomain and invc_idvalue are from the InvoiceHeader

listLine.Add(paymentLine);

Intuit.Ipp.Data.Qbd.Payment syncPayment = new Intuit.Ipp.Data.Qbd.Payment();
syncPayment.Header = paymentHeader;
syncPayment.Line = listLine.ToArray();

connection.Close();

Intuit.Ipp.Data.Qbd.Payment resultPayment = new Intuit.Ipp.Data.Qbd.Payment();

resultPayment = commonService.Add(syncPayment);

問題はTxnIdにあると思います。

私がしているのは、顧客を作成し、次に顧客の請求書を作成し、次に請求書の支払いを作成することだけです。どこかにオブジェクトがありませんか?

ありとあらゆる助けを大いに感謝します。

4

2 に答える 2

1

次のコード行を追加すると、問題が解決したようです。支払いは現在、QuickBooks に記録されています。

paymentHeader.TotalAmt = Convert.ToDecimal(rdr["amount"]);
paymentHeader.TotalAmtSpecified = true;
于 2013-02-14T20:22:04.877 に答える
1

同期後に支払いがエラー状態になる可能性があります。PaymentQuery を実行し、ErroredObjectsOnly=true を設定することで確認できます。

https://ipp.developer.intuit.com/0010_Intuit_Partner_Platform/0050_Data_Services/0500_QuickBooks_Windows/0100_Calling_Data_Services/0015_Retrifying_Objects#Objects_in_Error_State

エンティティがエラー状態にある場合は、ステータス API を使用して特定の理由を照会できます。

https://ipp.developer.intuit.com/0010_Intuit_Partner_Platform/0050_Data_Services/0500_QuickBooks_Windows/0600_Object_Reference/SyncStatus

SyncStatusRequest syncStatusRequest = new SyncStatusRequest();
syncStatusRequest.ErroredObjectsOnly = true;
syncStatusRequest.NgIdSet = new NgIdSet[] { new NgIdSet { NgId = <<EnterYourNgIdHere>>, NgObjectType = objectName.Payment } };
SyncStatusResponse[] response = dataServices.GetSyncStatus(syncStatusRequest);

支払いがエラー状態の場合、エンティティは QuickBooks と同期されていないため、クラウドから削除できます。

https://ipp.developer.intuit.com/0010_Intuit_Partner_Platform/0050_Data_Services/0500_QuickBooks_Windows/0100_Calling_Data_Services/Deleting_an_Object

エンティティとの同期が少なくとも 1 回は成功したが、更新によってエンティティがエラー状態になった場合は、元に戻す必要があります。

https://ipp.developer.intuit.com/0010_Intuit_Partner_Platform/0050_Data_Services/0500_QuickBooks_Windows/0100_Calling_Data_Services/Reverting_an_Object

Status API から理由がわかったら、エラー状態のエンティティに対して直接 Update を実行することもできますが、文書化されていないため、機能しない可能性があります。

于 2013-02-13T21:52:51.037 に答える