【问题标题】:Determine Correct JSON Fields for REST API based on Endpoint and Screen names (Customers & Sales Orders) - Acumatica根据端点和屏幕名称(客户和销售订单)确定 REST API 的正确 JSON 字段 - Acumatica
【发布时间】:2020-03-09 14:06:02
【问题描述】:

我的项目是导入客户和销售订单。我从外部程序中获取一个 CSV 文件,并将它们逐个字段地导入到销售订单和客户中。

我的挑战是确定正确的字段名称以使 REST API 正常工作。

我有以下字段:

我希望包括三个字段:描述、礼品信息和公众评论。我检查了这个元素,这没有给我任何有用的信息。 (即,没有任何值映射到我将在 JSON 中使用的字段名称。)

当我转到客户终端时,描述已经存在:

因此,此 JSON 记录在 ADD 或 UPDATE 中成功:

{
    "OrderNbr"  : {"value": "SO003525"},
    "Description"  : {"value": "This is the Description"},
}

我扩展了默认客户(版本 18.200.001),我找到并添加了“礼品说明”和“公众评论”——它们被列为“订单摘要”的一部分——这正是描述是。

但是,此 JSON 数据确实向 Gift 或 Public 添加了任何内容:

{
    "OrderNbr"  : {"value": "SO003525"},
    "Description"  : {"value": "This is the Description"},
    "PublicComment"  : {"value": "This is the Public Comment"},
    "GiftMessage": { "value": "This is the Gift Message"},
}

在与设置屏幕的(内部)开发人员交谈时,他告诉我添加了“礼物消息”和“公众评论”字段。但它们没有在端点中显示为“用户定义”字段。

问题:

1) 我如何知道 JSON 结构应该是什么样子?是否有某种映射文档或显示 JSON 到端点数据的打印输出?我的意思是有时我需要使用子对象来引用JSON中的数据,例如,如果我想更新“主要联系人”信息,我会这样做:

{
 "CustomerClass":{"value":"INDIVIDUAL"},
 "CustomerID":{"value":"78577"},
 "CustomerName":{"value":"TEST CUSTOMER "},
 "MainContact":
   {
     "CompanyName":{"value":"TEST CUSTOMER COMPANY"},  
     "DisplayName":{"value": "TEST CUSTOMER DISPLAY"}, 
   }
}

我怎么知道该怎么做? (我之所以知道,只是因为我在添加记录时返回的数据中看到了它……这就引出了第二个问题:

2) 有没有办法以 JSON 格式检索整个数据记录。有点像:“GET - SELECT ALL - EXPAND ALL”,所以我可以以正确设置的 JSON 格式查看记录中的所有数据?

3) 知道为什么礼物消息和公众评论显示为“订单摘要”但没有像描述那样更新吗?

4) 为什么有些东西是“不可扩展的”?例如,我无法展开销售订单中的付款。我收到一个错误:

【问题讨论】:

  • 由于数据源是 .CSV 文件,您是否有理由不为此使用导入方案?
  • @JerryKurtz:有趣的问题。我还没有看到通过 API 调用导入场景的方法。你能指点我吗?
  • 对不起,不是我的意思。我想我只是想知道你为什么要使用 REST API 来完成这项任务,而不是仅仅使用简单的导入场景?
  • 啊……该死的,我以为你知道这样做的方法!对于您的问题,有两个原因:首先,对 CSV 文件值进行了操作。其次,我们希望在预定的时间间隔内完成此操作,这意味着我们不希望用户必须对其进行初始化。

标签: rest acumatica acumatica-kb


【解决方案1】:

1) 我如何知道 JSON 结构应该是什么样的

最简单的方法是执行 GET 请求。字段名称等同于去掉空格的DisplayName 属性。因此,如果屏幕上的字段标记为 Order Type,则请求中的字段名称将是 OrderType

要发出 GET 请求,URL 格式为/Entity/Keys

例如实体 SalesOrder 有两个键:OrderTypeOrderNbr

要获取SO 类型的实体SalesOrder 和编号为SO005051 的URL 将以:/SalesOrder/SO/SO005051 结尾。

2) 有没有办法在其 JSON 中检索整个数据记录 格式。有点像:“GET - SELECT ALL - EXPAND ALL”所以我可以看到 以正确设置的 JSON 格式记录的所有数据?

如果您想要所有详细信息,则需要在 GET 查询的扩展子句中全部指定:$expand=Contacts,MainContact,BillingContact

可以在Web Service Endpoint 屏幕SM207060 中查找详细信息数组的名称。它们是具有空数组[] 后缀的树视图元素。

3) 知道为什么礼物消息和公众评论显示为 “订单摘要”但没有像描述那样更新?

这些是自定义字段。您需要扩展端点以添加这些自定义字段,否则它们将被忽略。如果自定义端点没有问题,则该字段可能未绑定到数据库。

但它们没有在端点中显示为“用户定义”字段。

如果User Defined 是指这些字段是通过向导添加的(无需编程),那么这可能是它们在 Web 服务中不起作用的原因。您需要添加带有 DAC 扩展的自定义字段,这需要编程而不是用户定义字段。

【讨论】:

  • 但是,MainComment 不是一个数组。为什么是可扩展的?当一个数组没有数据时,我会得到一个空白(即扩展 Shipments 返回:“Shipments”:[])——我想知道 Shipments 中有哪些字段可用,这样我就可以有一个 Master JSON 类来显示所有可能的字段。那有意义吗? (您也可以查看我的问题的更新,显示我根本无法展开付款)
  • 有很多方法可以构建字段列表,对 Shipment 实体的 GET 请求就是其中之一。您也可以只转到 Web 服务端点屏幕中 Shipment 实体的 Fields 选项卡。当没有详细数据(空)时,您会得到一个空数组。当系统说你不能扩展(因为优化)时,你就不能扩展。
  • MainContact 是与客户不同的实体,它是客户的联系实体。它不是可扩展的详细信息数组。在响应中,您将在展开它而不是数组时获得单个实体 {}。另请注意,通常最好不要使用所有字段,而是使用 select 子句限制它们以减少慢速 Internet 上的开销。
  • 我了解限制字段的必要性。我想要得到的是我所说的映射文档。我有来自 POS 系统的字段。我想知道我在 Acumatica 接收它们的所有地方。我不希望每次都使用所有字段。我只是想建立一个主映射文档以供参考。我的感觉是这样的事情不存在。
  • 所有字段都在“字段”选项卡的“Web 服务端点”页面中配置。我不明白你怎么能断定它不存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
  • 2021-12-11
  • 1970-01-01
  • 2020-06-15
相关资源
最近更新 更多