Acumatica 默认[PXDBInt]数据字段为空值?

Acumatica 默认[PXDBInt]数据字段为空值?,acumatica,Acumatica,如何使数字字段允许并默认为空/未指定值 当我将此字段的控件添加到屏幕时,在新实体上它总是默认为“0” [PXDBInt] [PXDefault(TypeCode.DBNull, "", PersistingCheck=PXPersistingCheck.Nothing)] [PXUIField(DisplayName="Nullable Int")] 除非使用PXDefault强制值,否则所有字段的默认值均为null 如果删除[PXDefault]属性,它将自动默认为null 确保您的值定义为

如何使数字字段允许并默认为空/未指定值

当我将此字段的控件添加到屏幕时,在新实体上它总是默认为“0”

[PXDBInt]
[PXDefault(TypeCode.DBNull, "", PersistingCheck=PXPersistingCheck.Nothing)]
[PXUIField(DisplayName="Nullable Int")]

除非使用PXDefault强制值,否则所有字段的默认值均为null

如果删除[PXDefault]属性,它将自动默认为null

确保您的值定义为int?也不是int。“?”表示它为“可空”

例如:

    #region CurrentConfigRevision
    public abstract class currentConfigRevision : PX.Data.IBqlField
    {
    }
    protected int? _CurrentConfigRevision;
    [PXDBInt]
    [PXUIField(DisplayName="Current Revision")]
    public virtual int? CurrentConfigRevision
    {
        get
        {
            return this._CurrentConfigRevision;
        }
        set
        {
            this._CurrentConfigRevision = value;
        }
    }
    #endregion

除非用户在界面中指定(或通过代码设置)

所有字段的默认值都为空,除非您强制使用PXDefault值

如果删除[PXDefault]属性,它将自动默认为null

确保您的值定义为int?也不是int。“?”表示它为“可空”

例如:

    #region CurrentConfigRevision
    public abstract class currentConfigRevision : PX.Data.IBqlField
    {
    }
    protected int? _CurrentConfigRevision;
    [PXDBInt]
    [PXUIField(DisplayName="Current Revision")]
    public virtual int? CurrentConfigRevision
    {
        get
        {
            return this._CurrentConfigRevision;
        }
        set
        {
            this._CurrentConfigRevision = value;
        }
    }
    #endregion

除非用户在界面中指定(或通过代码设置)

否则该字段将始终为空值。此处的问题似乎是该字段是否位于表单区域或网格表中。在网格中,空值呈现为空单元格,如果保留为空,则保持为空。但是,在表单区域中,空值以“0”呈现。如果试图更改该值,然后将其更改回空/null,则会导致将零值持久化到数据库


我找到的解决方案是,在创建控件而不是使用PXNumberEdit类型字段时,将其更改为PXTextEdit字段,并将TextMode属性设置为“Number”,以获得所需的效果。空值将呈现为空值,并与实际零值区分开来。

这里的问题似乎是字段是在表单区域还是网格表中。在网格中,空值呈现为空单元格,如果保留为空,则保持为空。但是,在表单区域中,空值以“0”呈现。如果试图更改该值,然后将其更改回空/null,则会导致将零值持久化到数据库


我找到的解决方案是,在创建控件而不是使用PXNumberEdit类型字段时,将其更改为PXTextEdit字段,并将TextMode属性设置为“Number”,以获得所需的效果。空值将呈现为空值,并与实际零值区分。

px:PXNumberEdit控件中有AllowFull属性。 在这个实现中,您甚至不需要将PXDefault属性添加到字段中

我在c#code中添加了
MinValue=1,MaxValue=999999
,在.aspx中添加了
DisplayFormat=“n0”MaxLength=“6”
,因为我的任务,它应该可以在没有这个的情况下工作

    <px:PXNumberEdit runat="server" ID="edUsrCapacity" DataField="UsrCapacity"
DisplayFormat="n0" MaxLength="6" AllowNull="True" />


    [PXDBInt(MinValue = 1, MaxValue = 999999)]
    [PXUIField(DisplayName = Messages.FsEquipment.Capacity)]
    public virtual int? UsrCapacity
    {
        get;
        set;
    }

    public abstract class usrCapacity : BqlInt.Field<usrCapacity>
    {
    }

[PXDBInt(MinValue=1,MaxValue=99999)]
[PXUIField(DisplayName=Messages.FsEquipment.Capacity)]
公共虚拟整数?USR容量
{
得到;
设置
}
公共抽象类usrcacity:BqlInt.Field
{
}

在px:PXNumberEdit控件中有AllowFull属性。 在这个实现中,您甚至不需要将PXDefault属性添加到字段中

我在c#code中添加了
MinValue=1,MaxValue=999999
,在.aspx中添加了
DisplayFormat=“n0”MaxLength=“6”
,因为我的任务,它应该可以在没有这个的情况下工作

    <px:PXNumberEdit runat="server" ID="edUsrCapacity" DataField="UsrCapacity"
DisplayFormat="n0" MaxLength="6" AllowNull="True" />


    [PXDBInt(MinValue = 1, MaxValue = 999999)]
    [PXUIField(DisplayName = Messages.FsEquipment.Capacity)]
    public virtual int? UsrCapacity
    {
        get;
        set;
    }

    public abstract class usrCapacity : BqlInt.Field<usrCapacity>
    {
    }

[PXDBInt(MinValue=1,MaxValue=99999)]
[PXUIField(DisplayName=Messages.FsEquipment.Capacity)]
公共虚拟整数?USR容量
{
得到;
设置
}
公共抽象类usrcacity:BqlInt.Field
{
}

从新安装开始,通过Visual Studio项目进行尝试。创建了数据库列UsrSNP int,Allow Null。创建了一个没有PXDefault的DAC扩展类,正如您所指出的公共类InventoryItemExt:PXCacheExtension{#region SNP[PXDBInt][PXUIField(DisplayName=“SNP”)]public virtual int?UsrSNP{get;set;}公共抽象类UsrSNP:IBqlField{}endregion}编译,创建cust.proj,添加.dll,发布,然后将数据字段添加到202500屏幕上,输入字段中仍然显示“0”。我们的一个页面也有同样的问题,我一直不知道为什么。我们没有设置值,数据库中的值为null,但对于PXNumberEdit,它显示为零。如果我将页面更改为PXTextEdit,则该字段显示为空。必须是PXNumberEdit的函数才能在为空时显示零?从新安装开始,通过Visual Studio项目进行尝试。创建了数据库列UsrSNP int,Allow Null。创建了一个没有PXDefault的DAC扩展类,正如您所指出的公共类InventoryItemExt:PXCacheExtension{#region SNP[PXDBInt][PXUIField(DisplayName=“SNP”)]public virtual int?UsrSNP{get;set;}公共抽象类UsrSNP:IBqlField{}endregion}编译,创建cust.proj,添加.dll,发布,然后将数据字段添加到202500屏幕上,输入字段中仍然显示“0”。我们的一个页面也有同样的问题,我一直不知道为什么。我们没有设置值,数据库中的值为null,但对于PXNumberEdit,它显示为零。如果我将页面更改为PXTextEdit,则该字段显示为空。必须是PXNumberEdit的函数才能在null时显示零?