在网格中填充字段并选择另一个字段

时间:2018-02-12 19:33:30

标签: gridview customization acumatica

这特别适用于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'

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

1 个答案:

答案 0 :(得分: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核心产品的一部分,因此它确实存在一些其他命名约定差异: enter image description here