自定义选择器字段在一个租户中工作,但在第二个租户中出现错误

问题描述 投票:0回答:1

我有一个自定义字段在租户 1 中按预期工作,但在其他租户中出现错误。
使用“发布到多个租户”按钮执行发布。

POOrder.CustomField 是一个选择器,显示属于特定 CUSTOMCLASS 项目类的非库存项目的筛选列表。

在租户 1 中,自定义发布自(向所有租户):
选择器正确显示 CUSTOMCLASS 项目类中的项目列表,允许在自定义字段中进行选择,并正确保存采购订单。

在租户 2 中,相同的自定义字段正确显示项目列表(此租户中的不同项目,但仍然属于匹配的名为 CUSTOMCLASS 项目类),允许在自定义字段中进行选择,但在保存时出现此错误:

 'CustomField' cannot be found in the system.

这是 DAC 扩展:

  public class POOrderExt : PXCacheExtension<PX.Objects.PO.POOrder>
  {
    #region CustomField
    [PXDBString(50)]
    [PXUIField(DisplayName="Custom Field")]
    [PXSelector(
      typeof(Search<PX.Objects.IN.InventoryItem.inventoryCD
          , Where<PX.Objects.IN.InventoryItem.itemClassID, Equal<customfieldItemClassIdConstant>>>),
      typeof(PX.Objects.IN.InventoryItem.inventoryCD),
      typeof(PX.Objects.IN.InventoryItem.descr),
      DescriptionField=typeof(PX.Objects.IN.InventoryItem.descr))]
    public string CustomField { get; set; }
    public abstract class customField : IBqlField { }
    public class customfieldItemClassIdConstant : PX.Data.BQL.BqlInt.Constant<customfieldItemClassIdConstant>
    {
        public customfieldItemClassIdConstant()
            : base(FindCustomFieldItemClassID("CUSTOMCLASS")) { }
        
        public static int FindCustomFieldItemClassID(string itemClassCD)
        {
            PXResult<INItemClass> result = PXSelect<INItemClass,
                Where<INItemClass.itemClassCD, Equal<Required<INItemClass.itemClassCD>>>>
                .SelectWindowed(new PXGraph(), 0, 1, itemClassCD);
    
             if(result == null) return 0;

            INItemClass customfieldItemClass = result.GetItem<INItemClass>();
            if(customfieldItemClass == null)
            {
              return 0;
            }
            else
            {
              return customfieldItemClass?.ItemClassID ?? 0;
            }
        }
    }
    #endregion

我无法弄清楚为什么它可以在一个租户中工作,而不能在其他租户中工作,因为字段和选择器在所有租户中都表现良好,但选择的保存出错,即使数据库列由所有租户共享.

acumatica
1个回答
0
投票

改变了方法并使用不同的方法来定义项目类。没有在代码中使用常量,而是在项目类上创建了一个自定义复选框,将其标记为选择器的相关类以显示该类的项目。

项目类 DAC 扩展:

public class INItemClassExt : PXCacheExtension<PX.Objects.IN.INItemClass>
{
  #region CustomItemClassFlag
  [PXDBBool]
  [PXUIField(DisplayName="Custom Item Class Flag")]
  public virtual Boolean? CustomItemClassFlag { get; set; }
  public abstract class customItemClassFlag : PX.Data.BQL.BqlBool.Field<customItemClassFlag> { }
  #endregion
)

采购订单 DAC 扩展:

public class POOrderExt : PXCacheExtension<PX.Objects.PO.POOrder>
{

  #region CustomField
  [PXDBString(50)]
  [PXUIField(DisplayName = "Custom Field")]
  [PXSelector(
      typeof(Search2<InventoryItem.inventoryCD,
          InnerJoin<INItemClass, On<InventoryItem.itemClassID, Equal<INItemClass.itemClassID>>>,
          Where<INItemClassExt.customItemClassFlag, Equal<True>>>),
      typeof(InventoryItem.inventoryCD),
      typeof(InventoryItem.descr),
      SubstituteKey = typeof(InventoryItem.inventoryCD),
      DescriptionField = typeof(InventoryItem.descr))]
  public string CustomField { get; set; }
  public abstract class customField : IBqlField { }
  #endregion
)
© www.soinside.com 2019 - 2024. All rights reserved.