如何使用JavaScript在Adobe Livecycle中防止重复的验证消息

如何使用JavaScript在Adobe Livecycle中防止重复的验证消息,javascript,pdf,adobe,livecycle-designer,Javascript,Pdf,Adobe,Livecycle Designer,我有一个包含多个数据表的PDF,每个表都有多行。它是一个动态XFA数据PDF。验证工作相当好,只要它只在一个字段上,但现在我有一个更复杂的验证。如果填充了一个字段,则必须填充另一个字段,反之亦然。我将验证JavaScript添加到Foo字段,与Bar字段类似。问题是,当我用无效值从字段中签出时,同一字段的验证消息会多次弹出。我已尝试将xfa.event.rc设置为true/false(取决于字段是否有效)。这已成功地用于PDF上的其他字段,但似乎没有效果,而且我在xfa.event.rc上找不到

我有一个包含多个数据表的PDF,每个表都有多行。它是一个动态XFA数据PDF。验证工作相当好,只要它只在一个字段上,但现在我有一个更复杂的验证。如果填充了一个字段,则必须填充另一个字段,反之亦然。我将验证JavaScript添加到Foo字段,与Bar字段类似。问题是,当我用无效值从字段中签出时,同一字段的验证消息会多次弹出。我已尝试将xfa.event.rc设置为true/false(取决于字段是否有效)。这已成功地用于PDF上的其他字段,但似乎没有效果,而且我在xfa.event.rc上找不到任何文档,因此可能会被弃用。我想它以前是返回码。我现在正在使用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
scriptobject:

MyXmlRoot.FirstItemsList.ItemDataRow.#variables[0].script - (JavaScript, client)
function validateFooBar(foo, bar){
    return !(!foo.isNull && bar.isNull);       
}
下面是我的等级结构图,让它更清晰:
现在我只收到一个警报

  • 当填充
    foo
    时,我删除
    bar
    的值
  • 我填充
    foo
    的值,而
    bar
    为空

  • 谢谢我要补充的是,我发现validate方法甚至不侦听event.rc,因此它没有任何效果。如果您试图在事件脚本窗口中直接从代码返回true或false,则会出现语法错误,但您可以调用返回true或false的脚本,这对我来说毫无意义。语法错误是我试图首先设置event.rc的原因。