xpages动态更改xpage acl?

时间:2013-10-07 16:37:35

标签: xpages acl

我有一个基本的工作流程应用程序,而且我有很多困难。

在db ACL中,我将涉及的所有人员和组都设置为编辑器。 在XPage acl中,我试图输入名称的计算值。 (我称之为nextApprover的字段,存储在与xpage关联的表单/文档中。

我试过

document1.getItemValue("nextApprover");

getComponent("nextApprover").getValue();

都会在执行Javascript计算表达式时创建运行时错误。

我所要做的就是允许nextApprover在文档处于“框”内时编辑文档的权限,并允许其余用户在该特定时间读取文档。我现在已经看了一会儿。 有什么建议吗?

2 个答案:

答案 0 :(得分:4)

您无法在XPage ACL名称计算中访问数据源document1,因为首先计算ACL并且仅在数据源之后。这就是你得到JavaScript运行时错误的原因。

以下是XPage ACL的替代方法:

使用document1

定义数据源action="openDocument"
<xp:this.data>
    <xp:dominoDocument
        var="document1"
        action="openDocument"
        ... />
</xp:this.data>

默认情况下,这将在READ模式下打开文档。

然后使用beforePageLoad context.setDocumentMode("edit")事件切换到编辑模式,如果当前用户名在您的字段中nextApprover

<xp:this.beforePageLoad><![CDATA[#{javascript:
    if (document1.getItemValue("nextApprover").get(0).equals(session.getEffectiveUserName())) {
        context.setDocumentMode("edit")
    }
}]]></xp:this.beforePageLoad>

您可能需要根据字段nextApprover中的实际内容更改if子句。

答案 1 :(得分:0)

通过在文档而不是XPage ACL上使用作者 -items,您可以获得更好的安全性。

试试这个(如果document1是数据源名称):

document1.getValue("nextApprover");

如果它无法使用,您仍然想使用XPage ACL,请发布ACL部分的错误和XPage XML源。