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

Acumatica销售订单行网格添加库存物料属性及多值显示问题

问题原因

你当前的代码只取到了第一条匹配的属性明细记录,多选组合框类型的属性在CSAnswers表中存储的是分号分隔的多个选中项的ID值,单独关联CSAttributeDetail只能拿到单个选项的描述,自然无法展示全部选中值。

修复步骤

  1. (可选)字段长度调整:如果你的ACCITEMS属性可选值较多,拼接后的描述可能超过250字符,可按需调整PXDBString的长度参数:
// 可根据实际需求调整长度,比如改成1000
[PXDBString(1000, IsUnicode = true)]
[PXUIField(DisplayName = "Accessories Items")]
public virtual string UsrAccessoriesFrmStkItems { get; set; }
public abstract class usrAccessoriesFrmStkItems : PX.Data.BQL.BqlString.Field<usrAccessoriesFrmStkItems> { }
#endregion
  1. 修改SOLine_InventoryID_FieldUpdated事件逻辑:先拿到库存物料对应的ACCITEMS属性的选中值字符串,拆分后批量查询所有对应属性明细的描述,再拼接赋值即可。
    修改后的代码如下:
protected virtual void SOLine_InventoryID_FieldUpdated(PXCache sender, PXFieldUpdatedEventArgs e, PXFieldUpdated InvokeBaseHandler)
{
    InvokeBaseHandler?.Invoke(sender, e);
    SOLine row = (SOLine)e.Row;
    if (row == null || row.InventoryID == null) return;
    
    // 先查询库存物料对应ACCITEMS属性的选中值(分号分隔的ID串)
    CSAnswers attrAns = PXSelectJoin<CSAnswers,
        InnerJoin<InventoryItem, On<InventoryItem.noteID, Equal<CSAnswers.refNoteID>>>,
        Where<InventoryItem.inventoryID, Equal<Required<InventoryItem.inventoryID>>,
        And<CSAnswers.attributeID, Equal<Required<CSAnswers.attributeID>>>>>
        .Select(Base, row.InventoryID, "ACCITEMS");
    
    if (attrAns?.Value == null) return;
    
    // 拆分选中的属性ID
    var selectedValueIds = attrAns.Value.Split(';', StringSplitOptions.RemoveEmptyEntries);
    var descList = new List<string>();
    
    // 批量查询所有选中ID对应的描述
    foreach (var valId in selectedValueIds)
    {
        CSAttributeDetail detail = PXSelect<CSAttributeDetail,
            Where<CSAttributeDetail.attributeID, Equal<Required<CSAttributeDetail.attributeID>>,
            And<CSAttributeDetail.valueID, Equal<Required<CSAttributeDetail.valueID>>>>>
            .Select(Base, "ACCITEMS", valId.Trim());
        if (detail != null)
        {
            descList.Add(detail.Description);
        }
    }
    
    // 拼接后赋值给自定义字段,分隔符可按需改成逗号、顿号等
    SOLineExt rowExt = row.GetExtension<SOLineExt>();
    rowExt.UsrAccessoriesFrmStkItems = string.Join(";", descList);
}

内容的提问来源于stack exchange,提问作者Tharidhi P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:57:06