You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 03:09:37