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

多租户环境下自定义Selector字段部分租户保存报错问题

问题分析与解决方案

可能原因

  1. 多租户元数据同步不完整:尽管通过「发布至多租户」操作同步了定制,但租户2的系统元数据表(如CSysColumn、CSysTable)未正确添加POOrder.CustomField的字段定义,导致保存时系统无法识别该字段。
  2. 自定义常量类的多租户上下文隐患:代码中customfieldItemClassIdConstant类的FindCustomFieldItemClassID方法使用new PXGraph()查询物料分类,在多租户环境下存在上下文切换风险,但此点与你描述的「租户2选择器能正确显示对应物料」矛盾,优先级低于元数据问题。

解决方案

方案1:重新同步元数据到租户2

  • 进入Acumatica定制发布界面,重新选择租户2执行发布操作,确保发布过程无报错。
  • 发布完成后,检查租户2的CSysColumn表,确认存在POOrder对应的CustomField字段记录。

方案2:优化DAC扩展代码,规避常量类风险

原代码中自定义常量类的实现存在多租户环境下的潜在问题,建议直接在BQL中关联物料分类编码,避免依赖静态常量:

public class POOrderExt : PXCacheExtension<PX.Objects.PO.POOrder>
{
    #region CustomField
    [PXDBString(50)]
    [PXUIField(DisplayName="Custom Field")]
    [PXSelector(
        typeof(Search<IN.InventoryItem.inventoryCD, 
            Where<IN.InventoryItem.itemClassID, Equal<INItemClass.itemClassID, 
                Where<INItemClass.itemClassCD, Equal<Constant<string, "CUSTOMCLASS">>>>>),
        typeof(IN.InventoryItem.inventoryCD),
        typeof(IN.InventoryItem.descr),
        DescriptionField = typeof(IN.InventoryItem.descr))]
    public string CustomField { get; set; }
    public abstract class customField : IBqlField { }
    #endregion
}

方案3:手动修复数据库字段(仅元数据同步失败时使用)

若重新发布后问题仍存在,可手动检查租户2的POOrder表:

  • 若不存在CustomField列,执行SQL语句添加:ALTER TABLE POOrder ADD CustomField VARCHAR(50);
  • 执行完成后重启Acumatica应用池,确保系统识别新字段。

内容的提问来源于stack exchange,提问作者Graeme LM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 14:31:24