2008/01/25

[prototype.js] AJAX and SJAX Cool~

很久以前,公司有一個系統是用 Microsoft JVM 拿 Remote Scripting 做 Web 2.0 應用,

後來,慘了,Microsoft JVM 侵權,而且後來的 Sun JVM 又不支援,這個系統就一直被吊起來,

每次檢討會都是躂伐的重點項目,後來拿了 Filddler 仔細的研究了一下,其實應用到真正 Remote Scripting

還有一段距離,原理就不多說了,一句話,就是用 RSExecute(url,method,params a,b,c,d,e,.....) 來回傳 Server 物件。

後來研究了 Microsoft Altas (ASP.NET Ajax Extension) 及 Prototype Framework (prototype.js;http://www.prototypejs.org/)後,

決定使用 Prototype Framework,原因無他,還是一句話,支援 AJAX & SJAX !!!!

開始動心臟手術吧…

↓這是 Remote Scripting 的入口程式,從這邊動手先,將裡面的 invokeMethod 換掉!!

   1: function RSExecute(url,method)
   2: {
   3:     var cb, ecb, context;
   4:     var params = new Array;
   5:     var pn = 0;
   6:     var len = RSExecute.arguments.length;
   7:     for (var i=2; i < len; i++)
   8:         params[pn++] = RSExecute.arguments[i];
   9:     
  10:     return invokeMethod(url,method,params);
  11: }

↓這是改換成 Prototype ,換完後,就快了,很像 Remote Scripting 皮 Prototype 骨。

   1: function invokeMethod(url,method,params)
   2: {
   3:     var rtnValue=null;
   4:         if (url.length=0) {return;}
   5:         var action_url=buildURL(url,method,params);
   6:         var objAjax =new Ajax.Request(action_url, {
   7:           method: 'get',asynchronous:false,
   8:           onSuccess: function(transport) {
   9:             rtnValue = transport
  10:           }
  11:         });
  12:         return rtnValue;
  13: }

要注意 Line 7 中,有一個 Option 為 asynchronous:false,這是一個關鍵,這可以變成 SJAX 可以在 RSExecute 時回傳 Server 處理結果。

哇哈哈~這樣子就可以告別 Microsoft JVM 的毒害了。

謝謝收看。

 

相關文章:

黑暗大哥也提供 Altas SJAX version

http://www.ridgway.co.za/archive/2007/10/30/using-synchronous-asp.net-ajax-web-service-calls-and-scriptaculous-to.aspx

2008/01/24

[SSIS] Microsoft OLEDB for Oracle and SQL Command with Parameters Issue

之前在設定與 Oracle 轉檔時,使用 Microsoft OLEDB for Oracle ,當要使用參數傳入時,卻出現以下訊息:

Parameters cannot be extracted from the SQL command. The provider might not help to parse parameter information from the command. In that case, use the "SQL command from variable" access mode, in which the entire SQL command is stored in a variable.

提供者無法衍生參數資訊且 SetParameterInfo 未被呼叫。 (Microsoft OLE DB Provider for Oracle)

 

在 DataFlow 的 OLE Source 中,Build Query 都是成功的,但是要按下 Paramenters 按鈕時,就會出現這些問題。

例如,想要將某個區間的資料,轉入系統,通常會寫

select * from MichaelData where StartDT between :sdt and :edt

解決方式如下:

  • 移至 Control Flow 頁籤中,設定變數 string temp_insert_sql , string startYMD , string endYMD
    並點選變數視窗中的 temp_insert_sql 變數(很重要,我也找了好久),按下 F4 跳出內容視窗,在 Expression 輸入
    "SELECT * FROM  MichaelData WHERE StartYMD BETWEEN '"+ @[User::startYMD] +"' AND '"+ @[User::endYMD] +"') and ....."
     
  • 新增一個 Scripting Task,在執行 DataFlow 之前,用來填入 sql command,進入 Edit 時,輸入 ReadWriteVariables = strYMD,endYMD
    SNAG-01-24-01
  • 再點入下方 Design Script...
    Dim bt(0) As Byte
    If Dts.Variables("startYMD").Value.ToString() = "" Or Dts.Variables("endYMD").Value.ToString() = "" Then
        Dts.Variables("startYMD").Value = DateTime.Now.AddDays(-7).ToString("yyyyMMdd")
        Dts.Variables("endYMD").Value = DateTime.Now.ToString("yyyyMMdd")
    End If
    
    Dts.Log("startYMD:" & DateTime.Now.AddDays(-7).ToString("yyyyMMdd"), 0, bt)
    Dts.Log("endYMD:" & DateTime.Now.ToString("yyyyMMdd"), 0, bt)
    
    Dts.TaskResult = Dts.Results.Success
     
  • 這樣子 Scripting Task 就完成了,可以再回頭來做 DataFlow 中的 OLE Source 設定
    SNAG-01-24-02

 

這樣子就 OK 囉,不會出錯了。

2008/01/18

[SSIS][KB]DefaultCodePage Problem

[OLE DB Source [1343]]: Cannot retrieve the column code page info from the OLE DB provider.  If the component supports the "DefaultCodePage" property, the code page from that property will be used.  Change the value of the property if the current string code page values are incorrect.  If the component does not support the property, the code page from the component's locale ID will be used.

 

在 SSIS 中使用 Microsoft OLEDB for Oracle ,通常就會遇到這個問題,找了很多討論區,都說...

AlwaysUseDefaultCodePage = true 就ok....但是我就是一直找不到…

 

後來發現在 OLEDB Source 點一下後,選 Properities (不是選 Edit),如下圖,就會出現了

SNAG-01-18-02

另外也有人說到,這個選項可能在 SQL 2005 RTM 版本沒有,至少要到 Service Pack1 才看得到。

 

參考文章

http://forums.microsoft.com/msdn/showpost.aspx?postid=117014&siteid=1

[SSIS][KB]Column xxx cannot convert between unicode and non-unicode string data types

在 SSIS 轉檔時,遇到這樣子的錯誤訊息。

環境:

Source : Microsoft OLEDB For Oracle

Dest : Oracle OLEDB

解決方式應該有很多種:

方式一:

Dest 改為 Microsoft OLEDB For Oracle 即可

 

 

.... 待續