在 xpage 上寻找签名按钮的最佳方法

Looking for best approach for signature button on xpage

我需要一个简单的按钮,用户可以通过单击该按钮在文档上签字。每个文档一个签名者,但当他们单击它时,它会将他们的姓名和日期放在两个可见字段中,并更改状态字段。

最好的方法是什么?这可能非常简单,但由于某种原因我无法让它工作。

他们此时已被强制登录。

提前致谢。

马特

尝试以下操作:

    <?xml version="1.0" encoding="UTF-8"?>
    <xp:view xmlns:xp="http://www.ibm.com/xsp/core">
        <xp:this.data>
            <xp:dominoDocument var="document1" formName="test"></xp:dominoDocument>
        </xp:this.data>
        <xp:panel id="panelMain">
            <xp:table>
                <xp:tr>
                    <xp:td colspan="2">
                        <xp:label value="Main Form" id="label1"></xp:label>
                    </xp:td>
                </xp:tr>
                <xp:tr>
                    <xp:td style="width:100.0px">
                        <xp:label value="Now" id="label2"></xp:label>
                    </xp:td>
                    <xp:td>
                        <xp:text escape="true" id="computedField1" value="${javascript:return @Now();}">
                            <xp:this.converter>
                                <xp:convertDateTime type="both"></xp:convertDateTime>
                            </xp:this.converter>
                        </xp:text>
                    </xp:td>
                </xp:tr>
            </xp:table>
        </xp:panel>
        <xp:panel id="panelSignature" style="background-color:rgb(192,192,192)">
            <xp:button value="I Agree" id="button1">
                <xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="SignatureTable">
                    <xp:this.action><![CDATA[#{javascript:
    document1.replaceItemValue("SignedDate",@Now());
    document1.replaceItemValue("SignedBy",userBean.getDisplayName());}]]></xp:this.action>
                </xp:eventHandler>
            </xp:button>
            <xp:table id="SignatureTable">
                <xp:tr>
                    <xp:td colspan="2">
                        <xp:label value="SignatureTable" id="label3"></xp:label>
                    </xp:td>
                </xp:tr>
                <xp:tr>
                    <xp:td style="width:100.0px">
                        <xp:label value="SignedBy" id="label6"></xp:label>
                    </xp:td>
                    <xp:td>
                        <xp:inputText id="computedField4" value="#{document1.SignedBy}" readonly="true"></xp:inputText>
                    </xp:td>
                </xp:tr>
                <xp:tr>
                    <xp:td style="width:100.0px">
                        <xp:label value="SignedDate" id="label5"></xp:label>
                    </xp:td>
                    <xp:td>
                        <xp:inputText id="computedField3" value="#{document1.SignedDate}" readonly="true">
                            <xp:this.converter>
                                <xp:convertDateTime type="both"></xp:convertDateTime>
                            </xp:this.converter>
                        </xp:inputText>
                    </xp:td>
                </xp:tr>
            </xp:table>
        </xp:panel>
    </xp:view>

据此判断 "They have been forced to log in by this time." 您的问题出在您的 ACL 中。看起来,您允许匿名阅读文档,但在您要保存它的那一刻,ACL 不允许匿名用户这样做,所以 Domino 要求他们提供身份。

将匿名访问设置为无访问级别。

这是一个按钮,但如果用户未登录且没有匿名编辑权限,则会出现登录对话框。对于签名功能,我假设用户必须登录才能签名。 document1为待签名的Xpage数据文档。

    <xp:button
        value="Sign"
        id="button1"
        styleClass="btn btn-primary">
        <xp:eventHandler
            event="onclick"
            submit="true"
            refreshMode="complete">
                <xp:this.action>
                    <xp:executeScript>
                        <xp:this.script><![CDATA[#{javascript:
                        document1.appendItemValue("SignerName", session.getEffectiveUsername();
                        document1.document1("SignedDate",       session.createDateTime(@Now()));
                        document1.save();                                       
                    }]]></xp:this.script>
                </xp:executeScript>
            </xp:this.action>
        </xp:eventHandler>
    </xp:button>

如果您需要在不登录的情况下更新文档,那么在按钮中,您必须使用 sessionAsSigner 获取文档然后更新。