如何使用QuickBooks Online API v3中的Linq扩展获取客户的所有发票?

时间:2014-08-24 20:45:16

标签: linq intuit-partner-platform quickbooks-online

我想查询客户的所有发票。 SDK有一些LinqExtender扩展程序,因此可以认为您可以做(例如客户ID' 1'映射到现有客户):

CreateQueryService<IppData.Invoice>().Where(x => x.CustomerRef.Value = "1")

但是,这会生成以下SQL:

Select * FROM Invoice  WHERE CustomerRef.Value = '1'

这是禁区:

<IntuitResponse xmlns="http://schema.intuit.com/finance/v3" time="2014-08-24T13:41:04.367-07:00">
  <Fault type="ValidationFault">
    <Error code="4001">
      <Message>Invalid query</Message>
      <Detail>QueryValidationError: Property CustomerRef.Value not found for Entity Invoice</Detail>
    </Error>
  </Fault>
</IntuitResponse>

正确的SQL会读取:

Select * FROM Invoice WHERE CustomerRef = '1'

当然直接使用SQL并创建动态查询(eww)有效,但我希望有更好的方法。我喜欢Linq扩展的可读性和(希望)类型安全的好处,并且你认为这将是一件很常见的事情。不幸的是,文档是一个巨大的迷宫,严重缺乏任何有用的例子,所以:有没有人知道如何做到这一点,还是我们坚持使用字符串SQL?

3 个答案:

答案 0 :(得分:1)

是的,SDK具有Linq扩展程序扩展,但这没有按预期工作。 我为此提出了一个错误。 不幸的是,您必须使用常规查询操作。

答案 1 :(得分:1)

我使用不同的库,但使用CustomerRef作为字段,ID作为字符串最终正常工作。文档在这个

上并不是很清楚
{{1}}

答案 2 :(得分:0)

使用java,我完成了它并且它的工作正常一切:

 String query = select($(invoice))
                .where($(invoice.getCustomerRef().getClass().toGenericString()).eq("2"))
                .where($(invoice.getMetaData().getCreateTime()).gte(calendarStart.getTime()))
                .where($(invoice.getMetaData().getCreateTime()).lte(calendarEnd.getTime()))
                .skip(0).take(10).generate();
        QueryResult queryResultpage = service.executeQuery(query);