acumatica - DAC 中的 DateTime 字段导致异常
问题描述
我试图在 acumatica/lexbizz 中创建一个屏幕,它应该在一个简单的网格视图中显示我新创建的 DAC 的所有条目。该图如下所示:
using PX.Data;
using PX.Data.BQL.Fluent;
using PX.LotSertialNbrAttribute.Ext;
namespace Maut1
{
public class TestMaint : PXGraph<TestMaint>
{
public SelectFrom<M1InventoryLotSerialContainer>.View InventoryLotSerialContainers;
}
}
并且使用的 DAC M1InventoryLotSerialContainer 包含两个 Date 字段,声明如下:
#region ValidFrom
[PXDBDate()]
[PXUIField(DisplayName = "Valid from")]
public virtual DateTime? ValidFrom { get; set; }
public abstract class validFrom : PX.Data.BQL.BqlDateTime.Field<validFrom> { }
#endregion
#region ValidTo
[PXDBDate()]
[PXUIField(DisplayName = "Valid to")]
public virtual DateTime? ValidTo { get; set; }
public abstract class validTo : PX.Data.BQL.BqlDateTime.Field<validTo> { }
#endregion
我在 SQL 表中将这两个字段都创建为可为空且类型为 [datetime]。我可以通过使用已经存在的屏幕在表中创建新条目,但是当我尝试访问我新创建的 GridView 时,出现以下异常并且没有显示条目:
5/12/2021 3:42:27 PM Error:
Error: An error occurred during processing of the field Valid to: Specified cast is not valid..
System.InvalidCastException: Specified cast is not valid.
at System.Data.SqlClient.SqlBuffer.get_DateTime()
at System.Data.SqlClient.SqlDataReader.GetDateTime(Int32 i)
at PX.Data.PXDataRecord.GetDateTime(Int32 i) in C:\Users\svc-builder\AppData\Local\Temp\~PX.Data.0\PX.Data.dll.il:line 769081
at PX.Data.PXDBDateAttribute.RowSelecting(PXCache sender, PXRowSelectingEventArgs e) in C:\Users\svc-builder\AppData\Local\Temp\~PX.Data.0\PX.Data.dll.il:line 856111
at PX.Data.PXCache.OnRowSelecting(Object item, PXDataRecord record, Int32& position, Boolean isReadOnly) in C:\Users\svc-builder\AppData\Local\Temp\~PX.Data.0\PX.Data.dll.il:line 666901
at PX.Data.PXCache.OnRowSelecting(Object item, PXDataRecord record, Int32& position, Boolean isReadOnly) in C:\Users\svc-builder\AppData\Local\Temp\~PX.Data.0\PX.Data.dll.il:line 666757
at PX.Data.PXCache`1.Select(PXDataRecord record, Int32& position, Boolean isReadOnly, Boolean& wasUpdated) in C:\Users\svc-builder\AppData\Local\Temp\~PX.Data.0\PX.Data.dll.il:line 644916
at PX.Data.PXView.CreateItem(PXCache cache, PXDataRecord record, Int32& position, Boolean isReadOnly, Boolean& wasUpdated) in C:\Users\svc-builder\AppData\Local\Temp\~PX.Data.0\PX.Data.dll.il:line 685666
at PX.Data.PXView.CreateResult(PXCache[] caches, PXDataRecord rec, Boolean hascount, Boolean& overrideSort, Boolean& extFilter) in C:\Users\svc-builder\AppData\Local\Temp\~PX.Data.0\PX.Data.dll.il:line 685586
at PX.Data.PXView.GetResult(Object[] parameters, PXFilterRow[] filters, Boolean reverseOrder, Int32 topCount, PXSearchColumn[] sorts, Boolean& overrideSort, Boolean& extFilter) in C:\Users\svc-builder\AppData\Local\Temp\~PX.Data.0\PX.Data.dll.il:line 685520
at PX.Data.PXView.Select(Object[] currents, Object[] parameters, Object[] searches, String[] sortcolumns, Boolean[] descendings, PXFilterRow[] filters, Int32& startRow, Int32 maximumRows, Int32& totalRows) in C:\Users\svc-builder\AppData\Local\Temp\~PX.Data.0\PX.Data.dll.il:line 690963
at PX.Data.PXGraph.ExecuteSelect(String viewName, Object[] currents, Object[] parameters, Object[] searches, String[] sortcolumns, Boolean[] descendings, PXFilterRow[] filters, Int32& startRow, Int32 maximumRows, Int32& totalRows) in C:\Users\svc-builder\AppData\Local\Temp\~PX.Data.0\PX.Data.dll.il:line 981069
据我所知,acumatica 无法将该字段转换Valid to
为 [日期时间]。我已经尝试在我的 SQL 表中使用类型 [datetime2],但没有任何改变。因此,我不太确定是否在 DAC 中错误地声明了该字段,或者我是否必须在 SQL 表中使用不同的类型。
顺便说一句,这是我在 stackoverflow 上发布的第一个问题,因此感谢您对未来如何改进问题的反馈
解决方案
我会检查您的自定义页面定义,我的猜测是您创建了错误类型的控件来显示您的日期字段。进入“自定义项目编辑器”,单击“屏幕”标题下的屏幕,单击网格,单击右侧的“添加数据字段”列。检查您的“有效到”字段,并确保它没有与选择器控件或 DateTimeEdit 以外的其他内容一起列出。如果是,您可以删除、更改控件并重新添加。
推荐阅读
- javascript - 来自 API 的 xml 数据有多个未定义的名称空间 - 如何使用 xslt 在 html 中显示它?
- ios - 在 iOS 上使用 swift 绘制视图后,以编程方式绘制新图层以查看
- python - Matplotlib 版本与 Anaconda 版本不匹配
- azure - 无法访问视频索引器 API?
- c# - C# 在彼此内部使用 const 字符串和参数
- javascript - Mesh 使用了太多的绘制调用
- json - Android Studio Gradle 错误:缺少 project_info 对象
- jquery - 为 jQuery UI 模式对话框设置 Cookie
- javascript - 在Javascript中单击按钮更改按钮的颜色
- php - 检查数组中的相同值