Zoeken…


Invoering

In dit onderwerp wordt gedemonstreerd hoe records vanuit Acumatica ERP kunnen worden geëxporteerd via de REST Contract-Based API. In tegenstelling tot de Screen-Based API van Acumatica ERP, biedt de Contract-Based API zowel SOAP- als REST-interfaces. Zie Acumatica ERP-documentatie voor meer informatie over de contractgebaseerde API

Opmerkingen

Om te communiceren met de REST Contract-Based API van Acumatica ERP moet uw clienttoepassing altijd de volgende 3 stappen uitvoeren:

  1. log in op Acumatica ERP-exemplaar en ontvang een cookie met gebruikerssessie-informatie

  2. interactie met een van Contract-Based API-eindpunten beschikbaar op Acumatica ERP-exemplaar

  3. log uit van Acumatica ERP om de gebruikerssessie te sluiten

Alle voorbeelden in dit onderwerp zijn gebouwd met het standaard eindpunt, altijd geïmplementeerd als onderdeel van het standaard Acumatica ERP-installatieproces. Op het scherm Webservice-eindpunten (SM.20.70.60) kunt u de details van bestaande eindpunten bekijken of uw aangepaste eindpunten configureren van de ERP-contractgebaseerde webservices van Acumatica:

voer hier de afbeeldingsbeschrijving in

Ter referentie is hieronder de implementatie van de RestService- klasse die in alle bovenstaande voorbeelden wordt gebruikt om te communiceren met de contractgebaseerde webservice van 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;
    }
}

Gegevensexport in een enkele REST-oproep

In dit voorbeeld onderzoekt u hoe u de volgende gegevens van Acumatica ERP in één gesprek kunt exporteren via de REST Contract-Based API:

  • alle voorraadartikelen die in de applicatie aanwezig zijn
  • alle verkooporders van het IN-type

Als u records vanuit Acumatica ERP wilt exporteren, gebruikt u de volgende URL: http://<Acumatica ERP instance URL>/entity/<Endpoint name>/<Endpoint version>/<Top-level entity>

<Top-level entity> is de naam van de entiteit die u gaat exporteren

Alle voorraadartikelen in één REST-aanroep exporteren:

Als u voorraaditemrecords wilt exporteren van een lokale AcumaticaERP instantie met behulp van het standaard eindpunt van versie 6.00.001 , moet u de volgende URL gebruiken: http://localhost/AcumaticaERP/entity/Default/6.00.001/StockItem

Hieronder staat de voorbeeldcode geschreven in C # om alle voorraaditems te exporteren door een enkele REST-oproep naar het standaard eindpunt van versie 6.00.001 te verzenden :

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

Om alle verkooporders van het IN-type in een enkele REST-oproep te exporteren:

Als u verkooporders van het IN- type vanuit een lokaal AcumaticaERP exemplaar wilt exporteren met behulp van het standaard eindpunt van versie 6.00.001 , moet u de volgende URL gebruiken: http://localhost/AcumaticaERP/entity/Default/6.00.001/SalesOrder?$filter=OrderType eq 'IN'

Hieronder staat de voorbeeldcode geschreven in C # om alle verkooporders van het IN- type te exporteren door een enkele REST-oproep naar het standaard eindpunt van versie 6.00.001 te verzenden :

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

Paginering implementeren op meerdere REST-aanvragen

In dit voorbeeld onderzoekt u hoe u de volgende gegevens van Acumatica ERP in batches kunt exporteren via de REST Contract-Based API:

  • voorraadartikelen aanwezig in de applicatie in batches van 10 records
  • alle verkooporders in batches van 100 records

Voorraadartikelen exporteren in batches van 10 records met meerdere REST-aanroepen:

Als u de eerste 10 voorraaditems van een lokale AcumaticaERP instantie wilt exporteren met het standaard eindpunt van versie 6.00.001 , moet u de volgende URL gebruiken: http://localhost/AcumaticaERP/entity/Default/6.00.001/StockItem?$top=10

Dienovereenkomstig, om voorraadartikelen van 10 tot 20 aan te vragen, breidt u eenvoudig de bovenstaande URL uit met filterparameter : http://localhost/AcumaticaERP/entity/Default/6.00.001/StockItem?$top=10&$filter=InventoryID gt '<InventoryID>'

<InventoryID> is de ID van het laatste stockartikel dat is geëxporteerd met een vorige REST-aanroep

Hieronder staat de voorbeeldcode geschreven in C # om alle voorraaditems te exporteren in batches van 10 records door meerdere REST-aanroepen te verzenden naar het standaard eindpunt van versie 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);
    }
}

Alle verkooporders exporteren in batches van 100 records met meerdere REST-aanroepen:

Als u de eerste 100 verkooporders van een lokale AcumaticaERP instantie wilt exporteren met behulp van het standaard eindpunt van versie 6.00.001 , moet u de volgende URL gebruiken: http://localhost/AcumaticaERP/entity/Default/6.00.001/SalesOrder?$top=100

Aangezien de primaire sleutel van de entiteit Verkooporder bestaat uit het Ordertype en het Ordernummer , gebruikt u in dit voorbeeld een combinatie van filterparameters voor de velden Ordertype en Ordernummer :

  • om verkooporders van 100 tot 200 van het SO- type aan te vragen, moet u de volgende URL gebruiken: http://localhost/AcumaticaERP/entity/Default/6.00.001/SalesOrder?$top=100&$filter=OrderType eq 'SO' and OrderNbr gt '<OrderNbr>'

<OrderNbr> is het nummer van de laatste verkooporder die is geëxporteerd met een vorige REST-aanroep

  • dienovereenkomstig, om eerste 100 verkooporders van het volgende type SO aan te vragen , moet u de volgende URL gebruiken: http://localhost/AcumaticaERP/entity/Default/6.00.001/SalesOrder?$top=100&$filter=OrderType gt 'SO' and OrderNbr gt ''

Hieronder is de voorbeeldcode geschreven in C # om alle verkooporders in batches van 100 records met meerdere REST-aanroepen te exporteren naar het standaard eindpunt van versie 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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow