【发布时间】:2019-05-07 00:51:40
【问题描述】:
我正在按如下方式自定义销售订单屏幕:
- 我在订单类型屏幕中添加了一个自定义布尔字段,名为“需要客户订单号”。
- 我已将代码添加到销售订单屏幕的 BLC 中,我希望根据是否选中“需要客户订单号”字段,有条件地将 CustomerOrderNumber 字段设为必填。
我正在使用 SOOrder_RowSelected 事件,如下所示:
protected virtual void SOOrder_RowSelected(PXCache sender, PXRowSelectedEventArgs e)
{
var soorder = (SOOrder)e.Row;
if (soorder == null) return;
string ordtype = soorder.OrderType;
var soot = (SOOrderType)PXSelect<SOOrderType,
Where<SOOrderType.orderType, Equal<Required<SOOrderType.orderType>>>>.Select(Base, ordtype);
if (soot != null)
{
var sootext = PXCache<SOOrderType>.GetExtension<SOOrderTypeExt>(soot);
if (sootext != null)
{
PXUIFieldAttribute.SetRequired<SOOrder.customerOrderNbr>(sender, sootext.UsrRequireCustOrdNbr == null ? false : (bool)sootext.UsrRequireCustOrdNbr);
}
}
}
这确实在 CustomerOrderNumber 字段上添加了一个星号 - 但如果该字段为空,它不会在保存时产生错误。
另一个问题是我的 PXSelect 从 SOOrderType 中获取记录 总是为复选框用户字段返回 null,即使它在数据库中具有“True”值(这就是我将三元运算符放在调用中的原因)。即使我在 PXUIFieldAttribute.SetRequired 调用中硬编码一个“真”值,它仍然不会产生错误以防止保存。星号在那里,但它不起作用。
如果我使用 Cache_Attached 事件添加 [PXDefault],它可以完美运行 - 但这对我没有帮助 - 我需要有条件地设置它。
有什么想法吗?
【问题讨论】:
-
> 另一个问题是我的 PXSelect 从 SOOrderType 中获取记录总是为复选框用户字段返回 null。 - 仔细检查 DAC 类型,确保它们与 DB 匹配并且它不是未绑定的字段。
标签: acumatica