我有一個門戶,用戶登錄後可以看到一堆按年份和類別排序和分類的文檔。他們希望每個文檔旁邊有一個複選框,以便他們可以選擇一個或多個文檔,然後按下按鈕從所選文檔下載所有文件。有沒有一種簡單的方法來允許用戶從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無論如何,我喜歡克努特的答案,尤其是拉鍊是多重附件的事實標準。 –