【问题标题】:Persisting sales order lines in Acumatica customization code在 Acumatica 自定义代码中保留销售订单行
【发布时间】:2019-08-07 03:22:06
【问题描述】:

尝试在 Acumatica 自定义代码中保留 SO 行时出现错误。我创建了一个新的简单 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,但我不知道在哪里。后者表示“'Cross-Reference' 记录引发了至少一个错误”,并且“'Vendor/Customer' 不能为空”。但是,该行的 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): 所以我只是将 SOLine 子类化为我自己的类并覆盖 OrderDate 属性设置器以将其设置为 null。这行得通,但我仍然不知道是什么试图将其清空,因为调用堆栈只是告诉我它的外部代码。无论如何,现在的错误是“'操作'不能为空。”。我想我会一直使用默认字段并从错误中覆盖设置器,直到我用完字段 - 或耐心。

【问题讨论】:

  • SOLine 的 OrderDate 默认采用 SOOrder 的 OrderDate,这似乎是导致此问题的原因。您有该行的销售订单的数据视图吗?
  • Samvel,SO 的视图是现有 SOOrderEntry 图的 Document 视图,它的订单日期也有值。
  • 正如 Samvel Petrosov 提到的,您应该确保查看 SOOrder 并将当前值设置为当前订单。这应该确保在插入期间设置 SOOrder 的 SOLine 默认值。
  • Brendan,正如我已经提到的,我正在使用 SOOrderEntry 图的文档视图。对于 SOLine,我使用自己的视图,因为 SOOrderEntry 的事务视图太慢。我通过继续一一解决字段错误最终解决了这个问题。我会尽快发布更新。
  • 我以为您在自己的图表上创建了自己的视图?如果使用 SOOrderEntry 那么您可能只需要将 SOOrder 视图设置为当前。如果您制作自己的图表,您可以为 SOOrder 选择当前。两者都应该自动解决字段值。至于性能,根据需要设置默认值,甚至删除一些属性可能有助于提高性能。我没有这么多次,例如当我不需要该信息时删除引发子查询到其他表的属性。因此,我需要将条目限制在最低限度以获得您的条目。

标签: acumatica


【解决方案1】:

我最终解决了这个问题,继续一一解决字段错误,直到它仍然存在。我还必须设置 SOLine 字段 Operation、LineType 和 AutoCreateissueLine。如果您想知道我为什么要尝试使用单独的视图,那是出于性能原因。我有一个自定义页面,它处理 EDI 数据并使用 SOLines 创建 SO。对于数百行,现有视图可能需要很多很多分钟。到目前为止,简化视图已将其缩短到一分钟或更短时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多