Zoeken…


Invoering

In dit onderwerp wordt gedemonstreerd hoe records vanuit Acumatica ERP kunnen worden geëxporteerd via de Screen-Based API. De Screen-Based API van Acumatica ERP biedt alleen de SOAP-interface. Als uw ontwikkelplatform beperkte ondersteuning voor SOAP-webservices biedt, overweeg dan de contractgebaseerde API die zowel SOAP- als REST-interfaces biedt. Zie Acumatica ERP-documentatie voor meer informatie over de Screen-Based API

Opmerkingen

Alle voorbeelden in dit onderwerp zijn gemaakt met de Screen-Based API Wrapper. Als u wilt dat uw clienttoepassing niet afhankelijk is van de UI-wijzigingen in de Acumatica ERP-toepassing, moet u de schermgebaseerde API-wrapper gebruiken, die wordt beschreven in Acumatica ERP-documentatie

Gegevensexport van een invoerformulier met een enkele primaire sleutel

Het scherm Voorraaditems (IN.20.25.00) is een van de meest gebruikte gegevensinvoerformulieren van Acumatica ERP om gegevens te exporteren. Voorraad-ID is de enige primaire sleutel op het scherm Voorraaditems : voer hier de afbeeldingsbeschrijving in

Om records uit een gegevensinvoerformulier te exporteren, moet uw SOAP-aanvraag altijd beginnen met de opdracht ServiceCommands.Every[Key] , waarbij [Key] moet worden vervangen door de primaire sleutelnaam.

Alle voorraadartikelen in één webservice-oproep exporteren:

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

Met de tijd neemt de hoeveelheid gegevens in elke ERP-toepassing toe in omvang te groeien. Als u alle records van uw Acumatica ERP-exemplaar in een enkele webserviceaanvraag exporteert, ziet u mogelijk snel time-outfouten. Het verlengen van de time-out is een mogelijke eenmalige, maar niet erg goede langetermijnoplossing. Uw beste optie om deze uitdaging aan te gaan, is om voorraadartikelen te exporteren in batches van verschillende records.

Om voorraadartikelen te exporteren in batches van 10 records:

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

Er zijn 2 belangrijke verschillen tussen de aanpak voor een enkele oproep en de export in batches:

  • De parameter topCount van de opdracht Export was altijd ingesteld op 0 in de benadering van één aanroep

  • bij het exporteren van records in batches, is de grootte van een partij geconfigureerde hoewel de Topcount parameter aangevuld met de Filter-array naar het volgende resultaat set te vragen

Gegevensexport van een invoerformulier met een samengestelde primaire sleutel

Het scherm Verkooporders (SO.30.10.00) is een perfect voorbeeld van een gegevensinvoerformulier met een samengestelde primaire sleutel. De primaire sleutel op het scherm Verkooporders bestaat uit het ordertype en het ordernummer : voer hier de afbeeldingsbeschrijving in

De aanbevolen tweestapsstrategie om gegevens te exporteren vanuit het scherm Verkooporders of een ander gegevensinvoerformulier met een samengestelde primaire sleutel via de Screen-Based API:

  • in stap 1 vraagt u alle soorten bestellingen aan die u eerder in uw Acumatica ERP-toepassing hebt gemaakt

  • 2e stap is om orders van elk type onafhankelijk van elkaar te exporteren, hetzij in een enkele oproep of in batches

Om alle soorten bestaande bestellingen aan te vragen:

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

Zie in de bovenstaande SOAP-aanroep de parameter topCount van de opdracht Export ingesteld op 1 . Het doel van dit verzoek is alleen om alle soorten bestellingen te krijgen die eerder in uw Acumatica ERP-applicatie zijn gemaakt, niet om gegevens te exporteren.

Records van elk type onafhankelijk van elkaar exporteren:

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

Het bovenstaande voorbeeld laat zien hoe alle verkooporders van Acumatica ERP in batches van 100 records kunnen worden geëxporteerd. Om verkooporders van elk type onafhankelijk te exporteren, moet uw SOAP-aanvraag altijd beginnen met de opdracht Value , die het type te exporteren orders bepaalt. Nadat de waardeopdracht is gebruikt om de eerste sleutelwaarde in te stellen, gaat de opdracht ServiceCommands.Every[Key] , waarbij [Key] moet worden vervangen door de naam van de tweede sleutel.

Records van een specifiek type exporteren:

In het geval dat u verkooporders van een specifiek type moet exporteren, is het mogelijk om expliciet het type orders te definiëren met de opdracht Value aan het begin van uw SOAP-aanvraag gevolgd door de enkele aanroepaanpak of de export in batches.

Om alle verkooporders van het IN- type in één gesprek te exporteren:

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow