属性 ID 选择器确定自定义字段 Acumatica 中的字段值

问题描述

我在 AP303000 表单中创建了一个行级字段,我需要有属性 ID 选择器

namespace MidayaCustomizations
{
    public class APTranExt : PXCacheExtension<PX.Objects.AP.APTran>
    {
        #region UsrAttributeSelection
        [PXDBString(250)]
        [PXUIField(displayName = "Attribute ID")]
        [PXSelector(typeof(Search<CSAttribute.attributeID>),typeof(CSAttribute.attributeID),typeof(CSAttribute.description),typeof(CSAttribute.controlType))] 
        public virtual string UsrAttributeSelection { get; set; }
        public abstract class usrAttributeSelection : PX.Data.BQL.BqlString.Field<usrAttributeSelection> { }
        #endregion

        #region UsrAttributeValues
        [PXDBString(250)]
        [PXUIField(displayName = "Attribute Values")]

        public virtual string UsrAttributeValues { get; set; }
        public abstract class usrAttributeValues : PX.Data.BQL.BqlString.Field<usrAttributeValues> { }
        #endregion
    }
}

我需要从该字段和 UsrAttributeValues 字段中获取属性 ID,应该填充来自该特定属性的值(例如,属性 ID“CSS”是一个下拉字段,在 UsrAttributeValues 字段中,这些值列表应该可供选择)。

namespace MidayaCustomizations
{
    public class APInvoiceEntry_Extension : PXGraphExtension<APInvoiceEntry>
    {
        #region Event Handlers

        protected void APTran_UsrAttributeSelection_FieldSelecting(PXCache cache,PXFieldSelectingEventArgs e)
        {
            APTran row = (APTran)e.Row;
            if (row == null) return;
            var rowExt = PXCache<APTran>.GetExtension<APTranExt>(row);
           
            List<string> allowedValues = new List<string>();
            List<string> allowedLabels = new List<string>();

            
                foreach (CSAttributeDetail objCSAttributeDetail in PXSelect<CSAttributeDetail,Where<CSAttributeDetail.attributeID,Equal<required<APTranExt.usrAttributeSelection>>>>.Select(Base,rowExt.UsrAttributeSelection))


                {
                    allowedValues.Add(objCSAttributeDetail.ValueID);
                    allowedLabels.Add(objCSAttributeDetail.Description);
                }
               
                e.ReturnState = PXStringState.CreateInstance(e.ReturnState,10,true,typeof(APTranExt.usrAttributeValues).Name,false,-1,string.Empty,allowedValues.ToArray(),allowedLabels.ToArray(),null);
            
        }
            #endregion
        }
}

目前正在尝试使用字段选择事件处理程序从属性获取值,但我遇到了错误,任何帮助将不胜感激。

解决方法

我附上一个示例项目供您测试。如果它适合你,我也会提供 VS 项目。

简而言之,我不是 100% 确定为什么您的代码会抛出错误。我的技术非常相似。唯一的区别是我将 Attributes 限制为 Combo 和 MultiSelect Combo 控件类型。同样在屏幕中,您必须在相关网格和列上打开矩阵模式。

https://drive.govelocit.com/d/f/634034105803123785