MYOB Acumatica自定义MySQL表创建快照时出错的排查求助
MYOB Acumatica自定义MySQL表创建快照时出错的排查求助
各位好,我在基于MYOB Acumatica做自定义开发时遇到了一个棘手的问题,想请大家帮忙排查下:
我创建了一个关联项目和服务设备的自定义MySQL表,同时也写了对应的DAC类,并且已经把屏幕配置完成,目前屏幕功能能正常工作,但只要创建系统快照就会报错。我不确定是表的定义、DAC的写法存在问题,还是因为MySQL默认把表名转成小写导致的匹配异常,想请大家帮忙看看哪里可能出了纰漏。
我的MySQL建表语句
CREATE TABLE IF NOT EXISTS PMProjectServiceEquipment ( ID INT AUTO_INCREMENT PRIMARY KEY, ProjectID INT NULL, ServiceEquipmentID INT NULL, -- Acumatica system columns CompanyID INT NOT NULL DEFAULT 1, tstamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, NoteID CHAR(36) NULL, CreatedByID CHAR(36) NULL, CreatedByScreenID CHAR(8) NULL, CreatedDateTime DATETIME NULL, LastModifiedByID CHAR(36) NULL, LastModifiedByScreenID CHAR(8) NULL, LastModifiedDateTime DATETIME NULL );
对应的DAC代码
using System; using PX.Data; using PX.Data.BQL; using PX.Objects.PM; using PX.Objects.FS; namespace MyCustomisation { [Serializable] public class PMProjectServiceEquipment : PXBqlTable, IBqlTable { #region ID [PXDBIdentity(IsKey = true)] // Auto-increment primary key [PXUIField(DisplayName = "Record ID")] public virtual int? ID { get; set; } public abstract class id : BqlInt.Field<id> { } #endregion #region ProjectID [PXDBInt] [PXUIField(DisplayName = "Project", Visibility = PXUIVisibility.SelectorVisible)] [PXSelector(typeof(Search<PMProject.contractID>), SubstituteKey = typeof(PMProject.contractCD), DescriptionField = typeof(PMProject.description))] public virtual int? ProjectID { get; set; } public abstract class projectID : BqlInt.Field<projectID> { } #endregion #region ServiceEquipmentID [PXDBInt] [PXUIField(DisplayName = "Service Equipment", Visibility = PXUIVisibility.SelectorVisible)] [PXSelector(typeof(Search<FSEquipment.SMequipmentID>), typeof(FSEquipment.refNbr), typeof(FSEquipment.descr), typeof(FSEquipment.equipmentTypeID), typeof(FSEquipment.serialNumber), typeof(FSEquipment.ownerID), SubstituteKey = typeof(FSEquipment.refNbr), DescriptionField = typeof(FSEquipment.descr))] public virtual int? ServiceEquipmentID { get; set; } public abstract class serviceEquipmentID : BqlInt.Field<serviceEquipmentID> { } #endregion #region NoteID [PXNote] // maps to CHAR(36) in MySQL here public virtual Guid? NoteID { get; set; } public abstract class noteID : BqlGuid.Field<noteID> { } #endregion #region Audit columns (MUST use these attributes) [PXDBCreatedByID] public virtual Guid? CreatedByID { get; set; } public abstract class createdByID : BqlGuid.Field<createdByID> { } [PXDBCreatedDateTime] public virtual DateTime? CreatedDateTime { get; set; } public abstract class createdDateTime : BqlDateTime.Field<createdDateTime> { } [PXDBLastModifiedByID] public virtual Guid? LastModifiedByID { get; set; } public abstract class lastModifiedByID : BqlGuid.Field<lastModifiedByID> { } [PXDBLastModifiedDateTime] public virtual DateTime? LastModifiedDateTime { get; set; } public abstract class lastModifiedDateTime : BqlDateTime.Field<lastModifiedDateTime> { } [PXDBCreatedByScreenID] public virtual string CreatedByScreenID { get; set; } public abstract class createdByScreenID : PX.Data.BQL.BqlString.Field<createdByScreenID> { } [PXDBLastModifiedByScreenID] public virtual string LastModifiedByScreenID { get; set; } public abstract class lastModifiedByScreenID : PX.Data.BQL.BqlString.Field<lastModifiedByScreenID> { } [PXDBTimestamp] public virtual byte[] Tstamp { get; set; } // concurrency token public abstract class tstamp : BqlByteArray.Field<tstamp> { } #endregion } }
我目前的疑问点
- 是不是我的表定义或者DAC的属性配置有遗漏或错误?比如系统审计字段、主键的设置有没有不符合Acumatica快照生成要求的地方?
- 会不会是因为MySQL的
lower_case_table_names配置,把表名转成了小写,而Acumatica在快照生成时还是按原PascalCase的表名去查找,导致匹配失败? - 有没有其他我没考虑到的、自定义表在生成快照时需要额外处理的特殊要求?
麻烦各位帮忙看看,谢谢大家!
内容来源于stack exchange
相关产品推荐
相关产品推荐

