2017-05-12 14 views
1

ここに、CSVファイルとしてデータをダウンロードしようとしているREST APIがあります。 docssetBodyによるとREST APIを使用してCSVをダウンロードするにはどうすればよいですか?

(function process(/*RESTAPIRequest*/ request, /*RESTAPIResponse*/ response) { 

    var data = '\n'; // workaround to separate <xml> start tag on first line 
    data += 'Firstname,Lastname,Username' + '\n'; 
    data += 'Nikhil,vartak,niksofteng' + '\n'; 
    data += 'Unknown,person,anonymous' + '\n'; 

    response.setHeader("Content-Disposition", "attachment;filename=Xyz.csv"); 
    response.setContentType("text/csv"); 
    response.setBody({'data':data}); 

})(request, response); 

JSオブジェクトが必要ですので、私はちょうど私がデータをScriptableObjectに解析することができない旨のエラーが出るdata変数を渡す場合。

だから私は、応答の下に取得し、現在のコードで:

{ 
    "result": { 
    "data": "\nFirstname,Lastname,Username\nNikhil,vartak,niksofteng\nUnknown,person,anonymous\n" 
    } 
} 

そして、生成されたCSVファイルを次のようになります。

enter image description here

第一に、そのXMLマークアップを取り除くためにどのように任意のアイデア5行目?

答えて

1

setBodyメソッドは、クライアントがAcceptヘッダーを介して行うことに基づいてJSONまたはXMLにシリアル化するJavascriptオブジェクトを必要とします。

独自のシリアライズされたフォーマットを作成する場合は、CSVを使用します。そのため、setBodyメソッドを使用する代わりに、ストリームライターインタフェースを使用してレスポンスストリームに直接書き込んでください。

response.setContentType("text/csv"); 
response.setStatus(200); 
var writer = response.getStreamWriter(); 

writer.write('Firstname,Lastname,Username\n'); 
writer.write('Nikhil,vartak,niksofteng\n'); 

など

注あなたは正しく、あなたがフィールドが「ニック、HIL」のようにカンマが含まれているしたい場合などの特殊文字をエンコードするなど、自分自身をフォーマットCSVのすべての詳細を処理する必要があります。

乾杯、

シラス

+0

おかげサイラス。メソッド名は 'setStatus'です。また、これは明示的に設定する必要があります。他のものは、[この投稿](https://community.servicenow.com/community/develop/developer-relations/blog/2017/03/31/scripted-rest- api-stream-writers-and-http-status)について説明します。将来同様の問題を抱える他の人にも言及される。 – niksofteng

関連する問題