通過基於 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;
    }
}