Suche…


Einführung

In diesem Thema wird veranschaulicht, wie Datensätze aus Acumatica ERP über die vertragsbasierte REST-API exportiert werden. Im Gegensatz zu der screen-based API von Acumatica ERP bietet die vertragsbasierte API sowohl SOAP- als auch REST-Schnittstellen. Weitere Informationen zur vertragsbasierten API finden Sie in der Acumatica ERP-Dokumentation

Bemerkungen

Um mit der vertragsbasierten REST-API von Acumatica ERP zu kommunizieren, muss Ihre Clientanwendung immer die folgenden 3 Schritte ausführen:

  1. Melden Sie sich bei der Acumatica ERP-Instanz an und erhalten Sie ein Cookie mit Informationen zur Benutzersitzung

  2. Interaktion mit einem der vertragsbasierten API-Endpunkte, die in der Acumatica ERP-Instanz verfügbar sind

  3. Melden Sie sich von Acumatica ERP ab, um die Benutzersitzung zu schließen

Alle in diesem Thema bereitgestellten Beispiele wurden mit dem Standardendpunkt erstellt und immer im Rahmen des Standardinstallationsprozesses von Acumatica ERP bereitgestellt. Auf dem Bildschirm Web-Service-Endpunkte (SM.20.70.60) können Sie die Details vorhandener Endpunkte anzeigen oder Ihre benutzerdefinierten Endpunkte der vertraglichen Web-Services von Acumatica ERP konfigurieren:

Geben Sie hier die Bildbeschreibung ein

Nachfolgend finden Sie die Implementierung der RestService- Klasse, die in allen obigen Beispielen für die Interaktion mit dem vertragsbasierten Webservice von Acumatica ERP verwendet wird:

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

Datenexport in einem einzigen REST-Aufruf

In diesem Beispiel erfahren Sie, wie Sie die folgenden Daten aus Acumatica ERP in einem einzigen Aufruf über die vertragsbasierte REST-API exportieren:

  • alle in der Anwendung vorhandenen Lagerartikel
  • Alle Kundenaufträge des Typs IN

Wenn Sie Datensätze aus Acumatica ERP exportieren müssen, verwenden Sie die folgende URL: http://<Acumatica ERP instance URL>/entity/<Endpoint name>/<Endpoint version>/<Top-level entity>

<Top-level entity> ist der Name der Entität, die Sie exportieren möchten

So exportieren Sie alle Lagerartikel in einem einzigen REST-Aufruf:

Um Bestandsartikeldatensätze aus einer lokalen AcumaticaERP Instanz mithilfe des Standardendpunkts der Version 6.00.001 zu exportieren , sollten Sie die folgende URL verwenden: http://localhost/AcumaticaERP/entity/Default/6.00.001/StockItem

Nachfolgend finden Sie den in C # geschriebenen Beispielcode zum Exportieren aller Lagerbestände durch Senden eines einzelnen REST-Aufrufs an den Standardendpunkt der 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");
}

So exportieren Sie alle Kundenaufträge des Typs IN in einem einzigen REST-Aufruf:

Um Verkaufsaufträge des Typs IN aus einer lokalen AcumaticaERP Instanz mithilfe des Standardendpunkts der Version 6.00.001 zu exportieren , sollten Sie die folgende URL verwenden: http://localhost/AcumaticaERP/entity/Default/6.00.001/SalesOrder?$filter=OrderType eq 'IN'

Nachfolgend finden Sie den in C # geschriebenen Beispielcode zum Exportieren aller Verkaufsaufträge des Typs IN, indem ein einzelner REST-Aufruf an den Standardendpunkt der Version 6.00.001 gesendet wird :

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

Paginierung bei mehreren REST-Anforderungen implementieren

In diesem Beispiel erfahren Sie, wie Sie folgende Daten stapelweise aus Acumatica ERP über die vertragsbasierte REST-API exportieren:

  • Bestandsartikel, die in der Anwendung in Chargen von 10 Datensätzen vorhanden sind
  • alle Kundenaufträge in Chargen von 100 Datensätzen

So exportieren Sie Lagerartikel in Chargen von 10 Datensätzen mit mehreren REST-Aufrufen:

Um die ersten 10 vorrätigen Artikel aus einer lokalen AcumaticaERP Instanz mithilfe des Standardendpunkts der Version 6.00.001 zu exportieren , sollten Sie die folgende URL verwenden: http://localhost/AcumaticaERP/entity/Default/6.00.001/StockItem?$top=10

http://localhost/AcumaticaERP/entity/Default/6.00.001/StockItem?$top=10&$filter=InventoryID gt '<InventoryID>' Bestandsartikel von 10 auf 20 anzufordern, erweitern Sie einfach die obige URL um den Filterparameter : http://localhost/AcumaticaERP/entity/Default/6.00.001/StockItem?$top=10&$filter=InventoryID gt '<InventoryID>'

<InventoryID> ist die ID der letzten Lagerposition, die mit einem vorherigen REST-Aufruf exportiert wurde

Nachfolgend finden Sie den Beispielcode, der in C # geschrieben ist, um alle Lagerartikel in Stapeln von 10 Datensätzen zu exportieren, indem Sie mehrere REST-Aufrufe an den Standardendpunkt von Version 6.00.001 senden :

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

So exportieren Sie alle Kundenaufträge in Chargen von 100 Datensätzen mit mehreren REST-Aufrufen:

Um die ersten 100 Verkaufsaufträge von einer lokalen AcumaticaERP Instanz mithilfe des Standardendpunkts der Version 6.00.001 zu exportieren , sollten Sie die folgende URL verwenden: http://localhost/AcumaticaERP/entity/Default/6.00.001/SalesOrder?$top=100

Da der Primärschlüssel der Verkaufsauftragseinheit aus Auftragstyp und Auftragsnummer besteht , verwenden Sie in diesem Beispiel eine Kombination von Filterparametern für die Felder Auftragstyp und Auftragsnummer :

  • http://localhost/AcumaticaERP/entity/Default/6.00.001/SalesOrder?$top=100&$filter=OrderType eq 'SO' and OrderNbr gt '<OrderNbr>' Verkaufsaufträge von 100 bis 200 des SO- Typs anzufordern, sollten Sie die folgende URL verwenden: http://localhost/AcumaticaERP/entity/Default/6.00.001/SalesOrder?$top=100&$filter=OrderType eq 'SO' and OrderNbr gt '<OrderNbr>'

<OrderNbr> ist die Nummer des letzten <OrderNbr> der mit einem vorherigen REST-Aufruf exportiert wurde

  • http://localhost/AcumaticaERP/entity/Default/6.00.001/SalesOrder?$top=100&$filter=OrderType gt 'SO' and OrderNbr gt '' ersten 100 Verkaufsaufträge für den nächsten SO- Typ anzufordern, sollten Sie die folgende URL verwenden: http://localhost/AcumaticaERP/entity/Default/6.00.001/SalesOrder?$top=100&$filter=OrderType gt 'SO' and OrderNbr gt ''

Nachfolgend finden Sie den in C # geschriebenen Beispielcode, um alle Verkaufsaufträge in Stapeln von 100 Datensätzen mit mehreren REST-Aufrufen an den Standardendpunkt der Version 6.00.001 zu exportieren :

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow