计算主人的自定义字段并将其复制到行上的自定义字段 - Acumatica

时间:2017-01-10 08:25:57

标签: acumatica

我在RQRequisition主数据视图上创建了3个自定义字段。为每个自定义字段添加FieldUpdated事件,其功能是从这些字段中对值进行求和,然后将其复制到行数据视图(RQRequisitionLine)上的自定义字段。

RQRequisition的DAC扩展定义:

//Non UI Field for UsrEngCost
[PXDBDecimal]
[PXDefault(TypeCode.Decimal, "0.0")]    

// definition for UsrCuryEngCost
[PXDBCurrency(typeof(RQRequisition.curyInfoID), typeof(RQRequisitionExt.usrEngCost))]
[PXUIField(DisplayName="Est. Eng. Cost")]    
[PXDefault(TypeCode.Decimal, "0.0")]

//Non UI Field for UsrShipCost
[PXDBDecimal]
[PXDefault(TypeCode.Decimal, "0.0")]

// definition for UsrCuryShipCost
[PXDBCurrency(typeof(RQRequisition.curyInfoID), typeof(RQRequisitionExt.usrShipCost))]
[PXUIField(DisplayName="Est. Ship. Cost")]
[PXDefault(TypeCode.Decimal, "0.0")]

//Non UI Field for UsrCleCost
[PXDBDecimal]
[PXDefault(TypeCode.Decimal, "0.0")]

// definition for UsrCuryCleCost
[PXDBCurrency(typeof(RQRequisition.curyInfoID), typeof(RQRequisitionExt.usrCleCost))]
[PXUIField(DisplayName="Est. Clear. Cost")]
[PXDefault(TypeCode.Decimal, "0.0")]

RQRequisitionLine的DAC扩展定义:

//Non UI Field for UsrAddCost
[PXDBDecimal]
[PXDefault(TypeCode.Decimal, "0.0")]

// definition for UsrCuryAddCost
[PXDBCurrency(typeof(RQRequisitionLine.curyInfoID), typeof(RQRequisitionLineExt.usrAddCost))]
[PXUIField(DisplayName="Additional Cost")]
[PXDefault(TypeCode.Decimal, "0.0")]

这是FieldUpdated事件的代码:

protected virtual void RQRequisition_UsrEngCost_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e)
{
  RQRequisition row = (RQRequisition)e.Row;
  if (row == null) return;

  RQRequisitionExt rowExt = PXCache<RQRequisition>.GetExtension<RQRequisitionExt>(row);

  RQRequisitionLine reqLine = ReqLines.Current;
  RQRequisitionLineExt reqLineExt = PXCache<RQRequisitionLine>.GetExtension<RQRequisitionLineExt>(reqLine);

  reqLineExt.usrCuryAddCost = rowExt.usrCuryEngCost + rowExt.usrCuryShipCost + rowExt.usrCuryCleCost;
  row.Update(reqLine);

}

发布并获取错误:

错误:&#39; usrCuryAddCost&#39;:无法通过表达式引用类型;尝试&#39; PX.Objects.RQ.RQRequisitionLineExt.usrCuryAddCost&#39;而是在文件中:代码#RQRequisitionEntry(41) 错误:&#39; usrCuryEngCost&#39;:无法通过表达式引用类型;尝试&#39; PX.Objects.RQ.RQRequisitionExt.usrCuryEngCost&#39;而是在文件中:Code#RQRequisitionEntry(41)

请你的意见。

1 个答案:

答案 0 :(得分:0)

'usrCuryAddCost'和'usrCuryEngCost'(第一个字符小写)字段应在DAC扩展中声明为抽象类类型。

'UsrCuryAddCost'和'UsrCuryEngCost'(第一个字符大写)应该与DAC扩展中的抽象类一起声明为属性类型。

在BQL查询中使用抽象类(第一个字符小写),键入参数和属性。

当您需要访问字段的属性值时,可以使用属性(第一个字符大写)。

你试过这个: reqLineExt.UsrCuryAddCost = rowExt.UsrCuryEngCost + rowExt.UsrCuryShipCost + rowExt.UsrCuryCleCost;

这些属性是否在扩展DAC中声明了?