如何在 Acumatica 中将字段标记为必填字段?

Sim*_* ML 1 c# acumatica acumatica-kb

我需要将系统中的某些字段设为必填。我看到在自定义的属性列表中,屏幕属性有一个“必需”复选框。

是否需要在字段属性中执行任何其他步骤以使其成为必需并进行持久检查?

Sim*_* ML 5

根据需要设置字段并强制执行它的最佳方法是使用PXDefaultAttribute。稍后详细介绍,首先我将讨论布局编辑器所需的设置。

布局编辑器所需设置

可以根据需要标记字段,而不强制它具有值。这可以看作是字段旁边的一颗红星。

在此输入图像描述

为此,请自定义现有屏幕并遵循以下 3 个简单步骤

  1. 从布局编辑器中选择字段。
  2. 确保未选择“过滤器”按钮,这将显示更多可以应用的设置。
  3. 将必填字段设置为 True。

在此输入图像描述

使用PXDefaultAttribute 的必填字段

在字段上设置PXDefaultAttribute之前,建议先了解该字段是如何定义的。

DAC 级别的属性

首先要看的是 DAC 级别。在字段上使用元素检查器(快捷键 Ctrl + Alt + 单击)将为我们提供所需的信息。记下数据字段,然后单击操作并查看数据类源...

在此输入图像描述

在此屏幕上,我们需要确保该字段尚未具有 PXDefaultAttribute。

在此输入图像描述

在大多数情况下,在 DAC 级别设置它被认为是一种不好的做法,因为引用该字段的每个屏幕都会验证它是否包含一个值。最好通过使用 CacheAttached 在每个屏幕上完成此操作。

使用 CacheAttached 的图级别属性

现在我们需要检查图形代码以查看 PXDefaultAttribute 是否已存在。我们再次使用元素检查器,但这次我们单击查看业务逻辑源...

在此输入图像描述

我们需要找到具有此签名的函数并检查可以在其上找到 [PXDefault]:

protected void SOOrder_OrderDesc_CacheAttached(PXCache sender) { }
Run Code Online (Sandbox Code Playgroud)

如果没有什么,您可以安心地应用您的定制。

SO订单代码示例

最后,要在图形级别强制执行必填字段,请遵循此模式。

[PXMergeAttributes(Method = MergeMethod.Append)]
[PXDefault(PersistingCheck = PXPersistingCheck.NullOrBlank)]
protected void SOOrder_OrderDesc_CacheAttached(PXCache sender) { }
Run Code Online (Sandbox Code Playgroud)

PXMergeAttributes MergeMethod 有 3 个可能的值:Append、Merge、Replace。基本上,这告诉框架如何处理此 DAC 字段上发现的属性之间的冲突。

PXDefault PersistingCheck 也有 3 个值:Nothing、Null、NullOrBlank。 当该字段不应为必填字段但应具有默认值时,请使用空。这在本文的上下文中没有用。 NullNullOrBlank确定要完成的验证,其中 NullOrBlank 对于字符串最有用。

有关这些主题的更多信息可以在我在本文底部添加的链接中找到。

当尝试在没有描述值的情况下保存时,前面的代码的结果会给你这个结果。

在此输入图像描述

使用布局编辑器 需要与 PXDefaultAttribute 结合使用的设置

如果您设置正确,PXDefaultAttribute 将验证数据,但在某些情况下,UI 不会反映该字段是必填字段。PXNumberEdit 元素就是一个很好的例子,即使使用 PXDefault,红色星号也不会出现在字段旁边。如果您确实需要红色星星,可以将“必需”设置设置为“true”,如本文顶部所述。另一种方法是在字段的 PXUIField 属性中将必需参数设置为 true。

例如 [PXUIField(DisplayName = "我的值", 必需 = true)]

以下是扩展此主题的信息链接

如何将字段设置为必填字段

追加和替换 DAC 属性/PXMergeAttributes

PXDefault API 参考