2026年3月25日 星期三

V20305J – 零件需求登錄 – 後端字串太長, 送至前端無法顯示 - 編碼,解碼 - Encode,decode

 目的: V20305J – 零件需求登錄 後端字串太長, 送至前端無法顯示




1>V20305J*.cs  -c#
 Tmp_RtnMsg = "匯入檔案欄位名稱必需如下:<br>第2欄欄位名稱:[交修單號];"
                                                + "第3欄欄位名稱:[維修交修單號];第4欄欄位名稱:[工單號碼];"
                                                + "第5欄欄位名稱:[序號];第6欄欄位名稱:[展BOM件號];第7欄欄位名稱:[展BOM件號名稱];"
                                                + "第8欄欄位名稱:[圖號];第9欄欄位名稱:[索引];第10欄欄位名稱:  [上層件號];"
      + "第11欄欄位名稱:[SBOM件號];第12欄欄位名稱:[SBOM件號中文名稱];第13欄欄位名稱:[規範件號];"
                                                + "第14欄欄位名稱:[提料件號];第15欄欄位名稱:[每具數量];第16欄欄位名稱:[需求數量];"
                                                + "第17欄欄位名稱:[需求單位];第18欄欄位名稱:[更換情形];第19欄欄位名稱:[故障現象說明];"
      + "第20欄欄位名稱:[可修件(Y/N)];第21欄欄位名稱:[可修件更換原因說明];第22欄欄位名稱:[超量原因];"
                                                + "第23欄欄位名稱:[子件工單號碼];第24欄欄位名稱:[子件序號];第25欄欄位名稱:[特製件說明];"
      + "第26欄欄位名稱:[經常更換];第27欄欄位名稱:[配換率];第28欄欄位名稱:[QPEI];第29欄欄位名稱:[拆挪LRU交修單號];"
      + "第30欄欄位名稱:[拆挪子件序號];第31欄欄位名稱:[LCN];第32欄欄位名稱:[ALC];第33欄欄位名稱:[NHA_LCN];"
      + "第34欄欄位名稱:[NHA_ALC];第35欄欄位名稱:[EIAC];第36欄欄位名稱:[EI_LCN];第37欄欄位名稱:[EI_ALC];第38欄欄位名稱:[SBOM廠碼];"
                                                + "第39欄欄位名稱:[規範廠碼];第40欄欄位名稱:[SBOM單位];"
                                                +"第41欄欄位名稱:[技令號碼];"
                                                //+"第42欄欄位名稱:[WP];"
                                                //+"第43欄欄位名稱:[SBOM件號英文名稱];第44欄欄位名稱:[撥發單位];"
                                    ;
                        MyCookie.Value = HttpUtility.UrlEncode(Tmp_RtnMsg);
                        //MyCookie.Value = Tmp_RtnMsg;                        
                        HttpContext.Current.Response.Cookies.Add(MyCookie);
                        HttpContext.Current.Response.End();
                        return;
                    };

2>V20305J*.js
Ext.util.Cookies.set("Rtn_Msg", "");
    var Tmp_url = '../../api/V20305JAPI/INS_AMM_UOC_UOCD';
    me.up("form").submit({
        method: "POST",
        url: Tmp_url,  //更新資料庫單況            
        params: np,
        //standardSubmit: true,        
        //async: false,
    });  //end of Ext.Ajax.Request               
    
    var mask = new Ext.LoadMask(Ext.getBody(), {
        msg: '資料處理中, 請稍待...'
    });
    mask.show();//使用 mask 需手動呼叫show() 方法下                
    var timer = setInterval(function () {
        //var cookie_token = Ext.util.Cookies.get("Rtn_Msg");
        //Ext.util.Cookies.set("Rtn_Msg", "測試訊息");
        //後端傳回的訊息 Rtn_Msg , 若太長,則解碼(decodeURIComponent)後會變空白
        var Tmp_Str = r_cookies('Rtn_Msg');
        //var Tmp_Str = Ext.util.Cookies.get("Rtn_Msg");
        //Tmp_Str = decodeURIComponent(Tmp_Str);
        console.log("Tmp_Str", Tmp_Str);
        if (!checkisnull(Tmp_Str)) {
            clearInterval(timer);
            mask.hide();
            timer = null;            
            //var rtn_msg = r_cookies("Rtn_Msg");
            //Tmp_Str = decodeURIComponent(Tmp_Str);
            mysuccessalert(Tmp_Str);
            me.up("window").close();
            me.up("window").destroy();
        }
    }, 1000);  //等待 2000ms =1sec    

F12 即時讀取後端函式(INS_AMM_UOC_UOCD)的傳回值 - Response.Cookie 的欄位值

 目的: F12 讀取後端函式(INS_AMM_UOC_UOCD)的傳回值

           讀取  Response.Cookie 的欄位值  & Request.Cookie的欄位值 - F12 讀取欄位值

           













2026年2月28日 星期六

Blogger 無法讀取照片

 1》無法存取您的Google帳號



2》設定--〉App --> Chrome  --> [V]允許跨網站追蹤


2026年2月12日 星期四

V20108 – [匯出(人力資源)]鈕 – 設定 CELL 欄位邊框 - 水平置中/靠右

 目的: V20108 – [匯出(人力資源)] 設定 CELL 欄位邊框 & 水平靠右

處理說明: 1>設定欄位邊框
                      //cell.邊框 = 細線 & 黑色
                         CellRange cell = ws.Range[myfunc.GetExcelPos(k, cur_row)];
                         cell.Borders.LineStyle = LineStyleType.Thin;
                         cell.Borders.Color = Color.Black;
                     //cell.斜線 不顯示
                          cell.Borders[BordersLineType.DiagonalDown].LineStyle = LineStyleType.None; 
                          cell.Borders[BordersLineType.DiagonalUp].LineStyle = LineStyleType.None;
                 2>設定欄位右靠
                    ws.Range[myfunc.GetExcelPos(0, cur_row)].Text = "□";  //EMPID
ws.Range[myfunc.GetExcelPos(0, cur_row)].Style.HorizontalAlignment = HorizontalAlignType.Right;    //水平靠右  
HorizontalAlignType.Center;  //水平置中



1>*.cs

         ws.Range[myfunc.GetExcelPos(0, cur_row)].Text = "□";  //EMPID
ws.Range[myfunc.GetExcelPos(0, cur_row)].Style.HorizontalAlignment = HorizontalAlignType.Right;


  for (var k=0;k<=23;k++)
                        {
                            CellRange cell = ws.Range[myfunc.GetExcelPos(k, cur_row)];
                            cell.Borders.LineStyle = LineStyleType.Thin;
                            cell.Borders.Color = Color.Black;
                            cell.Borders[BordersLineType.DiagonalDown].LineStyle = LineStyleType.None; 
                            cell.Borders[BordersLineType.DiagonalUp].LineStyle = LineStyleType.None;
                        }                        


V20108 – 設定Panel的邊框寬度及顏色

 目的: V20108 – 設定Panel的邊框寬度及顏色

處理說明: 1>cmp_Panel_D12.border = true;
                      cmp_Panel_D12.style = {
                             // 邊框顏色 , // 邊框樣式 , // 邊框粗細
                             borderColor: 'red',
                             borderStyle: 'solid',
                             borderWidth: '2px'
                           };


1>*.js
      cmp_Panel_D12.border = true;
      cmp_Panel_D12.style = {
                              // 邊框顏色 , // 邊框樣式 , // 邊框粗細
                              borderColor: 'red',
                              borderStyle: 'solid',
                              borderWidth: '2px'
                        };

2026年1月21日 星期三

V20301 – 非TLS品項交修件建檔 1>[刪除]鈕 – 將勾選資料s刪除 - PK_LIST

 目的: V20301 – 非TLS品項交修件建檔  1>[刪除]鈕 – 將勾選資料s刪除  - PK_LIST

處理說明:1>[刪除]鈕 - Disable 原本Template.程式 - onclick
                     parent.onclick = function () { };  // 不使用 parent.onclick 
                 
                 2>刪除勾選資料 
                             var Tmp_DataAry1 = []; 
                    for (var i = 0; i < CHK_PK_OBJ.PK_LIST.length; i++) {
                         cur_rec = CHK_PK_OBJ.ALL_LIST[i];
                         Tmp_DataAry1.push(cur_rec);
                     }
                    let Tmp_DataString1 = JSON.stringify(Tmp_DataAry1);
                    var np = {};
                    np["DataString1"] = Tmp_DataString1;
                    Tmp_url = '../../api/V20301API/Delete_1';
                    Tmp_RtnStr = getUrlStr(Tmp_url, np, "刪除 勾選的[交修件單號] 資料");
                    if (!checkRtnOK(Tmp_RtnStr)) {
                        mywarnalert(Tmp_RtnStr);
                        return;
                    }
                    else
                        mysuccessalert(Tmp_RtnStr);

                 3>[刪除]鈕 - 刪除勾選資料s - 刪除後,移除畫面的勾選資料 
                      var toRemove = [];
                      Ext.getCmp('grid_Single').store.each(function (rec) {
                         if (rec.get('CHECK') == true)
                              toRemove.push(rec);
                            //gridstore.remove(rec); //畫面上隱藏刪除列  -->改成一次 remove all
                       });
                      gridstore.remove(toRemove); // remove all at once

1>*.js

Ext.getCmp("btn_del").on('click', function (me, e, eOpts) {
        parent.onclick = function () { };  // 
不使用 parent.onclick 
        //var cur_recs = Ext.getCmp('grid_Single').getSelectionModel().getSelection();
        var cur_recs = CHK_PK_OBJ.ALL_LIST;
        var cur_rec;        
        if (cur_recs.length == 0)
        {
            buttonModel.modelType = 0;
            mywarnalert('請先勾選要刪除的資料!!');
        }
        else {
            me.delMessage = "確定刪除勾選的資料嗎?";
            Ext.Msg.confirm('提醒', me.delMessage, callBackFunc);
            function callBackFunc(id) {
                if (id == 'yes') {
                    console.log("cur_recs.length:", cur_recs.length);
                    var gridstore = Ext.getCmp('grid_Single').store;
                    //刪除勾選.FMNO
                    var Tmp_DataAry1 = [];
                    for (var i = 0; i < CHK_PK_OBJ.PK_LIST.length; i++) {
                        cur_rec = CHK_PK_OBJ.ALL_LIST[i];
                        Tmp_DataAry1.push(cur_rec);
                    }
                    let Tmp_DataString1 = JSON.stringify(Tmp_DataAry1);
                    var np = {};
                    np["DataString1"] = Tmp_DataString1;
                    Tmp_url = '../../api/V20301API/Delete_1';
                    Tmp_RtnStr = getUrlStr(Tmp_url, np, "刪除 勾選的[交修件單號] 資料");

                    if (!checkRtnOK(Tmp_RtnStr)) {
                        mywarnalert(Tmp_RtnStr);
                        return;
                    }
                    else
                        mysuccessalert(Tmp_RtnStr);
                    //刪除後,移除畫面的勾選資料 
                    var toRemove = [];
                    Ext.getCmp('grid_Single').store.each(function (rec) {
                        if (rec.get('CHECK') == true)
                            toRemove.push(rec);
                            //gridstore.remove(rec); //畫面上隱藏刪除列  -->改成一次 remove all
                    });
                    gridstore.remove(toRemove); // remove all at once

                    Ext.getCmp('grid_Single').getView().refresh();
                    buttonModel.modelType = 0;
                }  // end    if (id == 'yes')             
    

2026年1月20日 星期二

V20201A – 子畫面Grid -無符合條件的資料 –onload

 目的: V20201A – 子畫面Grid -無符合條件的資料 –onload

處理說明: 1>Ext.getCmp('sub_Grid1').store.on("load", function (self, records, successful, operation, eOpts) {
           if ((successful) && (Ext.getCmp('sub_Grid1').store.data.getCount() == 0)) {
               mywarnalert("無符合條件的資料!!");
            }
           }); // end of Ext.getCmp('sub_Grid1').store.on("load", function () {

        -->進入子畫面,就觸發 onLoad event , 所以判斷先是否 successful ,


1>*.js

 Ext.getCmp('sub_Grid1').store.on("load", function (self, records, successful, operation, eOpts) {
            if ((successful) && (Ext.getCmp('sub_Grid1').store.data.getCount() == 0)) {
            mywarnalert("無符合條件的資料!!");
        }
    });  // end of Ext.getCmp('sub_Grid1').store.on("load", function () {

--> 一進入子畫面時, successful=false