0
  1. 当用户删除文件下载组件(bin 图标)中的附件时,我需要以某种方式捕获事件。我想自动保存文档或至少告诉他,该文档已被修改,他必须保存它。用户删除附件并关闭窗口,附件保持未删除状态。他认为,用户不知道该附件已经消失,而它却从附件列表中消失了。

  2. 当用户下载文件时,我需要以某种方式捕捉事件。我希望将其添加到日志中。类似于:1.1.2014 12:33 Johnny Cash 下载了four-roses.pdf

有什么解决办法吗?谢谢,吉克拉

4

3 回答 3

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>

编辑:

在这里您可以找到一种操作文件下载控件的删除功能的方法:

删除文件下载控件中的附件后自动保存文档?

于 2013-05-14T10:26:40.023 回答
1

我自己一直在调查这个问题,到目前为止,还没有找到一种方法来拦截与 fileDownload 控件本身有关的任何事情。

但是,如果我了解您要执行的操作,我也有类似的需要告诉用户附件已被删除但实际上并未删除 - 所以我欺骗了我自己的下载控件。基本上,我使用一个 bean 来拦截文件上传(Mark Leusnik 在这里写了一篇关于如何使用 SSJS 执行此操作的帖子),然后将其保存到它自己的持有文档中。我使用标准重复控件来列出链接到主记录的所有持有文档并显示文件的链接(请参阅 Stephan Wissel 关于 XPages 文件附件 URL 的帖子)。“删除”链接只是调用一个函数,该函数标记持有的文档,以便它不会显示在重复控件中。这让我可以捕获用户名和日期,并能够恢复“已删除”的文件。

我还没有实现跟踪下载的方法,但我可能会采用类似的方法 - 让“下载”链接调用一个函数来跟踪下载请求,然后将文件附件的 url 返回到浏览器位置栏。

我确信有一种方法可以与下载控件本身进行实际交互,它是一个实例 com.ibm.xsp.component.xp.XspFileDownload - 但这样做需要比我更好的头脑。

于 2013-05-09T09:18:51.223 回答
0

您可以使用组件的属性指定自定义删除消息,deleteMessage或者我不知道这是否是个好主意,但总比没有好:

向页面添加一些 CSJS 以向页面上的元素添加事件:

dojo.connect(dojo.byId('The Client side id  of the bin icon'), "onclick", function(evt){
    //window.alert("hallo");
...
});

我试过这个,它与 alert('hallo') 功能一起工作,所以你也可以添加一个触发 SSJS 事件的功能,这样你就可以保存你的文档。唯一的问题是找出图像的客户端 ID .. 可以尝试在删除图标的列中添加一个特殊的类并在您的代码中搜索它或通过rowAttrs组件的 AllProperties 水龙头中的属性添加一些东西.

于 2013-05-08T12:28:44.250 回答