2024年6月3日 星期一

V20304D– [確認轉TLS]鈕– 顯示執行訊息 & 下載檔案至前端- Cookie- 檢查2更新,多筆- 文字檔案(TXT)

 目的:V20304D – [確認轉TLS]鈕 – 顯示執行訊息 & 下載檔案至前端  - Cookie    - 文字檔案

處理說明:  1>將目前勾選的資料,存成  Tmp_DataAry  
                       var Tmp_DataAry = [];
                       var cur_rec;
                       for (let i = 0; i < CHK_PK_OBJ.PK_LIST.length; i++) {
                             cur_rec = CHK_PK_OBJ.ALL_LIST[i];
                             Tmp_DataAry.push(cur_rec);
                      }  // for i=0 to             
                  2>將 DataAry 轉成 JSON 語法, 傳至後端
                       var Tmp_DataString = JSON.stringify(Tmp_DataAry);
                       var np = {}; //TMFunction.js, 組合form上的查詢條件為json參數傳遞                                                    np["sub_DataString"] = Tmp_DataString;  //存入目前勾選的資料 
                 3>呼叫 form.submit  , 以便下載檔案至前端
                      Tmp_url = "../../api/V20304DAPI/Check2CSM_AR";
                       Ext.getCmp('s_form').submit({
                             method: "POST",
                             url: Tmp_url,
                            standardSubmit: true,
                             params: np,
                             async: false,
                       });
                  4>利用 Cookie ,顯示執行結果訊息(*.cs)
                        if (!is_Ok)
                       {
                             //訊息加入 Cookie
                            Tmp_Str = "[確認轉TLS]執行失敗!!<br>"
                                            +"請參閱附件檔("+ Tmp_out_FName+")";
                            MyCookie = new HttpCookie("V20304D", HttpUtility.UrlEncode(Tmp_Str));
                            HttpContext.Current.Response.Cookies.Add(MyCookie);
                            HttpContext.Current.ApplicationInstance.CompleteRequest();
                                :
                    }
 


1>*.js
[確認轉TLS]鈕:
  var Tmp_DataAry = [];
            var cur_rec;
            for (let i = 0; i < CHK_PK_OBJ.PK_LIST.length; i++) {
                cur_rec = CHK_PK_OBJ.ALL_LIST[i];
                Tmp_DataAry.push(cur_rec);
            }  // for i=0 to             
            //for (var i = 0; i < CHK_PK_OBJ.ALL_LIST.length; i++) {
            var Tmp_DataString = JSON.stringify(Tmp_DataAry);
            var np = {}; //TMFunction.js, 組合form上的查詢條件為json參數傳遞                                                                   
            np["sub_DataString"] = Tmp_DataString;  //存入目前勾選的資料
            var Tmp_url = "";
            //STEP1> 檢核勾選資料, 是否正確 , 傳回 txt 檔案, 不可以用 getUrlStr 
            Tmp_url = "../../api/V20304DAPI/Check2CSM_AR";
            Ext.getCmp('s_form').submit({
                method: "POST",
                url: Tmp_url,
                standardSubmit: true,
                params: np,
                async: false,
            });

            var mask = new Ext.LoadMask(Ext.getBody(), {
                msg: '確認轉TLS中, 請稍待...'
            });
            mask.show();//使用 mask 需手動呼叫show() 方法下        
            var timer = setInterval(function () {
                //timer = null;     
                //若資料庫已更新完成, 則 Email 委約==6  &  Email 委約<>6
                var r = r_cookies('V20304D');
                console.log("cookies V20304D =", r);
                if (!checkisnull(r)) {
                    mask.hide();
                    mysuccessalert(r);
                    clearInterval(timer);  //不再重覆執行                     
                    if (r.indexOf("完成") > -1) {
                        // 不可return & 函式寫在下方, 
                        //因為 js 會直譯code,會一直往下執行 (不管是否成功)
                        UPDATE_CSM_AR();  
                    }

                    //me.up("window").close();
                    //me.up("window").destroy();
                }
            }, 1000)  // end of timer            


//更新資料庫 update_CSM_AR()
    function UPDATE_CSM_AR() {
        mysuccessalert("STEP2 :  檢核資料OK, 執行更新  CSM_AR 流程!!");
        //2.1>> 若 CSM_AR@TLS_245 已存在, 則先刪除再 iNSERT  , 以 AMM_TLSAR新增
        var Tmp_DataAry = [];
        var cur_rec;
        for (let i = 0; i < CHK_PK_OBJ.PK_LIST.length; i++) {
            cur_rec = CHK_PK_OBJ.ALL_LIST[i];
            Tmp_DataAry.push(cur_rec);
        }  // for i=0 to             
        //for (var i = 0; i < CHK_PK_OBJ.ALL_LIST.length; i++) {
        var Tmp_DataString = JSON.stringify(Tmp_DataAry);
        var np = {}; //TMFunction.js, 組合form上的查詢條件為json參數傳遞                                                                   
        np["sub_DataString"] = Tmp_DataString;  //存入目前勾選的資料
        var Tmp_url = "";
        //STEP1> 檢核勾選資料, 是否正確 , 傳回 txt 檔案, 不可以用 getUrlStr 
        Tmp_url = "../../api/V20304DAPI/Update2CSM_AR_AMM_FM";
        Ext.getCmp('s_form').submit({
            method: "POST",
            url: Tmp_url,
            standardSubmit: true,
            params: np,
            async: false,
        });

        var mask = new Ext.LoadMask(Ext.getBody(), {
            msg: '[確認轉TLS].更新資料中, 請稍待...',
        });
        mask.show();//使用 mask 需手動呼叫show() 方法下        
        var timer = setInterval(function () {
            //timer = null;     
            //若資料庫已更新完成, 則 Email 委約==6  &  Email 委約<>6
            var r = r_cookies('V20304D1');
            console.log("cookies V20304D1 =", r);
            if (!checkisnull(r)) {
                mask.hide();
                //2025/01/03 microed  若成功,則重新顯示資料
                mysuccessalert(r, function () {
                    Ext.getCmp("btn_Show").fireHandler();
                })
                //mysuccessalert(r);
                ////2025/01/03 microed  若成功,則重新顯示資料
                //Ext.getCmp('btn_Show').fireHandler(); //重新顯示 Master資料
                clearInterval(timer);  //不再重覆執行                     
                //若執行資料庫更新的處理OK,則檢核是否通知品保維護品保工時 Email QC
                if (r.indexOf("完成") > -1) {
                    if (CHECK_ISEMAIL_QC() == 'Y')
                        ;
                }
                //me.up("window").close();
                //me.up("window").destroy();
            }
        }, 1000)  // end of timer                            
    }  // UPDATE_CSM_AR()       



2>*.cs
  [HttpPost]
        public void Check2CSM_AR()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            HttpCookie MyCookie;
            //var response = this.Request.CreateResponse();            
            string Tmp_DataString = nvc["sub_DataString"];    //Tmp_DataString:  取得目前勾選的資料. JSON字串                           

            
            DataTable dt1 = myfunc.JSON2dt(Tmp_DataString);  //目前子畫面所勾選的資料            
            string Tmp_FMNO="", Tmp_AMMNO, Tmp_RPNOAF;
            string Tmp_STATFM, Tmp_OPHR;
            string Tmp_Str = "";
            bool is_Ok = true;
            try
            {
                string Tmp_out_FName = "V20304B_確認轉TLS_log.txt";      //處理_log.txt
                string documentPath = HttpContext.Current.Server.MapPath("~") + "document\\"; //取得實實的路徑            
                string Tmp_out_pFName = documentPath + Tmp_out_FName;    //含 path 的Filename
                if (File.Exists(Tmp_out_pFName))
                {
                    File.Delete(Tmp_out_pFName);
                }
                //using (StreamWriter sw = new StreamWriter(Tmp_out_pFName))   //小寫TXT     


                    //處理每筆工單 
                
                string Tmp_RowStr = "";
                string Tmp_RtnMsg = "";
                for (var i = 0; i < dt1.Rows.Count; i++)
                {
                    Tmp_RowStr = "";
                    Tmp_FMNO = dt1.Rows[i]["FMNO"].ToString();
                    Tmp_AMMNO = dt1.Rows[i]["AMMNO"].ToString();
                    Tmp_RPNOAF = dt1.Rows[i]["RPNOAF"].ToString();
                    //Check1 : 檢核 STATFM  in  ('C','E','F','J','L','G')  &&  OPHR='Y'
                    Tmp_STATFM = dt1.Rows[i]["STATFM"].ToString();
                    Tmp_OPHR = dt1.Rows[i]["OPHR"].ToString();
                    if  ("C,E,F,J,L,G".IndexOf(Tmp_STATFM)==-1)
                    {
                        Tmp_RowStr = Tmp_RowStr+ "[目前交修單況("+ Tmp_STATFM + ")]必需在 C,E,F,J,L,G;";
                    }
                    if (Tmp_OPHR != "Y")
                    {
                        Tmp_RowStr = Tmp_RowStr + "[目前開放工時("+ Tmp_OPHR + ")]必需為 Y;";
                    }
                if (Tmp_RowStr.Length > 0)
                   {
                       is_Ok = false;
                      Tmp_RowStr = "系統件單號(" + Tmp_FMNO + ")" + Tmp_RowStr+ "\r\n"; 
                      File.AppendAllText(Tmp_out_pFName, Tmp_RowStr);  //不用 sw , 改用 File.AppendAllText
                    }
                    //sw.WriteLine(Tmp_Str);
                };//  end of  for (var i = 0; i < dt1.Rows.Count; i++)                
             // sw.Close才會實際寫入檔案(Tmp_out_pFName)
            //sw.Close();            
                if (!is_Ok)
                {
                    //訊息加入 Cookie
                    Tmp_Str = "[確認轉TLS]執行失敗!!<br>"
                                    +"請參閱附件檔("+ Tmp_out_FName+")";
                    MyCookie = new HttpCookie("V20304D", HttpUtility.UrlEncode(Tmp_Str));
                    HttpContext.Current.Response.Cookies.Add(MyCookie);
                    HttpContext.Current.ApplicationInstance.CompleteRequest();
                    //若約別不符, 傳送 檔案至前端
                    HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode((string)Tmp_out_pFName, System.Text.Encoding.UTF8) + "\"");
                    HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
                    HttpContext.Current.Response.ContentType = "text/plain";
                    HttpContext.Current.Response.WriteFile(Tmp_out_pFName);
                    HttpContext.Current.Response.End();
                    return;
                }
                Tmp_Str = "勾選資料.[確認轉TLS]完成!!<br>";
                MyCookie = new HttpCookie("V20304D", HttpUtility.UrlEncode(Tmp_Str));
                HttpContext.Current.Response.Cookies.Add(MyCookie);
                HttpContext.Current.ApplicationInstance.CompleteRequest();
            }// end of try
            catch (Exception e)
            {
                Tmp_Str = e.Message;
                Tmp_Str = "[確認轉TLS]執行失敗!!<br>"
                                + Tmp_Str;
                MyCookie = new HttpCookie("V20304D", HttpUtility.UrlEncode(Tmp_Str));
                HttpContext.Current.Response.Cookies.Add(MyCookie);
                HttpContext.Current.ApplicationInstance.CompleteRequest();
                return;
                //throw e;
                //Tmp_Str = "{success: false ,  Rtn_Msg:" + "錯誤訊息如下:"+myfunc.AA(Tmp_ErrMsg) + "," + " }";
                //Tmp_Str = "{success: false ,  Rtn_Msg:" + myfunc.AA(Tmp_RtnMsg) + "}";
                //response.Content = new StringContent(Tmp_Str);    // 回應內容
                //return response;
            }
            finally
            {
                //conn.Close();
            }
        }  // end of UPDATE_SAPSTAT

沒有留言:

張貼留言