Acumatica 将值指定给对话框面板上的自定义字段(分配)

Acumatica 将值指定给对话框面板上的自定义字段(分配),acumatica,Acumatica,我在采购收据的分配面板上添加了一个custome字段“UsrWgtIndex”。它的值是其他自定义字段“UsrWgtPerUnit”的总和 但奇怪的事情发生了。打开Different分配面板时,UsrWgtIndex的值保持不变。它始终是第一行事务的值 下面是我的代码,对此我真的很困惑。在逻辑上,代码将对每行事务求和,并分配每行“UsrWgtIndex”。但它始终是第一行的值 有人能帮忙吗?非常感谢 namespace PX.Objects.PO { public class PORec

我在采购收据的分配面板上添加了一个custome字段“UsrWgtIndex”。它的值是其他自定义字段“UsrWgtPerUnit”的总和

但奇怪的事情发生了。打开Different分配面板时,UsrWgtIndex的值保持不变。它始终是第一行事务的值

下面是我的代码,对此我真的很困惑。在逻辑上,代码将对每行事务求和,并分配每行“UsrWgtIndex”。但它始终是第一行的值

有人能帮忙吗?非常感谢

namespace PX.Objects.PO {
  public class POReceiptEntry_Extension: PXGraphExtension < POReceiptEntry > {
    #region Event Handlers
    decimal totalCgt = 0 M,
    tempTotal = 0 M;

    protected void POReceiptLine_RowSelected(PXCache cache, PXRowSelectedEventArgs e) {
      POReceiptLine poRLine = (POReceiptLine) e.Row;

      if (poRLine != null) {
        totalCgt = 0 M;
        foreach(POReceiptLineSplit line in Base.splits.Select()) {
          POReceiptLineSplitExt poReceiptLineSplitExt = line.GetExtension < POReceiptLineSplitExt > ();
          var recentQty = poReceiptLineSplitExt.UsrWgtPerUnit;
          var temp = Convert.ToDecimal(recentQty);
          totalCgt = totalCgt + temp;
        };
        var cgt = Convert.ToDecimal(totalCgt);
        if (totalCgt != null) {
          cache.SetValue < POReceiptLineExt.usrTotalWgt > (poRLine, cgt);

          //This line is setting the value of usrWgtIndex
          cache.SetValue < POReceiptLineExt.usrWgtIndex > (poRLine, cgt);
        };
      }
    }
  }
}
namespace PX.Objects.PO{
公共类PorecipEntry\u扩展:pXgrapherExtension{
#区域事件处理程序
十进制总CGT=0 M,
总高度=0米;
受保护的无效POReceiptLine_行已选定(PXCache缓存,PXRowSelectedEventArgs e){
POReceiptLine poRLine=(POReceiptLine)e.行;
if(poRLine!=null){
总CGT=0米;
foreach(Base.splits.Select()中的POReceiptLineSplit行){
POReceiptLineSplitExt POReceiptLineSplitExt=line.GetExtension();
var recentQty=poReceiptLineSplitExt.UsrWgtPerUnit;
var temp=转换为特定值(最近数量);
总CGT=总CGT+温度;
};
var cgt=转换为特定值(总cgt);
如果(总CGT!=null){
cache.SetValue(poRLine,cgt);
//此行正在设置usrWgtIndex的值
cache.SetValue(poRLine,cgt);
};
}
}
}
}
更详细的更新:

  • 客户字段“usrWgtIndex”属于数据类“POReceiptLine”。但我在分配面板上控制它
  • 我做了一个测试:在分配面板上的字段“UnassignedQty”中设置值,该值与我给“usrWgtIndex”的值相同。它工作正常。或者我在同一时间用相同的值更改了POReceiptLine数据类中的另一个字段,它再次正常工作。 3.如果我更改分配面板上的自定义字段,似乎会发生这种奇怪的事情
  • 更详细的更新2:

    我没有在DAC lotsOptions上添加“UsrWgtIndex”。我把它加在了POReceiptLine上。因为当我在LotSerOptions上添加自定义字段时,我不能用setValueEXT方法分配它的值,似乎没有名为“lotseroptionText”的DAC。 所以我只是把“UsrWgtIndex”放在DAC POReceiptLine上,并用

    cache.SetValue<POReceiptLineExt.usrWgtIndex>(poRLine, cgt);
    
    cache.SetValue(poRLine,cgt);
    

    拆分数据视图取决于“当前”POReceiptLine:

    PXSelect<POReceiptLineSplit, Where<POReceiptLineSplit.receiptNbr, Equal<Current<POReceiptLine.receiptNbr>>,
                                    And<POReceiptLineSplit.lineNbr, Equal<Current<POReceiptLine.lineNbr>>,
                                    And<Where<POLineType.goodsForInventory, Equal<Current<POReceiptLine.lineType>>,
                                        Or<POLineType.goodsForSalesOrder, Equal<Current<POReceiptLine.lineType>>,
                                        Or<POLineType.goodsForDropShip, Equal<Current<POReceiptLine.lineType>>>>>>>>> splits;
    
    px选择拆分;
    
    问题在于,当用户在“事务”网格中单击(选择)另一个POReceiptLine时,“当前”POReceiptLine不会更改。在自定义项目中将网格“SyncPosition”设置为true,应确保在用户更改网格中的记录选择时正确设置“Current”值:

    嘿,伙计。谢谢回复。但它不起作用。可能我遗漏了一些细节,请检查上面的“更多细节更新”。检查POReceiptLine_RowSelected中Base.transactions.Current的值,确保它与用户选择的行匹配。使用Edit ASPX确保设置了事务网格中的SyncPosition。所有行也将调用RowSelected。我认为您需要一个条件来只计算当前行的自定义字段,而不是所有的line.Base.transactions.current和ASPX都可以。最奇怪的是,如果我在POReceiptLine上更改exist字段或自定义字段控件,就不会发生这种情况。Split始终属于我选择的poreceiptLine。在Acumatica基本产品中,分配弹出窗口的表单dataview(LSPOReceiptLine_lotseropts)中使用的DAC是lotseropptions。我希望您的自定义字段位于该DAC中,但根据您的屏幕截图,您似乎已大幅修改了分配弹出窗口的表单部分,错误也可能存在。如果您重新定义表单以使用另一个DAC,您还需要确保在那里正确设置电流。