Упорядочить по при получении из API веб-службы Acumatica

Мне было интересно, есть ли способ добавить предложение «Порядок по» при извлечении данных из Acumatica через API веб-службы?

IN202500Content IN202500 = oScreen.IN202500GetSchema();
oScreen.IN202500Clear();

Command[] oCmd = new Command[] {IN202500.StockItemSummary.ServiceCommands.EveryInventoryID,
                                IN202500.StockItemSummary.InventoryID,
                                IN202500.StockItemSummary.Description, 
                                IN202500.StockItemSummary.ItemStatus, 
                                IN202500.GeneralSettingsItemDefaults.ItemClass, 
                                IN202500.GeneralSettingsItemDefaults.LotSerialClass,
                                IN202500.PriceCostInfoPriceManagement.DefaultPrice,
                                };
               
Filter[] oFilter = new Filter[] {new Filter 
                                 {
                                   Field = new Field {ObjectName = IN202500.StockItemSummary.InventoryID.ObjectName,
                                                      FieldName = "LastModifiedDateTime"},
                                                      Condition = FilterCondition.GreaterOrEqual,
                                                      Value = SyncDate
                                 }
                                };

String[][] sReturn = oScreen.IN202500Export(oCmd, oFilter, iMaxRecords, true, false);

Я хотел бы отсортировать результаты, например, по DefaultPrice, чтобы я мог получить 200 самых дорогих элементов в моем списке (используя в данном случае iMaxRecords = 200)

Я еще не видел никаких параметров, позволяющих мне выполнять сортировку.


person GaGa    schedule 08.01.2016    source источник


Ответы (1)


Я столкнулся с этим, когда разработал систему назначения циклического перебора, и краткий ответ - использование API Acumatica, вы не можете выполнить сортировку результатов, которые вы должны сделать за пределами API (эта информация пришла от друга, тесно связанного с Acumatica. продукт).

Я придумал два варианта:

  1. Запросить вашу БД напрямую ... Всегда есть причины не делать этого, но это намного быстрее, чем получение результата из API, и позволит вам обойти использование BQL Acumatica и написать оператор SQL, который делает ТОЧНО то, что вы хотите, предоставляя Результат, с которым легче работать, чем с зазубренным массивом, который посылает Acumatica.
  2. Вы можете использовать Linq и построить второй массив [] [], который отсортирован по цене, а затем обрезать его до 200 лучших (сначала вам понадобятся все результаты от Acumatica).

    // This is rough but should get you there. 
    string[][] MaxPriceList = sReturn.OrderBy(innerArray =>
        {
            if () // This is a test to make sure the element is not null
            {
                decimal price;
                if (//test decimal is not null))
                    return price;
            }
    
            return price.MaxValue;
        }).Take(200).ToArray(); //Take 200 is a shot but might work
    
person Allen Craig    schedule 14.01.2016
comment
Я не тестировал этот раньше, но для 200 лучших Top200 = MaxPriceList.Take(200); - person Allen Craig; 14.01.2016