C# 如何使用QBO rest api v3.0添加采购订单

C# 如何使用QBO rest api v3.0添加采购订单,c#,.net,intuit-partner-platform,C#,.net,Intuit Partner Platform,我正在尝试发送使用Intuit.NET SDK v3创建的PurchaseOrder。我找到了一个发票的合适例子: 但我无法确定我需要做什么才能使其适用于采购订单。无论我设置什么属性,我都会收到错误请求 DataService commonService = new DataService(context); QueryService<Vendor> accountQueryService = new QueryService<Vendor&g

我正在尝试发送使用Intuit.NET SDK v3创建的PurchaseOrder。我找到了一个发票的合适例子:

但我无法确定我需要做什么才能使其适用于采购订单。无论我设置什么属性,我都会收到错误请求

        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();
DataService commonService=newdataservice(上下文);
QueryService accountQueryService=新的QueryService(上下文);
供应商客户=accountQueryService.Where(x=>x.Id==“9”).FirstOrDefault();
QueryService itemQueryService=新的QueryService(上下文);
Item=itemQueryService.Where(x=>x.Id==“1”).FirstOrDefault();
PurchaseOrder发票=新的PurchaseOrder();
invoice.VendorRef=新引用类型()
{
name=customer.DisplayName,
Value=customer.Id
};
/*invoice.APAccountRef=新引用类型()
{
type=Enum.GetName(typeof(objectNameEnumType),objectNameEnumType.Account),
name=“应收账款”,
Value=“QB:37”
};*/
List lineList=新列表();
行=新行();
line.Description=“Description”;
第行金额=新的小数点(100.00);
line.AmountSpecified=true;
//line.DetailType=LineDetailTypeEnum.DescriptionOnly;
//line.DetailTypeSpecified=true;
line.DetailType=LineDetailTypeEnum.PurchaseOrderItemLineDetail;
line.DetailTypeSpecified=true;
PurchaseOrderItemLineDetail det=新的PurchaseOrderItemLineDetail();
检测数量=10;
det.QtySpecified=true;
det.ItemRef=新引用类型()
{
名称=项。名称,
Value=item.Id
};
line.AnyIntuitObject=det;
lineList.Add(行);
invoice.Line=lineList.ToArray();
我试着在行中设置帐户并仅使用描述,但没有成功。如果我添加用上述代码创建的PurchaseOrder,我会收到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;
DataService commonService=newdataservice(上下文);
QueryService accountQueryService=新的QueryService(上下文);
供应商客户=accountQueryService.Where(x=>x.Id==“9”).FirstOrDefault();
QueryService itemQueryService=新的QueryService(上下文);
Item=itemQueryService.Where(x=>x.Id==“1”).FirstOrDefault();
PurchaseOrder发票=新的PurchaseOrder();
invoice.TxnDate=DateTime.Now;
invoice.txndaspecified=true;
invoice.Memo=“内部使用”;
invoice.GlobalTaxCalculation=globaltaxcalculationnum.taxclusive;
invoice.GlobalTaxCalculationSpecified=true;
invoice.ReplyEmail=新电子邮件地址();
invoice.ReplyEmail.Address=”testing@testing.com";
invoice.ReplyEmail.Default=false;
invoice.ReplyEmail.DefaultSpecified=true;
invoice.ReplyEmail.Tag=“主页”;
invoice.ShipAddr=新物理地址();
invoice.ShipAddr.Line1=“发货地址:2013年10月19日09:48:52”;
invoice.ShipAddr.Line2=“ShippingToAddress2日期:2013年10月19日09:48:52”;
invoice.ShipAddr.Line3=“发货至地址日期2013年10月19日09:48:52”;
invoice.ShipAddr.City=“班加罗尔”;
invoice.ShipAddr.Country=“印度”;
invoice.ShipAddr.countrysubsectioncode=“KA”;
invoice.ShipAddr.PostalCode=“560045”;
invoice.POEmail=新电子邮件地址();
invoice.POEmail.Address=”testing@testing.com";
invoice.POEmail.Default=true;
invoice.POEmail.DefaultSpecified=true;
invoice.POEmail.Tag=“业务”;
invoice.VendorRef=新引用类型()
{
name=customer.DisplayName,
Value=customer.Id
};
发票总金额=新的小数点(100.00);
invoice.TotalAmtSpecified=真;
invoice.APAccountRef=新引用类型()
{
//type=Enum.GetName(typeof(objectNameEnumType),objectNameEnumType.Account),
name=“应付账款(应付)”,
Value=“32”
};
List lineList=新列表();
行=新行();
第行金额=新的小数点(100.00);
line.AmountSpecified=true;
line.DetailType=LineDetailTypeEnum.AccountBasedExpenseLineDetail;
line.DetailTypeSpecified=true;
AccountBasedExpenseLineDetail det=新的AccountBasedExpenseLineDetail();
det.AccountRef=新引用类型()
{
name=“应付账款(应付)”,
Value=“32”
};
line.AnyIntuitObject=det;
/*PurchaseOrderItemLineDetail det=新的PurchaseOrderItemLineDetail();
检测数量=10;
det.QtySpecified=true;
det.ItemRef=新引用类型()
{
名称=项。名称,
Value=item.Id
};
line.AnyIntuitObject=det*/
lineList.Add(行);
invoice.Line=lineList.ToArray();
退货发票;
不幸的是,我仍然收到错误的请求

更新2

经过更多的测试,我发现由于APAccountRef属性,它会给出错误。不设置此属性也可以

另一个问题是,我试图在行中使用PurchaseOrderItemLineDetail。不确定此类型是否正确(基于名称,它看起来像一个),但使用此详细信息类型会导致BadRequest错误。使用ItemBasedExpenseLineDetail是一种变通方法

我将设置玛纳斯的答案为正确,因为它给了我进一步调查的方向。但是非常感谢尼米莎·施里瓦斯塔瓦为h
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<PurchaseOrder domain="QBO" xmlns="http://schema.intuit.com/finance/v3">
    <TxnDate>2013-10-19</TxnDate>
    <Line>
        <Amount>3.00</Amount>
        <DetailType>AccountBasedExpenseLineDetail</DetailType>
        <AccountBasedExpenseLineDetail>
            <AccountRef name="Accounts Payable (A/P)">32</AccountRef>
        </AccountBasedExpenseLineDetail>
    </Line>
    <VendorRef name="TestDataVendor926e8Sample1">1386</VendorRef>
    <TotalAmt>3.00</TotalAmt>
    <ReplyEmail>
        <Address>testing@testing.com</Address>
        <Default>false</Default>
        <Tag>Home</Tag>
    </ReplyEmail>
    <Memo>For Internal usage</Memo>
    <GlobalTaxCalculation>TaxInclusive</GlobalTaxCalculation>
    <ShipAddr>
        <Line1>shippingToAddr1Sat Oct 19 09:48:52 IST 2013</Line1>
        <Line2>shippingToAddr2Sat Oct 19 09:48:52 IST 2013</Line2>
        <Line3>shippingToAddr3Sat Oct 19 09:48:52 IST 2013</Line3>
        <City>Bangalore</City>
        <Country>India</Country>
        <CountrySubDivisionCode>KA</CountrySubDivisionCode>
        <PostalCode>560045</PostalCode>
    </ShipAddr>
    <POEmail>
        <Address>test@testing.com</Address>
        <Default>true</Default>
        <Tag>Business</Tag>
    </POEmail>
</PurchaseOrder>
PurchaseOrder purchaseOrder = new PurchaseOrder();
purchaseOrder.setVendorRef(this.vendorRef);
purchaseOrder.setMemo("For Internal usage");

Line line1 = new Line();
line1.setAmount(new BigDecimal("3.00"));
line1.setDetailType(LineDetailTypeEnum.ACCOUNT_BASED_EXPENSE_LINE_DETAIL);
AccountBasedExpenseLineDetail detail = new AccountBasedExpenseLineDetail();
ReferenceType expenseAccountRef = this.accountRef;
detail.setAccountRef(expenseAccountRef);
line1.setAccountBasedExpenseLineDetail(detail);

List<Line> lines1 = new ArrayList<Line>();
lines1.add(line1);
purchaseOrder.setLine(lines1);

EmailAddress emailAddr = new EmailAddress();
emailAddr.setAddress("test@testing.com");
emailAddr.setDefault(true);
emailAddr.setTag("Business");

purchaseOrder.setPOEmail(emailAddr);
//purchaseOrder.setDueDate(DateUtils.getDateWithNextDays(45));
purchaseOrder.setDomain("QBO");
//purchaseOrder.setExchangeRate(new BigDecimal("20.00")); 
purchaseOrder.setGlobalTaxCalculation(GlobalTaxCalculationEnum.TAX_INCLUSIVE);

EmailAddress replyEmail = new EmailAddress();
replyEmail.setAddress("testing@testing.com");
replyEmail.setDefault(false);
replyEmail.setTag("Home");
purchaseOrder.setReplyEmail(replyEmail);

PhysicalAddress shipAddr = new PhysicalAddress();
shipAddr.setLine1("shippingToAddr1" + DateUtils.getCurrentDateTime());
shipAddr.setLine2("shippingToAddr2" + DateUtils.getCurrentDateTime());
shipAddr.setLine3("shippingToAddr3" + DateUtils.getCurrentDateTime());
shipAddr.setCity("Bangalore");
shipAddr.setCountry("India");
shipAddr.setCountrySubDivisionCode("KA");
shipAddr.setPostalCode("560045");
purchaseOrder.setShipAddr(shipAddr);

//purchaseOrder.setStatus(EntityStatusEnum.IN_TRANSIT);
purchaseOrder.setTotalAmt(new BigDecimal("3.00"));
purchaseOrder.setTxnDate(DateUtils.getCurrentDateTime());

return purchaseOrder;
                                PurchaseOrder po = new PurchaseOrder();
                                po.ReplyEmail = new EmailAddress();
                                po.ReplyEmail.Address = "kalpana.kodavaluru@gmail.com";
                                po.ReplyEmail.Default = false;
                                po.ReplyEmail.DefaultSpecified = true;
                                po.ReplyEmail.Tag = "Home";

                                po.ShipAddr = new PhysicalAddress();
                                po.ShipAddr.Line1 = "shippingToAddr1Sat Oct 19 09:48:52 IST 2013";
                                po.ShipAddr.Line2 = "shippingToAddr2Sat Oct 19 09:48:52 IST 2013";
                                po.ShipAddr.Line3 = "shippingToAddr3Sat Oct 19 09:48:52 IST 2013";
                                po.ShipAddr.City = "Bangalore";
                                po.ShipAddr.Country = "India";
                                po.ShipAddr.CountrySubDivisionCode = "KA";
                                po.ShipAddr.PostalCode = "560045";

                                po.POEmail = new EmailAddress();
                                po.POEmail.Address = "testing@testing.com";
                                po.POEmail.Default = true;
                                po.POEmail.DefaultSpecified = true;
                                po.POEmail.Tag = "Business";

                                po.VendorRef = new ReferenceType()
                                {
                                    name = supplier.DisplayName,
                                    Value = supplier.Id
                                };
                                po.TotalAmt = new Decimal(100.00);
                                po.TotalAmtSpecified = true;

                                List<Line> lineList1 = new List<Line>();
                                Line line1 = new Line();
                                line1.Id = "1";
                                line1.Amount = new Decimal(100.00);
                                line1.AmountSpecified = true;

                                line1.DetailType = LineDetailTypeEnum.ItemBasedExpenseLineDetail;
                                line1.DetailTypeSpecified = true;
                                ItemBasedExpenseLineDetail det = new ItemBasedExpenseLineDetail();
                                det.ItemRef = new ReferenceType()
                                {
                                    name = item.Name,
                                    Value = item.Id
                                };

                                det.Qty = new decimal(1);
                                det.QtySpecified = true;

                                det.ItemElementName = ItemChoiceType.UnitPrice;
                                det.AnyIntuitObject = new decimal(100);
                                det.BillableStatus = new BillableStatusEnum();
                                line1.AnyIntuitObject = det;


                                lineList1.Add(line1);
                                po.Line = lineList1.ToArray();
                                try
                                {
                                    var podata=commonService.Add(po);
                                }
                                catch (Exception ex)
                                {
                                    throw ex;
                                }