【问题标题】:Populate Field in Grid with selection of another Field通过选择另一个字段填充网格中的字段
【发布时间】:2018-02-12 19:33:30
【问题描述】:

这特别适用于 Acumatica 的服务管理模块。在服务订单屏幕 (SD300100) 和人工选项卡下。我们希望在创建新行并选择型号后,将根据所选型号自动填充服务 ID。

我已经编码了这个:

protected void FSSODetService_ServiceID_FieldSelecting(PXCache cache, PXFieldSelectingEventArgs e)
    {

        var service = (FSSODetService)e.Row;
        if (service == null) return;
        var equipment = (FSEquipment)PXSelect<FSEquipment,
        Where<FSEquipment.SMEquipmentID, Equal<Required<FSSODetService.SMEquipmentID>>>>.Select(Base, service.ServiceID);
        if (equipment != null)
        {
            e.ReturnValue = equipment.EquipmentTypeID;
        }
    }

这在发布时给我留下了这个错误。

\App_RuntimeCode\ServiceOrderEntry.cs(54): error CS0118: 'FieldService.ServiceDispatch.FSEquipment.SMEquipmentID' is a 'property' but is used like a 'type'
\App_RuntimeCode\ServiceOrderEntry.cs(54): error CS0118: 'FieldService.ServiceDispatch.FSSODet.SMEquipmentID' is a 'property' but is used like a 'type'

我觉得这与数据库值的设置有关,因为它们在开头是大写而不是小写。如果有人对此有所了解,我将不胜感激。

【问题讨论】:

    标签: gridview customization acumatica


    【解决方案1】:

    以大写字母开头的字段名称引用属性值字段。 以小写字母开头的字段名称表示字段的类型。

    在 BQL 查询中,您不向查询提供字段的值。您提供字段的类型,因此您必须使用小写首字母:

    PXSelect<FSEquipment,
    Where<FSEquipment.sMEquipmentID, Equal<Required<FSSODetService.sMEquipmentID>>>>
    

    在 BQL 查询参数中,您使用属性值而不是类型,因此您使用大写字母:

    .Select(Base, service.ServiceID)
    

    编辑: 您在 FieldService 产品的命名约定中发现了一个错误。 而不是像这样使第一个字母大写/小写:'sMEQUIpmentID' / 'SMEquipmentID'

    public abstract class sMEquipmentID : PX.Data.IBqlField { }
    public virtual int? SMEquipmentID { get; set; }
    

    他们选择了第三个字母:'SMequipmentID' / 'SMEquipmentID'

    public abstract class SMequipmentID : PX.Data.IBqlField { }
    public virtual int? SMEquipmentID { get; set; }
    

    因此,仅对于此字段(而不是所有其他字段),您应该在 BQL 查询中使用第三个小写字母“SMequipmentID”。

    如果您无法访问源代码,您仍然可以使用 Visual Studio 或 ILSpy 等其他实用程序打开 ServiceDispatch.DLL 来搜索和检查类型名称。由于 ServiceDispatch 最初不是 Acumatica 核心产品的一部分,因此它确实存在一些其他命名约定差异:

    【讨论】:

    • 如果数据库中的字段名称,奇怪的是,它以大写字母开头。所以我猜测我们必须将SQL表中的名称更改为不大写。
    • 按照惯例,由 Acumatica 创建的所有数据库列名都以大写字母开头,除了一些审计/实用程序字段,如“tstamp”。
    • 您是否能够修复编译错误并恢复您的工作?
    • 不,因为当我更改代码以匹配上面的代码时,我得到这个:\App_RuntimeCode\ServiceOrderEntry.cs(54): error CS0426: The type name 'sMEEquipmentID' does not exist in the type ' FieldService.ServiceDispatch.FSEquipment'\App_RuntimeCode\ServiceOrderEntry.cs(54):错误 CS0426:类型名称 'sMEEquipmentID' 不存在于类型'FieldService.ServiceDispatch.FSSODetService'中
    • 您在 FieldService 产品的命名约定中发现了一个错误。而不是像这样使第一个字母大写/小写:'sMEquipmentID' / 'SMEquipmentID' 他们选择了第三个字母:'SMequipmentID' / 'SMEquipmentID'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 2014-06-25
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    相关资源
    最近更新 更多