2012-12-12 24 views
1

我有一個表格有一些5個文本字段。首先,我在工作區填寫表格並將其分配給工作流程中的其他人員。我的要求是,我分配表單的人不應該能夠編輯表單數據,只能說三個特定的字段。我怎樣才能達到相同的目的? 我想鎖定這些特定的字段,它不應該是可編輯的。如何使一個字段不可編輯

回答

0

基於XFA的表單中的每個字段都有可以在任何事件上設置的訪問屬性。訪問屬性可以設置爲以下項目之一:

"open|protected|readOnly|nonInteractive" 

例如,設置了一個名爲「城市」包含在子窗體「AddressSubform」文本字段,您可以設置訪問屬性以下方法,使之不可編輯:

AddressSubform.City.access = "readOnly"; 

此JavaScript代碼段需要在像按鈕的點擊事件觸發,就形成一個場或出口初始化如果窗體是特定形式的狀態。

在你提到的用例中,你需要跟蹤誰填寫了表單。一般來說(最佳實踐),通過在LiveCycle表單中設置一個表單狀態變量來跟蹤它。因此,當您在工作區中完成表單時,您需要確保表單狀態設置爲其他值。一旦其他用戶收到表單,就可以在表單的initialize事件中檢查新的表單狀態,並按照代碼片段中的說明設置這些字段。

0

您可以在數據中設置一個標誌來指示是否需要鎖定字段。您需要在表單呈現發生之前設置標誌。您可以使用setValue服務。然後,您只需通過檢查數據中的標誌,即可將initialize腳本添加到您想要進行讀取的字段中。

var flag = xfa.resolveNode("xfa.datasets.data.Root.config.flag").value; 

if(flag == "lock"){ 
    this.access = "readOnly"; 
} else { 
    this.access = ""; 
} 

請注意,上述代碼假設您的數據XML結構如下。

<Root> 
    <config> 
     <flag>lock</flag> 
    </config> 
    <restOfData> 
    ... 
    </restOfData> 
</Root> 
1

我做這個方便的交易:分析你xfa formxml通過這樣的:

private string MakeReadOnly(string xml) 
    { 
     string formName = GetFormName(xml); 

     return @" 
ProcessAllFields(xfa.form." + formName + @"); 

function ProcessAllFields(oNode) { 
    if (oNode.className == 'exclGroup' || oNode.className == 'subform' || oNode.className == 'subformSet' || oNode.className == 'area') { 
    for (var i = 0; i < oNode.nodes.length; i++) { 
      var oChildNode = oNode.nodes.item(i); ProcessAllFields(oChildNode); 
     } 
    } else if (oNode.className == 'field') { 
     oNode.access = 'readOnly' 
    } 
}"; 
    } 

    private string GetFormName(string xml) 
    { 
     string formName = string.Empty; 
     int subFormStart = xml.IndexOf("<subform", 0); 
     if (subFormStart > -1) 
     { 
      int nameTagStart = xml.IndexOf("name", subFormStart); 
      int nameStart = xml.IndexOf("\"", nameTagStart); 
      int nameEnd = xml.IndexOf("\"", nameStart + 1); 

      formName = xml.Substring(nameStart + 1, (nameEnd - nameStart) - 1); 
     } 

     return formName; 
    } 

然後調用它像這樣:

  stamper.Writer.CloseStream = false; 

      stamper.Close(); 
      reader.Close(); 

  PdfAction readOnlyAction = PdfAction 
       .JavaScript(MakeReadOnly(xfa.DomDocument.InnerXml), stamper.Writer); 
      stamper.Writer.AddJavaScript(readOnlyAction); 

權之前,調用它

你去了。只讀XFA字段!

相關問題