Как правильно фильтровать экспорт в веб-службах Acumatica?
Я только что протестировал пример кода о том, как экспортировать с фильтрами на Acumatica с веб-службами. Но это полностью игнорирует фильтры.
DateTime syncDate = new DateTime(2016, 1, 1);
WebReference.Screen context = new WebReference.Screen();
context.CookieContainer = new System.Net.CookieContainer();
context.AllowAutoRedirect = true;
context.EnableDecompression = true;
context.Timeout = 1000000;
context.Url = "http://<MYACUMATICAINSTANCE>/(W(64))/Soap/IN202500.asmx";
context.Login("<MYUSER>", "<MYPASS>");
WebReference.Content IN202500 = context.GetSchema();
context.Clear();
string[][] result = context.Export(
new WebReference.Command[]{
IN202500.StockItemSummary.ServiceCommands.EveryInventoryID,
IN202500.StockItemSummary.InventoryID,
IN202500.StockItemSummary.Description,
IN202500.WarehouseDetails.WarehouseWarehouseID,
IN202500.WarehouseDetails.QtyOnHand
},
new WebReference.Filter[]{
new WebReference.Filter { Field = new WebReference.Field { ObjectName = IN202500.StockItemSummary.ItemStatus.ObjectName, FieldName = IN202500.StockItemSummary.ItemStatus.FieldName }, Condition = WebReference.FilterCondition.Equals, Value = "Activse", Operator = WebReference.FilterOperator.And },
new WebReference.Filter { Field = new WebReference.Field { ObjectName = IN202500.StockItemSummary.InventoryID.ObjectName, FieldName = "LastModifiedDateTime" }, Condition = WebReference.FilterCondition.Equals, Value = syncDate.ToLongDateString(), Operator = WebReference.FilterOperator.And }
},
5, false, false
);
foreach (string[] item in result)
{
Console.WriteLine(
item[0] + ";" +
item[1] + ";" +
item[2] + ";" +
item[3] + ";"
);
}
Обратите внимание на плохое syncDate
и плохое состояние Activse
для плохой фильтрации он не должен возвращать результатов, но вместо этого он возвращает все результаты.
1 ответ
Я обнаружил, что фильтры не работают должным образом на экранах по умолчанию. Если вы создаете общий запрос, вы можете указать фильтры и сократить набор результатов до нужных полей. Кроме того, экраны GI обычно работают быстрее, чем стандартные экраны по умолчанию.