通过Acumatica中的PXformula属性计算字段值

通过Acumatica中的PXformula属性计算字段值,acumatica,Acumatica,我正在使用pxformula乘以值,但未能得到它。当我乘以像小数点100*小数点100这样的常量值时,它给出了一个结果。但是当我使用avgcost时,它不起作用。我认为pxformula中使用的avgcost来自INItemCost表。 下面是我从acumatica得到的文章 您可以使用数据访问类(DAC)中预定义的属性PXFormula和PXUnboundFormula从同一数据记录的值计算字段值。您还可以计算详细数据记录的聚合值,并将聚合值分配给主数据记录的字段 屏幕截图显示未渲染任何结果

我正在使用pxformula乘以值,但未能得到它。当我乘以像小数点100*小数点100这样的常量值时,它给出了一个结果。但是当我使用avgcost时,它不起作用。我认为pxformula中使用的avgcost来自INItemCost表。 下面是我从acumatica得到的文章

您可以使用数据访问类(DAC)中预定义的属性PXFormula和PXUnboundFormula从同一数据记录的值计算字段值。您还可以计算详细数据记录的聚合值,并将聚合值分配给主数据记录的字段

屏幕截图显示未渲染任何结果。


请建议我解决这个问题。

在这种情况下,您希望使用DACINItemCost中的信息更新DACCSAnswer中的值。据我所知,PXFormula[]属性可用于更新来自同一DAC记录的值,和/或用于聚合计算

典型示例:电网的单价和数量用于获得扩展价格(来自同一DAC记录的值)。并且该结果在文档的总计(聚合总计)中更新 我没有看到它被用在像你这样的例子中

然而,我能够用这种替代方法更新值:

  public class InventoryItemMaint_Extension : PXGraphExtension<InventoryItemMaint>
  {  
       protected virtual void CSAnswers_Value_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
       {
           if (e.Row == null) return;

          CSAnswers answer = (CSAnswers)e.Row;
          CSAnswersExt answerExt = sender.GetExtension<CSAnswersExt>(answer);

          if (answerExt != null)
          {

              INItemCost itemCost = PXSelect<INItemCost, Where<INItemCost.inventoryID, Equal<Required<InventoryItem.inventoryID>>>>.Select(this.Base, this.Base.Item.Current.InventoryID);

              if (itemCost != null && itemCost.AvgCost != null)
              {
                  answerExt.UsrPrice = itemCost.AvgCost * (decimal)365;
              }
          }
        }
    }
公共类InventoryItemMaint_扩展名:pxGrapherExtension
{  
受保护的虚拟void CSAnswers\u Value\u FieldUpdated(PXCache发送器,PXFieldUpdatedEventArgs e)
{
if(e.Row==null)返回;
CSAnswers answer=(CSAnswers)e.Row;
csanswersextanswerext=sender.GetExtension(应答);
if(answerExt!=null)
{
INItemCost itemCost=PXSelect.Select(this.Base,this.Base.Item.Current.InventoryID);
if(itemCost!=null&&itemCost.AvgCost!=null)
{
answerExt.UsrPrice=itemCost.AvgCost*(十进制)365;
}
}
}
}
结果

附加注释

  • 我使用CSU值字段来更新数据,因为平均成本是一个禁用字段
  • 此逻辑将更新新记录中的UsrPrice以及正在更新的特定属性行。如果您希望批量更新现有数据,则必须使用其他逻辑

在这种情况下,您希望使用来自DAC初始成本的信息更新来自DACCSAnswer的值。据我所知,PXFormula[]属性可用于更新来自同一DAC记录的值,和/或用于聚合计算

典型示例:电网的单价和数量用于获得扩展价格(来自同一DAC记录的值)。并且该结果在文档的总计(聚合总计)中更新 我没有看到它被用在像你这样的例子中

然而,我能够用这种替代方法更新值:

  public class InventoryItemMaint_Extension : PXGraphExtension<InventoryItemMaint>
  {  
       protected virtual void CSAnswers_Value_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e)
       {
           if (e.Row == null) return;

          CSAnswers answer = (CSAnswers)e.Row;
          CSAnswersExt answerExt = sender.GetExtension<CSAnswersExt>(answer);

          if (answerExt != null)
          {

              INItemCost itemCost = PXSelect<INItemCost, Where<INItemCost.inventoryID, Equal<Required<InventoryItem.inventoryID>>>>.Select(this.Base, this.Base.Item.Current.InventoryID);

              if (itemCost != null && itemCost.AvgCost != null)
              {
                  answerExt.UsrPrice = itemCost.AvgCost * (decimal)365;
              }
          }
        }
    }
公共类InventoryItemMaint_扩展名:pxGrapherExtension
{  
受保护的虚拟void CSAnswers\u Value\u FieldUpdated(PXCache发送器,PXFieldUpdatedEventArgs e)
{
if(e.Row==null)返回;
CSAnswers answer=(CSAnswers)e.Row;
csanswersextanswerext=sender.GetExtension(应答);
if(answerExt!=null)
{
INItemCost itemCost=PXSelect.Select(this.Base,this.Base.Item.Current.InventoryID);
if(itemCost!=null&&itemCost.AvgCost!=null)
{
answerExt.UsrPrice=itemCost.AvgCost*(十进制)365;
}
}
}
}
结果

附加注释

  • 我使用CSU值字段来更新数据,因为平均成本是一个禁用字段
  • 此逻辑将更新新记录中的UsrPrice以及正在更新的特定属性行。如果您希望批量更新现有数据,则必须使用其他逻辑