Intuit .NET SDK v3 で作成された PurchaseOrder を送信しようとしています。請求書で適切な例を見つけました:請求書または売上領収書を追加する方法 Quickbooks rest api v3.0
しかし、発注書で機能させるために何をする必要があるのか わかりません。どのプロパティを設定しても、BadRequest を取得しています。
DataService commonService = new DataService(context);
QueryService<Vendor> accountQueryService = new QueryService<Vendor>(context);
Vendor customer = accountQueryService.Where(x => x.Id == "9").FirstOrDefault<Vendor>();
QueryService<Item> itemQueryService = new QueryService<Item>(context);
Item item = itemQueryService.Where(x => x.Id == "1").FirstOrDefault<Item>();
PurchaseOrder invoice = new PurchaseOrder();
invoice.VendorRef = new ReferenceType()
{
name = customer.DisplayName,
Value = customer.Id
};
/*invoice.APAccountRef = new ReferenceType()
{
type = Enum.GetName(typeof(objectNameEnumType), objectNameEnumType.Account),
name = "Account Receivable",
Value = "QB:37"
};*/
List<Line> lineList = new List<Line>();
Line line = new Line();
line.Description = "Description";
line.Amount = new Decimal(100.00);
line.AmountSpecified = true;
//line.DetailType = LineDetailTypeEnum.DescriptionOnly;
//line.DetailTypeSpecified = true;
line.DetailType = LineDetailTypeEnum.PurchaseOrderItemLineDetail;
line.DetailTypeSpecified = true;
PurchaseOrderItemLineDetail det = new PurchaseOrderItemLineDetail();
det.Qty = 10;
det.QtySpecified = true;
det.ItemRef = new ReferenceType()
{
name = item.Name,
Value = item.Id
};
line.AnyIntuitObject = det;
lineList.Add(line);
invoice.Line = lineList.ToArray();
アカウントを設定して、説明のみを行に使用しようとしましたが、成功しませんでした。上記のコードで作成された PurchaseOrder を追加すると、 Validation 例外が内部にある BadRequest エラーが発生します。
誰かが私をここで正しい方向に向けてください。おそらく PurchaseOrder プロパティが不足しています。
NuGet を使用して読み込まれた August V3 SDK を使用しています。
アップデート
これは、以下の Manas Mukherjee によって提案された XML の c# 翻訳です。
DataService commonService = new DataService(context);
QueryService<Vendor> accountQueryService = new QueryService<Vendor>(context);
Vendor customer = accountQueryService.Where(x => x.Id == "9").FirstOrDefault<Vendor>();
QueryService<Item> itemQueryService = new QueryService<Item>(context);
Item item = itemQueryService.Where(x => x.Id == "1").FirstOrDefault<Item>();
PurchaseOrder invoice = new PurchaseOrder();
invoice.TxnDate = DateTime.Now;
invoice.TxnDateSpecified = true;
invoice.Memo = "For Internal usage";
invoice.GlobalTaxCalculation = GlobalTaxCalculationEnum.TaxInclusive;
invoice.GlobalTaxCalculationSpecified = true;
invoice.ReplyEmail = new EmailAddress();
invoice.ReplyEmail.Address = "testing@testing.com";
invoice.ReplyEmail.Default = false;
invoice.ReplyEmail.DefaultSpecified = true;
invoice.ReplyEmail.Tag = "Home";
invoice.ShipAddr = new PhysicalAddress();
invoice.ShipAddr.Line1 = "shippingToAddr1Sat Oct 19 09:48:52 IST 2013";
invoice.ShipAddr.Line2 = "shippingToAddr2Sat Oct 19 09:48:52 IST 2013";
invoice.ShipAddr.Line3 = "shippingToAddr3Sat Oct 19 09:48:52 IST 2013";
invoice.ShipAddr.City = "Bangalore";
invoice.ShipAddr.Country = "India";
invoice.ShipAddr.CountrySubDivisionCode = "KA";
invoice.ShipAddr.PostalCode = "560045";
invoice.POEmail = new EmailAddress();
invoice.POEmail.Address = "testing@testing.com";
invoice.POEmail.Default = true;
invoice.POEmail.DefaultSpecified = true;
invoice.POEmail.Tag = "Business";
invoice.VendorRef = new ReferenceType()
{
name = customer.DisplayName,
Value = customer.Id
};
invoice.TotalAmt = new Decimal(100.00);
invoice.TotalAmtSpecified = true;
invoice.APAccountRef = new ReferenceType()
{
//type = Enum.GetName(typeof(objectNameEnumType), objectNameEnumType.Account),
name = "Accounts Payable (A/P)",
Value = "32"
};
List<Line> lineList = new List<Line>();
Line line = new Line();
line.Amount = new Decimal(100.00);
line.AmountSpecified = true;
line.DetailType = LineDetailTypeEnum.AccountBasedExpenseLineDetail;
line.DetailTypeSpecified = true;
AccountBasedExpenseLineDetail det = new AccountBasedExpenseLineDetail();
det.AccountRef = new ReferenceType()
{
name = "Accounts Payable (A/P)",
Value = "32"
};
line.AnyIntuitObject = det;
/*PurchaseOrderItemLineDetail det = new PurchaseOrderItemLineDetail();
det.Qty = 10;
det.QtySpecified = true;
det.ItemRef = new ReferenceType()
{
name = item.Name,
Value = item.Id
};
line.AnyIntuitObject = det;*/
lineList.Add(line);
invoice.Line = lineList.ToArray();
return invoice;
残念ながら、まだ BadRequest エラーが発生しています。
更新 2
さらにテストした後、 APAccountRef プロパティが原因でエラーが発生することがわかりました。このプロパティは設定しなくてもOKです。
もう 1 つの問題は、行で PurchaseOrderItemLineDetail を使用しようとしたときに発生しました。このタイプが正しいかどうかはわかりませんが (名前に基づいてそのように見えます)、この詳細タイプを使用すると BadRequest エラーが発生します。ItemBasedExpenseLineDetail を使用すると回避できます。
さらに調査する方向性を示したので、マナの回答を正解として設定します。しかし、ロギングを手伝ってくれた Nimisha Shrivastava に大いに感謝します。