Xpages 如何在文件下载组件中捕获删除和下载事件?

Xpages 如何在文件下载组件中捕获删除和下载事件?,xpages,Xpages,我需要以某种方式捕捉用户在文件下载组件(bin图标)中删除附件时发生的事件。我想自动保存文档,或者至少告诉他,该文档已被修改,他必须保存它。 用户删除附件并关闭窗口,而附件仍处于未删除状态。用户不知道,他认为,附件已经消失了,而它从附件列表中消失了 我需要以某种方式捕捉用户下载文件时发生的事件。我想把它添加到日志中。 比如:1.1.2014 12:33约翰尼·卡什下载了四朵玫瑰 有解决办法吗? 谢谢,JiKra您可以使用组件的deleteMessage属性指定自定义删除消息 或者我不知道这是否是

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

  • 我需要以某种方式捕捉用户下载文件时发生的事件。我想把它添加到日志中。 比如:1.1.2014 12:33约翰尼·卡什下载了四朵玫瑰

  • 有解决办法吗?
    谢谢,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控件是一个非常好的组件,但是它有一个巨大的问题