我们需要添加一个自定义字段来存储套件组装开始日期,但由于错误“数据库中不存在表:INKitRegister”而无法完成此任务
如果我们需要一个 Date 字段而不是文本字段,并使用以下属性修饰我们的自定义字段 + 在 Kit Assembly 屏幕上添加 PXDateTimeEdit:
现在我们在自定义 PXDateTimeEdit 中输入一些值时收到一条不太清楚的错误消息:
我们需要添加一个自定义字段来存储套件组装开始日期,但由于错误“数据库中不存在表:INKitRegister”而无法完成此任务
如果我们需要一个 Date 字段而不是文本字段,并使用以下属性修饰我们的自定义字段 + 在 Kit Assembly 屏幕上添加 PXDateTimeEdit:
现在我们在自定义 PXDateTimeEdit 中输入一些值时收到一条不太清楚的错误消息:
INKitRegister DAC 用 PXProjectionAttribute 修饰并与 INRegister 数据库表一起使用 - 因此您收到报告的错误消息:
[PXPrimaryGraph(typeof(KitAssemblyEntry))]
[PXCacheName(Messages.INKit)]
[PXProjection(typeof(Select2<INRegister, InnerJoin<INTran,
On<INRegister.kitLineNbr, Equal<INTran.lineNbr>,
And<INRegister.docType, Equal<INTran.docType>,
And<INRegister.refNbr, Equal<INTran.refNbr>>>>>>), Persistent = true)]
[Serializable]
public partial class INKitRegister : IBqlTable, ILSPrimary
{
...
}
截至目前,自定义管理器不支持投影 DAC,我们必须修改一些代码以在套件组装屏幕上添加自定义字段:
1.在自定义管理器中为 IN.INRegister DAC 添加新字段,如下图所示:
在自定义管理器中添加新代码文件,选择 DAC 扩展作为文件类型,INKitRegister 作为基础 DAC,如下图所示:
在生成的 INKitRegister DAC 扩展中声明自定义 UsrTest 字段:
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using PX.Data;
using PX.Objects.CS;
using PX.Objects.IN.Overrides.INDocumentRelease;
using PX.Objects.GL;
using PX.Objects.CM;
using System.Diagnostics;
using PX.Objects;
using PX.Objects.IN;
namespace PX.Objects.IN
{
public class INKitRegisterExt : PXCacheExtension<PX.Objects.IN.INKitRegister>
{
#region UsrTest
public abstract class usrTest: PX.Data.IBqlField
{
}
protected String _BatchNbr;
[PXDBString(50, BqlField = typeof(INRegisterExt.usrTest))]
[PXUIField(DisplayName = "Test")]
public virtual string UsrTest { get; set; }
#endregion
}
}
注意:要获得 DB[Type]Attribute 所需的 BqlField 名称,应在 Data Class Editor 中打开 INRegister 自定义字段声明:
要解决“无法将 A 类型的对象转换为 B 类型”错误,您应该验证 2 件事:
在这种特定情况下,通过将 UsrKAStartDate 的类型更改为 DateTime?(可为空):
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using PX.Data;
using PX.Objects.CS;
using PX.Objects.IN.Overrides.INDocumentRelease;
using PX.Objects.GL;
using PX.Objects.CM;
using System.Diagnostics;
using PX.Objects;
using PX.Objects.IN;
namespace PX.Objects.IN
{
public class INKitRegisterExt : PXCacheExtension<PX.Objects.IN.INKitRegister>
{
#region UsrKAStartDate
[PXDBDate]
[PXUIField(DisplayName = "Start Date")]
public virtual DateTime? UsrKAStartDate { get; set; }
public abstract class usrKAStartDate : IBqlField { }
#endregion
}
}