Buscar..


Introducción

Este tema mostrará cómo exportar registros de Acumatica ERP a través de la API basada en pantalla. La API basada en pantalla de Acumatica ERP proporciona solo la interfaz SOAP. Si su plataforma de desarrollo tiene soporte limitado para servicios web SOAP, considere la API basada en el contrato que proporciona las interfaces SOAP y REST. Para obtener más información sobre la API basada en pantalla, consulte la documentación de Acumatica ERP

Observaciones

Todos los ejemplos proporcionados en este tema se crearon con el contenedor de API basado en pantalla. Si desea que su aplicación cliente no dependa de los cambios en la interfaz de usuario de la aplicación ERP de Acumatica, debe usar el contenedor de API basado en pantalla, que se describe en la documentación de Acumatica ERP.

Exportación de datos desde un formulario de entrada con una sola clave primaria

La pantalla Artículos en stock (IN.20.25.00) es uno de los formularios de ingreso de datos más utilizados de Acumatica ERP para exportar datos. El ID de inventario es la única clave principal en la pantalla Artículos en existencia : introduzca la descripción de la imagen aquí

Para exportar registros desde un formulario de ingreso de datos, su solicitud SOAP siempre debe comenzar con el comando ServiceCommands.Every[Key] , donde [Key] debe reemplazarse con el nombre de la clave principal.

Para exportar todos los artículos en stock en una sola llamada de servicio 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 el tiempo, la cantidad de datos en cualquier aplicación de ERP tiende a crecer en tamaño. Si va a exportar todos los registros de su instancia de Acumatica ERP en una sola llamada de servicio web, muy pronto podría notar errores de tiempo de espera. Aumentar el tiempo de espera es una posible solución de una sola vez, pero no muy buena a largo plazo. Su mejor opción para enfrentar este desafío es exportar artículos en stock en lotes de varios registros.

Para exportar artículos en stock en lotes de 10 registros:

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

Existen 2 diferencias principales entre el enfoque de llamada única y la exportación en lotes:

  • El parámetro topCount del comando Exportar siempre se estableció en 0 en el enfoque de llamada única

  • al exportar registros en lotes, el tamaño de un lote se configura a través del parámetro topCount complementado por la matriz de filtros para solicitar el siguiente conjunto de resultados

Exportación de datos desde un formulario de entrada con una clave primaria compuesta

La pantalla Pedidos de ventas (SO.30.10.00) es un ejemplo perfecto de un formulario de entrada de datos con una clave principal compuesta. La clave principal en la pantalla Pedidos de ventas está compuesta por el tipo de pedido y el número de pedido : introduzca la descripción de la imagen aquí

La estrategia recomendada de 2 pasos para exportar datos desde la pantalla Pedidos de ventas o cualquier otro formulario de ingreso de datos con una clave primaria compuesta a través de la API basada en pantalla:

  • en el paso 1 solicita todos los tipos de pedidos creados previamente en su aplicación Acumatica ERP

  • El segundo paso es exportar pedidos de cada tipo de forma independiente, ya sea en una sola llamada o en lotes

Para solicitar todo tipo de pedidos existentes:

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

En la llamada SOAP anterior, observe el parámetro topCount del comando Exportar establecido en 1 . El propósito de esta solicitud es solo para obtener todos los tipos de pedidos creados previamente en su aplicación Acumatica ERP, no para exportar datos.

Para exportar registros de cada tipo de forma independiente en lotes:

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

El ejemplo anterior muestra cómo exportar todos los pedidos de venta de Acumatica ERP en lotes de 100 registros. Para exportar pedidos de ventas de cada tipo de manera independiente, su solicitud SOAP siempre debe comenzar con el comando Value , que determina el tipo de pedidos que se exportarán. Después del comando Valor utilizado para establecer el primer valor de la clave, se ServiceCommands.Every[Key] comando ServiceCommands.Every[Key] , donde [Key] debe reemplazarse con el nombre de la segunda clave.

Para exportar registros de un tipo específico:

En caso de que necesite exportar pedidos de ventas de un tipo específico, es posible definir explícitamente el tipo de pedidos con el comando Value al comienzo de su solicitud de SOAP seguido del enfoque de llamada única o la exportación en lotes.

Para exportar todos los pedidos de venta del tipo IN en una llamada:

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow