Sök…


Introduktion

Detta ämne kommer att visa hur man exporterar poster från Acumatica ERP via REST Contract-Based API. I motsats till det skärmbaserade API: et av Acumatica ERP, tillhandahåller det kontraktsbaserade APIet både SOAP- och REST-gränssnitt. Mer information om Kontraktsbaserad API finns i Acumatica ERP-dokumentation

Anmärkningar

För att kommunicera med REST Contract-Based API för Acumatica ERP måste din klientapplikation alltid utföra följande tre steg:

  1. logga in på Acumatica ERP-instans och få cookie med användarsessioninformation

  2. interagera med en av kontraktsbaserade API-slutpunkter som finns tillgängliga på Acumatica ERP-instans

  3. logga ut från Acumatica ERP för att stänga användarsessionen

Alla prover som tillhandahålls i detta ämne byggdes med standardändpunkten , alltid distribuerad som en del av standardprocessen för Acumatica ERP. På skärmen Web Service Endpoints (SM.20.70.60) kan du visa detaljerna för befintliga slutpunkter eller konfigurera dina anpassade slutpunkter för Acumatica ERP-kontraktbaserade webbtjänster:

ange bildbeskrivning här

Som referens nedan är implementeringen av RestService- klassen som används i alla prover ovan för att interagera med den kontraktsbaserade webbtjänsten för Acumatica ERP:

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;
    }
}

Dataexport i ett enda REST-samtal

I det här exemplet kommer du att undersöka hur du exporterar följande data från Acumatica ERP i ett enda samtal via REST Contract-Based API:

  • alla lager som finns i applikationen
  • all försäljningsorder av IN-typen

Om du behöver exportera poster från Acumatica ERP använder du följande URL: http://<Acumatica ERP instance URL>/entity/<Endpoint name>/<Endpoint version>/<Top-level entity>

<Top-level entity> är namnet på den enhet som du ska exportera

Så här exporterar du alla lager i ett REST-samtal:

För att exportera lagerobjekt från en lokal AcumaticaERP instans med standardändpunkten för version 6.00.001 , bör du använda följande URL: http://localhost/AcumaticaERP/entity/Default/6.00.001/StockItem

Nedan visas provkoden skriven i C # för att exportera alla lagerobjekt genom att skicka ett enda REST-samtal till standardändpunkten för version 6.00.001 :

using (RestService rs = new RestService(
    @"http://localhost/AcumaticaERP/", "Default/6.00.001",
    username, password, company, branch))
{
    string stockItems = rs.GetList("StockItem");
}

Så här exporterar du alla försäljningsorder av IN-typen i ett REST-samtal:

För att exportera försäljningsorder av IN- typen från en lokal AcumaticaERP instans med standardändpunkten för version 6.00.001 , bör du använda följande URL: http://localhost/AcumaticaERP/entity/Default/6.00.001/SalesOrder?$filter=OrderType eq 'IN'

Nedan visas provkoden skriven i C # för att exportera alla försäljningsorder av IN- typen genom att skicka ett enda REST-samtal till standardändpunkten för version 6.00.001 :

using (RestService rs = new RestService(
    @"http://localhost/StackOverflow/", "Default/6.00.001",
    username, password, company, branch))
{
    var parameters = "$filter=OrderType eq 'IN'";
    string inSalesOrders = rs.GetList("SalesOrder", parameters);
}

Implementering av pagination på flera REST-begäranden

I det här exemplet kommer du att undersöka hur du exporterar följande data från Acumatica ERP i partier via REST Contract-Based API:

  • lagerföremål som finns i applikationen i partier med 10 poster
  • alla försäljningsorder i partier med 100 poster

Så här exporterar du lager i grupper om 10 poster med flera REST-samtal:

För att exportera de första 10 lagervarorna från en lokal AcumaticaERP instans genom att använda standardändpunkten för version 6.00.001 , bör du använda följande URL: http://localhost/AcumaticaERP/entity/Default/6.00.001/StockItem?$top=10

För att begära lagervaror från 10 till 20 utvidgar du helt enkelt webbadressen ovan med filterparameter : http://localhost/AcumaticaERP/entity/Default/6.00.001/StockItem?$top=10&$filter=InventoryID gt '<InventoryID>'

<InventoryID> är ID för det sista lagerobjektet som exporterades med ett tidigare REST-samtal

Nedan visas provkoden skriven i C # för att exportera alla lagerartiklar i partier med 10 poster genom att skicka flera REST-samtal till standardändpunkten för version 6.00.001 :

using (RestService rs = new RestService(
    @"http://localhost/StackOverflow/", "Default/6.00.001",
    username, password, company, branch))
{
    var json = new JavaScriptSerializer();
    string parameters = "$top=10";
    string items = rs.GetList("StockItem", parameters);
    var records = json.Deserialize<List<Dictionary<string, object>>>(items);

    while (records.Count == 10)
    {
        var inventoryID = records[records.Count - 1]["InventoryID"] as Dictionary<string, object>;
        var inventoryIDValue = inventoryID.Values.First();
        string nextParameters = parameters + "&" + 
            "$filter=" + string.Format("InventoryID gt '{0}'", inventoryIDValue);
        items = rs.GetList("StockItem", nextParameters);
        records = json.Deserialize<List<Dictionary<string, object>>>(items);
    }
}

För att exportera alla försäljningsorder i partier med 100 poster med flera REST-samtal:

För att exportera de första 100 försäljningsorder från en lokal AcumaticaERP instans med standardändpunkten för version 6.00.001 , bör du använda följande URL: http://localhost/AcumaticaERP/entity/Default/6.00.001/SalesOrder?$top=100

Eftersom den primära nyckeln för enhetens försäljningsorder består av ordertypen och ordernumret använder du i det här exemplet en kombination av filterparametrar för fälten Ordertyp och ordernummer :

  • För att begära försäljningsorder från 100 till 200 av SO- typen bör du använda följande URL: http://localhost/AcumaticaERP/entity/Default/6.00.001/SalesOrder?$top=100&$filter=OrderType eq 'SO' and OrderNbr gt '<OrderNbr>'

<OrderNbr> är numret på den sista försäljningsorder som exporterades med ett tidigare REST-samtal

  • För att begära första 100 försäljningsorder av nästa SO- typ bör du använda följande URL: http://localhost/AcumaticaERP/entity/Default/6.00.001/SalesOrder?$top=100&$filter=OrderType gt 'SO' and OrderNbr gt ''

Nedan visas provkoden skriven i C # för att exportera alla försäljningsorder i partier med 100 poster med flera REST-samtal till standardändpunkten för version 6.00.001 :

using (RestService rs = new RestService(
    @"http://localhost/StackOverflow/", "Default/6.00.001",
    username, password, company, branch))
{
    var json = new JavaScriptSerializer();
    string parameters = "$top=100";
    string items = rs.GetList("SalesOrder", parameters);
    var records = json.Deserialize<List<Dictionary<string, object>>>(items);

    bool sameOrderType = true;
    while (records.Count > 0 && (records.Count == 100 || !sameOrderType))
    {
        var orderType = records[records.Count - 1]["OrderType"] as Dictionary<string, object>;
        var orderTypeValue = orderType.Values.First();
        var orderNbr = records[records.Count - 1]["OrderNbr"] as Dictionary<string, object>;
        var orderNbrValue = orderNbr.Values.First();

        string nextParameters = parameters + "&" + "$filter=" +
            string.Format("OrderType {0} '{1}'", sameOrderType ? "eq" : "gt", orderTypeValue) + " and " +
            string.Format("OrderNbr gt '{0}'", sameOrderType ? orderNbrValue : "''" );
        items = rs.GetList("SalesOrder", nextParameters);
        records = json.Deserialize<List<Dictionary<string, object>>>(items);
        sameOrderType = records.Count == 100;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow