2016-11-21 53 views
1

我有一個包含多個數據表的PDF,每個數據表都有多行。它是一個動態XFA數據PDF。驗證工作相當好,只要它在一個字段上,但現在我有一個更復雜的驗證。如果填充一個字段,則必須填充另一個字段,反之亦然。我向Foo字段添加了驗證JavaScript,並且類似於Bar字段。問題是,當我使用無效值從字段中跳出時,驗證消息會多次彈出相同的字段。我已經嘗試將xfa.event.rc設置爲true/false(取決於字段是否有效)。這在PDF上的其他字段中已成功使用,但似乎沒有效果,並且我在xfa.event.rc中找不到任何文檔,因此可能會被棄用。我認爲它曾經是返回碼。現在我正在使用EC4,但這個PDF最初是爲ES3編寫的。這裏是「Foo」驗證事件的JavaScript。選擇在同一個框中顯示所有消息不能解決問題。它多次顯示相同的消息。我知道這一點,因爲我在消息中添加了一個行號變量。我該如何防止使用JavaScript的Adobe Livecycle中的重複驗證郵件

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.";     
    } 
} 

回答

1

我試過這種方法,它的工作對我來說:

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);  
} 

在這裏,我的層次結構的圖像,使其更清晰: enter image description here
現在,當

  1. 我刪除bar值我只得到一個警告,而foo充滿
  2. 我填foo的值,而bar爲空
+1

謝謝!我會補充說我找到了[documentation](http://help.adobe.com/livedocs/acrobat_sdk/9/Acrobat9_HTMLHelp/wwhelp/wwhimpl/common/html/wwhelp.htm?context=Acrobat9_HTMLHelp&file=JS_API_AcroJS.88.582.html) validate方法甚至不會偵聽event.rc,所以它沒有任何作用。如果您嘗試直接在事件腳本窗口內直接從代碼返回true或false,那麼您將得到語法錯誤,但您可以調用返回true或false的腳本。語法錯誤是我爲什麼試圖首先設置event.rc的原因。 – rhopper