IIS 安裝Windows 驗證功能 需要重開機嗎? | Does IIS after install Windows authentication function, need restart?
不用
NO
因為要在正式機操作,安全起見才去問 本機測測看….
不用
NO
因為要在正式機操作,安全起見才去問 本機測測看….
我原本有個 view
在伺服器 1 資料庫 A (1-A)
跨到伺服器 1 資料庫 B (1-B)
現在這個 view 移到 伺服器 2 資料庫 A (2-A) 跨到 1-B
建好 1 到 2 的 db link 後
在 ssms 更新 view 的 sql 並執行,出現一個錯誤訊息:
無法在 date 上呼叫方法
SQL 語法直接按新增查詢是可以跑出來結果,
但在 SSMS VIEW 的語法設計中執行就會出現這個錯誤
先在 GOOGLE 找到 MSDN 上的 SQL SERVER 錯誤訊息代碼表
https://technet.microsoft.com/zh-tw/library/cc645611(v=sql.105).aspx
然後切成英文,找到關鍵字 Cannot Call Methods on
重新搜尋 就找到 stackoverflow 的討論串
https://stackoverflow.com/questions/16180347/sql-server-cannot-call-methods-on-date
原來是 ssms 的 bug
後來用語法
1 | alter view [view name] as [sql command] |
就成功更新了

如圖,可以看出並沒有什麼多層粗細,只有普通跟粗體兩種
解決方法:
找有提供粗細字型的字體系列,如思源黑體,用字體切換的方式來達到粗細分明

一個 Grid,在編輯時用 popup,內容是 template,
有個日期欄位,
使用者想要輸入 1060101 或者 10601011735 這種日期或日期時間格式
不想要選取也不想要打「-」、空白或「:」
研究了一下也提問在官方討論區了,官方是說不支援民國年這種格式,
實際上你輸入 1900 年之前的日期,也會無法 set,
所以也不能用民國 106 年直接套上 DatePicker/DateTimePicker,而且萬年曆也會不對,
這裡就用 textbox 自幹一個字串轉日期的方法
(如果想要讓後端收到的值仍然有「-」、空白或「:」,是可以搭配 mask)
首先在原本的 template 的時間輸入框前面加入一個 input textbox
1 | <input |
然後準備好字串轉日期、日期轉字串的處理,
這裡列的方法是我很直觀的去寫,沒有做什麼效能分析
1 | //傳入值與格式,分析與轉換成JS日期物件 |
然後在原本的 datasource 的 schema 中加入一個自訂的民國年欄位,類型是字串
這個欄位不會回傳值給 API,只是用來 data bind,
裡面做自定義驗證方法,在民國年字串輸入框跳開時,去跑日期解析,
成功就把日期物件帶回 model,失敗就給予錯誤訊息並回傳 false;
原本的欄位也給他一個驗證是如果跑到了驗證就檢查他的值是否可以解析成日期,
這裡弄了很久是不知如何避免偶爾會出現原欄位跳出必填的問題,
還有編輯時無法透過 model.set 讓他自己 data bind 去改變前端 DOM 的值,
set 下去 model 的值竟然不會改,只能手動去塞值&改 DOM,
改值的時候也要先改 DOM 在做 SET,不然也會有怪現象
1 | var dataSource = { |
再來是 grid 新增或編輯時需要把 model 的 date 欄位清空與轉換
1 | edit: function(e) { |
這樣就可以輸入民國年日期轉成西元年日期,編輯時也可以把西元年日期轉回民國年日期了
1 | --原始欄位: |
當 grid 使用 server 端做分頁排序篩選時,查詢的邏輯就是靠ToDataSourceResult來控制,
所以改不了內容在幹嘛,
當前端 Grid 需要篩選某日期欄位,該欄位又有時分秒,且使用者不想設定秒數時,
預設的時間篩選欄位只會傳入年月日到後端,時分秒為零,
但這樣在做小於等於或者等於的查詢時就會遇到時分秒不相同而查不到資料的問題,
如果是自己做 api,這種小地方可以調整用System.Data.Entity.DbFunctions.TruncateTime()來過濾時間,但用 Telerik 的類別處理時就不行了,
後來查到官方的解法如連結
https://docs.telerik.com/kendo-ui/controls/data-management/grid/how-to/filtering/filter-by-date
大致上就是說要在 filter menu 初始化時,複寫套用的按鈕的事件,
例如原本設”等於”條件時,只會傳入一個邏輯就是相等一個日期時間值,
我們要調整為兩個邏輯,
用大於等於當天的零點零分零秒與 小於等於當天的 23 點 59 分 59 秒兩個條件傳入後端,
這樣就可以避免對不上時間的問題了
1 | filterMenuInit: function (e) { |
同事遇到的 BUG,
在 Kendo ui Combobox 選完值,blur 時會觸發 change 事件,
經過實驗(還有我一直 google)同時發現,
如果在 text field 使用 number 類型欄位,就會這樣,
而且官方好像沒有要改的意思
有個報表,搜尋條件是兩種日期選一種,日期欄位就是區間開始與區間結束,
在報表檔案設定四個日期變數:A 起始、A 結束、B 起始、B 結束,都可以為空值,
然後還要做民國年轉換,
結果在表頭顯示輸入變數的地方就調了很久,終於成功…
原來要做以下處理:
1 | Parameters.P_InitDateStart is null |
1 | AddHours(Parameters.P_InitDateStart,8) |
1 | AddHours(IsNull(Parameters.P_InitDateStart, Date(1,1,1)),8) |
1 | (AddHours(IsNull(Parameters.P_InitDateStart, Date(1,1,1)),8).Year-1911) |
1 | = IIF(Parameters.P_InitDateStart is null, (AddHours(IsNull(Parameters.P_ArriveDateStart, Date(1,1,1)),8).Year-1911)+"/" +AddHours(IsNull(Parameters.P_ArriveDateStart, Date(1,1,1)),8).Month+"/" +AddHours(IsNull(Parameters.P_ArriveDateStart, Date(1,1,1)),8).Day, (AddHours(IsNull(Parameters.P_InitDateStart, Date(1,1,1)),8).Year-1911)+"/" +AddHours(IsNull(Parameters.P_InitDateStart, Date(1,1,1)),8).Month+"/" +AddHours(IsNull(Parameters.P_InitDateStart, Date(1,1,1)),8).Day) |
暈…
(我的 Kendo 版本是 2017.3.913)
最常用的 CRUD 應用元件,KendoUI Grid + Datasource transport,
可以簡單串起 Restful API,
但錯誤處理上有一些地方要注意
使用 transport 時 API 如果不拋出 500 或者 404 之類的錯誤,
而是用處理完成,但處理結果有誤,錯誤訊息放在一個字串屬性裡面的這種模式,
datasource 無法去抓出那個物件秀出來,
這時就要用因為有錯誤所以要拋 exception 的概念,
讓 API 拋出 HttpStatusCode.InternalServerError,
這樣前端 ajax 呼叫時就會抓到錯誤,
然後丟給 datasource 裡的 error 屬性事件處理,
就可以用 e.xhr.responseJSON.Message 抓出錯誤內容,
但也要加上 undefined 偵測,不是只有 API 邏輯錯的時候才會丟錯
所以 error 物件裡面也不是常常都有 xhr
如果是自己寫的介面,例如另外寫 kendo window,
並且自訂按鈕送出 ajax,你就可以控制 ajax 的邏輯,
要用「有錯就是要拋錯」或者「你成功執行那就給我 200,商業邏輯錯誤再另外包」
哪一種抓錯方式都可以處理了。
另外如果新增刪除修改的 API 用 void 類型,datasource 的 transport 會拋一個 JSON parsererror 的錯,但若是給他回傳值,則不會有這個錯
我用的回傳物件格式:
1 | public class OperationOutModel |