【问题标题】:Acumatica REST API Endpoint Action Call failsAcumatica REST API 端点操作调用失败
【发布时间】:2019-10-19 08:00:45
【问题描述】:

** 注意:任何批评 Acumatica 的 StackOverflow 问题都会被否决。

我正在尝试让 REST Web-Service-Endpoint Action 工作。

扩展默认端点,我添加了一个 Action CreateShipmentAction。

URL: .../17.200.001/SalesOrder/CreateShipmentAction
SEND: {'entity':{'OrderNbr':{'value':'ME050225'},'OrderType':{'value':'SO'}},'parameters':{'value':null}}
METHOD: post

这很好用。

按照相同的过程,我将 CancelPurchaseOrderAction 添加到采购订单。

URL: .../17.200.001/PurchaseOrder/CancelPurchaseOrderAction
SEND: {'entity':{'OrderNbr':{'value':'ME006802'},'OrderType':{'value':'DP'}},'parameters':{'value':null}}
METHOD: post

失败并显示“取消订单按钮已禁用”。手动检查 PurchaseOrder,通过网站激活 Cancel-Order 按钮。

如果我将“实体”OrderNbr 更改为

SEND: {'entity':{'OrderNbr':{'value':'xxxME006802'},'OrderType':{'value':'DP'}},'parameters':{'value':null}}

不应该匹配任何东西,我得到同样的错误。就像我的 PurchaseOrder 的“实体”格式不正确。

我会在 Acumatica 文档中查找 PurchaseOrder 的“实体”的必要格式,但我找不到任何文档。 VIEW_ENDPOINT_SERVICE 文档也没有说明这一点,我认为他们应该这样做(否则,如果没有定义参数,为什么要有 API...)

【问题讨论】:

  • 您能否通过将它们的定义添加为图像来向我们展示如何在端点中定义这两个操作?
  • 添加了定义图像。添加动作非常简单。这些是在适当的端点操作区域(SalesOrder、PurchaseOrder)下定义的。如果我能猜出正确的实体数据字段,我可以让其他端点操作(默认和添加)起作用。只是不是采购订单。 2018R1 版本。
  • 我能注意到的唯一区别是 SalesOrder 已经定义了操作。我只是加了一些。 PurchaseOrder 没有操作,所以我创建的是第一个。
  • > 任何批评 Acumatica 的 StackOverflow 问题都将被否决 - 您的问题看起来很完整并且很好地组合在一起,如果您可以忽略它,请不要让该投票系统影响您的工作流程。跨度>

标签: rest api action acumatica endpoint


【解决方案1】:

可以肯定的一点是,在处理 Acumatica Web Service 时,您还需要处理浏览器中的屏幕。

Web 服务只能做在屏幕上可以做的事情。

那么,如果您进入采购订单屏幕并查看记录,是否启用了取消订单按钮?

我在测试时注意到,对于销售订单和采购订单,相同的步骤不会启用这两个操作。至少使用安装程序提供的销售演示数据时的默认设置。

对于销售订单,该记录只需不为“暂挂”即可启用“创建发货”操作。

虽然对于采购订单,您不仅不需要“暂停”,还需要在启用取消按钮之前使用批准操作。

如果我在完成这些操作之前使用取消订单操作,我会遇到与您在问题中提到的相同的错误,但一旦完成这些步骤,我就能够正确地取消订单。

我使用的请求是遵循

  • 销售订单
.../entity/DefaultPlus/17.200.001/SalesOrder/CreateShipmentAction
{
    "entity":
    {
        "OrderType":{"value":"SO"},
        "OrderNbr":{"value":"SO004264"}
    },
    "parameters":
    {
        "ShipmentDate":{"value":"06/05/2019"},
        "WarehouseID":{"value":"RETAIL"}
    }
}
  • 采购订单
.../entity/DefaultPlus/17.200.001/PurchaseOrder/CancelPurchaseOrderAction
{
    "entity":
    {
        "Type":{"value":"Normal"},
        "OrderNbr":{"value":"PO000701"}
    }
}

【讨论】:

  • 你说的很对。问题是,如果“实体”不存在,Acumatica 会响应“未启用按钮”而不是“未找到实体”,这使程序员认为对象的状态有问题,正如您在此答案中所解释的那样。
  • 在执行动作的情况下,如果没有找到实体,它将尝试在空白记录上执行动作,就像您刚刚单击了新按钮一样。
【解决方案2】:

此问题是 Acumatica 字段不一致。

虽然 PurchaseOrder 的网站 URL 有

?ScreenId=PO301000&OrderType=DP&OrderNbr=ME006802

让人认为 REST Action API 调用的“实体”字段是

{OrderNbr:{value:"ME006802"},OrderType:{value:"DP"}}

实际上是(注意 OrderType 现在只是具有不同值的类型)

{OrderNbr:{value:"ME006802"},Type:{value:"Drop Ship"}}

对 Acumatica 的 REST API 进行编程就像 Whack-A-Mole.... 随机尝试不同的事情(因为没有文档),希望可以幸运地工作....

【讨论】:

  • 它是“类型”,因为它在 PurchaseOrder->Fields 选项卡中设置为“类型”。您可以扩展端点和实体,并使用您想要的任何名称添加该字段。
  • @SamvelPetrosov 你是对的。这就是我最终解决它的方法。我应该如何确定在显示的 16 个字段中,此操作的“实体”定义中需要此字段?希望我只是不知道正确的文档在哪里。
  • 订单类型和订单编号是采购订单记录的关键字段,它们是任何操作所必需的,因为如果不知道这两个字段,您就无法确定采购订单记录。
  • @SamvelPetrosov 一个刚接触 Acumatica 的程序员怎么会知道 Order-Type(只是 PurchaseOrder->Fields 中的“Type”)和 Order-Number 是关键字段?在我的 Acumatica 中,无论 Order-Type 是什么,Order-Number 都是唯一的,因此人们会假设 Order-Type 不是键,但它确实是。只有了解数据库记录结构内部工作的程序员才会知道 Order-Type 是一个键。文档中有记录键列表吗?
  • 如果您在 Acumatica 中有定制员角色,您可以 Ctrl+Alt + 单击订单号字段,例如在出现的模式中从操作中选择查看数据类源。在较新版本的 Acumatica 中,有一个名为 Keys 的区域显示关键字段。在旧版本中,您可以遍历区域并查看 IsKey = true
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-31
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多