Suche…


Einführung

In diesem Thema wird veranschaulicht, wie Datensätze aus Acumatica ERP über die screen-based API exportiert werden. Die screen-based API von Acumatica ERP bietet nur die SOAP-Schnittstelle. Wenn Ihre Entwicklungsplattform nur eine begrenzte Unterstützung für SOAP-Webdienste bietet, sollten Sie die vertragsbasierte API in Betracht ziehen, die sowohl SOAP- als auch REST-Schnittstellen bietet. Weitere Informationen zur screen -based API finden Sie in der Acumatica ERP-Dokumentation

Bemerkungen

Alle in diesem Thema bereitgestellten Beispiele wurden mit dem screen-based API Wrapper erstellt. Wenn Sie möchten, dass Ihre Clientanwendung nicht von den Änderungen der Benutzeroberfläche in der Acumatica ERP-Anwendung abhängt, sollten Sie den bildschirmbasierten API-Wrapper verwenden, der in der Acumatica ERP-Dokumentation beschrieben wird

Datenexport aus einem Erfassungsformular mit einem einzigen Primärschlüssel

Der Bildschirm Stock Items (IN.20.25.00) ist eines der am häufigsten verwendeten Datenerfassungsformulare von Acumatica ERP, um Daten zu exportieren. Die Bestands-ID ist der einzige Primärschlüssel auf dem Bildschirm mit den Bestandsposten : Geben Sie hier die Bildbeschreibung ein

Um Datensätze aus einem Dateneingabeformular zu exportieren, muss Ihre SOAP-Anforderung immer mit dem Befehl ServiceCommands.Every[Key] , wobei [Key] durch den Namen des Primärschlüssels ersetzt werden soll.

So exportieren Sie alle Lagerartikel in einem einzigen Web-Service-Aufruf:

Screen context = new Screen();
context.CookieContainer = new System.Net.CookieContainer();
context.Url = "http://localhost/AcumaticaERP/Soap/IN202500.asmx";
context.Login(username, password);
try
{
    Content stockItemsSchema = PX.Soap.Helper.GetSchema<Content>(context);
    Field lastModifiedField = new Field
    {
        ObjectName = stockItemsSchema.StockItemSummary.InventoryID.ObjectName,
        FieldName = "LastModifiedDateTime"
    };
    var commands = new Command[]
    {
        stockItemsSchema.StockItemSummary.ServiceCommands.EveryInventoryID,
        stockItemsSchema.StockItemSummary.InventoryID,
        stockItemsSchema.StockItemSummary.Description,
        stockItemsSchema.GeneralSettingsItemDefaults.ItemClass,
        stockItemsSchema.GeneralSettingsUnitOfMeasureBaseUnit.BaseUnit,
        lastModifiedField
    };
    var items = context.Export(commands, null, 0, false, false);
}
finally
{
    context.Logout();
}

Mit der Zeit wächst die Datenmenge in jeder ERP-Anwendung. Wenn Sie alle Datensätze aus Ihrer Acumatica ERP-Instanz in einem einzigen Web-Service-Aufruf exportieren, können Sie sehr bald Timeout-Fehler feststellen. Das Erhöhen des Timeouts ist eine mögliche einmalige, aber nicht sehr gute langfristige Lösung. Die beste Option zur Bewältigung dieser Herausforderung besteht darin, Lagerartikel in mehreren Datensätzen zu exportieren.

So exportieren Sie Lagerbestände in Chargen von 10 Datensätzen:

Screen context = new Screen();
context.CookieContainer = new System.Net.CookieContainer();
context.Url = "http://localhost/AcumaticaERP/Soap/IN202500.asmx";
context.Login(username, password);
try
{
    Content stockItemsSchema = PX.Soap.Helper.GetSchema<Content>(context);
    Field lastModifiedField = new Field
    {
        ObjectName = stockItemsSchema.StockItemSummary.InventoryID.ObjectName,
        FieldName = "LastModifiedDateTime"
    };
    var commands = new Command[]
    {
        stockItemsSchema.StockItemSummary.ServiceCommands.EveryInventoryID,
        stockItemsSchema.StockItemSummary.InventoryID,
        stockItemsSchema.StockItemSummary.Description,
        stockItemsSchema.GeneralSettingsItemDefaults.ItemClass,
        stockItemsSchema.GeneralSettingsUnitOfMeasureBaseUnit.BaseUnit,
        lastModifiedField
    };
    var items = context.Export(commands, null, 10, false, false);

    while (items.Length == 10)
    {
        var filters = new Filter[]
        {
            new Filter
            {
                Field = stockItemsSchema.StockItemSummary.InventoryID,
                Condition = FilterCondition.Greater,
                Value = items[items.Length - 1][0]
            }
        };
        items = context.Export(commands, filters, 10, false, false);
    }
}
finally
{
    context.Logout();
}

Es gibt zwei Hauptunterschiede zwischen dem Einzelaufruf-Ansatz und dem Export in Batches:

  • Der Parameter topCount des Exportbefehls wurde bei der Methode des Einzelaufrufs immer auf 0 gesetzt

  • Beim Exportieren von Datensätzen in Batches wird die Größe eines Stapels mit dem Parameter topCount konfiguriert, der durch das Filter- Array ergänzt wird, um die nächste Ergebnismenge anzufordern

Datenexport aus einem Erfassungsformular mit einem zusammengesetzten Primärschlüssel

Die Kundenaufträge Bildschirm (SO.30.10.00) ist ein perfektes Beispiel für ein Dateneingabeformular mit einem zusammengesetzten Primärschlüssel. Der Primärschlüssel im Bildschirm Kundenaufträge setzt sich aus der Auftragsart und der Bestellnummer zusammen : Geben Sie hier die Bildbeschreibung ein

Die empfohlene 2-Schritt-Strategie zum Exportieren von Daten aus dem Bildschirm " Kundenaufträge" oder einem anderen Dateneingabeformular mit einem zusammengesetzten Primärschlüssel über die bildschirmbasierte API:

  • In Schritt 1 fordern Sie alle Arten von Bestellungen an, die zuvor in Ihrer Acumatica ERP-Anwendung erstellt wurden

  • Der zweite Schritt besteht darin, Aufträge jeder Art unabhängig voneinander entweder in einem einzigen Aufruf oder in Batches zu exportieren

Um alle Arten von bestehenden Bestellungen anzufordern:

Screen context = new Screen();
context.CookieContainer = new System.Net.CookieContainer();
context.Url = "http://localhost/AcumaticaERP/Soap/SO301000.asmx";
context.Login(username, password);
try
{
    Content orderSchema = PX.Soap.Helper.GetSchema<Content>(context);
    var commands = new Command[]
    {
        orderSchema.OrderSummary.ServiceCommands.EveryOrderType,
        orderSchema.OrderSummary.OrderType,
    };

    var types = context.Export(commands, null, 1, false, false);
}
finally
{
    context.Logout();
}

Beachten Sie beim SOAP-Aufruf oben, dass der Parameter topCount des Exportbefehls auf 1 . Diese Anforderung dient nur dazu, alle zuvor in Ihrer Acumatica ERP-Anwendung erstellten Auftragsarten abzurufen, nicht um Daten zu exportieren.

So exportieren Sie Datensätze jedes Typs unabhängig in Batches:

Screen context = new Screen();
context.CookieContainer = new System.Net.CookieContainer();
context.Url = "http://localhost/AcumaticaERP/Soap/SO301000.asmx";
context.Login(username, password);
try
{
    Content orderSchema = PX.Soap.Helper.GetSchema<Content>(context);
    var commands = new Command[]
    {
        orderSchema.OrderSummary.ServiceCommands.EveryOrderType,
        orderSchema.OrderSummary.OrderType,
    };
    var types = context.Export(commands, null, 1, false, false);

    for (int i = 0; i < types.Length; i++)
    {
        commands = new Command[]
        {
            new Value
            {
                LinkedCommand = orderSchema.OrderSummary.OrderType,
                Value = types[i][0]
            },
            orderSchema.OrderSummary.ServiceCommands.EveryOrderNbr,
            orderSchema.OrderSummary.OrderType,
            orderSchema.OrderSummary.OrderNbr,
            orderSchema.OrderSummary.Customer,
            orderSchema.OrderSummary.CustomerOrder,
            orderSchema.OrderSummary.Date,
            orderSchema.OrderSummary.OrderedQty,
            orderSchema.OrderSummary.OrderTotal
        };
        var orders = context.Export(commands, null, 100, false, false);
        while (orders.Length == 100)
        {
            var filters = new Filter[]
            {
                new Filter
                {
                    Field = orderSchema.OrderSummary.OrderNbr,
                    Condition = FilterCondition.Greater,
                    Value = orders[orders.Length - 1][1]
                }
            };
            orders = context.Export(commands, filters, 100, false, false);
        }
    }
}
finally
{
    context.Logout();
}

Das obige Beispiel veranschaulicht, wie alle Kundenaufträge aus Acumatica ERP in Chargen von 100 Datensätzen exportiert werden. Um den Kundenauftrag jeder Art unabhängig voneinander zu exportieren, muss Ihre SOAP-Anforderung immer mit dem Befehl Value beginnen, der den Typ der zu exportierenden Aufträge bestimmt. Nach dem Befehl Value, der zum Festlegen des ersten Schlüsselwerts verwendet wird, wird der Befehl ServiceCommands.Every[Key] aufgerufen, wobei [Key] durch den Namen des zweiten Schlüssels ersetzt werden soll.

So exportieren Sie Datensätze eines bestimmten Typs:

Wenn Sie Verkaufsaufträge eines bestimmten Typs exportieren müssen, können Sie die Art der Aufträge mit dem Befehl Value am Anfang Ihrer SOAP-Anforderung explizit definieren, gefolgt von der Einzelaufrufmethode oder dem Export in Batches.

So exportieren Sie alle Kundenaufträge des Typs IN in einem Anruf:

Screen context = new Screen();
context.CookieContainer = new System.Net.CookieContainer();
context.Url = "http://localhost/AcumaticaERP/Soap/SO301000.asmx";
context.Login(username, password);
try
{
    Content orderSchema = PX.Soap.Helper.GetSchema<Content>(context);
    var commands = new Command[]
    {
        new Value
        {
            LinkedCommand = orderSchema.OrderSummary.OrderType,
            Value = "IN"
        },
        orderSchema.OrderSummary.ServiceCommands.EveryOrderNbr,
        orderSchema.OrderSummary.OrderType,
        orderSchema.OrderSummary.OrderNbr,
        orderSchema.OrderSummary.Customer,
        orderSchema.OrderSummary.CustomerOrder,
        orderSchema.OrderSummary.Date,
        orderSchema.OrderSummary.OrderedQty,
        orderSchema.OrderSummary.OrderTotal
    };
    var orders = context.Export(commands, null, 0, false, false);
}
finally
{
    context.Logout();
}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow