首页 > 解决方案 > 无需 API 调用即可导出 Acumatica 数据

问题描述

我想将 Acumatica 实例中的库存商品作为数据合约导出,但不调用 API。我不想调用 API,因为我需要从实例内部而不是实例外部检索它。我认为我真正需要的只是一种调用基于合同的代码以序列化为 JSON 的方法,但不使用 URL。我想我可以在同一个实例中调用 API,但它似乎应该比这更容易。

标签: acumatica

解决方案


严格来说,您想要进行 API 调用。特别是使用“基于合同的 API”而不使用“Web 服务 API”。这似乎违背了基于契约的 API 的设计目标。

考虑以下陈述: 基于契约的 API 建立在 Web 服务 API 提供的对象模型之上。 资料来源: https ://adn.acumatica.com/blog/yes-we-have-an-api-for-that-an-introduction-to-the-acumatica-cloud-erp-apis/

Web 服务 API 提供了基于契约的 API 的对象模型。移除等式的 Web 服务 API,基于契约的 API 缺少对象序列化所依赖的对象模型。实际上,这意味着处理基于契约的序列化的方法将需要 Web 服务对象模型作为输入参数。

我相信在不使用 TCP-IP 堆栈的情况下会存在一些阻止 Web 服务对象模型实例化的技术障碍。这主要是因为基于契约的 API 最初的设计目标是通过 Web 服务调用。

这归结为 Acumatica 对不同的上下文使用不同的对象模型。基于合同的使用“实体”模型,而定制使用“DAC”模型。查询 API 也有很大的不同。定制使用 BQL 和基于合同的其他方法。

拥有统一的对象模型有明显的优势。学习只使用一种比必须学习两种更容易。仅使用 JSON 比混合和转换 XML 和 JSON 更容易。然而,每个模型也有其缺点。拥有不同的模型允许使用更适合手头任务的模型。对象模型的常见要求是性能、人类可读性、内存占用、易于机器解析的能力等。

也就是说,如果您只需要基于合约的 API 的对象模型而没有查询接口,您可以通过使用 BQL 并将 DAC 对象序列化为 JSON 来近似它。因为几乎所有 DAC 对象都具有 C# Serializable 属性,所以序列化使用 BQL 检索到的 DAC 对象应该比使用数据协定 API 检索和序列化记录更容易,而无需通过 TCP-IP 堆栈。它也将与 API 的设计目标朝着相同的方向发展,即基于合同的 API 应该用于通过 Web 服务进行访问。


推荐阅读