【问题标题】:Not getting "this._Graph.Caches" on Sales Order Copy Order Action没有在销售订单复制订单操作中获得“this._Graph.Caches”
【发布时间】:2019-08-15 22:50:36
【问题描述】:

在销售订单上,当我复制订单操作时。我的代码错误,因为检索“this._Graph.Caches[BqlCommand.GetItemType(selectorInventoryID)];”的行是 = 0。 该程序运行良好,除了前面提到的操作。

private Type selectorOrderNbr;
private Type selectorInventoryID;

public ItemDiscountClassAttribute() : base(typeof(ARDiscount.discountID))
{}
protected virtual IEnumerable GetRecords()
{
 this.selectorOrderNbr = typeof(SOOrder.orderNbr);
 var cache1 = this._Graph.Caches[BqlCommand.GetItemType(selectorOrderNbr)];             
 var order = (SOOrder)cache1.Current;

 this.selectorInventoryID = typeof(SOLine.inventoryID);
 var cache2 = this._Graph.Caches[BqlCommand.GetItemType(selectorInventoryID)];
 var line = (SOLine)cache2.Current;

应该是:cache2 = "{PXCache(1)}"

但输出是:cache2 = "{PXCache(0)}"

Highlighted section where var cache2 is 0 and var line is null

【问题讨论】:

  • 你能具体说明你从哪里复制这段代码的图表和方法吗?
  • Samvel,该图是 SOOrderEntry 的扩展。代码是自定义的,我只是添加了一张完整代码的图片。
  • 我在这段代码中看到的问题是它缺少几乎所有的空值检查。如果我正确理解 Acumatica 与选择器的关系,那么即使在您向销售订单插入一行之前,也会调用此代码。

标签: acumatica


【解决方案1】:

通读您的代码,它看起来显示了基于 SOLine 应用的折扣。也许问题是在 SOLine 上设置 InventoryID 之前应用了折扣代码?如果您更新基于 LineNbr 的行搜索,您仍然可能有一个空的 InventoryID。也许在没有找到 InventoryID 时返回所有折扣可能会通过复制操作?如果这是问题所在,您可以通过选择新行、跳过项目并首先选择折扣代码来重现该行为。

【讨论】:

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