2013年3月16日 星期六

水晶報表-VS2010開發注意事項

、CrystalReport跟URL Routing會有衝突!?

若Site有使用URL Routing的架構,記得設定讓axd 檔不受路由約束。AND 這一段code要寫在Routes.Add 之前!
RouteTable.Routes.Ignore("{resource}.axd/{*pathInfo}");



這一次遇到的Case真的很機車,由於導入.Net 4.0 架構,所以整個網站的路徑規劃都是用Url Routing的方式處理。現在要在這個Project 加入報表功能,當然第一首選是使用我喜愛的Crystal report。但是我照所有注意事項設定了,他還是Run不起來。
出現詭異的狀況如下: 有出現工具列但是報表出不來~主控台有莫名的JScript錯誤訊息。


後來乾脆另外建一個單純的CrystalReport站台交叉比對。
1.首先用VS2010建立網站、選Crystalreport


2.加入一個空白的RPT檔,做一些簡單的編輯。使用VS執行一切正常。
3.在本機IIS建一個站台指向他,將虛擬目錄aspnet_client這些設好,這個Site也是可以正常呈現報表內容。

如此看來我的運作環境是正確的∼所以有可能的只有Site之間的差異了...
我先是傻傻的比對了Web.config~甚至砍掉所有設定再一條一條加回去,囧rz ... 沒用!

最後一發狠,乾脆將專案網站中一個一個資料夾、檔案複製到這個乾淨的測試站台。
複製一個項目執行一次報表~終於阿終於到複製Global.asax檔的時候~錯誤訊息出現
這時候錯誤訊息反而像曙光一樣!
Global.asax檔裡面最主要做的事就是在App start時將RouteTable從資料庫載入記憶體中,所以嘗試將Routes.Add的部份Mark掉...嗯!原來真的是Url routing的關係!
我把Routes.Add這一段mark掉就正常、一開啟就完蛋!

開心沒幾秒鐘後又要面對另外一個問題~整個Request Circle有很多要求js, aspx, css , axd到底是誰在作怪?還是只能一種一種來過濾看看了。
但不幸的這次我又犯了一個錯誤,我把ignore加在Add動作做完之後,結果自然是怎麼試都沒效Q_Q。終於~在快要下班的壓力下忽然福至心靈!!把他弄到前面看看好了~~~
口將!!世界恢復和平了!

p.s.其他過濾
        //RouteTable.Routes.Ignore("{resource}.aspx/{*pathInfo}");
        //RouteTable.Routes.Ignore("{*alljs}", new { alljs = @".*\.js(/.*)?" });
        //RouteTable.Routes.Ignore("{*allcss}", new { allcss = @".*\.css(/.*)?" });

--
待事以直 是謂君子

沒有留言: