Ricerca…


introduzione

Questo argomento dimostrerà come esportare i record da Acumatica ERP tramite l'API basata sullo schermo. L'API Screen-Based di Acumatica ERP fornisce solo l'interfaccia SOAP. Se la tua piattaforma di sviluppo ha un supporto limitato per i servizi Web SOAP, considera l'API basata su contratto che fornisce interfacce SOAP e REST. Per ulteriori informazioni sull'API basata su schermate, vedere Documentazione ERP Acumatica

Osservazioni

Tutti gli esempi forniti in questo argomento sono stati creati con Wrapper API basato su schermo. Se si desidera che l'applicazione client non dipenda dalle modifiche dell'interfaccia utente nell'applicazione ERP Acumatica, è necessario utilizzare il wrapper API basato su schermate, descritto in Documentazione ERP di Acumatica.

Esportazione dei dati da un modulo di iscrizione con una singola chiave primaria

La schermata Elementi disponibili (IN.20.25.00) è una delle forme di immissione dati più utilizzate di Acumatica ERP per esportare i dati. L'ID spazio pubblicitario è l'unica chiave primaria nella schermata Elementi di magazzino : inserisci la descrizione dell'immagine qui

Per esportare i record da un modulo di inserimento dati, la richiesta SOAP deve sempre iniziare con il comando ServiceCommands.Every[Key] , dove [Key] deve essere sostituito con il nome della chiave primaria.

Per esportare tutti gli articoli in stock in una singola chiamata al servizio web:

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

Con il tempo la quantità di dati in qualsiasi applicazione ERP tende a crescere di dimensioni. Se si esporranno tutti i record dall'istanza di Acumatica ERP in una singola chiamata al servizio web, molto presto si potrebbero notare errori di timeout. L'aumento del timeout è una possibile soluzione a lungo termine, ma non ottimale. La migliore opzione per affrontare questa sfida è quella di esportare articoli in lotti di diversi record.

Per esportare articoli in lotti di 10 record:

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

Esistono 2 differenze principali tra l'approccio di chiamata singola e l'esportazione in lotti:

  • Il parametro topCount del comando Export è sempre stato impostato su 0 nell'approccio a chiamata singola

  • quando si esportano i record in batch, la dimensione di un batch viene configurata anche se il parametro topCount è completato dall'array Filter per richiedere il set di risultati successivo

Esportazione dei dati da un modulo di iscrizione con una chiave primaria composta

La schermata Ordini di vendita (SO.30.10.00) è un perfetto esempio di modulo di inserimento dati con una chiave primaria composta. La chiave primaria nella schermata Ordini di vendita è composta dal Tipo ordine e dal Numero ordine : inserisci la descrizione dell'immagine qui

La strategia in 2 passaggi consigliata per esportare i dati dalla schermata Ordini di vendita o qualsiasi altro modulo di immissione dati con una chiave primaria composta tramite l'API basata su schermate:

  • al punto 1 si richiedono tutti i tipi di ordini precedentemente creati nell'applicazione ERP Acumatica

  • Il secondo passaggio consiste nell'esportare gli ordini di ciascun tipo in modo indipendente in una singola chiamata o in lotti

Per richiedere tutti i tipi di ordini esistenti:

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

Nella chiamata SOAP in alto, si noti il ​​parametro topCount del comando Export impostato su 1 . Lo scopo di questa richiesta è solo quello di ottenere tutti i tipi di ordini precedentemente creati nell'applicazione ERP Acumatica, non di esportare i dati.

Per esportare i record di ogni tipo in modo indipendente in lotti:

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

L'esempio sopra mostra come esportare tutti gli ordini di vendita da Acumatica ERP in lotti di 100 record. Per esportare l'ordine di vendita di ciascun tipo in modo indipendente, la richiesta SOAP deve sempre iniziare con il comando Value , che determina il tipo di ordini da esportare. Dopo che il comando Value utilizzato per impostare il primo valore della chiave passa al comando ServiceCommands.Every[Key] , dove [Key] deve essere sostituito con il nome della seconda chiave.

Per esportare record di un tipo specifico:

Nel caso in cui sia necessario esportare ordini di vendita di un tipo specifico, è possibile definire esplicitamente il tipo di ordini con il comando Value all'inizio della richiesta SOAP seguito dall'approccio a chiamata singola o dall'esportazione in lotti.

Per esportare tutti gli ordini di vendita del tipo IN in una sola chiamata:

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow