为什么我的自动编号设置不起作用?

时间:2018-11-07 15:33:48

标签: acumatica

据我所知,我已经正确设置了此自动编号字段。过去,我已经完成了多个自动编号设置,但似乎不希望这样做,而且我也看不到为什么。

这是存储自动编号的DAC对象:

[PXDBString(15, IsUnicode = true, InputMask = "")]
[PXSelector(typeof(Numbering.numberingID), DescriptionField = typeof(Numbering.descr))]
[PXUIField(DisplayName = "Catalog Header Nbr")]
public virtual string CatalogHeaderNbr { get; set; }
public abstract class catalogHeaderNbr : IBqlField { }

这是将其分配给CD字段:

[PXDBString(15, IsUnicode = true, InputMask = ">CCCCCCCCCCCCCCC", IsKey = true)]
[AutoNumber(typeof(CFBSNumberingSetup.catalogHeaderNbr), typeof(AccessInfo.businessDate))]
[PXUIField(DisplayName = "Catalog ID")]
[PXDefault]
[PXSelector(typeof(Search<CFBSCatalogHeader.catalogCD>),
    new Type[]
    {
        typeof(CFBSCatalogHeader.catalogCD),
        typeof(CFBSCatalogHeader.vendorID),
        typeof(CFBSCatalogHeader.descr)
    },
    DescriptionField = typeof(CFBSCatalogHeader.catalogCD)
    )]

public virtual string CatalogCD { get; set; }
public abstract class catalogCD : IBqlField { }

“编号序列”屏幕(请注意,我的符号是新的):

enter image description here

我创建的“编号设置”页面具有已分配的存储值:

enter image description here

保存时出现错误(请注意,符号显示为SELECT而不是NEW):

enter image description here

错误跟踪:

11/7/2018 10:19:34 AM错误: 值不能为空。 参数名称:格式

  
    

at System.String.FormatHelper(IFormatProvider提供程序,字符串格式,ParamsArray args)        在System.String.Format(字符串格式,Object []参数)        在PX.Data.PXMessages.LocalizeFormat(String strMessage,String&MessagePrefix,Object [] args)        在PX.Data.PXException..ctor(字符串格式,Object []参数)        在F:\ Bld \ AC-FULL2018R112-JOB1 \ sources \ WebSites \ Pure \ PX.Objects \ CS \ Descriptor \ Attribute.cs:line 2808中的PX.Objects.CS.AutoNumberAttribute.RowPersisting(PXCache sender,PXRowPersistingEventArgs e)        在PX.Data.PXCache.OnRowPersisting(对象项,PXDBOperation操作)        在PX.Data.PXCache`1.PersistInserted(对象行)        在PX.Data.PXCache`1.Persist(PXDBOperation操作)        在PX.Data.PXGraph.Persist(类型cacheType,PXDBOperation操作)        在PX.Data.PXGraph.Persist()        在PX.Data.PXSave`1.d__2.MoveNext()        在PX.Data.PXAction`1.d__31.MoveNext()        在PX.Data.PXAction`1.d__31.MoveNext()        在PX.Web.UI.PXBaseDataSource.tryExecutePendingCommand(String viewName,String [] sortcolumns,Boolean []降序,Object []搜索,Object []参数,PXFilterRow []过滤器,DataSourceSelectArguments参数,Boolean&closeWindowRequired,Int32&adapterStartRow,Int32&adapterTotalRows )        在PX.Web.UI.PXBaseDataSource.ExecuteSelect(字符串viewName,DataSourceSelectArguments参数,PXDSSelectArguments pxarguments)

  

2 个答案:

答案 0 :(得分:2)

确保使用该编号顺序在图形中具有用于设置表的PXSetup视图。从屏幕快照的外观来看,它没有找到您期望的编号顺序,因为新符号不是您期望的符号。这可能是由于缺少PXSetup视图导致缺少设置。

在后 How to implement auto generating document number on custom screen 引用:“确保在构建文档的图形中将PXSetup视图包括到设置表中。”

答案 1 :(得分:0)

您可能希望在RowPersisting期间尝试处理分配,例如:

    public virtual void DAC_RowPersisting(PXCache cache, PXRowPersistingEventArgs e)
    {
        DAC record = (DAC)e.Row;
        if (record != null)
        {
            if (this.DAC.Cache.GetStatus(record) == PXEntryStatus.Inserted)
            {
                string nextNumber = AutoNumberAttribute.GetNextNumber
        (DAC.Cache, record, "CATHEADNBR", DateTime.Now);
                record.CatalogCD = nextNumber;
            }
        }
    }