如何使用 JavaScript 防止 Adob​​e Livecycle 中的重复验证消息

How can I prevent duplicate validation messages in Adobe Livecycle using JavaScript

我有一个包含多个数据表的 PDF,每个表都有多行。它是动态 XFA 数据 PDF。验证工作得很好,只要它只在一个字段上,但现在我有一个更复杂的验证。如果填充了一个字段,则必须填充另一个字段,反之亦然。我将验证 JavaScript 添加到 Foo 字段,类似于 Bar 字段。问题是,当我使用无效值从字段中跳出时,同一字段的验证消息会弹出多次。我尝试将 xfa.event.rc 设置为 true/false (取决于该字段是否有效)。这个在PDF的其他领域已经成功使用了,但是好像没有效果,而且我在xfa.event.rc上找不到任何文档,所以它可能被弃用了。我认为它曾经是 return 代码。我现在使用的是 EC4,但此 PDF 最初是为 ES3 编写的。这是 "Foo" 验证事件的 JavaScript。选择在同一个框中显示所有消息并不能解决问题。它多次显示相同的消息。我知道这一点,因为我在消息中添加了一个行号变量。

MyXmlRoot.FirstItemsList.ItemDataRow.Foo::validate - JavaScript, client)
this.validationMessage = "";
if (!this.isNull && this.rawValue != ""){
    var bar= xfa.resolveNode("MyXmlRoot.FirstItemsList.ItemDataRow.Bar");
    if (bar.isNull || bar.rawValue == ""){
       this.validationMessage = "A bar is required if a foo has been entered.";                 
    } 
}

我试过这种方法,它对我有用:

Bar 字段验证事件:

MyXmlRoot.FirstItemsList.ItemDataRow.Bar::validate - (JavaScript, client)
script.validateFooBar(Foo, this);

Foo 字段验证事件:

MyXmlRoot.FirstItemsList.ItemDataRow.Foo::validate - (JavaScript, client)
this.validationMessage = "A bar is required if a foo has been entered.";
script.validateFooBar(this, Bar);

script 脚本对象:

MyXmlRoot.FirstItemsList.ItemDataRow.#variables[0].script - (JavaScript, client)
function validateFooBar(foo, bar){
    return !(!foo.isNull && bar.isNull);       
}

这里是我的层次结构的图片,以使其更清楚:
现在我只在

时收到一个警报
  1. 我删除了bar的值,而foo被填充
  2. 我填foo的值而bar为空