Sök…


Introduktion

Det här ämnet kommer att visa hur man exporterar poster från Acumatica ERP via Screen-Based API. Den skärmbaserade API: n av Acumatica ERP tillhandahåller endast SOAP-gränssnittet. Om din utvecklingsplattform har begränsat stöd för SOAP-webbtjänster, kan du överväga det kontraktbaserade API som tillhandahåller både SOAP- och REST-gränssnitt. Mer information om skärmbaserad API finns i Acumatica ERP-dokumentation

Anmärkningar

Allt prov som tillhandahålls i det här ämnet skapades med den skärmbaserade API-inslagaren. Om du vill att din klientapplikation inte ska bero på UI-ändringarna i Acumatica ERP-applikationen, bör du använda den skärmbaserade API-omslaget, som beskrivs i Acumatica ERP-dokumentation

Dataexport från ett inmatningsformulär med en enda primärnyckel

Aktie Items skärmen (IN.20.25.00) är en av de mest använda datainmatning former av Acumatica ERP till exportera data. Inventerings-ID är den enda primära nyckeln på skärmen Lagerartiklar : ange bildbeskrivning här

För att exportera poster från ett datainmatningsformulär måste din SOAP-begäran alltid börja med ServiceCommands.Every[Key] -kommandot, där [Key] ska ersättas med det primära nyckelnamnet.

Så här exporterar du alla lager i ett enda webbtjänstsamtal:

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

Med tiden mängden data i alla ERP-applikationer tenderar att växa i storlek. Om du exporterar alla poster från din Acumatica ERP-instans i ett enda samtal för webbtjänster, kanske du snart märker timeoutfel. Att öka timeout är en möjlig engångs, men inte särskilt bra långsiktig lösning. Det bästa alternativet att ta itu med denna utmaning är att exportera lager i flera poster.

För att exportera lager i grupper om 10 poster:

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

Det finns två huvudskillnader mellan metoden för samtalet och exporten i partier:

  • topCount- parametern i Export- kommandot ställdes alltid till 0 i det enda samtalet

  • vid exportering av poster i batchar konfigureras en batchstorlek genom parametern topCount kompletterad med filterfältet för att begära nästa resultatset

Dataexport från en postformulär med en sammansatt primärnyckel

Skärmen Försäljningsorder (SO.30.10.00) är ett perfekt exempel på ett datainmatningsformulär med en sammansatt primärnyckel. Den primära nyckeln på skärmen Försäljningsorder består av ordertypen och ordernumret : ange bildbeskrivning här

Den rekommenderade 2-stegsstrategin för att exportera data från skärmen Försäljningsorder eller något annat formulär för datainmatning med en sammansatt primärnyckel via skärmbaserad API:

  • i steg 1 begär du alla typer av beställningar som tidigare skapats i din Acumatica ERP-applikation

  • Det andra steget är att exportera beställningar av varje typ oberoende antingen i ett enda samtal eller i partier

Så här begär du alla typer av befintliga beställningar:

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

I SOAP-samtalet ovan, lägg märke till topCount- parametern för exportkommandot inställt på 1 . Syftet med denna begäran är bara att få alla typer av beställningar som tidigare skapats i din Acumatica ERP-applikation, inte att exportera data.

Så här exporterar du poster av varje typ oberoende i partier:

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

Exemplet ovan visar hur man exporterar alla försäljningsorder från Acumatica ERP i partier om 100 poster. För att exportera försäljningsorder av varje typ oberoende måste din SOAP-förfrågan alltid börja med kommandot Value , som bestämmer vilken typ av order som ska exporteras. Efter värdet-kommandot som används för att ställa in första nyckelvärde går ServiceCommands.Every[Key] -kommandot, där [Key] ska ersättas med namnet på den andra tangenten.

Så här exporterar du poster av en viss typ:

Om du behöver exportera försäljningsorder av en viss typ, är det möjligt att uttryckligen definiera typen av beställningar med Value kommandot i början av din SOAP-begäran följt av enkelsamtalmetoden eller exporten i batchar.

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

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow