Acumatica 当用户在网格上添加另一行时,自定义PXSelector控件自行清除

Acumatica 当用户在网格上添加另一行时,自定义PXSelector控件自行清除,acumatica,Acumatica,我在Acumatica发票和备忘录(ScreenID=AR301000)中创建了一个自定义PXSelector控件字段。控件位于文档详细信息网格中。选择器加载值很好,但问题是如果用户将另一行添加到“文档详细信息”网格中,则前一行中选择的值会自动清除??? 下面是我的代码: using PX.Data.ReferentialIntegrity.Attributes; using PX.Data; using PX.Objects.AR; using PX.Objects.CM; using PX.

我在Acumatica发票和备忘录(ScreenID=AR301000)中创建了一个自定义PXSelector控件字段。控件位于文档详细信息网格中。选择器加载值很好,但问题是如果用户将另一行添加到“文档详细信息”网格中,则前一行中选择的值会自动清除??? 下面是我的代码:

using PX.Data.ReferentialIntegrity.Attributes;
using PX.Data;
using PX.Objects.AR;
using PX.Objects.CM;
using PX.Objects.Common.Discount.Attributes;
using PX.Objects.Common.Discount;
using PX.Objects.Common;
using PX.Objects.CR;
using PX.Objects.CS;
using PX.Objects.DR;
using PX.Objects.GL.DAC.Abstract;
using PX.Objects.GL;
using PX.Objects.IN;
using PX.Objects.PM;
using PX.Objects.TX;
using PX.Objects;
using System.Collections.Generic;
using System.Diagnostics;
using System;

namespace PX.Objects.AR
{
  public class ARTranExt : PXCacheExtension<PX.Objects.AR.ARTran>
  {
    #region UsrResource
    [PXDBInt]
    [PXUIField(DisplayName="Resource")]
    [PXSelector(
      typeof(Search<CSAttributeDetail.valueID,Where<CSAttributeDetail.attributeID, Equal<AttributeExtender.resource>>>),
      typeof(CSAttributeDetail.valueID),
      typeof(CSAttributeDetail.description),
      SubstituteKey = typeof(CSAttributeDetail.valueID)
    )]
    public virtual int? UsrResource { get; set; }
    public abstract class usrResource : PX.Data.BQL.BqlInt.Field<usrResource> { }
    #endregion
  }
  public static class AttributeExtender
  {
    public const string Resource = "RESOURCE";
    public class resource : PX.Data.BQL.BqlString.Constant<resource>
    {
       public resource() : base(Resource) {; }
    }
                           
  }
}    
使用PX.Data.ReferentialIntegrity.Attributes;
使用PX数据;
使用PX.Objects.AR;
使用PX.Objects.CM;
使用PX.Objects.Common.Discount.Attributes;
使用PX.Objects.Common.Discount;
使用PX.Objects.Common;
使用PX.Objects.CR;
使用PX.Objects.CS;
使用PX.Objects.DR;
使用PX.Objects.GL.DAC.Abstract;
使用PX.Objects.GL;
使用PX.Objects.IN;
使用PX.Objects.PM;
使用PX.Objects.TX;
使用PX.Objects;
使用System.Collections.Generic;
使用系统诊断;
使用制度;
命名空间PX.Objects.AR
{
公共类ARTranExt:PXCacheExtension
{
#地区资源
[PXDBInt]
[PXUIField(DisplayName=“Resource”)]
[PX选择器(
类型(搜索),
类型(CSAttributeDetail.valueID),
类型(CSAttributeDetail.description),
SubstituteKey=typeof(CSAttributeDetail.valueID)
)]
公共虚拟int?UsrResource{get;set;}
公共抽象类usrResource:PX.Data.BQL.BqlInt.Field{}
#端区
}
公共静态类AttributeXtender
{
public const string Resource=“Resource”;
公共类资源:PX.Data.BQL.BqlString.Constant
{
公共资源():基(资源){;}
}
}
}    

可能是什么问题?

CSAttributeDetail.ValueID被定义为数据库中的nvarchar(10)。根据选择器,您正在尝试将nvarchar(10)(字符串)值分配给整数字段。我尝试了这个方法,如果属性的ValueID是数字,它就可以工作,但是您没有指出ValueID的值是什么。因为我可以通过添加基于字符的代码而不是数字的属性详细信息来重现这种行为,所以我怀疑属性的详细信息值是字母而不是数字

请确保属性详细信息的ValueID始终为整数值,或者(最好)将用户字段更改为nvarchar(10)

无关,但值得注意。。。由于PXSelector返回要存储在字段中的CSAttributeDetail.valueID,因此不需要定义同一确切字段的替换键