Ошибка Acumatica GetList: Оптимизация не может быть выполнена. Следующие поля вызывают ошибку: Attributes.AttributeID - PullRequest
0 голосов
/ 25 мая 2020

Версия Acumatica 2020R1 для разработчиков устанавливается локально. Данные для образца арендатора MyTenant из обучения I-300 были загружены, и соединение WSDL установлено.

DefaultSoapClient создается нормально.

Однако попытки экспортировать любые данные с помощью Getlist вызывают ошибки:

       using (Default.DefaultSoapClient soapClient =
             new Default.DefaultSoapClient())
        {
            //Sign in to Acumatica ERP
            soapClient.Login
            (
                "Admin",
                "*",
                "MyTenant",
                "Yogifon",
                null
            );

            try
            {
                //Retrieving the list of customers with contacts
                //InitialDataRetrieval.RetrieveListOfCustomers(soapClient);
                //Retrieving the list of stock items modified within the past day
                // RetrievalOfDelta.ExportStockItems(soapClient);
                RetrievalOfDelta.ExportItemClass(soapClient);
            }

    public static void ExportItemClass(DefaultSoapClient soapClient)
    {
        Console.WriteLine("Retrieving the list of item classes...");
        ItemClass ItemClassToBeFound = new ItemClass
        {
            ReturnBehavior = ReturnBehavior.All,
        };
        Entity[] ItemClasses = soapClient.GetList(ItemClassToBeFound);

        string lcItemType = "", lcValuationMethod = "";
        int lnCustomFieldsCount;

        using (StreamWriter file = new StreamWriter("ItemClass.csv"))
        {
            //Write the values for each item
            foreach (ItemClass loItemClass in ItemClasses)
            {
                file.WriteLine(loItemClass.Note);
            }
        }

Экземпляр Acumatica был изменен путем добавления настраиваемого поля в Товары на складе с использованием DA C и путем добавления нескольких атрибутов к элементам клиента и запасам.

Интересно, что этот код работал, пока что-то не сломалось.

Что здесь не так?

Спасибо. Александр

1 Ответ

0 голосов
/ 26 мая 2020

В запросе у вас есть следующая строка: ReturnBehavior = ReturnBehavior.All Это означает, что вы пытаетесь получить все связанные / подробные сущности объекта. К сожалению, некоторые объекты недостаточно оптимизированы, чтобы не влиять на производительность запросов в сценарии GetList ios. Итак, у вас есть параметры:

  1. Заменить ReturnBehavior = All, явно указав связанные / подробные сущности, которые вы хотите получить, и не включать атрибуты в список.
  2. Получить StockItem с атрибутами один за другим, используя операцию Get вместо GetList.

PS Проблема с атрибутами, скорее всего, будет исправлена ​​в следующей версии конечной точки API.

Изменить:

Пример кода для Get:

public static void ExportItemClass(DefaultSoapClient soapClient)
{
    Console.WriteLine("Retrieving the list of item classes...");
    ItemClass ItemClassToBeFound = new ItemClass
    {
        ReturnBehavior = ReturnBehavior.Default //retrieve only default fields (without attributes and other linked/detailed entities)
    };
    Entity[] ItemClasses = soapClient.GetList(ItemClassToBeFound);

   foreach(var entity in ItemClasses)
   {
       ItemClass itemClass= entity  as ItemClass;
       ItemClass.ReturnBehavior=ReturnBehavior.All;
       // retrieve each ItemClass with all the details/linked entities individually
       ItemClass retrievedItemCLass = soapClient.Get(itemClass);

   }
...