Xpages 如何在文件下载组件中捕获删除和下载事件?
我需要以某种方式捕捉用户在文件下载组件(bin图标)中删除附件时发生的事件。我想自动保存文档,或者至少告诉他,该文档已被修改,他必须保存它。 用户删除附件并关闭窗口,而附件仍处于未删除状态。用户不知道,他认为,附件已经消失了,而它从附件列表中消失了Xpages 如何在文件下载组件中捕获删除和下载事件?,xpages,Xpages,我需要以某种方式捕捉用户在文件下载组件(bin图标)中删除附件时发生的事件。我想自动保存文档,或者至少告诉他,该文档已被修改,他必须保存它。 用户删除附件并关闭窗口,而附件仍处于未删除状态。用户不知道,他认为,附件已经消失了,而它从附件列表中消失了 我需要以某种方式捕捉用户下载文件时发生的事件。我想把它添加到日志中。 比如:1.1.2014 12:33约翰尼·卡什下载了四朵玫瑰 有解决办法吗? 谢谢,JiKra您可以使用组件的deleteMessage属性指定自定义删除消息 或者我不知道这是否是
谢谢,JiKra您可以使用组件的
deleteMessage
属性指定自定义删除消息
或者我不知道这是否是个好主意,但总比什么都没有好:
向页面中添加一些CSJ,以向页面上的元素添加事件:
dojo.connect(dojo.byId('The Client side id of the bin icon'), "onclick", function(evt){
//window.alert("hallo");
...
});
我尝试过这一点,它与警报(“hallo”)funktion一起工作,因此您还可以添加一个funktion,触发SSJS事件,以便保存文档。
唯一的问题是找出映像的客户端ID。。可以尝试在删除图标的列中添加一个特殊类,并在代码中搜索该类,或者通过组件的AllProperties点击中的
rowAttrs
属性添加一个消息。您可以使用组件的deleteMessage
属性指定自定义删除消息
或者我不知道这是否是个好主意,但总比什么都没有好:
向页面中添加一些CSJ,以向页面上的元素添加事件:
dojo.connect(dojo.byId('The Client side id of the bin icon'), "onclick", function(evt){
//window.alert("hallo");
...
});
我尝试过这一点,它与警报(“hallo”)funktion一起工作,因此您还可以添加一个funktion,触发SSJS事件,以便保存文档。
唯一的问题是找出映像的客户端ID。。也许可以尝试在删除图标的列中添加一个特殊类,并在代码中搜索该类,或者通过组件的AllProperties点击中的
rowAttrs
proptertie添加一个特殊类。我自己一直在研究这个问题,到目前为止,还没有找到截取与fileDownload控件本身有关的任何内容的方法
然而,如果我理解了你的意图,我也有类似的需要告诉用户附件已被删除,但实际上并没有删除,所以我伪造了自己的下载控制。基本上,我使用一个bean拦截文件Upload(),然后将其保存到它自己的保存文档中。我使用标准的repeat控件列出链接到主记录的所有保存文档,并显示到文件()的链接。“delete”链接只调用一个函数,该函数标记保存的文档,使其不显示在repeat控件中。这使我能够捕获用户名和日期,并能够恢复“已删除”的文件
我还没有实现跟踪下载的方法,但我可能会采取类似的方法——让“下载”链接调用一个函数来跟踪下载请求,然后将文件附件的url返回到浏览器位置栏
我确信有一种与下载控件本身交互的方法,它是com.ibm.xsp.component.xp.XspFileDownload实例,但这需要比我更聪明的头脑来完成。我自己也一直在研究这个问题,到目前为止,还没有找到拦截与文件下载控件本身有关的任何内容的方法 然而,如果我理解了你的意图,我也有类似的需要告诉用户附件已被删除,但实际上并没有删除,所以我伪造了自己的下载控制。基本上,我使用一个bean拦截文件Upload(),然后将其保存到它自己的保存文档中。我使用标准的repeat控件列出链接到主记录的所有保存文档,并显示到文件()的链接。“delete”链接只调用一个函数,该函数标记保存的文档,使其不显示在repeat控件中。这使我能够捕获用户名和日期,并能够恢复“已删除”的文件 我还没有实现跟踪下载的方法,但我可能会采取类似的方法——让“下载”链接调用一个函数来跟踪下载请求,然后将文件附件的url返回到浏览器位置栏
我确信有一种与下载控件本身交互的方法,它是一个实例com.ibm.xsp.component.xp.XspFileDownload,但这需要比我更好的思维来完成。如果覆盖fileNameHrefValue属性,并将用户重定向到记录文件的下载XPage,则可以跟踪文件下载文件访问
<xp:fileDownload
rows="30"
id="fileDownload1"
displayLastModified="false"
value="#{document1.Body}"
allowDelete="true">
<xp:this.fileNameHrefValue>
<![CDATA[#{javascript:
var fName = this.getFileId();
var docUNID = document1.getDocument().getUniversalID();
var path = "http://www.example.com/yourdb.nsf/download.xsp";
path + "?documentId=" + docUNID + "&fileName=" + fName & "&fieldName=Body";
}]]>
</xp:this.fileNameHrefValue>
</xp:fileDownload>
生成的URL的参数fieldName必须与fileDownloadComponent绑定到的字段匹配
然后,download.xsp只需执行另一个重定向:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.data>
<xp:dominoDocument var="documentFile"></xp:dominoDocument>
<xp:dominoDocument
var="documentLog"
ignoreRequestParams="true">
</xp:dominoDocument>
</xp:this.data>
<xp:this.beforeRenderResponse>
<![CDATA[#{javascript:
var dbPath = documentFile.getParentDatabase().getFilePath();
var url = "http://www.example.com/";
url += dbPath;
url += "/xsp/.ibmmodres/domino/OpenAttachment/";
url += dbPath + "/";
url += documentFile.getDocument().getUniversalID();
url += "/" + param.get("fieldName") + "/";
url += param.get("fileName");
facesContext.getExternalContext().redirect( url );
facesContext.responseComplete();
documentLog.setValue("User", session.getUserName() );
documentLog.setValue("FileName", param.get("fileName") );
documentLog.save();
}]]>
</xp:this.beforeRenderResponse>
</xp:view>
编辑:
在这里,您可以找到一种操作filedownload控件的delete函数的方法:
如果覆盖fileNameHrefValue属性并将用户重定向到记录文件访问的下载XPage,则可以跟踪文件下载
<xp:fileDownload
rows="30"
id="fileDownload1"
displayLastModified="false"
value="#{document1.Body}"
allowDelete="true">
<xp:this.fileNameHrefValue>
<![CDATA[#{javascript:
var fName = this.getFileId();
var docUNID = document1.getDocument().getUniversalID();
var path = "http://www.example.com/yourdb.nsf/download.xsp";
path + "?documentId=" + docUNID + "&fileName=" + fName & "&fieldName=Body";
}]]>
</xp:this.fileNameHrefValue>
</xp:fileDownload>
生成的URL的参数fieldName必须与fileDownloadComponent绑定到的字段匹配
然后,download.xsp只需执行另一个重定向:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.data>
<xp:dominoDocument var="documentFile"></xp:dominoDocument>
<xp:dominoDocument
var="documentLog"
ignoreRequestParams="true">
</xp:dominoDocument>
</xp:this.data>
<xp:this.beforeRenderResponse>
<![CDATA[#{javascript:
var dbPath = documentFile.getParentDatabase().getFilePath();
var url = "http://www.example.com/";
url += dbPath;
url += "/xsp/.ibmmodres/domino/OpenAttachment/";
url += dbPath + "/";
url += documentFile.getDocument().getUniversalID();
url += "/" + param.get("fieldName") + "/";
url += param.get("fileName");
facesContext.getExternalContext().redirect( url );
facesContext.responseComplete();
documentLog.setValue("User", session.getUserName() );
documentLog.setValue("FileName", param.get("fileName") );
documentLog.save();
}]]>
</xp:this.beforeRenderResponse>
</xp:view>
编辑:
在这里,您可以找到一种操作filedownload控件的delete函数的方法:
好的,这似乎是合法的。我将尝试使用自定义组件进行一些变通。FileDownload控件是一个非常好的组件,但它有一个巨大的问题,同时它对开发人员不友好,也不可控。不管怎样,谢谢。好吧,这似乎是合法的。我将尝试使用自定义组件进行一些变通。FileDownload控件是一个非常好的组件,但是它有一个巨大的问题