acumatica
Экспорт записей через экранный интерфейс
Поиск…
Вступление
В этом разделе будет показано, как экспортировать записи из 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();
}