rest - 在 Acumatica 中使用 REST API 将数据提供程序和场景替换为代码

标签 rest acumatica acumatica-kb

我的任务是将 Acumatica 中的手动过程替换为使用 REST API 的自动化过程。我已阅读集成指南,但我不知道如何确定与我要替换的手动流程相匹配的端点。这是非常基本的,但我在我读过的文档中找不到答案。

这是手动过程:

(该过程有两个方面,导入同步和导出同步 - 但我现在只关注导出。)

1) 进入集成下的“导出方案”选项,选择“可用库存”方案 - 然后选择“准备并导出”。 2) 转到数据提供商并选择“AvailableInventory”提供商。然后从“同步”选项卡中选择“导出”。

最终结果是一个 CSV 文件,我将其导入到 POS 系统中。

因此,从 API 角度来看,我需要通过端点访问库存,并根据日期标准选择所有库存,然后将其写入 CSV 文件。

但是我如何知道要使用哪个端点,以及如何确保我正在收集我们在手动过程中使用数据提供程序和数据场景获取的 C# 代码中的所有数据?

我查过文档,但似乎找不到这个。

最佳答案

首先,您需要为按场景导出页面创建一个端点。 转到Web 服务端点 (SM207060) 页面并扩展任何现有端点。 添加新端点并将其映射到“按场景导出”页面。 enter image description here
添加场景的名称和状态作为参数。 enter image description here
准备和导出正在开始长时间操作,为了获取正确的文件,您需要执行获取请求并检查状态是否已完成。 在端点下添加操作并将其映射到图表的prepareExport操作。 enter image description here
添加场景名称作为操作的参数。 enter image description here

现在是采取行动的时候了。 下面是如何在“导出 AP 供应商”导出场景中调用我们的操作的示例代码。

var client = new RestClient("http://localhost/ACU19200/entity/DefaultExt/18.200.001/ExportByScenarios/prepareExport");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n\t\"entity\":{\n\t\t\"Name\" : {\"value\":\"Export AP Vendors\"}\n\t},\n\t\"parameters\":{\n\t\t\n\t}\n}",  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);

因此,如果一切处理正确,您将收到 202 响应代码。

现在我们需要检查场景是否有效以及文件是否已导出。

var client = new RestClient("http://localhost/ACU19200/entity/DefaultExt/18.200.001/ExportByScenarios/Export AP Vendors");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "",  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);

作为对此请求的响应,您将获得场景记录,如下所示:

{
    "id": "730d3b2c-d87f-e411-beca-00b56d0561c2",
    "rowNumber": 1,
    "note": "",
    "Name": {
        "value": "Export AP Vendors"
    },
    "Status": {
        "value": "Processed"
    },
    "custom": {},
    "files": [
        {
            "id": "9479c468-1cfa-4fb5-b8bd-30c10535e525",
            "filename": "Data Providers (Export AP Vendors)\\AP Export Vendor Template.xlsx",
            "href": "/ACU19200/entity/DefaultExt/18.200.001/files/9479c468-1cfa-4fb5-b8bd-30c10535e525"
        }
    ]
}

现在您需要从文件部分获取“id”并获取该文件

var client = new RestClient("http://localhost/ACU19200/entity/DefaultExt/18.200.001/files/9479c468-1cfa-4fb5-b8bd-30c10535e525");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "",  ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);

因此,您将获得 application/octet-stream 形式的文件。

关于rest - 在 Acumatica 中使用 REST API 将数据提供程序和场景替换为代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59997604/

相关文章:

c# - DNN Jwt 授权请求无法从 C# 桌面应用程序运行

javascript - 从 Confluence 调用自定义 REST API

asp.net - IIS 中的 HTTP 到 HTTPS 重定向

c# - 如何制作库存元素标签 (IN619200) 为收到的每件元素打印一个标签?

acumatica - 以编程方式生成报告

rest - 如何将参数作为 SOAP UI REST 请求中路径的一部分添加到 url?

SOAP 与 XML-RPC 或 REST 的性能比较

acumatica - 如何使 Acumatica 多行 PXGridColumn 显示新行?

acumatica - Excel文件生成-公开的API/方法?