计算母版上的自定义字段并将其复制到线上的自定义字段 - Acumatica
calculating custom field on masters and copying it to custom field on lines - 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);
}
发布并收到错误:
错误:'usrCuryAddCost':无法通过表达式引用类型;在文件中尝试 'PX.Objects.RQ.RQRequisitionLineExt.usrCuryAddCost':代码#RQRequisitionEntry(41)
错误:'usrCuryEngCost':无法通过表达式引用类型;在文件中尝试 'PX.Objects.RQ.RQRequisitionExt.usrCuryEngCost':代码#RQRequisitionEntry(41)
需要您的建议。
'usrCuryAddCost' 和 'usrCuryEngCost'(第一个字符小写)字段应在 DAC 扩展中声明为抽象 class 类型。
'UsrCuryAddCost' 和 'UsrCuryEngCost'(第一个字符大写)应在 DAC 扩展中与抽象 classes 一起声明为 属性 类型。
您在 BQL 查询、类型参数和属性中使用抽象 class(第一个字符小写)。
当您需要访问字段的 属性 值时,您可以使用属性(第一个字符大写)。
你试过这个吗:
reqLineExt.UsrCuryAddCost = rowExt.UsrCuryEngCost + rowExt.UsrCuryShipCost + rowExt.UsrCuryCleCost;
这些属性是否在扩展 DAC 中声明?
我在 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);
}
发布并收到错误:
错误:'usrCuryAddCost':无法通过表达式引用类型;在文件中尝试 'PX.Objects.RQ.RQRequisitionLineExt.usrCuryAddCost':代码#RQRequisitionEntry(41) 错误:'usrCuryEngCost':无法通过表达式引用类型;在文件中尝试 'PX.Objects.RQ.RQRequisitionExt.usrCuryEngCost':代码#RQRequisitionEntry(41)
需要您的建议。
'usrCuryAddCost' 和 'usrCuryEngCost'(第一个字符小写)字段应在 DAC 扩展中声明为抽象 class 类型。
'UsrCuryAddCost' 和 'UsrCuryEngCost'(第一个字符大写)应在 DAC 扩展中与抽象 classes 一起声明为 属性 类型。
您在 BQL 查询、类型参数和属性中使用抽象 class(第一个字符小写)。
当您需要访问字段的 属性 值时,您可以使用属性(第一个字符大写)。
你试过这个吗: reqLineExt.UsrCuryAddCost = rowExt.UsrCuryEngCost + rowExt.UsrCuryShipCost + rowExt.UsrCuryCleCost;
这些属性是否在扩展 DAC 中声明?