PXSelector用于自定义表,在选择不同记录时不更改记录

时间:2015-09-18 18:44:58

标签: acumatica

我一直试图让这个工作并且没有成功。我已经为现有的数据库表定制了几十个现有页面并使用了选择器,但是无法让选择器用于自定义表的Maint页面。

我创建了一个带有表单的自定义页面,并尝试使用CD作为显示添加选择器。从阅读文档和比较其他开箱即用的页面,这就是我想出来的。

在我的数据库中,我的ID字段是我的PK并且自动增加int不为null,CD只是一个nvarchar(10)非空

以下是我的DAC中的ID和CD:

    #region ID
    [PXDBIdentity()]
    [PXUIField(DisplayName = "ID")]
    public Int32? ID { get; set; }
    public class iD : IBqlField { }
    #endregion

    #region DesignCD
    [PXDBString(10, IsUnicode = true, IsKey = true)]
    [PXSelector(typeof(UsrDesign.iD), SubstituteKey = typeof(UsrDesign.designCD))]
    public string DesignCD { get; set; }
    public class designCD : IBqlField { }
    #endregion

我可以使用prev和next按钮在记录之间切换,一切都很好,但是当使用选择器时,它不会改变记录。我已经尝试过commit changes = true以及我能想到的其他变体。

有人可以帮助解决这个看似愚蠢的问题吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

使用Identity字段时遇到了类似的问题,我无法在此处获得适当的解决方案。

我们做了什么,我们从db和dac中删除了identity属性 // [PXDBIdentity(IsKey = true)]

并且在行持久化事件中,如果ID为空,我们手动生成下一个ID

protected virtual void ROW_RowPersisting(PXCache sender, PXRowPersistingEventArgs e)
        {
            if (e.Row == null) return;

            ROW Doc = (ROW)e.Row;
            if ((e.Operation & PXDBOperation.Command) == PXDBOperation.Insert)
            {
                 ROW LastDoc = new ROW();
                if (Doc.ID == null || Doc.ID.Equals("<NEW>"))
                {
                    try
                    {
                        LastDoc = (ROW)PXSelectGroupBy<ROW, Aggregate<Max<ROW.ID>>>.Select(this);
                    }
                    catch { }
                    if (LastDoc != null)
                    {
                        if (LastDoc.ID != null)
                            Doc.ID = LastDoc.ID + 1;
                        else
                            Doc.ID = 1;
                    }
                }
            }
}

我不知道这个问题的确切原因,但这是我们解决它的方式。希望它可以帮到你。

答案 1 :(得分:0)

克里斯,

由于选择器属性已附加到CD属性,请尝试将其定义中的iD更改为designCD,它应该有效:

[PXSelector(typeof(UsrDesign.designCD), SubstituteKey = typeof(UsrDesign.designCD))]

答案 2 :(得分:0)

在我的场景中,选择器的问题是由于在表单上使用相同的DataMember以及页面上的选项卡引起的。我不太明白为什么这是一个问题,但创建一个备用视图PXSelect&gt;&gt; CurrentDesign并指定了视图解决问题的选项卡。

希望这将有助于将来可能犯同样错误的其他人。

感谢帮助人员。