2016-08-19 64 views
0

我们需要添加自定义字段来存储套件组装开始日期,但都无法完成,由于错误此任务“表中不存在数据库中:INKitRegister”套件组装 - 自定义日期字段

如果我们需要一个日期字段而不是文本字段,装饰我们的自定义字段具有以下属性+添加PXDateTimeEdit的工具组装屏幕上:

enter image description here

现在我们收到一个不是很清晰的错误信息,同时进入某个值自定义PXDateTimeEdit:

enter image description here

回答

0

的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下面的截图以下: enter image description here

  • 在定制管理器添加下面的屏幕截图以下新的代码文件中选择DAC扩展作为文件类型和INKitRegister作为基地DAC: enter image description here

  • 声明生成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 [类型]属性需要BqlField名,应该在数据类编辑器打开INRegister自定义字段声明: enter image description here

  • 发布当前项目

  • 打开布局编辑器的工具组装屏添加输入控制的INKitRegister DAC延长内声明的自定义字段: enter image description here

  • 发布当前项目,并导航到工具组装屏幕• o确保是否已成功应用定制: enter image description here

  • 要解决“无法投类型A的对象,以B型”的错误,应当验证两件事情:

    1. 如果字段属性匹配在INRegister的扩展和INKitRegister的DAC
    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 
        } 
    } 
    
    相关问题