【问题标题】:calculating custom field on masters and copying it to custom field on lines - Acumatica计算母版上的自定义字段并将其复制到线上的自定义字段 - Acumatica
【发布时间】:2017-01-11 10:54:07
【问题描述】:

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

RQRquisition 的 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")]

RQRquisitionLine 的 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)

恳请您的建议。

【问题讨论】:

    标签: acumatica


    【解决方案1】:

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

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

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

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

    您是否尝试过: reqLineExt.UsrCuryAddCost = rowExt.UsrCuryEngCost + rowExt.UsrCuryShipCost + rowExt.UsrCuryCleCost;

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

    【讨论】:

    • 扩展 DAC 中已经声明了这些属性。你可以在我上面更新的问题中找到它。
    • 如果您使用项目编辑器,您可以通过单击数据类屏幕的查看源按钮来查看字段的属性。您添加到问题中的是字段的属性。属性将被声明为:'覆盖小数? UsrEngCost { 得到;放 }'。看来您正在使用参考类,它应该如下所示:抽象类 UsrEngCost : IBqlField { }。至少这就是“无法通过表达式引用类型”错误的意思。
    • 我的意思是抽象类小写:abstract class usrEngCost : IBqlField { }.
    猜你喜欢
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 2019-07-12
    相关资源
    最近更新 更多