2016年12月5日

[VS] Visual Studio 更新服務參考過久的問題

開發的方案裡面有 FE、AP兩個專案
AP內有 N個 WCF給 FE使用
更新 FE的 Service Reference時會更新很久,甚至看起來跟當機有 87分像

最後找到問題是 FE專案參考的某些 dll會造成此情況 
此次案例的問題點是 FE有參考 DocumentFormat.OpenXml.dll

解決方式可以在設定 Service Reference時取消勾選重複使用所有組件
改成一個一個勾選且避開 DocumentFormal.OpenXml.dll

或是每次更新 Service Reference前先移除參考 DocumentFormal.OpenXml.dll,更新完再加入

2016年10月19日

金額 format string

var result = '0,0.' + Array(decimalPlace + 1).join('0')
result = result.replace(/\.\s*$/, "");
decimalPlace 0: "0,0"
decimalPlace 1: "0,0.0"
decimalPlace 2: "0,0.00"

參考:

Repeat Character N Times

2016年10月13日

懸浮按鈕 & 自動填入表單

懸浮按鈕
<input type="button" value="Import" style="positionL fixed; z-index: 10000; top: 95%; left: 5px;" onclick="$('#importFile').click()" />
<input id="importFile" type="file" style="position: fixed; z-index: 10000l top: -100px; left: -100px;" onchange="Import(this)" />
function Import(fileInput) {
    var reader;
    if(window.File && window.FileReader && window.FileList && window.Blob) {
        reader = new FileReader();
    }
    else {
        return;
    }

    var txtContent;
    if(fileInput.files && fileInput.files[0]) {
        reader.onload = function (e) {
            txtContent = e.target.result;
            console.log(txtContent);

            // Custom Code
            // End of Custom Code
        }
        reader.readAsText(fileInput.files[0]);

        //Reset
        fileInput.value = '';
    }
}

2016年9月10日

VS 專案 檔案異動沒有自動出現在包含的變更(Pending Changes)

前一陣子應客戶需求
獨立負責令一個專案開發
架構要跟原本開發的案子一樣
所以我直接複製整個專案,改名,再做一些加工後就丟上 TFS

但是修改過的檔案都不會自動出現在包含的變更(Pending Changes)清單
讓人困擾

解決方式:
檔案 → 原始檔控制 → 進階 → 變更原始檔控制 → 全選 繫結 → 簽入

2016年7月21日

Bootstrap modal prevent close (datepicker input in modal)

有個功能是 Bootstrap modal內有 datepicker input,還有一個 OK按鈕
如果不是按 OK就把 modal關閉的話,modal中輸入欄位的值要還原
如果是按 OK關閉 modal的話,檢核輸入值,檢核未過則 modal取消關閉

搜尋取消關閉 modal的範例後寫出大致如下的程式:
$('.modal').on('hide.bs.modal', function (e) {
  if (CheckClosedByBtnOK()) {
    if (!ValidInput()) {
      e.preventDefault();
      e.stopImmediatePropagation();
    }
  }
  else {
    ResetInput();
  }
});
但是發現使用 datepicker選完日期並關閉小視窗後也會觸發 hide.bs.modal,導致每次選完值就還原,有選跟沒選一樣

Bootstrap modal的官方文件中有說明 events還有一種 hidden.bs.modal,直接拿來套用,改成
$('.modal').on('hidden.bs.modal', function (e) { ...
現在不會選完值就還原了,也就是 hidden.bs.modal只有在 modal關閉時才會觸發,datepicker關閉時不會
但是另一個問題又來了,preventDefault、stopImmediatePropagation現在無效了

因為英文不好,對 Bootstrap modal官方文件的 Events說明琢磨了一會還是看不懂差異在哪:
hide.bs.modalThis event is fired immediately when the hide instance method has been called.
hidden.bs.modalThis event is fired when the modal has finished being hidden from the user (will wait for CSS transitions to complete).

只好寫程式來觀察:
$('.modal').on('hide.bs.modal', function (e) {
  console.log(this);
  console.log('hide');
}).on('hidden.bs.modal', function (e) {
  console.log(this);
  console.log('hidden');
});
得出 hidden.bs.modal是在 modal被關閉後才觸發,所以 preventDefault當然沒有效果
hide.bs.modal是關閉前觸發,但是 modal內的 datepicker關閉時也會觸發 hide.bs.modal

所以改成先判斷 hide.bs.modal是否為 datepicker被關閉時觸發即可

var isUsingDatepicker = false;

$('.modal').on('show.bs.modal', function (e) {
  isUsingDatepicker = ($(div.datepicker-dropdown).length > 0);
}).on('hide.bs.modal', function (e) {
  if (!isUsingDatepicker) {
    if (CheckClosedByBtnOK()) {
      if (!ValidInput()) {
        e.preventDefault();
        e.stopImmediatePropagation();
      }
    }
    else {
      ResetInput();
    }
  }
  isUsingDatepicker = ($(div.datepicker-dropdown).length > 0);
});

2016年2月1日

提早 Timeout

客戶反應未到四小時就被登出
檢查 Web程式的 web.config
Session Timeout和 Form Auth Timeout都是設定 240(分)
Log紀錄也有正常的 Timeout紀錄

可能是因為 Load Balance的 Sticky Timeout只設 60(分)