顯示具有 SSRS 標籤的文章。 顯示所有文章
顯示具有 SSRS 標籤的文章。 顯示所有文章

2024年8月16日 星期五

ReportViewer 工具列顯示中文

VS專案中要升級舊版的report viewer,已經不用再去安裝runtime,直接以NuGet方式安裝Microsoft.ReportingServices.ReportViewerControl.WebForms  150.1652.0 ,但部署後,工具列都是英文沒有中文。

但在bin下其實有本地化的目錄zh-CHT 所以應該有支援多語系,在bing和google了半天都找不到想要的,覺得這二個搜尋引擎好像愈來愈難找到想要的資訊,是我的錯覺嗎???

後來想到用保哥很推薦的felo search(https://felo.ai/),還真的沒讓我失望耶。

輸入了 Microsoft.ReportingServices.ReportViewerControl.WebForms zh-CHT  詳列了做法。主要是在web.config加入以下設定。

<configuration>

  <system.web>

    <globalization culture="zh-CHT" uiCulture="zh-CHT" />

  </system.web>

</configuration>

將zh-CHT 目錄下的dll加入專案參考後,重新部署,工具列就出現中文了。


2023年9月8日 星期五

Reportviewr 匯出時連線到 vortex.data.microsoft.com

 最近老瓶新裝,在很舊的網站將report viewer升級到15.0的版本。

使用新版的報表預覽時發現會連線到 vortex.data.microsoft.com  這個網址,因為是封閉的內網,所以報表預覽時花了一點時間才發現有這個連線。

查了一下後這是微軟用來匿名收資元件使用狀況? 預設竟是開啟。

查到官方文件可以在report viewer中設定EnableTelemetry="false"

<rsweb:ReportViewer ID="ReportViewer1" runat="server" EnableTelemetry="false">

</rsweb:ReportViewer>

套用後看起來是沒有再有此連線了。

2020年9月26日 星期六

windows 2016 套用GCB 政府組態基準543

 政府單位近年對資安要求日益嚴格,不管是主機還是AP面都花了大錢買了一般人買不起的工具在監控稽核,但小廠商怎麼可能有預算先花幾百萬買黑白箱掃瞄或主機稽核工具,然後再每年花幾百萬買MA呢?一個專案的預算也就幾百萬甚至不到百萬,哪裡買得起。所以免費的開源的都要不斷的找尋找尋再找尋,呵呵。

最近弄了幾台windows 2016的GCB套用(https://www.nccst.nat.gov.tw/GCB),以前一直不想套用,大概就將主機升級到更新的OS版本,因為無GCB可套用,所以也就當視而不見的免了這些 稽核。但終究不是辦法,該面對的還是得要面對,

現在套用後,遇到了一些問題。

1.無法遠端登入,因為GCB禁止本機帳戶進行遠端登入。為了測試方便,先手動開啟。

 gpedit.msc>Windows設定>安全性設定>本機原則>使用者權限指派>拒絕本機登入移除本機帳戶即可。

2.原系統中有使用於不相容FIPS容許的演算法都會顯示此『實作不屬於 Windows Platform FIPS 已驗證密碼編譯演算法的一部分』,因為gpedit.msc>Windows設定>安全性設定>本機原則>安全性選項>『系統密碼編譯:使用FIPS相容演算法於加密,雜湊,以及簽章』啟用。

這個就AP面將有使用加解密的演算法調整符合FIPS規定 ,例如MD5加密改寫使用SHA256以上。

但有個很老很老的系統,是用VS2005 net framework 2.0開發,主要是讀ReportServer 上server report(RDL)做報表資料呈現,FIPS問題就將網站升級為 net framework 4.5就解決了。

但可以登入後,在連線到報表伺服器時雖已採用了impersonate 的方式模擬主機使用者做windows驗證。現在套了GCB後,出現以下訊息

An exception of type 'System.Net.WebException' occurred in Microsoft.ReportViewer.Common.dll but was not handled in user code

Additional information: 要求失敗,HTTP 狀態 401 : Unauthorized。

System.Net.WebException was unhandled by user code
  HResult=-2146233079
  Message=要求失敗,HTTP 狀態 401 : Unauthorized。
  Source=Microsoft.ReportViewer.Common
  StackTrace:
       於 Microsoft.SqlServer.ReportingServices2005.Execution.RSExecutionConnection.GetSecureMethods()
       於 Microsoft.SqlServer.ReportingServices2005.Execution.RSExecutionConnection.IsSecureMethod(String methodname)
       於 Microsoft.SqlServer.ReportingServices2005.Execution.RSExecutionConnection.LoadReport(String Report, String HistoryID)
       於 Microsoft.Reporting.WebForms.ServerReport.GetExecutionInfo()
       於 Microsoft.Reporting.WebForms.ServerReport.GetParameters()
       於 newMOJBIS._default.Page_Load(Object sender, EventArgs e) 於 ...\default.aspx.vb: 行 20
       於 System.Web.UI.Control.OnLoad(EventArgs e)
       於 System.Web.UI.Control.LoadRecursive()
       於 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
  InnerException:


 但直接用模擬的windows帳號登入ReportServer卻是沒有問題,可正常顯示報表資料。

 至今尚未找到解決方式.........待續

 

 

2016年4月7日 星期四

RDLC匯出PDF無法正確顯示中文問題

人客反應,RDLC上的一張表,畫面上預覽中文都很正常,但匯出成PDF後,有一個中文字變成口了。


咦,這似曾相似的中文問題

看來狀況不同,因為這個中文字不是自造字,字型也都設了細明體/標楷體,畫面上預覽也很正常,但匯出PDF就變成細細長長的四方框了。但奇妙的是把rdlc換回rdl在report designer上預覽及匯出也都很正常。

確認後,這個字原來是第二字面的中文字,輸入法中得要勾選包中日韓統一的表文字擴充A與擴充B,才能選得到這些字,難怪大家手忙腳亂的用了注音、速成、倉頡輸入法都找不到這個字。

經過幾天胡測亂測,最後竟然發現解決的方法,跟似曾相識的中文問題解法一樣。

網站是用vs2013開發,當初web.config參考是用Microsoft.ReportViewer.WebForms是11.0版本,那天心血來潮,下載了report viewer runtime 2015 ,把report viewer版本的換成12.0的版本。

結果匯出來的PDF中文竟然顯示正常了。

歡呼。

web.conifg,在<system.web> <assemblies> 下 ,
        <add assembly="Microsoft.ReportViewer.WebForms, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91"/>
        <add assembly="Microsoft.ReportViewer.Common, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91"/> 


<system.webServer> <handlers>下,
<add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />

2015年10月26日 星期一

SSRS RDL 顯示不出微軟正黑體

同事傳來一個SSRS RDL報表檔,說table的欄位字型設成微軟正黑體後,預覽時,全部都變成了空白的一片。但匯出PDF,報表的字型顯示又都很OK,只有在預覽時不正常。

但將微軟正黑體改成新細明體後,預覽又都變得很正常。

把他的rdl用我的SSDT BI 2013打開來看,預覽了一下,在我的機器上看來都很OK咧。

因同事的REPORT DESIGNER是VS2008的中文版本,在設計報表時,字型的下拉選項是直接可看到微軟正黑體的選項,但我的是VS2013英文版,只有Microsoft JhengHei UI這個選項,但不論我是打微軟正黑體、Microsoft JhengHei或是選Microsoft JhengHei UI,報表預覽都很正常。

後來測了一下,發現只要在VS2008的環境中,把字型輸入改為直接打上Microsoft JhengHei後,神奇的是,報表預覽就一切都正常了。

怪哉!


2015年4月26日 星期日

rdlc 匯出excel,不合法的 xml 字元

rdlc或rdl,在匯出excel(xlsx)後,開啟execl檔,出現『我們發現XXX.xlsx的部份內容有問題。您要我們盡可能嘗試復原嗎?如果您信任此活頁簿,請按一下【是】』。

接著點選【是】 後,就出現以下錯誤:

已取代的部分: /xl/worksheets/sheet1.xml 部分具有 XML 錯誤。  不合法的 xml 字元。 行 17,欄 441033。

測試後,原來有一個欄位的內容造成匯出的錯誤。但不解的是WHY??

這個欄位的內容如下,看起來似乎很正常,但把他COPY起來貼到記事本後,會發現設備前多了一個看似空白的空格。

脈衝電場(PEF)殺菌 設備

解出來是0x0B,在XML上這是個不合法的字元。

所以先把這個看似空白的字元刪除,匯出後開啟EXCEL就OK了。

2014年4月9日 星期三

RDLC Subreport 讀取

設計RDLC時,通常都是習慣先在BISD(後來改叫SSDT) 建一個報表專案,然後撰寫SQL設計LAYOUT確認報表內容沒問題後再將

讀取MAIN RDLC應該不是問題

 讀取子報表,只需在原來讀取MAIN RDLC的程式碼加入以下

ReportVierwe1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(SetSubReportData);

ReportViewer1.LocalReport.Refresh();

void SetSubReportData(object sender, SubreportProcessingEventArgs e)
 {

        int sn = int.Parse(e.Parameters["p_sn"].Values[0]); //子表傳遞參數值
      
        string dsname= string.Empty; //每張子表的datasetname,不同子表要給不同名
      
        DataTable dtsource =new DataTable();//報表資料來源,這里是用datatable回傳型態

        switch(e.ReportPath)  //依子表名稱(rdlc的檔名)來讀取資料
                {
                    case "rdlcname1":
                         dsname = "DS1"; //dataset name in rdlc
                         dt = datasource1; //your sql data table ,code by self
                      break;
                    case "rdlcname1":
                         dsname = "DS2"; //dataset name in rdlc
                         dt = datasource2; //your sql data table ,code by self
                      break;
                 }

           e.DataSources.Add(new ReportDataSource(dsname,dt ));  //設定來源

}

2012年11月10日 星期六

SSRS 2008 R2 網站很慢

下載了Report Builder 3.0進行測試
安裝過程中,需要設定report server
結果在進入 http://servername/reportserver 網頁的過程中,好慢好慢.

試了半天,以為是自已的SSRS 2008 R2安裝有問題.

結果竟是因為防毒軟體NOD32 Web存取防護中,HTTP、HTTPS掃描設定中啟用了HTTP檢查.
雖然試著位址管理想要排除本機HTTP的掃描. 但似乎都無效??

只好先關閉啟用了HTTP檢查的功能.

關閉後,Report Server變得飛快..當然Report Builder  Preview也變快了

另外, 在http://localhost/reports/ 下, 按下報表產生器後, 出現了以下訊息

若使用報表產生器,您必須在此電腦上安裝.Net Framework 3.5 
 
但本機的.net framework明明就是上到了4.0
 
結果在切換成相容性檢視後,就正常了.
 
雖然我之前sql server 2008 r2安裝的是英文版,
但report manger web site的介面是跟著IE的語言設定而定的,所以介面就出現了中文
 
如果想要變回英文,則在IE網際網路選項中, 一般頁籤最下方的語言鍵,新增英文[en]語言,並調整序順到第一位

即可切換為英文介面.

另外,由 http://localhost/reports/ 下安裝報表產生器會自動安裝中文版report builder 3.0
 
若要使用英文版介面,則需再下載安裝英文版report builder後,再自行開啟即可.
 
 
 

2012年7月29日 星期日

vs2010 crystal report,和rdl(c)的差異?

之前一直習慣使用微軟的Reporting Service來製作報表(.rdl)
然後再將rdl改命名為rdlc就可以在visual studio使用報表.

所以不懂VS開發程式的同事就可以在BIDS中先做好rdl報表並測試其執行後的報表格式及資料後,再把rdl更改副檔名為rdlc後再給負責開發網站的同事進行coding.
這樣的分工我覺得挺方便的.一來可借助熟DB的同事做好報表,二來也可加快程式員專注在寫code上.

不知crystal report 和reporting service 有何設計上的差異呢?

接下來,我就先建一個小小的下crystal report來測試一下二者差異性吧.

以下就將reporting service 簡稱RS,crystal report 簡稱CR


設計版面:
二者該有的表頭表尾明細群組都有,但CR的layout是free form的任意位置方式,RS的layout則是像Excel方式的表格方.前者的好處應是可以自由擺放報表欄位,後則則是設計方式就如同在操作Excel一樣方便.
個人比較喜歡RS的方式,因為不用一直在那邊對textbox進行上下左右的對齊動作.不過遇到那種複雜版面的報表會比較辛苦.但如果要顯示Grid那種加線條的表格,RS應該是"一塊小蛋糕"吧!










屬性使用:
 CR13.X版報表預覽時,工具列的擺法就和10.X版不一樣. 多了一個主報表的頁籤,舊版似乎是採工具列上的下拉選單.另外GroupTree也預設出現, 因不是很了解這個功能,所以我想把他隱藏起來, Crystal Report Viewer的屬性很令我不直覺,光找一個屬性我就測半天.

RS新舊版的工具列基本上都只有在那一行工具列上變化,屬性使用也很直覺.
下列是個人覺得應設的CR Viewer屬性.
  <CR:CrystalReportViewer ID="crv" AutoDataBind="true" runat="server" PrintMode="ActiveX"
            HasCrystalLogo="false" HasToggleGroupTreeButton="false" ToolPanelView ="None" grouEnableDatabaseLogonPrompt="False"/>

報表來源:
二者報表都是先指定報表名稱,再指定DataSource. 果然是同源產品.

報表呈現:
報表預覽後,CR一直有個地方困擾我, 就是字體看來有點不對齊的感覺,
明明我都設了相同的字體,大小,欄位的高度,也向上對齊 (align tops)
但預覽後的效果,我總是覺在CR中的textbox與資料庫欄位讀出來的textbox對不齊.
像種類:犬, 犬字似乎和種類:沒有平頭對齊??



最後,有一點我也不太理解的是,升級後的有些報表,在執行階段時,一直在
crv.ReportDocument.Load(reportPath)時出現 報表檔案名稱是空的錯誤訊息?雖然檔名及檔案都是正確的.
最後在這篇討論文章找到原因
只要將 ReportDocument.Load(reportPath)改成CrystalReportSource.report.file=reportPath 就OK了

報表工具應該都大同小異,熟悉就好. 不同需求各有擅長. 只要符合需求的都好啦.


2012年4月25日 星期三

報表伺服器沒有回應。請確認報表伺服器在執行中,且此電腦可以存取。

客戶回報, SSRS2005開啟報表管理員後,等了一些時間後,網頁出現以下訊息
報表伺服器沒有回應。請確認報表伺服器在執行中,且此電腦可以存取。

 因為報表伺服器是採windows驗證,理論上進入報表管理員時,應以AD帳號直接登入或應彈出windows登入視窗進行登入.

因使用者已加入AD驗證,所以進入網頁後,等了一下才出現上述錯誤訊息

查看了Reporting Services Configuration Manager, 看來服務及初始化狀態皆正常.

一時之間不太確認原因.

後來,總算使用者說了, 最近有更改過其帳號名稱及密碼..
 
於是在Reporting Services Configuration Manager中,重新初始化後,果然無法初始化.

原來問題在,這台報表伺服器在原先安裝時,是以windows驗證方式連結Report DB.

所以更改了帳號及密碼後, ReportDB就無法登入了.

 在Reporting Services Configuration Manager下,於Database中,改用SQL Server Account重新指定連線就可正常進入報表管理了.

有時問題只需問清楚到底使用者做了什麼變動就可以解決.
但往往使用者都會說....沒有啊,...我什麼都沒做..什麼都沒動過...

如同工程師在遇到問題時也會說...沒有啊,我什麼都沒更改到....

二者角色,皆是各為其主啊.

2011年10月19日 星期三

Could not load file or assembly 'ReportingServicesNativeClient

在Windows 2008 R2上安裝 SQL Server 2005 64位元
Reporting Server 網站進入時出現下列錯誤
Could not load file or assembly 'ReportingServicesNativeClient, Version=0.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. An attempt was made to load a program with an incorrect format.
找到討論回文,照做後,問題解決轉貼abhijitc的回文
 The problem is not SSRS, the problem is asp runing on 32-64 bits. to enable the SSRS follow these steps:
1. To run the 64-bit version of ASP.NET 2.0, Click Start, click Run, type cmd, and then click OK.

2. Type the following command to disable the 32-bit mode:
cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 0
3. Type the following command to install the version of ASP.NET 2.0 and to install the script maps at the IIS root and under:
%SYSTEMROOT%\Microsoft.NET\Framework64\v2.0.50727\aspnet_regiis.exe -i
4. Make sure that the status of ASP.NET version 2.0.50727 is set to Allowed in the Web service extension list in Internet Information Services Manager.

5. Check the SSRS configuration

Note The build version of ASP.NET 2.0 may differ depending on what the currently released build version is. These steps are for build version 2.0.50727.

view this link : http://support.microsoft.com/kb/894435/en-us

2011年6月12日 星期日

SSRS畫甘特圖

看到這篇文章 ,

Gantt charting for the holidays


SSRS也能做出甘特圖,看了一下 screenshot,

把隨附的rdl檔下載下來

改了一下dataset 的內容,查看了里頭的圖表設置. 很有創意
SELECT     Project, Task, TaskSequence,
           StartDate, EndDate, PercentComplete,
           DATEDIFF(DAY, StartDate, EndDate)
                  * PercentComplete AS CompletedDays,
           DATEDIFF(DAY, StartDate, EndDate)
                  * (1 - PercentComplete) AS RemainingDays
from
(
select
 'Holiday Planner 2007' as Project
,'Make List' as Task
,1 as TaskSequence
,'2007-07-01' as StartDate
,'2007-10-01' as EndDate
,1 as PercentComplete 
union all
select 'Holiday Planner 2007', 'Check List Twice',2,'2007-08-01','2007-11-01',1
union all
select 'Holiday Planner 2007', 'Make Gifts',3,'2007-09-01','2007-12-01',.9
union all
select 'Holiday Planner 2007', 'Pack Gifts',4,'2007-12-10','2007-12-24',.65
union all
select 'Holiday Planner 2007', 'Deliver Gifts',5,'2007-12-24','2007-12-26',0
) as Project

實做上,主要是用bar stacked chart 設計了五個series data做出來的效果

Series1: 放StartDate, 但為了讓X軸在圖表呈現不那麼擁擠,所以將此日期依@LabelBuffer參數值(預設是10)往前推10天,可以更改一下這個數值,來觀看Label的變化,數值愈小,則Label在圖表上就愈顯擁擠,  這個series的color設成和backgroud一樣的白色


Series2:放@LabelBuffer,這是要放置開始日期StartDate的label顯示, 同時把Angle設成-35,這樣在呈現時比較有交錯不會有擠在一起的感覺,這個series的color設成和backgroud一樣的白色

Series3: 放 CompletedDays, 範例是PercentComplete 欄位來計算出完成天數

Series4:放RemainingDays, 範例是以1- PercentComplete來計算出剩餘天數
 
Serires3及4需給定不同的color , 因為這是主要要顯示二段bar


如果StartDate ~ EndDate是100天, PercentComplete 是0.7,則CompletedDays是70天, RemainingDays則為30, 當然,前提是資料來源必需要先計算出已完成的百分比,
所以這幾項欄位可以自已的實際情況來改寫


Series5:放 @LabelBuffer, 作用和Series2一樣, 這是要放置結束日期EndDate的label顯示,所以color也要設成白色

最後用現行的bug tracker依樣畫一張..挺不錯的


2011年3月9日 星期三

停用SSRS Designer Cache

VS2008設計RDL時,如果資料集的欄位有增減,而且增減前已經有做過報表預覽preview,常會讀 到之前cache住的資料,即使重新整理也沒用

通常我會直接刪掉RDL同目錄下副檔名為.rdl.data 的檔案.然後再preview一次就OK

如果每次都嫌麻煩, 那就直接改RS的設定檔

C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\RSReportDesigner.config 把
<Add Key="CacheDataForPreview" Value="true" />
改成
<Add Key="CacheDataForPreview" Value="fasle" />

缺點是,如果 資料查詢很慢,那你就每次preview時都要等執行完畢才能看到結果囉

所以當你要連到正式資料庫設計時,利用cache data會比較好一些

2011年3月3日 星期四

SSRS 限定一頁顯示N筆資料

同事設計RDL想要一頁只顯示10筆清單資料就強迫換頁.

於在報表上,依這段Expression 建立一個群組Group,每頁顯示10筆後跳新分頁

=Fix((RowNumber("DataSet1")-1) /10)

預覽時,發生這個錯誤

 [rsInvalidGroupExpressionScope] A group expression for the grouping ‘Group1’ uses the RowNumber function with a scope parameter that is not valid.  When used in a group expression, the value of the scope parameter of RowNumber must equal the name of the group directly containing the current group.   

大家在RowNumer的scope上測來測去都是同樣的錯,真不知該給什麼好....



最後是給上了nothing 就解決了  =Fix((RowNumber(nothing   )-1) /10)

查了MSDN上的說明, 有看沒有懂,

因為很直覺的是RowNumber的scope應該是dataset啊..不是嗎???

Scope

每個彙總函數都使用 Scope 參數,它用來定義彙總函數的執行範圍。有效範圍是群組、資料集或資料區域的名稱。只有直接或間接包含運算式的群組或資料區域可用來作為範圍。對於資料區域 內的運算式而言,所有彙總函數的 Scope 都是選擇性的。如果您省略 Scope 參數,彙總範圍便是報表項目所屬的最內層資料區域或群組。指定 Nothing 範圍會將範圍設為報表項目所屬的最外層資料區域。
對於資料區域之外的運算式,Scope 是指資料表或商務物件。如果報表包含多個資料集,Scope 就是必要的。如果報表只包含單一資料集,便會省略 Scope,範圍會設為資料集。您不能針對在資料區域之外的報表項目來指定 Nothing 關鍵字。
頁首或頁尾不能使用 Scope 參數。

2010年10月29日 星期五

SSRS 2008 欄位動態隱藏

在SSRS 2008 report designer中,將欄位動態顯示,是直接設定textbox的Hidden屬性.
preview時,看來一切都很正常,整個欄位也會隨著條件做顯示

轉成rdlc後,在website檢視這張表,卻發現動態顯示欄位的功能失效了.

試了一下,在Column Groups中設定才能正常動態顯示欄位.


先將report designer的Column Groups切換到Adavanced Mode
點選要動態隱藏的欄位(例上圖第9個(Static)欄位)


在屬性Hidden設定隱藏的Expression

這樣就可以動態依條件顯示欄位了.














RDL和RDLC雖然都可藉由report viewer來呈現.但RDLC使用上仍有一些限制,可以參考MSDN上的比較說明

Visual Studio 2010 中的 Reporting Services 和 ReportViewer 控制項

2010年8月12日 星期四

SSRS 亂七八糟的SOAP API 配對

VS2003一直用到VS2010, 每一個版本都免不了要使用到RDL或RLDC的報表功能
所以想要整理一個可以呼叫各版本Reporting Server SOAP API的功能

結果發現, 真是有夠亂,又一整個假象....搞得我暈頭轉向的.....

SQL Server 2000 Reporting Server ReportService.asmxvs2005
SQL Server 2005 Reporting Server ReportService2005.asmxvs2008
SQL Server 2008 Reporting Server ReportService2006.asmxvs2010
SQL Server 2008R2 Reporting Server ReportService2010.asmx

以上連連看, 哪個配哪個可以WORK????

因為用VS2010開發,所以整個測試開發環境就在VS2010上,
所以要測試SQL SERVER Reporting 各版本和SOAP API各版本的組合.

為了方便, 先利用下列指令在VS command line下,將各版本的SOAP API變成一個class, 這樣在專案中就不用新增web reference

wsdl /language:CS /n:"Microsoft.SqlServer.ReportingServices2010" http://sql2008r2/reportserver_sqlserver/reportservice2010.asmx?wsdl


wsdl /language:CS /n:"Microsoft.SqlServer.ReportingServices2006" http://sql2008/reportserver_sql2008/reportservice2006.asmx?wsdl

wsdl /language:CS /n:"Microsoft.SqlServer.ReportingServices2005" http://sql2008/reportserver_sql2008/reportservice2005.asmx?wsdl

wsdl /language:CS /n:"Microsoft.SqlServer.ReportingServices2000" http://sql2000/reportserver/reportservice.asmx?wsdl

將產出的.cs檔, include到專案中就可以使用了

明明知道
VS2008中, report viewer的engine 是RS2005
VS2010中,report viewer的engine 是RS2008

但一直被sql server 版本數字的假象給擾亂....GOOGLE的關鍵字又下得不夠精準.. 



測了半天, 我已經頭暈暈了.
 
測試:
SQL Server 2008 (SP1) Reporting Server + ReportServices2005.asmx + vs2010   可以work
雜唸... ReportServices2005.asmx  為何要配Reporting Server  2008啊, 版本數字能不能匹配一下啊

原本以為ReportServices2006.asmx 是給Reporting Server 2008用得哩...在此打轉很久..空轉
MSDN的說明要好好看仔細, 不要自做聰明.....唉.....

測試:
SQL Server 2008 R2 Reporting Server + ReportServices2010.asmx + vs2010 可以work
雜唸...  Reporting Server 2008為何要配ReportServices2010.asmx , 直接跳過ReportServices2008.asmx ....版本數字能不能匹配一下啊

2010年7月8日 星期四

RDLC 匯出PDF中文問題

同事給了一個在windows 2003 IIS6 rdlc 匯出的pdf檔
在windows 7 的環境下開啟....中文字全部都變成了亂碼.

以前遇到的亂碼通常都是字型未設成細明體(MingLiU)所致
但這次的狀況倒還是第一次遇到. 而且只有細明體才會有這個問題,設成標楷體的rdlc匯出時,看來正常.

後來也反向測試了一下, windows 7 IIS7 rdlc匯出的pdf檔, 拿到windows 2003 或xp 也都會變成亂碼
如果用acrobat 5.0開啟時還會有"無法找到或建立字型『MingLiU』‧某些字元法正確顯示或列印"的訊息出現, 用acrobat 9.3 則無此提示訊息.

大家反覆測了一整天, GOOGLE了半會,也沒啥solution...

今天就反應給微軟, 且待結果囉..

2010/07/14: 微軟回覆說.....這是已知的BUG, 在VS2010已解決, 建議改用VS2010.... 或等待VS2008的BUG FIX
測了一下, VS2010的RDLC, 部署到win2003 IIS 6或win7 IIS7環境,所匯出的PDF在win2003,xp,win7細明體中文皆可正常顯示.

唉, vs2008沒用多久,馬上又進入vs2010了, 技術更新的周期愈來愈短, 我跑得愈來愈慢...哈.

2010/07/15, 微軟說, 這是已知BUG, 細明體glyph ID在win 7已和之前不相同,所以會有對照上的問題, 但標楷體的glyph ID在win 7則維持不變, 所以要嗎上vs2010,要嗎改用標楷體.....vs2008會不會在下版sp fix bug? 可能不會吧......結案.
最後的解決方法是, 安裝virtual  pdf printer, 用列印的方式轉出PDF檔, 這樣連之前造字無法正常顯示的問題也一併解決.

2010/08/12, 看到路人甲的留言,照著這篇文章的說明,
1.先去下載Microsoft Report Viewer 2010 Redistributable Package
2.在dos command下, cd c:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.WebForms\10.0.*
3.copy Microsoft.ReportViewer.WebForms.dll c:\temp\
4. cd c:\Windows\assembly\GAC_MSIL\Microsoft.ReportViewer.Common\10.0*
5.copy Microsoft.ReportViewer.Common.dll c:\temp\
6.open your web  project, add refreance 上述二個dll檔
7.接著, 連程式碼都不用改喔, 只要在web.config檔置換下列幾個設置,然後重新build project
system.web 下的assemblies tag, 找到add assembly="Microsoft.ReportViewer.WebForms, Version=9.0.0.0,.....及add assembly="Microsoft.ReportViewer.Common, Version=9.0.0.0

system.web 下的pages tag下的controls tag, 找到add assembly="Microsoft.ReportViewer.WebForms, Version=9.0.0.0

system.web 下的httpHandlers tag,找到add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0,....
以上都把9.0.0.0改成10.0.0.0

system.web 下的buildProviders tag, 找到 add extension=".rdlc" type="Microsoft.Reporting.RdlBuildProvider, Microsoft.ReportViewer.Common, Version=9.0.0.0,  ...

移除掉這行

如果是要部署到IIS7.0,
在system.webServer 下的handlers tag, 找到add name="Reserved-ReportViewerWebControl-axd" path="Reserved.ReportViewerWebControl.axd" precondition="integratedMode" resourcetype="Unspecified" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" verb="*"

把這行改成
add name="ReportViewerWebControlHandler" path="Reserved.ReportViewerWebControl.axd" precondition="integratedMode" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" verb="*"

8.測試一下你的報表囉......

原則上如果原本的rdlc是在SSRS 2005 base下開發, reportviewer 10.0也可以很順利的呈現,同時仍可以vs2008的report designer 進行設計

同時,我也順便測了一下, 用SSRS 2008 先設計出.rdl的報表(主要是有tablix), 然後放到vs2008的專案中,把副檔名改成.rdlc,一樣也可以正常的呈現.(我喜歡用這種方法來設計rdl,一旦報表完成後,只要把.rdl改成.rdlc就可以了, 很方便進行報表的開發及測試)

比較美中不足的是, 在vs2008的report designer中,無法順利開啟SSRS 2008 base的rdlc檔

不知vs2008上的report designer是否也能夠使用10.0的版本?

總之, 路人提供的解決方法, 真是太棒了, 真是一舉二得. 解決了之前PDF的問題, 又可使用SSRS 2008的報表新功能.

2010年6月7日 星期一

SSRS 造字匯出pdf

報表內容含造字(EUDC,End-User Defined Characters), 匯出EXCEL都沒問題
唯獨匯出pdf不成功

試了RS designer 的三個版本
RS 2000 designer ,造字preview 與匯出EXCEL正常,匯出PDFOK , 但造字變成 !
RS2005 designer , 造字preview 與匯出EXCEL正常,匯出PDFOK, 但造字變成口
RS2008 designer , 造字preview 變成口, 但匯出EXCEL造字顯示正常,
匯出PDF時, 出現以下訊息
 ---------------------------
Export Error
---------------------------
An error occurred during local report processing.
CreateFontPackage failed: Win32 error:1006

也試用了ASPOSE的 Aspose.Pdf for Reporting Services, 造字仍無法顯示

最後試了, VS2010 report viewer. 造字preview 與匯出EXCEL與WORD正常,匯出PDFOK, 但造字變成口
 
OO, 目前看來是無解

2010年4月27日 星期二

SSRS render excel 怪事

有一張用SSRS2005做出來的表,在TABLE HEADER要依資料動態顯示不同的TITLE

在IE 瀏覽看來都很正常,但匯出到EXCEL 2003 時,發現TITLE後面多了一個空白,以致於匯出到EXCEL 2003後,表頭內的文字變成了二行,其中第二行是空白, 但匯出PDF和列印都是正常

必須手動在這個儲存格中,後面的空白刪掉,表頭才會顯示正常

因為匯出EXCEL 2003才有這個問題,而且匯出EXCEL 2007沒有這個問題, 所以一直以為是RDL render 的問題

由於表頭的值是依dataset 的某VARCHAR欄位動顯示出來的, 所以回頭去看TABLE內的欄位值時,也沒發現有任何空白存在.

直到, 用SQL LEN function去查看欄位的長度時,才發現,原本應該只有長度9的內容值,竟然變成10

光是用眼睛看,真的明明只有看到 9個中文字啊...

再查了一下,   select len(replace(orgnDescription,char(13),'')) from organization


原來欄位內容值最後面多了一個換行符號(當初這個資料是轉進來的)
執行更新語法後, update organization set orgnDescription = replace(orgnDescription,char(13),'')

再查詢報表,匯出EXCEL , 問題就解決了.

所以開發後,要測試,除了IE版本要比照人客的環境外,連OFFICE也得要一致才行啊

2010年3月11日 星期四

SSRS 2005 部署後,換行失效了

人客問了一個問題, 以下是他的sql
select
(select cast(pk as varchar(10) ) + ':' + col1 + char(10) from tabTest b
where a.coKey = b.colKey for xml path('')) as newCol
from tabTest a
where a.pk < 20
他用這段sql找出了同一個colKey下所有的筆數, 並將每一筆的 col1 組成一個字串,以換行符號隔開
所以在report  designer 執行後就會跑出以下類似的結果
1:test1
2:test2
3:test3
4.test4

在設計的環境下,結果看來是ok,

但部署到report server後, 執行報表, 結果變成了
1:test1 2:test2 3:test3
4.test4

原本的換行效果不見了...

實測後,
在report designer 下, SSRS 2008 (sp1) 和SSRS 2005 (sp3) 跑出來的結果一切正常
但部署到report server 後, SSRS 2008 (sp1) 正常, 但SSRS 2005 (sp3) 就失效了...

看來是SSRS 2005的問題, render 時,不認得char(10)這個換行符號

於是,做點小手腳, 先將sql 改成如下,

select
(select cast(pk as varchar(10) ) + ':' + col1 + 'newLine' from tabTest b
where a.coKey = b.colKey for xml path('')) as newCol
from tabTest a
where a.pk < 20
然後在 rdl layout中, 將textbo 的expression設成

=replace( Fields!newCol.Value, "newLine",vbCRLF )
這樣在設計環境下預瀏覽ok
同時部署到report server 時,網頁上也能正常顯示換行了.

IIS 網站無法下載中文檔名檔案因為取消高位元字元

 網址+中文檔案名稱方式下載檔案顯示 404 - 找不到檔案或目錄。 但英數字檔案名稱則可下載。 因為設定GCB IIS,其中1項 將高位元字元預設取消勾選了。 27 TWGCB-04-014-0028 要求篩選與其他限制模組 允許高位元字元 這項原則設定決定查詢...