2024年6月2日 星期日

V20304B – [單筆工時匯出]鈕 – getUrlStr - 檢核及更新資料分成 2 url 執行 & 匯出xls - .submit -CHECK2INS

 目的: V20304B – [單筆工時匯出] – getUrlStr - 錯誤訊息

處理說明: 1>設定 np={} - 傳入參數值
                  2>呼叫 getUrlStr( Tmp_url, np, )
                  3>url函式 : 傳回 Str -
                      [HttpPost]

                      public dynamic CHECK_AMM_PNTMSHT()



1>*.js
cur_recs = Tmp_Grid.getView().selModel.getSelection();
//console.log("cur_recs:", cur_recs);
if (cur_recs.length == 0) {
   mywarnalert("請先選擇要匯出的系統件單號");
   return;
}

//取得目前所勾選資料,再匯出
cur_rec = cur_recs[0];
var np = {};

np["FMNO"] = cur_rec.data["FMNO"];
np["PN"] = cur_rec.data["PN"];

//STEP1: 檢核 件號.標準工時檔(AMM_PNTMSHT)是否已存在 , 若不存在,則顯示訊息後, 離開
var Tmp_url = '../../api/V20304BAPI/CHECK_AMM_PNTMSHT';
var Tmp_RtnStr = getUrlStr(Tmp_url, np, "檢核 件號.標準工時檔(AMM_PNTMSHT)是否已存在");
if (!checkRtnOK(Tmp_RtnStr)) {
     mywarnalert(Tmp_RtnStr);
    return;
}

//STEP2: 若 AMM_TLSAR & AMM_AR of FMNO 不存在, 則新增該檔案資料(AMM_TLSAR, AMM_AR)
np["TYPEAF"] = cur_rec.data["TYPEAF"]; //約別
np["RPNOAF"] = cur_rec.data["RPNOAF"];
np["MRPNOAF"] = cur_rec.data["MRPNOAF"];
Tmp_url = '../../api/V20304BAPI/INSERT_AMM_TLSAR_AMM_AR';
Tmp_RtnStr = getUrlStr(Tmp_url, np, "檢核 AMM_TLSAR,AMM_AR 若不存在則新增");
if (!checkRtnOK(Tmp_RtnStr)) {

    mywarnalert(Tmp_RtnStr);
    return;
}

//STEP3: 匯出 Excel
Ext.getCmp('s_form').submit({
//Ext.Ajax.request({
url: '../../api/V20304BAPI/XlsOut',

method: 'POST',
async: false,
standardSubmit: true, //若要傳送檔案至前端, standardSubmit必需設為 true
params: np,
});
//顯示結果訊息..


2>*.cs

// CHECK_AMM_PNTMSHT() - 檢核目前 PN 是否存在[件號標準工時檔(AMM_PNTMSHT)]

//若存在,傳回 "件號(xxxx)存在[件號標準工時檔(AMM_PNTMSHT)]
//若不存在, 則傳回"錯誤: 件號(xxxx)不存在[件號標準工時檔(AMM_PNTMSHT)] , 敬請檢核 !1"
[HttpPost]
public dynamic CHECK_AMM_PNTMSHT()
{
//取得參數值
var c = HttpContext.Current;
NameValueCollection nvc = c.Request.Form;
string Tmp_PN = nvc["PN"];
int Tmp_cnt;
string Tmp_RtnMsg = "";
string Tmp_Sql = "";
string n = funId + "_CHECK_AMM_PNTMSHT";
HttpCookie MyCookie;
DataTable Tmp_dt1 = new DataTable();
try
{
Tmp_Sql = " SELECT * "
                 + " FROM AMM_PNTMSHT "
                 + " WHERE PN=" + myfunc.AA(Tmp_PN)
                 + " AND PNSHTSTS='B' ";
Tmp_dt1 = myfunc.SqlOpen(Tmp_dt1, Tmp_Sql);
Tmp_cnt = Tmp_dt1.Rows.Count;
if (Tmp_cnt > 0){
       Tmp_RtnMsg = "件號(" + Tmp_PN + ")<br>"
                               + "存在件號維修工時主檔(AMM_PNTMSHT)<br>";
}
else
{
Tmp_RtnMsg = "錯誤: 件號(" + Tmp_PN + ")<br>"
                        + "不存在[件號維修工時主檔(AMM_PNTMSHT)]<br>"
                         +"請先到[V4080201-件號專用表單維護]子功能維護<br>"
                         +"敬請檢核 !!<br>";

}
}
catch (Exception e)
{
Tmp_RtnMsg = myfunc.Get1ORA(e.Message);
Tmp_RtnMsg = "錯誤:判斷件號是否存在<br>"
                        +"件號維修工時主檔(AMM_PNTMSHT)<br>"
                        + "失敗!!"
                        + Tmp_RtnMsg;
}
return Tmp_RtnMsg;
}

2024年5月30日 星期四

V20301 –[確認轉發工]鈕 – 勾選資料處理 - JSON

 目的: V20301 –[確認轉發工] 勾選資料處理

處理說明:  1>判斷目前勾選的資料筆數 : 
                      CHK_PK_OBJ.PK_LIST.length
                  2>取得目前勾選資料
                     var Tmp_DataAry = [];
                     for (let i = 0; i <= CHK_PK_OBJ.PK_LIST.length - 1; i++) {
                          cur_rec = CHK_PK_OBJ.ALL_LIST[i];
                          Tmp_DataAry.push(cur_rec);
                      }
                  3>將勾選的資料轉成 JSON字串, 送至後端處理 , 
                     // 將目前子畫面的資料(Table)轉成 JSON字串
                     var Tmp_DataStr = JSON.stringify(Tmp_DataAry);
                     var np = {};
                     np = {
                         DataStr: Tmp_DataStr,
                         isRPNOAF2AMMNO: Tmp_isRPNOAF2AMMNO,
                     };
                     Ext.Ajax.request({
                        method: "POST",
                        url: '../../api/V20301API/FM2AMM',
                        params: np,
         
                  4>後端資料庫, 將 JSON 轉成 DataTable  以便處理 (*.cs)                       
                       string Tmp_DataStr = nvc["DataStr"];  
                       DataTable dt_np = myfunc.JSON2dt(Tmp_DataStr);
                       for (var i = 0; i < dt_np.Rows.Count; i++)
                      {
                         Tmp_AMMNO = get_NEXT_AMMNO1(Tmp_pre_AMMNO);
                         Tmp_PN = dt_np.Rows[i]["PN"].ToString();
  


1>*.js
function FM2AMM()
    {
       if (CHK_PK_OBJ.PK_LIST.length == 0) {
            mywarnalert("請先選擇要除帳的資料");
            return false;
        }


   var gridstore = Ext.getCmp('grid_Single').store;
            var Tmp_Msg = "確定將勾選的資料轉發工嗎?";
            Ext.Msg.confirm('確認', Tmp_Msg, callBackFunc);
        function callBackFunc(id) {
            console.log("1 callBackFunc : 確定將勾選的資料轉發工嗎?");
            if (id == 'yes') {
                console.log("CHK_PK_OBJ.PK_LIST.length:", CHK_PK_OBJ.PK_LIST.length);
                var Tmp_DataAry = [];
                var isOk = true;
                var np = {};
                var Tmp_Str = "";
                console.log("CHK_PK_OBJ.ALL_LIST:", CHK_PK_OBJ.ALL_LIST);
                for (let i = 0; i <= CHK_PK_OBJ.PK_LIST.length - 1; i++) {
                    cur_rec = CHK_PK_OBJ.ALL_LIST[i];
                    console.log("cur_rec:", cur_rec);
                    console.log("CHK_PK_OBJ.ALL_LIST[i]:", CHK_PK_OBJ.ALL_LIST[i]);
                    console.log("cur_rec.STATFM.toString():", cur_rec.STATFM.toString());
                    if (cur_rec.STATFM.toString() != "A") {
                        Tmp_Str = "交修件單號(" + cur_rec.FMNO.toString() + ")資料已轉待發工<br> "
                            + "請點選[複製]鈕, 建立資料<br>";
                        mywarnalert(Tmp_Str);
                        return;
                    }
                    Tmp_DataAry.push(cur_rec);
                } //  end of for (let i=0,)                
                // 將目前子畫面的資料(Table)轉成 JSON字串
                var Tmp_DataStr = JSON.stringify(Tmp_DataAry);
                console.log("Tmp_DataStr:", Tmp_DataStr);
           //詢問  "此筆資料來源為 AMM,請問是否將[拆檢交修單號(RPNOAF)]異動為 [AMM單號]?
                var Tmp_isRPNOAF2AMMNO = "false";
                var Tmp_Msg = "此筆資料來源為 AMM<br>"
                    + "請問是否將[拆檢交修單號(RPNOAF)]異動為 [AMM單號] ? <br>";
                Ext.Msg.confirm('詢問', Tmp_Msg, callBackFunc1);
                function callBackFunc1(id) {
                    console.log("2 callBackFunc1 : 此筆資料來源為 AMM, 請問是否將[拆檢交修單號(RPNOAF)]異動為 [AMM單號] ?");
                    if (id == 'yes') {
                        Tmp_isRPNOAF2AMMNO = "true";
                    }
                    var np = {};
                    np = {
                        DataStr: Tmp_DataStr,
                        isRPNOAF2AMMNO: Tmp_isRPNOAF2AMMNO,
                    };
                    Ext.Ajax.request({
                        method: "POST",
                        url: '../../api/V20301API/FM2AMM',
                        params: np,
                        //params: Ary_np,
                        async: false,
                        success: function (response, opts) {
                            console.log("0 response.responseText=", response.responseText);
                            var Tmp_Obj = Ext.decode(response.responseText);
                            console.log("1  Tmp_Obj=", Tmp_Obj);
                            if (Tmp_Obj["success"] == true) {
                                mysuccessalert("確認轉發工成功!!");
                                //資料更新完成, 重新顯示資料
                                Ext.getCmp("btn_Show").fireHandler();
                            }
                            else {
                                var Tmp_Rtn_Msg = "[轉發工]失敗!! <br>"
                                    + "請檢核<br> "
                                    + Tmp_Obj["Rtn_Msg"];
                                mywarnalert(Tmp_Rtn_Msg);
                                isOk = false;
                            }
                        },  //end of success                
                        failure: function (response, opts) {
                            var Tmp_Obj = Ext.decode(response.responseText);
                            var Tmp_Rtn_Msg = "[轉發工]失敗!! <br>"
                                + "請檢核<br>"
                                + Tmp_Obj["Rtn_Msg"];
                            mywarnalert(Tmp_Rtn_Msg);
                            isOk = false;
                        }
                    })  //end of Ext.Ajax.Request                            
                }  // end of callbackfunc1
            }  // end    if (id == 'yes')           // end of 確定轉發工      
        }// end of callBackFunc
    }  // end of  FM2AMM


2024年5月28日 星期二

V20304H – [維護附檔]鈕 – [新增附檔] [刪除附檔] [瀏覽附檔] - 資料庫檔案.[上傳][下載][刪除] - 下載檔案

 目的: V20304H – [新增附檔] [刪除附檔] [瀏覽附檔]  - 資料庫檔案.[上傳][下載][刪除]

處理說明:  1>  [新增附檔]鈕 - 選擇檔案後上傳
                          1>>*.js  
                                 SelectFile(Ok_process);   
                          2>>*.cs   - 將 檔案上傳至 Request.Files[0], 並將檔案內容存入 byte[]
                               Stream file_Strm = Request.Files[cur_FName].InputStream;
                                //byte[] fileRcrd = new byte[fileSize];
                               BinaryReader br = new BinaryReader(file_Strm);
                               byte[] fileBody = br.ReadBytes((Int32)file_Strm.Length);
                          3>將檔案寫入資料庫
                               Tmp_Sql = " INSERT  INTO  AMM_AKFL "
                                               + "  ( AMMNO,"
                                               + " ITM,FILENAME,FILESIZE,FILEDATE,FILEBODY )"
                                               + "  VALUES "
                                               + "(" + myfunc.AA(Tmp_AMMNO) + ","
                                                        + myfunc.AA(Tmp_NEXT_ITM) + "," 
                                                       + myfunc.AA(Tmp_FILENAME) + "," 
                                                       + myfunc.AA(Tmp_FILESIZE) + "," 
                                                       + myfunc.AA(Tmp_FILEDATE) 
                                                       + ", :FILEBODY "
                                              + ") ";
                              cmd.CommandText = Tmp_Sql;
                              cmd.Parameters.Add("FILEBODY", OracleDbType.Blob, fileBody.Length);
                              cmd.Parameters["FILEBODY"].Value = fileBody; 
                              cmd.ExecuteNonQuery();

                    2>[刪除附檔]鈕  - 一般的 Del SQL 即可
                           Tmp_Sql = "   DELETE  AMM_AKFL "
                                           + "  WHERE  AMMNO=" + myfunc.AA(Tmp_AMMNO)
                                           + "  AND      ITM=" + myfunc.AA(Tmp_ITM);
                          cmd.CommandText = Tmp_Sql;
                          cmd.ExecuteNonQuery();

3>[瀏覽檔案]鈕 : 利用VUTLAPI/dnloadFile_Cnd?
   var Tmp_Flds = "FILENAME,FILEBODY"
  var Tmp_Cnd = "  AND       AMMNO=" + AA(cur_rec.data["AMMNO"])
                        + "  AND       ITM=" + AA(cur_rec.data["ITM"]);
var Tmp_url = "../api/VUTLAPI/dnloadFile_Cnd?aTbl=AMM_AKFL&Flds=" + Tmp_Flds + "&aCnd=" + Tmp_Cnd;
document.location = Tmp_url;



1>*.js

var sub1_Btns = [
{
xtype: 'button', text: '新增附檔', id: 'sub1_AddBtn',
listeners: {
click: function () {
//mysuccessalert("新增附檔");
SelectFile(Ok_process);
}}},




2>*.cs
// sub1.[新增附檔] 鈕 , 新增一筆 AMM_AKFL資料 (上傳檔案)
[HttpPost]
public void uploadFile2AMM_AKFL()
{
HttpContext c = HttpContext.Current;
NameValueCollection nvc = c.Request.Form;
string FName = nvc["FName"];
string Tmp_AMMNO = nvc["AMMNO"];
HttpCookie MyCookie; //將訊息傳至前端
HttpRequest Request = HttpContext.Current.Request;
var response = this.Request.CreateResponse();
string file_Name = FName;
string FILEDT = DateTime.Now.ToString("yyyy/MM/dd");
string Tmp_RtnMsg = "";
string Tmp_Sql = "", Tmp_Str = "";

OracleConnection conn = new OracleConnection(DBService.ConnectionString(DBLINK));//
OracleCommand cmd = new OracleCommand();
OracleDataReader reader;
conn.Open();
cmd.Connection = conn;
foreach (string cur_FName in Request.Files)
{
string fileType = Request.Files[cur_FName].ContentType;
Stream file_Strm = Request.Files[cur_FName].InputStream;
file_Name = Path.GetFileName(Request.Files[cur_FName].FileName);
int fileSize = Request.Files[cur_FName].ContentLength;
//byte[] fileRcrd = new byte[fileSize];
BinaryReader br = new BinaryReader(file_Strm);
byte[] fileBody = br.ReadBytes((Int32)file_Strm.Length);

string Tmp_FILENAME = file_Name;
string Tmp_NEXT_ITM = get_NEXT_ITM(Tmp_AMMNO);
string Tmp_FILEDATE = FILEDT; // 當天
string Tmp_FILESIZE = fileSize.ToString();

//更新資料庫欄位值
try
{
Tmp_Sql = " INSERT INTO AMM_AKFL "
                + " ( AMMNO,"
                  + " ITM,FILENAME,FILESIZE,FILEDATE,FILEBODY )"
               + " VALUES "
              + "(" + myfunc.AA(Tmp_AMMNO) + ","
+ myfunc.AA(Tmp_NEXT_ITM) + "," + myfunc.AA(Tmp_FILENAME) + "," + myfunc.AA(Tmp_FILESIZE) + "," + myfunc.AA(Tmp_FILEDATE) + ", :FILEBODY "
+ ") ";

cmd.CommandText = Tmp_Sql;
cmd.Parameters.Add("FILEBODY", OracleDbType.Blob, fileBody.Length);
cmd.Parameters["FILEBODY"].Value = fileBody;
cmd.ExecuteNonQuery();

Tmp_RtnMsg = "[新增附檔]成功!!";
MyCookie = new HttpCookie("EX_DFile", HttpUtility.UrlEncode(Tmp_RtnMsg));
HttpContext.Current.Response.Cookies.Add(MyCookie);
HttpContext.Current.Response.End();
return;
}// try
catch (Exception e)
{ //失敗
Tmp_RtnMsg = "[新增附檔]失敗!!<br>"
                        + e.Message + "<br>";
MyCookie = new HttpCookie("EX_DFile", HttpUtility.UrlEncode(Tmp_RtnMsg));
HttpContext.Current.Response.Cookies.Add(MyCookie);
HttpContext.Current.Response.End();
return;
}
finally
{
conn.Close();
}
} //end of foreach (string cur_FName in Request.Files)
return;
} // end of uploadFile2AMM_FMF()


   cur_rec = cur_recs[0];
                        console.log("cur_rec:", cur_rec);
                        console.log("Tmp_sub1_Grid.store:", Tmp_sub1_Grid.store);
                        var Tmp_Flds = "FILENAME,FILEBODY"
                        var Tmp_Cnd = "  AND       AMMNO=" + AA(cur_rec.data["AMMNO"])
                                                 + "  AND       ITM=" + AA(cur_rec.data["ITM"]);
                        var Tmp_url = "../api/VUTLAPI/dnloadFile_Cnd?aTbl=AMM_AKFL&Flds=" + Tmp_Flds + "&aCnd=" + Tmp_Cnd;
                        //document.location = "../api/VUTLAPI/dnloadSS_File?FNAME=V20304H_匯入格式.xlsx  ";                             
                        document.location = Tmp_url;
                        mysuccessalert("瀏覽附檔((下載))成功!!");



目的:V20304F – [批次工時匯入]鈕 – Transaction

目的:V20304F – [批次工時匯入]鈕 – Transaction

處理說明: 1> SQLStringList_A.Add(Tmp_Sql);
                  2> excuteSQLTran(SQLStringList_A);
                       --> 執行 SQLStringList_A 內的 SQL
                             若不成功,則自動 Rollback
                  3>若呼叫executeSqlTran()API函式名稱太長,
                       則會出現錯誤訊息    


1>*.cs

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

  Tmp_Sql = " DELETE   AMM_AR  "
                  + "  WHERE  FMNO=" + myfunc.AA(Tmp_FMNO);
  SQLStringList_A.Add(Tmp_Sql);

Tmp_Sql = "  UPDATE   AMM_AR  "
                +"   SET   RQHR=" + myfunc.AA(Tmp_PR04AR) 
                + "  WHERE FMNO = " + myfunc.AA(Tmp_FMNO) 
                + "  AND    AMINO=" + myfunc.AA("0400");
SQLStringList_A.Add(Tmp_Sql);

excuteSQLTran(SQLStringList_A);




2>BaseAPIController.cs
public int excuteSQLTran(List<string> SQLStringList, bool sysException = true)
        {
            setActionName();
            int rows = 0;
            OracleConnection conn = new OracleConnection(DBService.ConnectionString(DBLINK));
            conn.Open();
            conn.ClientInfo = User.Identity.Name;
            conn.ModuleName = BaseSYS + "_" + BaseMODID;
            conn.ActionName = ActionName;  //ActionName=API函式名稱 ,不可太長,否則會Error
            OracleTransaction trn = conn.BeginTransaction();
            OracleCommand cmd = new OracleCommand();
            cmd.Connection = conn;
            cmd.Transaction = trn;
            try
            {
                excMsg = "";
                for (int n = 0; n < SQLStringList.Count; n++)
                {
                    string strsql = SQLStringList[n].ToString();
                    cmd.CommandText = strsql;                    
                    //rows += cmd.ExecuteNonQuery();
                    cmd.ExecuteNonQuery();
                    rows = 1;
                }
                trn.Commit();
            }
            catch (Exception ex)
            {
                trn.Rollback();
                rows = -1;
                //Console.WriteLine("error : " + ex.Message);
                excMsg = ex.Message;
                if (sysException)
                {
                    throw ex; //如果沒有另外寫例外訊息的話,以此為主
                }
            }
            finally
            {
                cmd.Cancel();
                conn.Close();
            }
            return rows;
        }

PS: API函式名稱不可太長,否則會出現錯誤訊息



2024年5月27日 星期一

V30204F – [批次匯入]鈕 – 若匯入資料有錯誤,則寫入*.xlsx, 傳至前端 - XLS2XLS

 目的:V30204F – [批次匯入] 若匯入資料有錯誤,則寫入*.xlsx, 傳至前端

處理說明:  1>出現[選擇檔案]子畫面, 若未選擇檔案,則顯示訊息
                        var Tmp_FileObj = Ext.getCmp('FName');
                        var Tmp_FName = Ext.getDom(Tmp_FileObj.inputId).value;
                        if (checkisnull(Tmp_FName)) {
 
                          Tmp_Str = "檔案名稱不可空白,敬請檢核!!"
                             myalert(Tmp_Str);
                            return;
                         }
                         par_OkProcess(this,e,eOpts);
                  2> 將檔案傳送至後端處理 
                       1>>*.js
                           var np = {}
                           np["FName"] = Ext.getDom(Tmp_FileObj.inputId).value;    
                           console.log("FName: ", np.FName);
                           //submit會將fileUploadForm裡面input name送到後端
                           me.up("form").submit({                       
                                url: '../api/V20304FAPI/uploadFileToDB',
                                method: 'POST',
                               headers: { 'Content-type': 'multipart/form-data' },
                               params: np,
                          });
                     2>*.cs  : 取得前端檔案
                         Stream file_Strm = Request.Files[cur_FName].InputStream;
                         file_Name = Path.GetFileName(Request.Files[cur_FName].FileName); 

            3>將 xls 檔案傳至前端
                wk.SaveToStream(mstream, FileFormat.Version2007);
                wk.SaveToFile(FileName1, FileFormat.Version2007);
                HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode((string)FileName1, System.Text.Encoding.UTF8) + "\"");
                        HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
                        HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                        HttpContext.Current.Response.BinaryWrite(mstream.ToArray());




1>*.js
//[單筆工時匯入]鈕 - - 匯入單筆工時資料,無子畫面
function Call_V20304F() {
      //挑選檔案後, 送給 Ok_prrocess 函式處理
     SelectFile(Ok_process);

}
function Ok_process(me, e, eOpts) {
    //取得 [檔案上傳].檔名
    var Tmp_FileObj = Ext.getCmp('FName');
    console.log("FName Obj:", Tmp_FileObj);
    var Tmp_Str = "";
    var np = {}
    np["FName"] = Ext.getDom(Tmp_FileObj.inputId).value;    
    console.log("FName: ", np.FName);
    //submit會將fileUploadForm裡面input name送到後端
    //Ext.getCmp('btn_FileIn').getForm().submit({
    me.up("form").submit({
        //standardSubmit: false,    //default:false
        url: '../api/V20304FAPI/uploadFileToDB',
        method: 'POST',
        headers: { 'Content-type': 'multipart/form-data' },
        params: np,        
    });

    //顯示結果訊息..
    var mask = new Ext.LoadMask(Ext.getBody(), {
        msg: '處理中,請稍待...'
    });

    mask.show();//使用 mask 需手動呼叫show() 方法下
    //若要傳送檔案到前端, 必需用 Cookie 判斷後端是否已完成
    //每1秒檢核一次,是否已完成, 若已完成,則不再檢核
    var timer = setInterval(function () {

        var r = r_cookies('EX_DFile');
        //console.log("r_cookies=", r);
        if (!checkisnull(r)) {
            mysuccessalert(r);
            clearInterval(timer);
            mask.hide();
            timer = null;
            //將視窗關閉
            Ext.getCmp("SelectForm_cancelbtn").fireHandler();
        }
    }, 1000);  //1000ms = 1sec
};  // end of Ok_process() {  //批次新增

2>*.cs
         //[批次工時匯入] 鈕 , 匯入 XLS 檔案
        //因為傳送[錯誤訊息]檔案至前端, 所以不可以使用  HttpResponseMessage  response
        [HttpPost]
        public void uploadFileToDB()
        {

            HttpContext c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            string FName = nvc["FName"];

            MemoryStream mstream = new MemoryStream();
         // 取得實實的路徑            
            string documentPath = HttpContext.Current.Server.MapPath("~") + "document\\";  
            string FileName = "V20304_工時批次匯入_錯誤說明" + ".xlsx";
            string FileName1 = documentPath + FileName;
            HttpCookie MyCookie;  //將訊息傳至前端
        
            Stream file_Strm = Request.Files[cur_FName].InputStream;
            wk = new Workbook();
            wk.LoadFromStream(file_Strm);
            Worksheet sheet1 = wk.Worksheets[0];//獲取第一個工作表

            Tmp_OGONOAF = sheet1.Range[myfunc.GetExcelPos(0,i+1)].Value;
            sheet1.Range[myfunc.GetExcelPos(27, i + 1)].Value = Tmp_RtnMsg1;

          if (Tmp_isOk==false)
                    {
                        wk.SaveToStream(mstream, FileFormat.Version2007);
                        wk.SaveToFile(FileName1, FileFormat.Version2007);
                        HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode((string)FileName1, System.Text.Encoding.UTF8) + "\"");
                        HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
                        HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                        HttpContext.Current.Response.BinaryWrite(mstream.ToArray());

                        //匯入檔案失敗
                        Tmp_Str = "匯入檔案失敗<br>"
                                        + "(" + FName + ")<br>";
                        MyCookie = new HttpCookie("EX_DFile", HttpUtility.UrlEncode(Tmp_Str));
                        HttpContext.Current.Response.Cookies.Add(MyCookie);
                        HttpContext.Current.Response.End();
                        return;                   
                    }                                    

 目的: V20304F – [批次匯入] 如何將如下錯誤訊息存成*.XLS , 下載至前端

處理說明:







V20304F – [批次匯入]鈕 – 如何將如下錯誤訊息存成*.XLS , 下載至前端

 目的: V20304F – [批次匯入] 如何將如下錯誤訊息存成*.XLS , 下載至前端

處理說明: 1>