いいね!数

0

閲覧数
585

Domino Webアプリで以下ような動作をするアプリがあります。

 

エージェント(LotusScript)

(略)

strFname = |Format(Now(),|yyyymmdd|) & |.csv|

Print |Content-Disposition: attachment; filename=| & strFname 
Print |Content-Type: application/octet-stream|
Print csvtxt

上記コードが記載されたエージェントをWebから呼び出して実行すると「名前を付けて保存」ダイアログが表示され、Notes文書のデータをcsvに出力したファイルを指定した場所に保存(ダウンロード)することができます。(csvtxtのデータはメモリ内にのみあり、サーバ上に一時ファイルで保存等はされていない。)

 

これと同等の動きをXpagesで実現させたいのですが可能でしょうか。

可能であれば、ご教示いただきたく思います。よろしくお願い致します。

 

 

 

サーバー情報:9.0.1 FP8 | クライアント情報:9.0.1 FP8IE11 | 
カテゴリ:Notes - 使い方 | タグ:
  | 質問日時:2017/09/25 16:23:41

回答・コメント

いいね!数

0

添付のコードスニペットにあるXAgent をつかうのはどうでしょうか?

21行目~23行目をCSV出力するように記述して利用します。XAgentはWEBエージェントのように振る舞うXPagesの記述方法なので http://mydomain/mynsf.nsf/xagent.xsp のようにアクセスできます。

厳密には13行目の

response.setContentType("text/xml");

response.setContentType("text/csv");

と書き換えるとさらに良いと思います。

19行目はURLパラメータ取得のサンプルなので適宜書き換えてください。

回答日時:2017/10/17 15:07:18

いいね!数

0

Kazu Tatsukiさん、ありがとうございます。


出力するデータを文書からjavascriptで取得して生成するという課題は残りますが、以下のコードで希望の動作を実現できそうです。
 

<?xml version="1.0" encoding="UTF-8"?>
  
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="false">
  <xp:this.afterRenderResponse><![CDATA[#{javascript:   
    var externalContext = facesContext.getExternalContext();
    var writer = facesContext.getResponseWriter();
    var response = externalContext.getResponse();
   
    var filename="test.csv"
    response.setContentType("text/csv");
    response.setHeader("Cache-Control", "no-cache");
    response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");

    writer.write(csvtxt);
  
    writer.endDocument();
    }]]>
  </xp:this.afterRenderResponse>
</xp:view>

XAgentについては、こちらのページを参考にさせていただきました。

回答日時:2017/10/17 16:43:24