Поиск…


Вступление

В этом разделе будет показано, как экспортировать записи из Acumatica ERP через API на основе экрана. API-интерфейс Acumatica, основанный на экране, предоставляет только интерфейс SOAP. Если ваша платформа разработки имеет ограниченную поддержку веб-служб SOAP, рассмотрите API на основе контракта, предоставляющий интерфейсы SOAP и REST. Для получения дополнительной информации о API на основе экрана см. Документацию Acumatica ERP

замечания

Все примеры, предоставленные в этом разделе, были созданы с помощью API-интерфейса на основе экрана. Если вы хотите, чтобы ваше клиентское приложение не зависело от изменений пользовательского интерфейса в приложении Acumatica ERP, вы должны использовать оболочку API на основе экрана, которая описана в документации Acumatica ERP

Экспорт данных из формы ввода с одним основным ключом

Экран Stock Items (IN.20.25.00) является одной из наиболее часто используемых форм ввода данных Acumatica ERP для экспорта данных. Идентификатор инвентаря - единственный первичный ключ на экране « Элементы запасов» : введите описание изображения здесь

Чтобы экспортировать записи из формы ввода данных, ваш запрос SOAP всегда должен начинаться с команды ServiceCommands.Every[Key] , где [Key] следует заменить на имя первичного ключа.

Чтобы экспортировать все элементы запаса в один вызов веб-службы:

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

Со временем количество данных в любом приложении ERP имеет тенденцию к росту. Если вы будете экспортировать все записи из вашего экземпляра Acumatica ERP в одном вызове веб-службы, очень скоро вы можете заметить ошибки тайм-аута. Увеличение таймаута - это одноразовое, но не очень хорошее долгосрочное решение. Ваш лучший вариант для решения этой проблемы заключается в экспорте товарных позиций партиями нескольких записей.

Экспортировать товарные позиции партиями по 10 записей:

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

Существуют два основных различия между подходом к единому вызову и экспортом в партиях:

  • Параметр topCount команды Export всегда был установлен в 0 в подходе с одним вызовом

  • при экспорте записей партиями размер партии настраивается с помощью параметра topCount, дополненного массивом Filter, для запроса следующего набора результатов

Экспорт данных из формы ввода с составным основным ключом

Экран « Заказы» (SO.30.10.00) - прекрасный пример формы ввода данных с составным первичным ключом. Первичный ключ на экране « Заказы» состоит из типа заказа и номера заказа : введите описание изображения здесь

Рекомендуемая двухэтапная стратегия экспорта данных с экрана « Заказы на продажу» или любой другой формы ввода данных с помощью составного первичного ключа через API на основе экрана:

  • на шаге 1 вы запрашиваете все типы заказов, ранее созданных в вашем приложении Acumatica ERP

  • Второй шаг заключается в том, чтобы экспортировать заказы каждого типа независимо либо по одному вызову, либо по партиям

Чтобы запросить все существующие заказы:

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

В вышеприведенном вызове SOAP обратите внимание на параметр topCount команды Export, установленный в 1 . Цель этого запроса состоит только в том, чтобы получить все типы заказов, ранее созданные в вашем приложении Acumatica ERP, а не для экспорта данных.

Экспортировать записи каждого типа самостоятельно партиями:

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

В приведенном выше примере демонстрируется, как экспортировать все заказы от Acumatica ERP партиями по 100 записей. Чтобы экспортировать заказ клиента каждого типа независимо, ваш запрос SOAP всегда должен начинаться с команды Value , которая определяет тип экспортируемых заказов. После того, как команда Value, используемая для установки первого значения ключа, отправляется командой ServiceCommands.Every[Key] , где [Key] следует заменить именем второго ключа.

Чтобы экспортировать записи определенного типа:

Если вам нужно экспортировать заказы на продажу определенного типа, можно явно определить тип заказов с помощью команды « Value в начале вашего запроса SOAP, за которым следует подход с одним вызовом или экспорт по партиям.

Чтобы экспортировать весь заказ клиента типа IN одним вызовом:

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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow