您如何在 Acumatica 中根据需要标记字段?

How do you mark a field as required in Acumatica?

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

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

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

布局编辑器必需设置

可以将字段标记为必填,而无需强制其具有值。这可以看作是字段旁边的红色星星。

为此,请自定义您现有的屏幕并执行以下 3 个简单步骤

  1. Select 来自布局编辑器的字段。
  2. 确保取消选择过滤器按钮,这将显示更多可以应用的设置。
  3. 必填字段设置为真。

必填字段使用 PXDefaultAttribute

在字段上设置 PXDefaultAttribute 之前,建议探索该字段的定义方式。

DAC 级别的属性

首先要看的是DAC级别。在字段上使用 Element Inspector(快捷键 Ctrl + Alt + 单击)将为我们提供所需的信息。注意数据字段,然后单击操作和 查看数据 Class 来源...

在此屏幕上,我们需要确保该字段还没有 PXDefaultAttribute。

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

图级别的属性使用 CacheAttached

现在我们需要检查图形代码以查看 PXDefaultAttribute 是否已经存在。我们再次使用元素检查器,但这次我们单击 View Business Logic Source...

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

protected void SOOrder_OrderDesc_CacheAttached(PXCache sender) { }

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

SO 订单代码示例

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

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

PXMergeAttributes MergeMethod 有 3 个可能的值:追加、合并、替换。 基本上这会告诉框架如何处理在此 DAC 字段上找到的属性之间的冲突。

PXDefault PersistingCheck 也有 3 个值:Nothing、Null、NullOrBlank。 Empty 在不需要字段但应具有默认值时使用。这在 post 的上下文中没有用处。 NullNullOrBlank 确定要完成的验证,其中 NullOrBlank 对字符串最有用。

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

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

使用布局编辑器需要结合 PXDefaultAttribute

进行设置

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

例如[PXUIField(DisplayName = "My Value", Required = true)]

这里是关于这个主题的扩展信息链接

How to make a field mandatory

Append and Replace of DACs Attributes / PXMergeAttributes

PXDefault API Reference