首页 > 解决方案 > 行选择不执行

问题描述

我使用 RowSelecting 事件来执行 BQL 查询。我选择此事件,因为不建议在 RowSelected 事件中添加 BQL。我的目的是分配一个非数据库绑定字段(布尔值),用于启用/禁用字段。在 RowSelected 事件期间,读取该值,并根据该值启用/禁用特定字段。

在使用调试器时,我注意到第一次打开表单时不会触发 RowSelecting 事件。取消按钮会触发事件。然后我注意到 api 文档...RowSelected 和 FieldSelecting 事件发生在事件序列期间 - 记录显示。没有提到行选择。

我的目标是禁用基于某些 BQL 的字段。执行 BQL 和禁用该字段的最佳方法是什么?我应该使用 RowSelected 吗?文档说要避免它。就我而言,我指的是 SO 发票输入表格……特别是 SOInvoice DAC。

标签: acumatica

解决方案


您可以在图表中扩展 DAC 以添加 PXUIEnabled 属性来执行此操作。

我更新了我的示例以包含一个控制启用和禁用另一个字段的非数据绑定字段。

在 SOInvoiceExt DAC 扩展中,我有...

public class SOInvoiceExt : PXCacheExtension<PX.Objects.SO.SOInvoice>
{
    #region UsrExtRefNbrDisabled 
    [PXBool]
    [PXUIField(DisplayName = "ExtRefNbr Disabled?")]
    public virtual bool? UsrExtRefNbrDisabled { get; set; }
    public abstract class usrExtRefNbrDisabled : PX.Data.BQL.BqlBool.Field<usrExtRefNbrDisabled> { }
    #endregion
}

然后我将新的自定义字段添加到屏幕上。确保将 CommitChanges 设置为 True。

然后在 Graph Extension 中,我将 PXUIEnabled 属性与 CachedAttached 事件合并

[PXUIEnabled(typeof(Where<SOInvoiceExt.usrExtRefNbrDisabled, NotEqual<True>>))]
[PXMergeAttributes(Method = MergeMethod.Merge)]
protected virtual void SOInvoice_ExtRefNbr_CacheAttached(PXCache cache)
{ }

我能够选中/取消选中该框并启用/禁用该字段。

这是关于该主题的旧博客文章:https ://asiablog.acumatica.com/2016/11/pxuienabled-and-pxuirequired-attributes.html


推荐阅读