问题描述
我在 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 控件类型。同样在屏幕中,您必须在相关网格和列上打开矩阵模式。