Сохранение строк заказа на продажу в коде настройки Acumatica - PullRequest
0 голосов
/ 16 марта 2019

Я получаю ошибки при попытке сохранить SO строки в коде настройки Acumatica.Я создал новый простой класс PXGraph, который определяет базовое представление SOLine для кэширования и сохранения.Это просто:

public PXSelect<SOLine> OrderLines;

В пользовательском коде он создает несколько SO-строк в моем кеше представления выше, выполняя вставку в кеш:

SOLine newOrderLineItem = lineGraph.OrderLines.Cache.Insert();

, а затем использует результирующую строку для установки егоценности до настойчивости.После добавления этих строк я стараюсь их сохранить.Я пробовал оба:

lineGraph.OrderLines.Cache.Persist(PXDBOperation.Insert);

и:

lineGraph.Actions.PressSave();

и оба дают ошибки.Первый говорит: «OrderDate» не может быть пустым ».Однако перед выполнением Persist все строки имеют значение OrderDate.StackTrace показывает, что он генерируется в событии RowPersisting.Так что когда-то между вызовом Persist () и событием RowPersisting по умолчанию (которое я не определил), для строки OrderDate строки было установлено значение null, но я понятия не имею, где.В последнем сообщается: «В записи« Перекрестная ссылка »возникла как минимум одна ошибка», а «« Поставщик / Клиент »не может быть пустым».Тем не менее, CustomerID и VendorID строки не являются пустыми, и оба действительны.

Что я могу сделать, чтобы устранить эти ошибки или сохранить строки по-другому, что на самом деле работает?

v17.209.0028

Стек вызовов Persist ():

   at PX.Data.PXDBDefaultAttribute.RowPersisting(PXCache sender, PXRowPersistingEventArgs e)
   at PX.Data.PXCache.OnRowPersisting(Object item, PXDBOperation operation)
   at PX.Data.PXCache`1.PersistInserted(Object row)
   at PX.Data.PXCache`1.Persist(PXDBOperation operation)
   at Aktion.Acumatica.Customizations.EDI.EEdiDocInboundProcess.CreateOrderAndLineItems(EEdiStOrdHed doc, EEdiStOrdHed origDoc)
   at Aktion.Acumatica.Customizations.EDI.EEdiDocInboundProcess.CreateSalesOrder(EEdiStOrdHed doc)

Обновление (3/16): Поэтому я просто поместил в SOLECLE подклассы моего собственного класса и переопределил установщик свойства OrderDate, чтобы перехватитьэто устанавливается в ноль.Это сработало, но я до сих пор не знаю, что пытается его обнулить, так как стек вызовов просто говорит мне, что это внешний код.В любом случае, теперь ошибка: «Операция не может быть пустой».Я предполагаю, что буду сохранять поля по умолчанию и переопределяющие сеттеры от ошибок до тех пор, пока у меня не закончатся поля - или терпение.

1 Ответ

0 голосов
/ 18 марта 2019

Наконец, я решил проблему, продолжая устранять полевые ошибки одну за другой, пока она не исчезла. Мне также пришлось установить поля SOLine Operation, LineType и AutoCreateissueLine. Если вам интересно, почему я вообще пытаюсь использовать отдельное представление, это из соображений производительности. У меня есть пользовательская страница, которая обрабатывает данные EDI и создает SO с SOLines. Существующее представление может занять много-много минут для сотен строк. Упрощение представления уменьшило его до минуты или меньше.

...