当用户删除文件下载组件(bin图标)中的附件时,我需要以某种方式捕获事件。我想自动保存文件或者至少告诉他,该文件已被修改,他必须保存。 用户删除附件并关闭窗口,附件保持未删除状态。他认为,用户不知道附件已经消失,而附件列表中则会消失。
当用户下载文件时,我需要以某种方式捕获事件。我希望它被添加到日志中。 类似于:1.1.2014 12:33 Johnny Cash下载了四个玫瑰.pdf
任何解决方案? 谢谢,JiKra
答案 0 :(得分:2)
如果您覆盖 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控件的删除功能:
Auto-save doc after delete of attachment in File Download control?
答案 1 :(得分:1)
我自己一直在调查这个问题,到目前为止,还没有办法拦截任何与fileDownload控件本身有关的事情。
但是,如果我已经理解了你要做的事情,我也有类似的需要告诉用户附件已被删除但实际上没有删除它 - 所以我欺骗了我自己的下载控件。基本上,我使用bean来拦截文件上传(Mark Leusnik wrote a post about how to do this with SSJS here),然后将其保存到它自己的持有文档中。我使用标准的重复控件列出链接到主记录的所有保留文档,并显示文件的链接(See Stephan Wissel's post about XPages File Attachment URLs)。 “删除”链接只是调用一个标记保留文档的函数,以便它不会显示在重复控件中。这使我可以捕获用户名和日期,以及能够恢复“已删除”文件。
我还没有实现跟踪下载的方法,但我可能采取类似的方法 - 让“下载”链接调用一个函数来跟踪下载请求,然后将文件附件的url返回到浏览器位置杆
我确信有一种方法可以实际与下载控件本身进行交互,这是一个com.ibm.xsp.component.xp.XspFileDownload实例 - 但它会比我的更好。/ p>
答案 2 :(得分:0)
您可以使用组件的deleteMessage
属性指定自定义删除消息
或者我不知道这是一个好主意,但它总比没有好:
在页面中添加一些CSJS,将事件添加到页面上的元素:
dojo.connect(dojo.byId('The Client side id of the bin icon'), "onclick", function(evt){
//window.alert("hallo");
...
});
我尝试了这个并且使用了警报('hallo')funktion,因此您还可以添加一个触发SSJS事件的功能,以便您可以保存文档。
唯一的问题是找出图像的客户端ID .. maby尝试在删除图标的列中添加一个特殊的类,并在您的代码中搜索它或通过rowAttrs
proptertie添加somithing AllProperties点击组件。