2015-09-09 146 views
2

我可以成功從以下腳本獲取數據並顯示在報告中。從REST API獲取數據到jsreports

function beforeRender(done){ 
    require("request")({url:"http://nicolas.kruchten.com/pivottable/examples/mps.json",json:true},function(err, response, body){ 
     request.data = {posts:body}; 
     done(); 
    })  
} 

我用這個,

<h1>Request</h1> 

<table style='border-style:solid'> 
    <tr> 
    <th>Province</th> 
    <th>Party</th> 
    <th>Name</th> 
    </tr> 
    {{for posts}} 
    <tr> 
    <td>{{:Province}}</td> 
    <td>{{:Party}}</td> 
    <td>{{:Name}}</td> 
    </tr> 
    {{/for}}  
</table> 

但是,當我打電話使用下面的查詢它獲得的數據和寫入控制檯,但報告沒有顯示REST API。

var request = require('request'); 

function beforeRender(done){ 
    require('request')({headers: { 
    'sToken': 'qq', 
    'log': 'dd' 
    }, url: 'http://localhost:3000/com.dd.com/Inventory' , json:true }, 
    function(error, response, body) { 
     request.data = {posts:body}; 
     console.log(request.data); 
     done(); 
    }); 
} 

HTML代碼

<h1>Request</h1> 
<table style='border-style:solid'> 
    <tr> 
    <th>Name</th> 
    </tr> 
    {{for posts}} 
    <tr> 
    <td>{{:Name}}</td> 
    </tr> 
    {{/for}}  
</table> 

JSON字符串返回:使用

{ posts: 
    { Id: '700', 
    Name: 'myName', 
    __osHeaders: 
     { Version: '{EFF95F4C-2FA2-11E5-BA94-040150C75001}', 
     Namespace: 'com.dd.com', 
     Class: 'Inventory', 
     Tenant: '123', 
     LastUdated: '2015-07-21 08:20:56.197248204 -0400 EDT' } } } 

引擎:jsrender
配方:幻象PDF

如何顯示在報表中的值?使用API​​時,我在哪裏出錯了?

回答

1

我發現了這個問題。我注意到下面這一行,導致我不在報告上打印它。

var request = require('request'); 

因此,新的代碼,

//var request = require('request'); 
    function beforeRender(done){ 
     require('request')({headers: { 
     'sToken': 'qq', 
     'log': 'dd' 
     }, url: 'http://localhost:3000/com.dd.com/Inventory' , json:true }, 
     function(error, response, body) { 
      request.data = {posts:body}; 
      console.log(request.data); 
      done(); 
     }); 
    } 
0

第一個提到的API返回一個數組,然後與jsrender for循環一起使用。

但根據您發佈的JSON字符串,第二個API返回單個對象,這就是for循環在那裏不起作用的原因。它將工作沒有for循環:<h1>{{:posts.Name}}</h1>

因此,解決方案是更改API調用實際接收數組或將其轉換爲它,以便您可以循環。

+0

我想無論是BOT的方式得到了失敗。當我爲第二個API刪除'for'循環並且按照你所說的添加了'

{{:posts.Name}}

'它給出了這個錯誤:'錯誤發生 - 在呈現報告期間出錯:無法讀取undefined屬性'Name' 堆棧 - 錯誤:無法讀取ChildProcess上未定義的 的屬性「名稱」。在handleMessage(child_process.js:324)處的ChildProcess.emit(events.js:110:17) ()(D:\ SW\jsreport\node_modules\script-manager\lib\subscriber-processes.js:38:23) :10) at Pipe.channel.onread(child_process.js:352:11) From previous event: at Reporter.render' –

+0

我試圖在操場上覆制這個https://playground.jsreport.net/#操場/ Zys1MkH0rl/3,它似乎工作正如我所說,你能檢查它嗎? –

+0

奇怪。當我像在腳本中那樣添加數據時,它適用於我的環境。但是,當我僅將腳本更改爲REST調用腳本時,它會給出錯誤。 –