2024年8月19日 星期一

V80202M –Finding處置匯入 –[挑選檔案]元件 –自訂畫面 –格式下載 - transaction - file - get_cmp_file1()

 目的: V80202M –Finding處置匯入  挑選檔案  自訂畫面 格式下載 - transaction

處理說明:   1>[挑選檔案]元件  - get_cmp_file1()
                        var cmp_SelFile = get_cmp_file1("sub_File");                                               
                    2>取得檔案名稱
                        Tmp_FName = Ext.getCmp("sub_File").getValue();                
                    3>後端讀取檔案內容
                        Stream Tmp_in_Stream = Request.Files[cur_FName].InputStream;     
                        wk.LoadFromStream(Tmp_in_Stream);
                        Worksheet sheet1 = wk.Worksheets[0];                
                        Tmp_SAPNO = sheet1.Range[myfunc.GetExcelPos(0, 0)].Value; 
                    4>取得 Cookie 的內容(後端傳回訊息)
                         Tmp_Str = "Finding處置匯入完成!!(" + Tmp_rowcnt.ToString() + "筆)<br>"
                                          + "匯入檔案名稱(" + Tmp_FName + ")";
                         MyCookie.Value = HttpUtility.UrlEncode(Tmp_Str);
                         HttpContext.Current.Response.Cookies.Add(MyCookie);
                         HttpContext.Current.Response.End(); 
    


1>*.js
   //1>> [挑選檔案]元件
   var cmp_SelFile = get_cmp_file1("sub_File");
// [工作中心報工匯出]鈕  - 子畫面欄位
    var J_formFields_Sub3 = [
        {
            bodyStyle: "background-color:transparent;", xtype: 'panel', border: 0, layout: { type: 'vbox', align: 'stretch' }, padding: "5", flex: 1,
            items: [cmp_SelFile,],
       },  // end of  檔案來源 2
                {  // space 空間                   
                    bodyStyle: "background-color:transparent;", xtype: 'panel', border: 0, layout: "vbox", padding: "0", flex: 1, width: 300, items: [],
                        }           
    ];  

//2>>取得 [檔案上傳].檔名
    var Tmp_FName = Ext.getCmp('sub_File').getValue();
    var np = {};
    np["sub_FName"] = Tmp_FName;

//3>>取得後端傳回值  []
var timer = setInterval(function () {
        var cookie_token = Ext.util.Cookies.get("Rtn_Msg");
        if (cookie_token != null) {
            clearInterval(timer);
            timer = null;
            //mask.hide();            
            var rtn_msg = r_cookies("Rtn_Msg");
            //mysuccessalert("[件號報工匯出]匯出完成");
            mysuccessalert(rtn_msg);
            me.up("window").close();
            me.up("window").destroy();
        }
    }, 2000);  //等待 2000ms =1se


2>*.cs  - 讀取前端檔案內容
      HttpRequest Request = HttpContext.Current.Request;
      var response = this.Request.CreateResponse();

1>>讀取前端檔案內容
foreach (string cur_FName in Request.Files)
{
    Stream Tmp_in_Stream = Request.Files[cur_FName].InputStream;
    wk = new Workbook();
    wk.LoadFromStream(Tmp_in_Stream);
    Worksheet sheet1 = wk.Worksheets[0];                
    Tmp_SAPNO = sheet1.Range[myfunc.GetExcelPos(0, 0)].Value; 


2>>transaction 
// Transaction SQL List - 存放  Transaction 的 SQL 
List<string> SQL_List_A = new List<string>();

Tmp_Sql = " UPDATE   AMM_SRO  "
                + "  SET          QDRWKTP=" + myfunc.AA(Tmp_QDRWKTP.Trim())
                + "  WHERE   SAPNO=" + myfunc.AA(Tmp_SAPNO.Trim());
SQL_List_A.Add(Tmp_Sql);

excuteSQLTran(SQL_List_A);


3>>設定 Cookie 內容
HttpCookie MyCookie = new HttpCookie("Rtn_Msg");
Tmp_Str = "Finding處置匯入完成!!(" + Tmp_rowcnt.ToString() + "筆)<br>"
                            + "匯入檔案名稱(" + Tmp_FName + ")";
MyCookie.Value = HttpUtility.UrlEncode(Tmp_Str);
HttpContext.Current.Response.Cookies.Add(MyCookie);
HttpContext.Current.Response.End();


4>[匯入格式下載]
 {
   xtype: 'button', text: '匯入格式下載', id: 'DnFileBtn_Sub3',
   listeners: {
   click: function () {
       document.location = "../api/VUTLAPI/dnloadSS_File?FNAME=V80202_Finding處置匯入格式.xlsx";    
                }
            }
        },

SQL- 無法連線- ORA-12638 證明資料擷取失敗

 目的: SQL- 無法連線  - SqlExplorer 無法連線  - Ora-12638

處理說明: 1> 將 sqlnet.ora 檔案內容
                        #SQLNET.AUTHENTICATION_SERVICES= (NTS)
                        --> SQLNET.AUTHENTICATION_SERVICES= (
NONE)
                  2>檔案目錄: C:\app\aidcadmin\product\11.2.0\client_2\network\admin\sqlnet.ora
                      必需以 admin 登入 windows , 才可以修改檔案內容


1>將 sqlnet.ora 檔案內容修改如下即可
       #SQLNET.AUTHENTICATION_SERVICES= (NTS)
       --> SQLNET.AUTHENTICATION_SERVICES= (
NONE)

2024年8月18日 星期日

V80202G- 切換資料 – grid.on(“selectionchanged”,function(){} ) – [備註]欄位排版 - 下方填滿

 目的: V80202G- 版別修改記錄查詢 – grid.on(“selectionchanged”,function(){}  ) – 顯示備註欄位值

處理說明:   1>Grid 資料切換時,
                         Ext.getCmp('sub_Grid').on("selectionchange", function (view, selections, options) {
                    2> [備註]欄位排版  - 下方佔滿
 {
                        xtype: 'panel', id: 'sub_panel3', region: 'south', layout: 'fit',
                        height: 60,
                        items: [
                            {
                                xtype: 'panel', id: 'sub_panel31', layout: { type: 'fit' },  border: 0,
                                items: [cmp_sub_REPLRMK],
                            },  // end of sub_panel11                            
                        ]  //end of sub_panel1.items,

                    },  // end of sub_panel1        
}



1>*.js

  1>>切換資料
  Ext.getCmp('sub_Grid').on("selectionchange", function (view, selections, options) {
        //var cur_recs = mysubstore.getSelectionModel().getSelection();
        var cur_recs=Ext.getCmp('sub_Grid').getSelectionModel().getSelection();
        if (cur_recs.length == 0)
            return;
        var cur_rec = cur_recs[0];
        var Tmp_REPLRMK = nulltoStr(cur_rec.data['REPLRMK']).toString();        
        Ext.getCmp("sub_REPLRMK").setValue(Tmp_REPLRMK);
    }
    );

2> [備註]欄位排版  - 下方佔滿
 var sub_V80202G_Flds = [
            {
                type: 'panel', bodyStyle: "background-color:transparent;", border: 5, padding: "1",
                layout: 'border',
                items: [
                    {
                        xtype: 'panel', id: 'sub_panel1', region: 'north', layout: 'hbox',
                        height: 30,
                        items: [
                            {
                                xtype: 'panel', id: 'sub_panel11', layout: { type: 'hbox', align: 'stretch' }, flex: 25, border: 0,
                                items: [cmp_sub_AMMNO, cmp_sub_SAPNO, cmp_sub_PN,],
                            },  // end of sub_panel11                            
                        ]  //end of sub_panel1.items,
                    },  // end of sub_panel1                        
                    {
                        xtype: 'panel',
                        id: 'sub_panel2',
                        region: 'center',
                        layout: 'fit',
                        //flex: 5,
                        border: 1,
                        items: [sub_Grid]
                    },
                    {
                        xtype: 'panel', id: 'sub_panel3', region: 'south', layout: 'fit',
                        height: 60,
                        items: [
                            {
                                xtype: 'panel', id: 'sub_panel31', layout: { type: 'fit' },  border: 0,
                                items: [cmp_sub_REPLRMK],
                            },  // end of sub_panel11                            
                        ]  //end of sub_panel1.items,
                    },  // end of sub_panel1        
                ] // end of   layout: "vbox", padding: "5", items: [
            }  //end of  sub_ShowPN_Flds , items[{
        ]      //end of  var sub_ShowPN_Flds           

2024年8月15日 星期四

V80202E – 工單附檔瀏覽 – 簡單子畫面 Grid - 下載檔案 - downloadFile2

 目的: V80202E – 工單附檔瀏覽 子畫面 Grid

處理說明: 1>子畫面 - Grid 簡單子畫面
                       //設定 ReadOnly Field
                       setFieldsCls('mySubFormI',
                                            [],  //required
                                    ["sub_RPNOAF", "sub_MRPNOAF", "sub_PN", "sub_SEQOAF",],  //readonly
                           );    

                  2>下載檔案:
                        var Tmp_url = "../api/myAPI/downloadFile2?aTbl=" + Tmp_TblNM 
                                              + "&Flds=" + Tmp_Flds + "&aCnd=" + Tmp_Cnd;
                        document.location = Tmp_url;        

                        --> downloadFile2 傳回 void
                              --> 呼叫  downloadFile 傳回 file  - Byte[]
                              --> document.location = Tmp_url;  - 不可直接傳回 file 

                 3>原始Source VUTLAPIController.cs
var Tmp_url = "../api/VUTLAPI/dnloadFile_Cnd?aTbl=" + Tmp_TblNM + "&Flds=" + Tmp_Flds + "&aCnd=" + Tmp_Cnd;


                        

1>V80202.js  - 呼叫子畫面, 傳入目前資料(cur_rec)
  {
            xtype: 'button', text: '工單附檔瀏覽', id: 'Call_V80202E_Btn',
            listeners: {
                click: function () {
                    var cur_recs = Ext.getCmp('grid_Single').getSelectionModel().getSelection();
                    if (cur_recs.length == 0) {
                        mywarnalert("請先選擇資料");
                        return false;
                    }                    
                    var cur_rec = cur_recs[0];               
                    Call_V80202E(cur_rec);

                }
            }
        },        


2>V80202E.js - 子畫面 Call_V80202E(par_rec)
    function Call_V80202E(par_rec) {
         var Tmp_AMMNO = nulltoStr(par_rec.data['AMMNO']).toString();


var cmp_sub_AMMNO = get_cmp_txt1('AMM單號', 'sub_AMMNO', 80, 130);
var cmp_sub_SAPNO = get_cmp_txt1('工號', 'sub_SAPNO', 80, 130);
var cmp_sub_PN = get_cmp_txt1('件號', 'sub_PN', 80, 130);

//子畫面欄位 & Grid
var sub_V80202E_Flds = [
{
type: 'panel', bodyStyle: "background-color:transparent;", border: 5, padding: "1",
layout: 'border',
items: [
{
xtype: 'panel', id: 'sub_panel1', region: 'north', layout: 'hbox',
height: 30,
items: [
{
xtype: 'panel', id: 'sub_panel11', layout: { type: 'hbox', align: 'stretch' }, flex: 25, border: 0,
items: [cmp_sub_AMMNO, cmp_sub_SAPNO, cmp_sub_PN,],
}, // end of sub_panel11
] //end of sub_panel1.items,
}, // end of sub_panel1
{
xtype: 'panel',
id: 'sub_panel2',region: 'center',layout: 'fit',
border: 1,
items: [sub_Grid]
},
] // end of layout: "vbox", padding: "5", items: [
} //end of sub_ShowPN_Flds , items[{
] //end of var sub_ShowPN_Flds

//子畫面按鈕
 //按鈕 : [附檔瀏覽] [離開] 鈕
        var sub_V80202E_Btns = [            
            {
                xtype: 'button', text: '附檔瀏覽', id: 'sub_V80202E_OkBtn',
                //flex: 5,
                listeners: {
                    click: function () {
                        //mysuccessalert("mysub2_確定 ");
                        //檢核 AMM項次的需求工時正確, 若有問題,則 Tmp_isOk=false, 若沒問題, Tmp_isOk=true, 才執行[確認]的處理
                        V80202E_OK();
                    }
                }
            },
            {
                xtype: 'button', text: '離開', id: 'sub_V80202E_CancelBtn',
                //flex: 5,
                listeners: {
                    click: function () {
                        //mysuccessalert("mysub2_取消");
                        var Tmp_win = this.up("window");
                        if (Tmp_win == undefined) {
                            Ext.Msg.alert("取消時未取到Window Object");
                        }
                        this.up("window").close();
                        this.up("window").destroy();
                    }
                }
            },
        ];

var win1 = getMyWindow("工單附檔瀏覽", sub_V80202E_Flds, sub_V80202E_Btns, "A");
win1.x = 100;
win1.setWidth(800);
win1.setHeight(300);

//取得子畫面.欄位值
var np = {};
np["sub_AMMNO"] = Tmp_AMMNO;
Ext.getCmp('sub_Grid').store.getProxy().url = '../../api/V80202EAPI/get_sub_data1',
Ext.getCmp('sub_Grid').store.getProxy().extraParams = np; //分頁OK,篩選條件OK
Ext.getCmp('sub_Grid').store.load();

//設定子畫面欄位值 
 var Tmp_AMMNO, Tmp_SAPNO, Tmp_PN;
    Tmp_AMMNO = nulltoStr(par_rec.data['AMMNO']).toString();    
    Tmp_SAPNO = nulltoStr(par_rec.data['SAPNO']).toString();    
    Tmp_PN = nulltoStr(par_rec.data['PN']).toString();            
        Ext.getCmp("sub_AMMNO").setValue(Tmp_AMMNO);
        Ext.getCmp("sub_SAPNO").setValue(Tmp_SAPNO);
        Ext.getCmp("sub_PN").setValue(Tmp_PN);              
        win1.show();


//[工單附檔瀏覽].[確認]鈕
function V80202E_OK() {
//1>目前挑選資料
var cur_recs = Ext.getCmp('sub_Grid').getSelectionModel().getSelection();
if (cur_recs.length == 0) {
mywarnalert("請先選擇資料");
return;
}
var cur_rec = cur_recs[0];
var Tmp_FILENO = nulltoStr(cur_rec.data["FILENO"]).toString();
var Tmp_TblNM;
var Tmp_Flds;
var Tmp_Cnd;
if (checkisnull(Tmp_FILENO)) {
//若 FILENO 無值,則瀏覽 AMM_OSMF
Tmp_TblNM = "AMM_OSMF";
Tmp_Flds = "FILENAME,FILEBODY";
Tmp_Cnd = " AND AMMNO=" + AA(cur_rec.data["AMMNO"])
+ " AND ITM=" + AA(cur_rec.data["ITM"]);
}
else {
//若 FILENO 有值,則瀏覽 AMM_DFILESD
Tmp_TblNM = "AMM_DFILESD";
Tmp_Flds = "DFNAME,DBLOB";
Tmp_Cnd = " AND FILENO=" + AA(cur_rec.data["FILENO"]);
}
var Tmp_url = "../api/VUTLAPI/dnloadFile_Cnd?aTbl=" + Tmp_TblNM + "&Flds=" + Tmp_Flds + "&aCnd=" + Tmp_Cnd;
document.location = Tmp_url;
} //end of V80202E_OK

PS: BaseAPIController.cs   -downloadFile   
   利用 downloadFile 傳入 SQL 及 檔案名稱欄位名 , 檔案內容欄位名  
   //public byte[] downloadFile(string sql, string fileName, string fileBody,bool inline=false)           
        
    /*
                byte[] file = null;
                try
               { downloadFile(Tmp_Sql, 'FILENAME', 'FILEBODY'); }
               catch (Exception ex)
               { throw ex; }   //檔案無法讀取,仍會下載 byte=0
               finally
               { }
                 return file;               
            */

PS: myAPIController.cs    - downloadFile2
var Tmp_url = "../api/myAPI/downloadFile2?aTbl=" + Tmp_TblNM + "&Flds=" + Tmp_Flds + "&aCnd=" + Tmp_Cnd;

2024年8月14日 星期三

V80201 - V80202 - RadioGroup - CheckboxGroup 處理 - radio - checkbox

 目的: V80201 - V80202 - RadioGroup - CheckboxGroup 處理

處理說明:  1>RadioGrop & CheckboxGroup 在前端欄位值為 Object
                   2>RadioGrop & CheckboxGroup 透過 np 傳至後端,欄位值為 string
                   3>最好先轉成字串,再送至後端 ,   ??有時 Object 送至後端,會有問題   

 np["s_rd_HOST"] = Ext.getCmp('s_rd_HOST').getValue();                      //Object 傳至後端

-->最好傳至 以字串(如下Tmp_HOST)傳至後端
var Tmp_HOST = (Ext.getCmp('s_rd_HOST').getValue()).s_rd_HOST;   //取得字串
np["s_rd_HOST"] = Tmp_HOST ;

1>RadioGroup


 

2>CheckboxGroup:



1>V80201.js
 np["s_rd_HOST"] = Ext.getCmp('s_rd_HOST').getValue();                      //Object 傳至後端
-->最好傳至 以字串(如下Tmp_HOST)傳至後端
var Tmp_HOST = (Ext.getCmp('s_rd_HOST').getValue()).s_rd_HOST;   //取得字串
np["s_rd_HOST"] = Tmp_HOST ;

2>V80202.js
np["s_chk_AMMSTS"] = Ext.getCmp('s_chk_AMMSTS').getValue();      //Object[Array] 傳至後端
var Tmp_AMMSTS = (Ext.getCmp('s_chk_AMMSTS').getValue()).s_chk_AMMSTS[0];   //取得字串


1.2>V80201.cs
string Tmp_rd_HOST= myfunc.null2str(nvc["s_rd_HOST"]);    //'1'

2.2>V80202.cs
string Tmp_chk_AMMSTS = nvc["s_chk_AMMSTS"];    //"1,2,"


2024年8月1日 星期四

V80404 – 計算兩日期差異天數 - TimeSpan - Ext.Date.Format

 目的: V80404 – 計算兩日期差異天數

處理說明:   1>計算兩日期的差異天數

                     int Tmp_Days = new TimeSpan(date1.Ticks - date2.Ticks).Days;

1>*.cs

取得兩個日期之間的「天數」(不足一天者採「無條件刪去法」) 

[code:c#] 

new TimeSpan(date1.Ticks - date2.Ticks).Days

[/code]

取得兩個日期之間的「天數」(回傳型別為 double 雙精確度)

[code:c#] 

new TimeSpan(date1.Ticks - date2.Ticks).TotalDays

[/code]

取得兩個日期之間的「小時數」(回傳型別為 double 雙精確度)

[code:c#] 

new TimeSpan(date1.Ticks - date2.Ticks).TotalHours

[/code]

取得兩個日期之間的「分鐘數」(回傳型別為 double 雙精確度) 

[code:c#] 

new TimeSpan(date1.Ticks - date2.Ticks).TotalMinutes

[/code]

備註事項

 TimeSpan 成員中,只要是 Total 開頭的屬性,都是回傳兩個時間差的「總天數」、「總時數」、「總分鐘數」、「總秒數」、「總豪秒數」,而且以 double 型別回傳,若無法整除都會有小數點出現。

另外 Days 屬性是回傳不足一天者採「無條件刪去法」的天數外 (整數型別),其餘的像是 HoursMinutesSecondsMilliseconds 等屬性都是以用來描述該差異天數中的餘數進行表示。舉個例子說明會比較清楚:

[code:c#]

DateTime date1 = new DateTime(2008, 12,31, 23,59,59, DateTimeKind.Local);
DateTime date2 = new DateTime(2003, 2,13, 23,59,59, DateTimeKind.Local);
TimeSpan s = new TimeSpan(date1.Ticks - date2.Ticks);

[/code]

上述例子中,因為回傳的「差異天數」剛好為「整數」,並沒有時、分、秒、豪秒等餘數,所以 s.Hours, s.Minutes, s.Seconds, s.Milliseconds 等屬性回傳值都會是 0 喔!

 

- Ext.Date

The following is a list of all currently supported formats:

Format      Description                                                               Example returned values
------      -----------------------------------------------------------------------   -----------------------
  d         Day of the month, 2 digits with leading zeros                             01 to 31
  D         A short textual representation of the day of the week                     Mon to Sun
  j         Day of the month without leading zeros                                    1 to 31
  l         A full textual representation of the day of the week                      Sunday to Saturday
  N         ISO-8601 numeric representation of the day of the week                    1 (for Monday) through 7 (for Sunday)
  S         English ordinal suffix for the day of the month, 2 characters             st, nd, rd or th. Works well with j
  w         Numeric representation of the day of the week                             0 (for Sunday) to 6 (for Saturday)
  z         The day of the year (starting from 0)                                     0 to 364 (365 in leap years)
  W         ISO-8601 week number of year, weeks starting on Monday                    01 to 53
  F         A full textual representation of a month, such as January or March        January to December
  m         Numeric representation of a month, with leading zeros                     01 to 12
  M         A short textual representation of a month                                 Jan to Dec
  n         Numeric representation of a month, without leading zeros                  1 to 12
  t         Number of days in the given month                                         28 to 31
  L         Whether it's a leap year                                                  1 if it is a leap year, 0 otherwise.
  o         ISO-8601 year number (identical to (Y), but if the ISO week number (W)    Examples: 1998 or 2004
            belongs to the previous or next year, that year is used instead)
  Y         A full numeric representation of a year, 4 digits                         Examples: 1999 or 2003
  y         A two digit representation of a year                                      Examples: 99 or 03
  a         Lowercase Ante meridiem and Post meridiem                                 am or pm
  A         Uppercase Ante meridiem and Post meridiem                                 AM or PM
  g         12-hour format of an hour without leading zeros                           1 to 12
  G         24-hour format of an hour without leading zeros                           0 to 23
  h         12-hour format of an hour with leading zeros                              01 to 12
  H         24-hour format of an hour with leading zeros                              00 to 23
  i         Minutes, with leading zeros                                               00 to 59
  s         Seconds, with leading zeros                                               00 to 59
  u         Decimal fraction of a second                                              Examples:
            (minimum 1 digit, arbitrary number of digits allowed)                     001 (i.e. 0.001s) or
                                                                                      100 (i.e. 0.100s) or
                                                                                      999 (i.e. 0.999s) or
                                                                                      999876543210 (i.e. 0.999876543210s)
  O         Difference to Greenwich time (GMT) in hours and minutes                   Example: +1030
  P         Difference to Greenwich time (GMT) with colon between hours and minutes   Example: -08:00
  T         Timezone abbreviation of the machine running the code                     Examples: EST, MDT, PDT ...
  Z         Timezone offset in seconds (negative if west of UTC, positive if east)    -43200 to 50400
  c         ISO 8601 date
            Notes:                                                                    Examples:
            1) If unspecified, the month / day defaults to the current month / day,   1991 or
               the time defaults to midnight, while the timezone defaults to the      1992-10 or
               browser's timezone. If a time is specified, it must include both hours 1993-09-20 or
               and minutes. The "T" delimiter, seconds, milliseconds and timezone     1994-08-19T16:20+01:00 or
               are optional.                                                          1995-07-18T17:21:28-02:00 or
            2) The decimal fraction of a second, if specified, must contain at        1996-06-17T18:22:29.98765+03:00 or
               least 1 digit (there is no limit to the maximum number                 1997-05-16T19:23:30,12345-0400 or
               of digits allowed), and may be delimited by either a '.' or a ','      1998-04-15T20:24:31.2468Z or
            Refer to the examples on the right for the various levels of              1999-03-14T20:24:32Z or
            date-time granularity which are supported, or see                         2000-02-13T21:25:33
            http://www.w3.org/TR/NOTE-datetime for more info.                         2001-01-12 22:26:34
  U         Seconds since the Unix Epoch (January 1 1970 00:00:00 GMT)                1193432466 or -2138434463
  MS        Microsoft AJAX serialized dates                                           \/Date(1238606590509)\/ (i.e. UTC milliseconds since epoch) or
                                                                                      \/Date(1238606590509+0800)\/
  time      A javascript millisecond timestamp                                        1350024476440
  timestamp A UNIX timestamp (same as U)                                              1350024866            

Example usage (note that you must escape format specifiers with '\' to render them as character literals):

// Sample date:
// 'Wed Jan 10 2007 15:05:01 GMT-0600 (Central Standard Time)'

var dt = new Date('1/10/2007 03:05:01 PM GMT-0600');
console.log(Ext.Date.format(dt, 'Y-m-d'));                          // 2007-01-10
console.log(Ext.Date.format(dt, 'F j, Y, g:i a'));                  // January 10, 2007, 3:05 pm
console.log(Ext.Date.format(dt, 'l, \\t\\he jS \\of F Y h:i:s A')); // Wednesday, the 10th of January 2007 03:05:01 PM

2024年7月31日 星期三

V80404 – [請料提出日期] 格式不對 - 0NaN/NaN/NaN

 目的: V80404 – [請料提出日期] 格式不對  - 0NaN/NaN/NaN

處理說明: 1> *.cs 的欄位格式 - datetime
    //ds.Tables["T1"].Columns.Add(new DataColumn("RDUOCD_", typeof(string))); //請料提出日期
     ds.Tables["T1"].Columns.Add(new DataColumn("RDUOCD_", typeof(DateTime))); //請料提出日期

                  2>*.js 的欄位格
{ header: "請料提出日期", dataIndex: "RDUOCD_", width: 100, TMType: "date", renderer: Ext.util.Format.dateRenderer('Y/m/d') },

--> cs的欄位格式 必需和 js 的欄位格式一致(DateTime)
--> 若為 string 則均為 string


1>*.cs
  ds.Tables["T1"].Columns.Add(new DataColumn("EMPLYID__", typeof(string)));//請料者姓名
  //ds.Tables["T1"].Columns.Add(new DataColumn("RDUOCD_", typeof(string))); //請料提出日期
 ds.Tables["T1"].Columns.Add(new DataColumn("RDUOCD_", typeof(DateTime))); //請料提出日期
 ds.Tables["T1"].Columns.Add(new DataColumn("EINDT_", typeof(string))); //預計交貨日期
ds.Tables["T1"].Columns.Add(new DataColumn("BUDAT_", typeof(string))); //(採保)接收日期


2>*.js
{ header: "請料提出日期", dataIndex: "RDUOCD_", width: 100, TMType: "date", renderer: Ext.util.Format.dateRenderer('Y/m/d') },
{ header: "預計交貨日期", dataIndex: "EINDT_", width: 100, TMType: "string" },
{ header: "(採保)接收日期", dataIndex: "BUDAT_", width: 100, TMType: "string" },