2018年11月22日 星期四

Database Project 結構描述比較時出現 目標無法使用 | SQL Schema Comparison Error “Target is unavailable”

markdown

# 說明
進行DB schema更新時使用database project的結構描述比較
但按下比較時狀態列出現目標無法使用的錯誤訊息
重開vs2017也沒用

# 解法
參考這裡
https://stackoverflow.com/questions/37463279/sql-schema-comparison-error-target-is-unavailable

將連線字串的帳號名稱格式改為加上伺服器名稱
**username@servername**
就成功了

2018年9月7日 星期五

Azure Function Timer Trigger Cron 運算式 如何確定寫好的式子是想要的

markdown

最近在設定Azure Function的定時觸發類型程式的CRON運算式
寫好之後不太確定自己寫得到底對不對
研究了一下後有兩個做法

1. 本地偵錯模式
2. 用工具網站https://crontab.guru/

# 本地偵錯模式

本地執行後Console視窗上會寫目前執行中的Timer Trigger Function有哪些
以及列出這個Function之後會執行的五個時間點給你看,如圖:



# crontab guru

網站網址:https://crontab.guru/

Azure Function的Timer Trigger文件部分其實就有寫,時間運算式使用的是NCronTab 這個LIB來處理,所以就往「CRON運算式 確認」的方向去google,然後就找到這個網站,
雖然他比Azure少一層秒數的表達式,但也是可以提供一個參考,
直接把打好的表達式輸入進去,就可以看到你寫的會以怎樣的週期去執行:


不知道有沒有人做給Azure Function 用的版本,不然還是比較方便

2018年8月9日 星期四

找出某個namespace下所有類別裡面有哪些類別的哪些屬性不是單純的get set | find out class that have not simple getter setter property in specific name space

markdown

# 需求描述
因為要做重構,需要找出有哪些邏輯是藏在DTO裡面的,
但DTO類別檔又很多,不想一個個找
所以就想寫個console程式來撈

# 做法
首先把要撈的DLL跟他相依的DLL都複製到要執行的排程執行檔輸出資料夾(通常是bin\debug)

以下程式碼:
```
public class Worker { public void DoWork() { System.Reflection.Assembly service = Assembly.LoadFile(@"<你要找的namespace所在的dll的絕對路徑>.dll"); Type[] typelist = service.GetTypes(); var nameHaveDtoTypes = typelist.Where(x => x.Name.ToUpper().EndsWith("DTO"));//你的類別名稱的特徵,例如找DTO就結尾是DTO foreach (var typeitem in nameHaveDtoTypes) { if(typeitem.GetProperties().Any(prop=> !MightBeCouldBeMaybeAutoGeneratedInstanceProperty(prop))) { foreach (var prop in typeitem.GetProperties().Where(prop => !MightBeCouldBeMaybeAutoGeneratedInstanceProperty(prop))) { //印到畫面跟輸出視窗 Console.WriteLine($"{typeitem.Name},{prop.Name}"); System.Diagnostics.Debug.WriteLine($"{typeitem.Name},{prop.Name}"); } } } } public bool MightBeCouldBeMaybeAutoGeneratedInstanceProperty(PropertyInfo info) { bool mightBe = info.GetGetMethod() .GetCustomAttributes( typeof(CompilerGeneratedAttribute), true ) .Any(); if (!mightBe) { return false; } bool maybe = info.DeclaringType .GetFields(BindingFlags.NonPublic | BindingFlags.Instance) .Where(f => f.Name.Contains(info.Name)) .Where(f => f.Name.Contains("BackingField")) .Where( f => f.GetCustomAttributes( typeof(CompilerGeneratedAttribute), true ).Any() ) .Any(); return maybe; } } ```

參考:
1.LINE群大神指點關鍵字**CompilerGeneratedAttribute**
這個是指在編譯成DLL時,單純getter setter的屬性上面會有這個tag
https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.compilergeneratedattribute.aspx

2.How to find out if a property is an auto-implemented property with reflection?
https://stackoverflow.com/questions/2210309/how-to-find-out-if-a-property-is-an-auto-implemented-property-with-reflection?lq=1


2018年7月10日 星期二

GIT常用指令筆記

markdown

最近版控系統完全轉到git,但新手上路,很多指令還不是很熟,
所以寫一篇筆記方便查找

`git clone <target> [<folder name>]`
抓下目標到本地(執行位置),可指定新資料夾名稱

`git add .`
加入目前所有檔案到暫存變更

`git commit [-m <message>]`
簽入暫存變更帶上簽入訊息

`git merge <branch name> --no-ff  `
做merge但不會fast forword

`git log --oneline --graph [-(數字)]`
印出線圖 數字可限制印出幾個簽入內的

2018年5月22日 星期二

Kendo UI MVVM 自訂Validator規則的問題 | Kendo UI MVVM custom required Validator problem

markdown

# 情境

一個Grid,裡面的row是template,
按鈕除了編輯刪除,其他按鈕案出來的視窗也是template,
在template裡面還有套template,然後都是MVVM去設定事件,
在最尾端的一個表單,要做表單驗證,
有一個欄位是radio button,多選一,當選到某值時另一文字輸入框欄位就變必填

# 問題

如何在MVVM的model中套用這個特定的required驗證

# 解題過程

我原本找到去擴充model binding的binder方法的方向
https://stackoverflow.com/questions/15945755/set-tag-attribute-based-on-variable-value-with-kendo-binding/15947852#15947852
但他要做一個html元件的跟一個widget的,名字還有邏輯,沒搞太懂;

後來轉向套用validator在表單上,雖然不太MVVM,但是可解的方法,
可是這個必填欄位不知為何在執行驗證時會跳
`n[t].call is not a function`
錯誤,後來發現 **不能把validator用的物件放在你的MVVM ViewModel**,
他在執行遍歷驗證時會抓到observable的一些屬性但無法辨識(例如`_events`)然後就跳那個錯誤,
我本來以為MVVM就是你用到的東西都塞MODEL裡就對了,不過這個情境應該不是這樣放...
再來是自訂驗證規則名稱的雷,
我原本取名`PayAccountRequired`,結果竟然讓input不是required也套上required屬性,整個鬼打牆找了很久,後來把規則名稱改成`PayAccountRule`,竟然就正常了....

從來沒想到這個驗證會讓我卡好幾個小時....

完成的範例
http://jsfiddle.net/o8ym26jj/2/

2018年5月14日 星期一

本機開發 IIS Express的虛擬目錄失效的問題 | IIS Express virtual directory setting not work

markdown

情境:
本來寫好一個上傳檔案功能,在本機開發的時候有設定虛擬路徑,檔案在
`%USERPROFILE%\documents\IISExpress\config\applicationHost.config`
結果最近在側的時候發現怎麼metadata都抓不到了,明明沒有改東西

解法
後來debug了半天發現我的檔案存放路徑不對,
就覺得是虛擬路徑失效的問題,又繼續查,
發現,其實因為中間我的IDE從vs 2013換到vs2015,
結果vs2015好像有個問題就是他不吃上面路徑的設定擋了,
新的設定檔在專案資料夾內的`.vs`資料夾(是隱藏資料夾)裡的`applicationHost.config`
在同樣的區段去新增虛擬路徑就好了

REF: https://forums.asp.net/t/2067764.aspx?VS2015+IIS+Express+cannot+create+virtual+directories

2018年4月9日 星期一

Kendo UI Grid 摺疊明細裡面再一個Grid 的抓法 | How to get Kendo UI Grid with children detail's grid

markdown

#背景
同事在寫的應用:一個GRID裡面有子GRID
資料在展開master row時才會去抓
但不知道怎麼抓

#解法
我第一個想法是在master grid展開前先記住外面row的uid,
再用uid反推index,再用index去抓到row,再抓到裡面的grid,但很麻煩;

他研究很久後發現在master grid 的detailInit事件做detail grid宣告,
detail grid裡的databound事件
可以用
```
$(this.element[0]).data("kendoGrid"); ```
來抓到裡面的grid,簡單明瞭