I have a form with some 5 text fields. Firstly I am filling out the form in workspace and assigning it to some other person in the workflow. My requirement is that person to whom i have assigned the form should not be able to edit the form data say ONLY three particular fields. How can i achieve the same? I want to lock those particular fields and it should not be editable.
问问题
2841 次
3 回答
1
xfa form
xml
我做了这个方便的交易:通过这个解析你的:
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;
}
然后像这样调用它:
PdfAction readOnlyAction = PdfAction
.JavaScript(MakeReadOnly(xfa.DomDocument.InnerXml), stamper.Writer);
stamper.Writer.AddJavaScript(readOnlyAction);
之前调用它:
stamper.Writer.CloseStream = false;
stamper.Close();
reader.Close();
你去吧。只读 XFA 字段!
于 2013-10-26T06:18:14.337 回答
0
基于 XFA 的表单中的每个字段都有一个可以在任何事件上设置的访问属性。访问属性可以设置为以下项目之一:
"open|protected|readOnly|nonInteractive"
例如,要设置子表单“AddressSubform”中包含的名为“City”的TextField,您可以通过以下方式设置访问属性以使其不可编辑:
AddressSubform.City.access = "readOnly";
如果表单处于特定表单状态,则需要在单击按钮、退出字段或表单初始化等事件上触发此 JavaScript 代码片段。
在您提到的用例中,您需要跟踪谁在填写表格。通常(最佳实践),这是通过在 LiveCycle 表单中设置表单状态变量来跟踪的。因此,当您完成工作区中的表单时,您需要确保将表单状态设置为另一个值。一旦其他用户收到表单,您可以在表单的初始化事件中检查新的表单状态,并按照代码片段中的指示设置这些字段。
于 2013-01-15T23:27:02.883 回答
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>
于 2013-01-23T14:17:36.060 回答