PXDBTimeSpanLongAttribute接受否定时间

时间:2018-04-03 18:06:43

标签: acumatica

我们有一些需要在Acumatica中有一个时间字段(PXDBInt作为总分钟)来向用户显示值并允许用户输入负值。 PXDBTimeSpanLong属性的标准格式不允许输入或正确显示负值(db值或未绑定的公式值已为负值)。

是否有人创建了一个继承PXDBTimeSpanLongAttribute的自定义类,并且能够显示并输入负值?我们使用的是显示在hh:mm

中的TimeSpanFormatType.ShortHoursMinutesCompact格式

示例用户条目:

  • “01:30”(1小时30分钟)
  • “ -​​ 02:45”(负2小时45分钟)
  • “00:05”(5分钟)

PXDBTimeSpanLongAttribute的DAC使用示例:

public abstract class myTime : PX.Data.IBqlField
{
}
[PXDBTimeSpanLong(Format = TimeSpanFormatType.ShortHoursMinutesCompact)]
[PXUIField(DisplayName = "My Time")]
public virtual Int32? MyTime { get set; }

使用ShortHoursMinutesCompact

测试格式
  • “00:00”(int 0)和“23:59”(int 1439)之间的正值正常工作

  • 未正确显示正确存储在数据库中的负数(假设条目允许否定输入)。例如,预期的“-02:45”(int -165)值导致显示“0:2”。当我单击该字段然后单击该值将更改为“00:02”而不输入任何新值。

  • 即使ShortHoursMinutesCompact格式的目的是24小时输入,输入大于24小时的值也没有字段限制。该字段将允许并接受任何符合hh:mm格式的值(“00:00”和“99:99”之间的值)。当用户输入例如“29:00”时,显示的值变为“05:00”,但数据库值为1740(总分钟为29小时)。

1 个答案:

答案 0 :(得分:0)

找到了解决方法

虽然我需要PXDBTimeSpanLongAttribute接受所有允许格式的负值,但我能够解决更重要的问题,因为我需要一个负值24小时时间字段(在-24以内验证条目) +24小时)。

我发现PXTimeListAttributePXDBTimeSpanLongAttribute的工作版本(使用ShortHoursMinutesCompact格式时)。

使用PXTimeList与PXDBTimeSpanLong(ShortHoursMinutesCompact)的好处

  • 使用int数据类型 - 无需更改数据库字段类型。 (在PXDBTimeSpanLong之前需要包含PXDBList属性的PXDBInt属性)
  • 允许正数和负数
  • 在+/- 23:59
  • 范围内限制参赛作品

在一个完美的世界里,允许-24:00到+24:00但是主题为另一天会很好。

除了更改我的DAC /字段上使用的属性之外,我还必须使用以下示例将我的字段的页面条目从PXMaskEdit更新为PXTimeSpan:

页面网格 - RowTemplate

<px:PXTimeSpan ID="edMyTimeField" TimeMode="True" runat="server" DataField="MyTimeField" InputMask="hh:mm" CommitChanges="True" />

页面网格 - 列

<px:PXGridColumn DataField="MyTimeField" Width="60px" AutoCallBack="True" RenderEditorText="True"/>

属性的示例用法:

#region MyTimeField
public abstract class myTimeField : PX.Data.IBqlField
{
}
[PXDBInt]
[PXTimeList]
[PXDefault(0)]
[PXUIField(DisplayName = "My Time")]
public virtual Int32? MyTimeField { get; set; }
#endregion