我有一个门户,用户登录后可以看到一堆按年份和类别排序和分类的文档。他们希望每个文档旁边有一个复选框,以便他们可以选择一个或多个文档,然后按下按钮从所选文档下载所有文件。有没有一种简单的方法来允许用户从viewPanel下载选定文档中的文件?
每个文档只有一个文件。
有没有简单的方法来编程这样的事情?
我有一个门户,用户登录后可以看到一堆按年份和类别排序和分类的文档。他们希望每个文档旁边有一个复选框,以便他们可以选择一个或多个文档,然后按下按钮从所选文档下载所有文件。有没有一种简单的方法来允许用户从viewPanel下载选定文档中的文件?
每个文档只有一个文件。
有没有简单的方法来编程这样的事情?
您想一次下载所选文档的附件。
创建一个zip包含所有附件并下载一个zip文件的文件。
您可以从文档的附件in Naveen Maurya's XSnippet中找到用于创建zip文件的代码。
以一种方式扩展此代码,您可以浏览所有选定的文档并从中获取附件。
设置在您的XPage的按钮和开放的XPage zip.xsp所有选定文件的的ID(XSnippet的XAgent)
<xp:button
id="button1"
value="Download">
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="norefresh">
<xp:this.action>
<xp:actionGroup>
<xp:executeScript>
<xp:this.script><![CDATA[#{javascript:
var viewPanel = getComponent("viewPanel1");
sessionScope.selectedIds = viewPanel.getSelectedIds();
}]]></xp:this.script>
</xp:executeScript>
<xp:openPage name="/zip.xsp"></xp:openPage>
</xp:actionGroup>
</xp:this.action>
</xp:eventHandler>
</xp:button>
从zip.xsp会话范围读取ID的会话范围的变量,得到文档及其附件,并将它们全部放在一个zip文件中。
...
var selectedIds = sessionScope.selectedIds;
for(i=0; i < selectedIds.length; i++) {
var doc:NotesDocument = database.getDocumentByID(selectedIds[i]);
var attachments:java.util.Vector = session.evaluate("@AttachmentNames", doc);
// Loop through all the attachments
for (var i = 0; i < attachments.size(); i++) {
...
作为替代,你可以一次下载的所有文件与多个window.open(url)
在客户端:
这是一个工作示例代码:
<xp:button
id="button1"
value="Download">
<xp:eventHandler
event="onclick"
submit="true"
refreshMode="partial"
refreshId="panelDownloadURLs">
<xp:this.action><![CDATA[#{javascript:var viewPanel = getComponent("viewPanel1");
var selectedIDs = viewPanel.getSelectedIds();
var filesToDownload = "";
for(i=0; i < selectedIDs.length; i++) {
var doc:NotesDocument = database.getDocumentByID(selectedIDs[i]);
var attachments:java.util.Vector = session.evaluate("@AttachmentNames", doc);
for (var i = 0; i < attachments.size(); i++) {
var attachment = doc.getAttachment(attachments.get(i).toString());
if (attachment != null) {
filesToDownload += context.getUrl().getAddress().replace(view.getPageName(), '') +
'/0/' + doc.getUniversalID() + '/$FILE/' + attachment.getName() + '#';
}
}
}
getComponent("inputDownloadURLs").setValue(filesToDownload);}]]></xp:this.action>
<xp:this.onComplete><![CDATA[
var filesToDownload = dojo.byId("#{id:inputDownloadURLs}").value.split("#");
for (var i = 0; i < filesToDownload.length; i++) {
if (!filesToDownload[i].toString() == "") {
window.open(filesToDownload[i]);
}
}]]></xp:this.onComplete>
</xp:eventHandler>
</xp:button>
<xp:panel
id="panelDownloadURLs">
<xp:inputHidden
id="inputDownloadURLs"
value=""></xp:inputHidden>
</xp:panel>
但是,这个替代解决方案感觉有点混乱,如果你有很多附件...
这是行不通的。这是一个审计门户,可以下载几十或几百个文件。 – Bitwyse1
@ Bitwyse1您将同一个主体应用于单个文档的附件。这与Knut所制定的几乎完全相同,但是从那天起,该行文档的一个按钮就被调用。 –
邮政解决方案在您的情况下是完美的。我添加了一些代码片段来展示如何扩展zip XSnippet。 –
所以,我终于想通了这一点。使用Naveen Maurya's XSnippet.中的zip文件代码和一些java code found here的组合。我会在完成后发布我的最终代码。
事实证明,我并不需要从服务器文件系统下载附加的文件而不是文件。
[Google上的前四个链接](http://bfy.tw/28Le)给出了一些关于如何执行此操作的非常好的信息。如果你想链接到文档中的_first_附件,请查看[Paul Withers关于该主题的博客文章](http://www.intec.co.uk/xpages-open-first-attachment-in-视图/)。该谷歌搜索的第四个链接显示,这个问题可能是http://stackoverflow.com/questions/27495491/attachment-download-from-view的可能重复。 –
感谢谷歌帮助埃里克。大声笑。我希望找到一个允许在视图顶部有一个按钮的例子,它会从每个选定的文档中下载一个文件(使用复选框)。我有一个想法如何走选定的文件列表(我认为),但不知道如何调用每个文件的下载。 我希望有人已经这样做,并不介意共享一些代码,我不必重新发明轮子可言。 – Bitwyse1
我很高兴赞赏:-P无论如何,我喜欢克努特的答案,尤其是拉链是多重附件的事实标准。 –