想請問rails連接sql server reporting service的套件


#1

各位大大們好,想請教一個問題如下

如果要使用rails 撈出ssrs 的報表是不是要使用savon這個套件?如果不是的話是否可以推薦可以連上ssrs的方法

我已經找了好多可能性,但最後好像都不是想要的,如rest api ,soap, wash out,

小弟我ruby剛起步…但主管希望我能找出連到ssrs並抓出裡面設定好的報表

如有高手有經驗可否幫小弟一忙!!!感謝!!


#2

首先 … protocol (傳輸方式) / schema (內容格式) 先搞清楚 … 先找 gem 通常都幫不上忙,因為你連怎樣開始都不知道哩 …

SSRS 我沒用過,首先你要看怎樣和它要資料才行,我不確定真實狀況是啥,但我剛剛看了

https://docs.microsoft.com/zh-tw/sql/reporting-services/developer/rest-api?view=sql-server-2017

和左邊 menu 的 “REST API 範例” 內的 powershellSamples.ps1

… 遇到的看不懂的東西請慢慢看,即使是不同語言,這邊你的角色應該只需要 download 段才是

$ReportPortalUri = 'http://myserver/reports'
    #我是基本網址的變數
...
Write-Host "Download an item..."
    #一般文字 ... 無意義
$downloadPath = 'C:\download\test.rdl'
    #下載去哪,可以略過,你應該先印出來?
$catalogItemsApi = $ReportPortalUri + "/api/v2.0/CatalogItems(Path='/test')/Content/$value"
    #把變數組成網址
$url = [string]::Format($catalogItemsApi, $item)
    #轉換成網址"物件",Ruby可略過這層
$response = Invoke-WebRequest -Uri $url -Method Get -UseDefaultCredentials
    #用 http GET 取得檔案,傳輸使用預設證書(非 https / ssl 可略過證書段)
[System.IO.File]::WriteAllBytes($downloadPath, $response.Content)
    #把取得的東西寫成檔案

嘛 … 就這樣而已哩 … 對我而言上面東西太囉唆了,換成 RestClient 這個 gem 可能只有

require 'rest-client'
domain = '127.0.0.1' #對象 ip
port = 1234 #對象 port
sub_url = "xxx' #這邊可能是最困難的?把 URL 組對
response = RestClient.get("http://#{domain}:#{port}/#{sub_url}")
puts response.body #印出來看

大概這樣唄,先測試是否能取得資料,不過其實你應該要用別的方式來做快速測試就是了,類似在 terminal 下輸入

curl -i "http://127.0.0.1:1234/xxx"

就可以先測試你的網址是否正確,且用 -i 會告訴你完整的 header 之類的,而非直接寫 code 猜半天哩

當然你還有奇怪的招式啦,類似不管怎樣都成功取得一次,類似別的軟體或瀏覽器還是啥鬼的,然後用 wireshark 去擷取能正常 work 的封包(非 https ),裡面會有百分百正確的網址,取得正確網址後,才用 curl 或 rest-client 來寫成程式之類的,也才有後續的分析儲存之類的問題

而剛剛也似乎有看到有 CSV 或 JSON 格式,那麼你任何 gem 應該都不需要,因為 std lib 內就有 csv / json 可以用了,不管如何原文要先入手才行,否則你連考卷都沒拿到手,如何答第一題哩

anyway 自己的作業要自己寫,而我沒有主機權限能幫你測試,無法觀落陰,so~ 自己嘗試唄,然而另外一方面順便提醒你一下,如果 SSRS 是中介服務的話 … 你是否要先塞資料進去後,才有資料能取得呢?


#3

感謝JC大指點,我在往這個方向找答案看看!

我也是有努力在找,但方向不對就像無頭蒼蠅XD

我目前的預設方向是 先在ssrs裡面建一個報表,這個報表已經產生好了
(已先預設一個從資料庫拉出來的資料),然後使用rails 去對ssrs做連線再進去抓已產生好的報表
或是可以直接做撈出這個已產生的報表,在這過程中也許需要使用 CSV 或 JSON 格式來抓取資料?(還在試)最後用將資料叫出來…應該是這樣吧orz…

希望我能找到答案…真的不行只好再請JC大哥指教

感謝!!


#4

JC大 想在請問一下,我後面有繼續研究問題
發現出ssrs 需要解開401認證,我往了兩個方向去解
1.找出ssrs匿名登入的方法,但未成功…還在尋找別的
2.我使用了rest-client 登入時出現401錯誤,後來我去估狗商店找到了一個叫
advanced rest client 的套件,並使用他去連接,使用時他可以增加帳密,但是連線按下去之後他還是跳出需要輸入帳號密碼…

我想問JC大有沒有解過http 401 認證問題的方法或一些意見…
還在努力尋找解答…感謝幫忙!!


#5

嘛,你的問題應該是輸入『windows 的帳號密碼』就可以過了唄,不是的話可能有別的東西要設定?類似資源路徑之類的,失敗可能是資源不對而非帳密不對 … 不過也要看吐出來的結果就是 … & http 當初訂的 spec 內本來就有帳號密碼輸入段,單純一般很少用而已,舊時代產物

HTTP Basic access authentication :

因為長得很醜且無加密或是任何交互驗證(類似 captcha ),所以後來都自幹解法唄,類似登入網頁之類的

anyway 你先把瀏覽器打過,才用 rest-client 唄,對我而言正常行為都沒辦法通過時,在那邊搞 rest-client 是很浪費時間的,因為『寫成程式單純是把正常的一連串行為自動化罷了』,沒特別高級的

不過至少你找到入口點了唄,單純打通關然後再進行下一關而已