通过基于 REST 契约的 API 导出记录

要与 Acumatica ERP 的基于 REST 契约的 API 通信,你的客户端应用程序必须始终执行以下 3 个步骤:

  1. 登录 Acumatica ERP 实例并获取用户会话信息的 cookie

  2. 与 Acumatica ERP 实例上提供的基于合同的 API 端点之一进行交互

  3. 从 Acumatica ERP 退出以关闭用户会话

本主题中提供的所有示例均使用默认端点构建,始终作为标准 Acumatica ERP 安装过程的一部分进行部署。在 Web 服务端点屏幕(SM.20.70.60)上,你可以查看现有端点的详细信息或配置基于 Acumatica ERP 合同的 Web 服务的自定义端点:

StackOverflow 文档

供你参考,以下是上述所有示例中使用的 RestService 类的实现,以与 Acumatica ERP 的基于合同的 Web 服务进行交互:

public class RestService : IDisposable
{
    private readonly HttpClient _httpClient;
    private readonly string _acumaticaBaseUrl;
    private readonly string _acumaticaEndpointUrl;

    public RestService(string acumaticaBaseUrl, string endpoint,
        string userName, string password,
        string company, string branch)
    {
        _acumaticaBaseUrl = acumaticaBaseUrl;
        _acumaticaEndpointUrl = _acumaticaBaseUrl + "/entity/" + endpoint + "/";
        _httpClient = new HttpClient(
            new HttpClientHandler
            {
                UseCookies = true,
                CookieContainer = new CookieContainer()
            })
        {
            BaseAddress = new Uri(_acumaticaEndpointUrl),
            DefaultRequestHeaders =
            {
                Accept = {MediaTypeWithQualityHeaderValue.Parse("text/json")}
            }
        };

        var str = new StringContent(
            new JavaScriptSerializer()
                .Serialize(
                    new
                    {
                        name = userName,
                        password = password,
                        company = company,
                        branch = branch
                    }),
                    Encoding.UTF8, "application/json");

        _httpClient.PostAsync(acumaticaBaseUrl + "/entity/auth/login", str)
            .Result.EnsureSuccessStatusCode();
    }

    void IDisposable.Dispose()
    {
        _httpClient.PostAsync(_acumaticaBaseUrl + "/entity/auth/logout",
            new ByteArrayContent(new byte[0])).Wait();
        _httpClient.Dispose();
    }

    public string GetList(string entityName)
    {
        var res = _httpClient.GetAsync(_acumaticaEndpointUrl + entityName)
            .Result.EnsureSuccessStatusCode();

        return res.Content.ReadAsStringAsync().Result;
    }

    public string GetList(string entityName, string parameters)
    {
        var res = _httpClient.GetAsync(_acumaticaEndpointUrl + entityName + "?" + parameters)
            .Result.EnsureSuccessStatusCode();

        return res.Content.ReadAsStringAsync().Result;
    }
}