通过基于 REST 契约的 API 导出记录
要与 Acumatica ERP 的基于 REST 契约的 API 通信,你的客户端应用程序必须始终执行以下 3 个步骤:
-
登录 Acumatica ERP 实例并获取用户会话信息的 cookie
-
与 Acumatica ERP 实例上提供的基于合同的 API 端点之一进行交互
-
从 Acumatica ERP 退出以关闭用户会话
本主题中提供的所有示例均使用默认端点构建,始终作为标准 Acumatica ERP 安装过程的一部分进行部署。在 Web 服务端点屏幕(SM.20.70.60)上,你可以查看现有端点的详细信息或配置基于 Acumatica ERP 合同的 Web 服务的自定义端点:
供你参考,以下是上述所有示例中使用的 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;
}
}