顯示具有 dt2JSON 標籤的文章。 顯示所有文章
顯示具有 dt2JSON 標籤的文章。 顯示所有文章

2023年8月2日 星期三

V40AA – SAP工單狀態異動 – 傳回 TXT檔至前端 - dt2JSON - JSON2dt - Cookie - 勾選資料

 目的: V40A – [SAP工單狀態異動] 傳回 TXT檔至前端

處理說明: 1>將勾選的資料傳至後端  (JSON2dt)
                 2>後端開啟TXT檔案
                3>依每筆資料呼叫 WebService , 並將傳回訊息寫入檔案
                4>將TXT檔案   傳至前端
                5>將訊息加入 Cookie 




1>將勾選的資料傳至後端
   1>>*.js
                     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 
                    //將 DataAry轉成 JSON
                    var Tmp_DataString = JSON.stringify(Tmp_DataAry);
                    var np = {}; //TMFunction.js, 組合form上的查詢條件為json參數傳遞                                            np["sub_DataString"] = Tmp_DataString;  //存入目前勾選的資料

      -->後端處理 *.cs  ,  將 JSON 轉成 table
           string Tmp_DataString = nvc["sub_DataString"];   
           DataTable dt1 = myfunc.JSON2dt(Tmp_DataString);  //目前子畫面所勾選的資料

2>後端開啟TXT檔案
     1>>*.cs
          using System.Text;
          string Tmp_out_FName = "V40A_SAP工單單況異動_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); }
            File.WriteAllText(Tmp_out_pFName, String.Empty);
            Tmp_Str = " 工單號碼                     工單異動說明                         " +"\r\n";;
            File.AppendAllText(Tmp_out_pFName, Tmp_Str);


3>依每筆資料呼叫 WebService , 並將訊息寫入TXT檔案
    1>>*.cs
          //處理每筆工單
            for (var i = 0; i < dt1.Rows.Count; i++)
                {
                    Tmp_SAPNO = dt1.Rows[i]["SAPNO"].ToString();
                    //呼叫 WebService , 取得傳回 ds
                    Tmp_ds = myfunc.set_SAPSTAT(Tmp_SAPNO, Tmp_STAT, Tmp_EMPLYID);
                    var Tmp_dr = Tmp_ds.Tables[0].Rows[0];
                    Tmp_Str = Tmp_dr["AUFNR"].ToString() + "                " + Tmp_dr["MSG"].ToString()+ "\r\n";              
                     File.AppendAllText(Tmp_out_pFName, Tmp_Str);
                }//  end of  for (var i = 0; i < dt1.Rows.Count; i++)       
          
      2>>呼叫 WebService
public static dynamic set_SAPSTAT(string par_SAPNO, string par_STAT,string par_EMPLYID)
        {            
            string Tmp_Str = "";
            DataSet ds=new DataSet(); 

            if ((!checkisnull(par_SAPNO))  && (!checkisnull(par_STAT)))
            {
                ZCO02.ZRFC_ZCO02SoapClient ZCO02_cls = new ZCO02.ZRFC_ZCO02SoapClient();
                try
                {
                    ds = ZCO02_cls.PROCESS_TRANS_WEB_CO02(par_SAPNO, par_STAT, par_EMPLYID);                    
                }
                catch (Exception ex)
                { }  //throw ex;  可能回傳 null
                finally
                { };
            }
            return ds;
        }  


4>將TXT檔案   傳至前端
      HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode((string)Tmp_out_FName, 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();



5>訊息加入 Cookie
     //記錄 " 已執行完成 Cookie "
    var Tmp_finished_str = "已執行完成!!";
    MyCookie = new HttpCookie("UPDATE_SAPSTAT_finished", HttpUtility.UrlEncode(Tmp_finished_str));
    HttpContext.Current.Response.Cookies.Add(MyCookie);


2023年6月18日 星期日

V120202D -getUrlStr - 傳回ds - foreach(DataRow dr -checkRtnOk - - 挑選[申請單號]後,自動加入 store - dt2JSON - Ext.decode

 目的: V120202D - 領料登記 - 挑選[申請單號]後,自動加入 store

處理說明: 1>開啟畫面, store : where 1=2
                  2>利用隱藏按鈕 [加入資料], 挑選完資料(onchange)後,執行[加入資料]鈕
                  3>[挑選資料]後,將所挑選資料轉成 dt2JSON String傳至前端, 
                  4>由 Ext.decode 解碼成 Object (Tmp_recs)
                  5>將 Tmp_rec=Tmp_recs[i], 將 Tmp_rec 加入 store       

1>*.js
,{
xtype: "button", id: "btn_APNO", name: "btn_APNO", text: "...",
handler: function () {
//不分頁 & 不 suspendevent - 以便觸發 change event
var win = EditPickx('申請單號', '../api/V120202DAPI/get_APNOPick', ['APNO'],
['sub_APNO'], J_pickstore_sub_APNO, J_pickcolumns_sub_APNO, false,false);
win.show();
}
},
{ //加入資料
xtype: "button", text: "加入資料", width: 120, border: 2, margin: { left: 10, },
hidden: true,
id: "sub_btn_Add",
handler: function () {
console.log("insider handler of sub_btn_Add");
var Tmp_APNO = Ext.getCmp("sub_APNO").getValue();
var Tmp_Str = "";
if (checkisnull(Tmp_APNO)) {
Tmp_Str = "請先輸入[申請單號] !!"
mywarnalert(Tmp_Str);
return;
}
var np = {};
np["sub_APNO"] = Tmp_APNO;
var Tmp_url = "../../api/V120202DAPI/get_sub_data1";

//取得挑選資料的 dt2JSON 字串 
//getUrlStr : 必需傳回字串( dt.JSON字串) , 非 ds
var rtn_Str = getUrlStr(Tmp_url, np, "加入資料");

console.log("rtn_Str:", rtn_Str);

if (checkRtnOK(rtn_Str)) {
var Tmp_recs = Ext.decode(rtn_Str);
var Tmp_rec;
for (i = 0; i < Tmp_recs.length; i++) {
Tmp_rec = Tmp_recs[0];
console.log("Tmp_rec:", Tmp_rec);
if (Ext.getCmp("sub_Grid").store.find("APNO", Tmp_rec["APNO"]) == -1) {
console.log("add store Tmp_rec:", Tmp_rec);
Ext.getCmp("sub_Grid").store.add(Tmp_rec);
Ext.getCmp("sub_APNO").setValue("");
}
} //end of for
console.log("store :", Ext.getCmp("sub_Grid").store);
} // end of if (checkRtnOK(rtn_Str)) {
} // end of handler
}, // end of 加入資料

//開啟畫面
var win1 = getMyWindow("領料登記", sub_V120202D_Flds, sub_V120202D_Btns, "D");
    win1.x = 100;
    win1.setWidth(500);
    win1.setHeight(400);
    var np = {};
    //np["sub_APNO"] = Ext.getCmp("sub_APNO").getValue();
    var Tmp_url = "../../api/V120202DAPI/get_sub_data";  //
    Ext.getCmp("sub_Grid").store.getProxy().url = Tmp_url;
    Ext.getCmp("sub_Grid").store.getProxy().extraParams = np; //分頁OK,篩選條件OK    
    Ext.getCmp("sub_Grid").store.load();
    win1.show();
    
2>*.cs
//[顯示資料]鈕 - store.資料 - where  1=2
        [HttpPost]
        //public HttpResponseMessage get_sub_Data()
        public dynamic get_sub_Data()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;            

            OracleCommand cmd = new OracleCommand();
            var response = this.Request.CreateResponse();
            /*
             * { name: "APNO" },
{ name: "MATNR" },
{ name: "MAKTX" },
{
name: "QTY",
convert: function (value, record) { return Ext.util.Format.round(value, 2); }
},
{ name: "UNIT" },
             */
            string Tmp_Sql1 = "";  //for 日期起迄
            string Tmp_Sql = "  SELECT  RNK,APNO,APER,APDT,PN,MATNR,MAKTX,QTY,UNIT,MPKUPP,MPKUPDT,STAT "
                                        + "  FROM   ( SELECT  dense_rank()  over(order by  APNO) as RNK,"
                                                                      + "    APNO,APER,APDT,PN,MATNR,MAKTX,QTY,UNIT,MPKUPP,MPKUPDT,STAT  "
                                                        + "   FROM     AMM_COMQ "
                                                       + "   WHERE  1=2 ";            
            Tmp_Sql = Tmp_Sql + ")";

            cmd.CommandText = Tmp_Sql;
            string countSql = " SELECT COUNT(*) as total FROM (" + Tmp_Sql + ")";
            //不分頁
            DataSet ds = getDataTable(cmd, countSql, false);

            //- [單況(STAT) ]            
            Tmp_Sql = " select    KEY_CODE as  STAT, DESCPT "
                           + " from      KEYCODE  "
                           + "  where   TBL_NAME = 'AMM_COMQ'  "
                           + "  and        KEY_NAME = 'STAT'   ";
            getKeyCode("STAT", ref ds, Tmp_Sql);

            int Tmp_TOTAL = int.Parse(ds.Tables["T1C"].Rows[0]["TOTAL"].ToString());
            string Tmp_Str = "";
            string Tmp_RtnMsg = "";



            //自訂  CaluField 欄位  - [儲位(SP_)] 
            ds.Tables["T1"].Columns.Add("WH_", typeof(object));
            ds.Tables["T1"].Columns.Add("SP_", typeof(object));
            ds.Tables["T1"].Columns.Add("APER_", typeof(object));
            ds.Tables["T1"].Columns.Add("MPKUPP_", typeof(object));

            OracleConnection conn = new OracleConnection(DBService.ConnectionString(DBLINK));
            OracleCommand cmd1 = new OracleCommand();
            OracleDataReader reader;
            string Tmp_dt2JSON;
            try
            {
                conn.Open();
                conn.ClientInfo = User.Identity.Name;
                conn.ModuleName = BaseSYS + "_" + BaseMODID;
                conn.ActionName = ActionName;
                cmd1.Connection = conn;

                string Tmp_cur_APNO = "";
                string Tmp_WH_ = "";
                string Tmp_SP_ = "";
                string Tmp_APER_ = "";
                string Tmp_MPKUPP_ = "";

                foreach (DataRow dr in ds.Tables["T1"].Rows)
                {
                    Tmp_WH_ = "";
                    Tmp_SP_ = "";
                    Tmp_APER_ = "";
                    Tmp_MPKUPP_ = "";
                    Tmp_cur_APNO = dr["APNO"].ToString();
                    if (Tmp_cur_APNO.Length > 0)
                    {
                        Tmp_Sql = " SELECT  WH,SP  "
                                        + " FROM    AMM_COMPQTY    "
                                        + "  WHERE APNO=" + myfunc.AA(Tmp_cur_APNO)
                                        + "   AND      rownum=1 "
                                       + "   ORDER  BY APNO DESC ";
                        Tmp_Str = myfunc.SqlValue(Tmp_Sql);
                        if (Tmp_Str.Length > 0)
                        {
                            Tmp_WH_ = myfunc.StrExtract(Tmp_Str, 1, ";");
                            Tmp_SP_ = myfunc.StrExtract(Tmp_Str, 2, ";");
                        }
                        Tmp_Sql = " SELECT  EMPLYNM  "
                                        + " FROM    HR_EMPLYM    "
                                        + "  WHERE EMPLYID=" + myfunc.AA(dr["APER"].ToString());                                       
                        Tmp_Str = myfunc.SqlValue(Tmp_Sql);
                        if (Tmp_Str.Length > 0)
                        {
                            Tmp_APER_ = myfunc.StrExtract(Tmp_Str, 1, ";");                            
                        }
                        dr["APER_"] = Tmp_APER_;
                        Tmp_Sql = " SELECT  EMPLYNM  "
                                        + " FROM    HR_EMPLYM    "
                                        + "  WHERE EMPLYID=" + myfunc.AA(dr["MPKUPP"].ToString());
                        Tmp_Str = myfunc.SqlValue(Tmp_Sql);
                        if (Tmp_Str.Length > 0)
                        {
                            Tmp_MPKUPP_ = myfunc.StrExtract(Tmp_Str, 1, ";");
                        }
                        dr["MPKUPP_"] = Tmp_MPKUPP_;
                    }  // end of  foreach (DataRow row in ds.Tables["T1"].Rows)
                } //end of  foreach (dr
                   //如何將  ds 的 T1包成 JSON格式, 傳回前遄                                
                return ds;                
            } // end of try            
            finally
            {
                conn.Close();
            }


//[加入資料]鈕 - 將所挑選的申請單號, 加入子畫面.grid
        [HttpPost]
        //public HttpResponseMessage get_sub_Data1()
        public dynamic get_sub_Data1()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;            
            string Tmp_APNO = nvc["sub_APNO"];

            OracleCommand cmd = new OracleCommand();
            var response = this.Request.CreateResponse();
            /*
             * { name: "APNO" },
{ name: "MATNR" },
{ name: "MAKTX" },
{
name: "QTY",
convert: function (value, record) { return Ext.util.Format.round(value, 2); }
},
{ name: "UNIT" },
             */
            string Tmp_Sql1 = "";  //for 日期起迄
            string Tmp_Sql = "  SELECT  RNK,APNO,APER,APDT,PN,MATNR,MAKTX,QTY,UNIT,MPKUPP,MPKUPDT,STAT "
                                        + "  FROM   ( SELECT  dense_rank()  over(order by  APNO) as RNK,"
                                                                      + "    APNO,APER,APDT,PN,MATNR,MAKTX,QTY,UNIT,MPKUPP,MPKUPDT,STAT  "
                                                        + "   FROM     AMM_COMQ "
                                                       + "   WHERE  1=1 ";
            //panel11
            //申請編號 
            if (!myfunc.checkisnull(Tmp_APNO))
            {
                Tmp_Sql = Tmp_Sql + " AND    APNO=  " + myfunc.AA(Tmp_APNO);
            };
            Tmp_Sql = Tmp_Sql + ")";

            cmd.CommandText = Tmp_Sql;
            string countSql = " SELECT COUNT(*) as total FROM (" + Tmp_Sql + ")";
            //不分頁
            DataSet ds = getDataTable(cmd, countSql, false);

            int Tmp_TOTAL = int.Parse(ds.Tables["T1C"].Rows[0]["TOTAL"].ToString());            
            string Tmp_Str = "";
            string Tmp_RtnMsg = "";

            //- [單況(STAT) ]            
            Tmp_Sql = " select    KEY_CODE as  STAT, DESCPT "
                           + " from      KEYCODE  "
                           + "  where   TBL_NAME = 'AMM_COMQ'  "
                           + "  and        KEY_NAME = 'STAT'   ";
            getKeyCode("STAT", ref ds, Tmp_Sql);


            //自訂  CaluField 欄位  - [儲位(SP_)] 
            ds.Tables["T1"].Columns.Add("WH_", typeof(object));
            ds.Tables["T1"].Columns.Add("SP_", typeof(object));

            string Tmp_WH_ = "";
            string Tmp_SP_ = "";
            OracleConnection conn = new OracleConnection(DBService.ConnectionString(DBLINK));
            OracleCommand cmd1 = new OracleCommand();
            OracleDataReader reader;
            string Tmp_dt2JSON;
            try
            {
                conn.Open();
                conn.ClientInfo = User.Identity.Name;
                conn.ModuleName = BaseSYS + "_" + BaseMODID;
                conn.ActionName = ActionName;
                cmd1.Connection = conn;

                var Tmp_cur_APNO = "";
                foreach (DataRow dr in ds.Tables["T1"].Rows)
                {
                    Tmp_cur_APNO = dr["APNO"].ToString();                    
                    if (Tmp_cur_APNO.Length > 0)
                    {
                        //自訂 SQL , 取得 CaluField 欄位值 
                        Tmp_Sql = " SELECT  WH,SP "
                                       + "  FROM   AMM_COMPQTY "
                                       + " WHERE  1=1 "
                                       + "  AND       APNO=" + myfunc.AA(Tmp_cur_APNO)
                                       +"  AND       rownum=1 "                                       
                                       + "   ORDER  BY SP  ";
                        Tmp_Str = myfunc.SqlValue(Tmp_Sql);
                        if (Tmp_Str.Length > 0)
                        {
                            Tmp_WH_ = myfunc.StrExtract(Tmp_Str, 1, ";");
                            Tmp_SP_ = myfunc.StrExtract(Tmp_Str, 2, ";");
                        }
                        dr["WH_"] = Tmp_WH_;
                        dr["SP_"] = Tmp_SP_;                                                
                    }  // end of   if (Tmp_NATIXX.Length > 0)
                }  // end of  foreach (DataRow row in ds.Tables["T1"].Rows)
                   //如何將  ds 的 T1包成 JSON格式, 傳回前遄                

                Tmp_dt2JSON = myfunc.dt2JSON(ds.Tables["T1"]);
                Tmp_RtnMsg = Tmp_dt2JSON;
                return Tmp_RtnMsg;
            } // end of try
            catch (Exception e)
            {
                var Tmp_ErrMsg = myfunc.Get1ORA(e.Message);
                Tmp_RtnMsg = "錯誤: 取得[條碼編號]的資料失敗 (get_sub_data1) !!  <br> "
                                         + Tmp_ErrMsg;
                return Tmp_RtnMsg;
            }
            finally
            {
                conn.Close();
            }
            //return ds;           

        }// end of get_sub_Data1();

2022年8月25日 星期四

V20306 - 套表列印 - 依勾選的資料匯出 - 將目前所選的資料,當成 np參數 , 傳至後端 - SS_FILES

 目的: 畫面的欄位值,直接匯出至套表, 不分頁

處理說明: 1>讀取套表檔案 SS_FILES

                  2>讀取 store 資料匯出至 XLS



1>*.js , 依所勾選的資料匯出轉成 JSONString 當參數, 傳至後端
//查詢  - 將目前所選的資料,匯出成報表
    function LookBtn_click() {
        var Tmp_Grid = Ext.getCmp('grid_Single');
        var cur_recs,cur_rec;
        var Tmp_SAPNO, Tmp_PN, Tmp_QTY, Tmp_EOCND, Tmp_RMK;
        var Tmp_data_JSON = "";  //將store資料轉成 JSON 的字串
        var Tmp_sub_np = {};
        let Tmp_DataAry1 = [];
        var Tmp_Str = "";
        cur_recs = Tmp_Grid.getView().selModel.getSelection();
        console.log("cur_recs:", cur_recs);
        if (cur_recs.length == 0) {
            mywarnalert("請先選擇要查詢的資料");
            return;
        }
        for (var i = 0; i < cur_recs.length; i++) {
            cur_rec = cur_recs[i];
            console.log(Tmp_Str + "cur_rec:", cur_rec);
            Tmp_DataAry1.push(cur_rec.data);
        }

        console.log("Tmp_DataAry1:", Tmp_DataAry1);
        // 將目前子畫面的資料(Table)轉成 JSON字串
        let Tmp_DataString1 = JSON.stringify(Tmp_DataAry1);
        console.log("Tmp_DataString1:", Tmp_DataString1);        
        var np = {};
        np = {
            DataString1: Tmp_DataString1,            
        };
        //Ext.Ajax.request   --> 傳送檔案至前端,不可使用 Ext.Ajax, 必需使用 Form.submit
        Ext.getCmp('s_form').submit({
            url: '../../api/V20306API/DoPRNLIST',
            method: 'POST',
            async: false,
            standardSubmit: true, //若要傳送檔案至前端, standardSubmit必需設為 true  
            params: np,
        });

        //顯示結果訊息..
        var mask = new Ext.LoadMask(Ext.getBody(), {
            msg: '處理中,請稍待...'
        });
        mask.show();//使用 mask 需手動呼叫show() 方法下
        var timer = setInterval(function () {
            clearInterval(timer);
            mask.hide();
            timer = null;
            var r = r_cookies('EX_DFile');
            console.log("r_cookies=", r);
            if (!checkisnull(r)) {
                mysuccessalert(r);
            }
        }, 5000);  //3000ms = 3sec
    }  // end of  function LookBtn_click() {





2>*.cs - 依傳入的資料參數, 匯出至 XLS

//加入JSON格式轉換參考 , JsonConvert 必需使用如下  library
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

//查詢 - 將所選的資料匯出至 xls - 套表
[HttpPost]

public void DoPRNLIST()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            // 1>將 SS_FILES.FBOLD 存成 Local檔案
            //取得目前子畫面的欄位值
string Tmp_DataString1 = nvc["DataString1"];  //取得目前子畫面的資料. JSON字串   
            //將 table 字串轉成 DataTable
            //DataTable DataTable1 = (DataTable)JsonConvert.DeserializeObject(Tmp_DataString1, (typeof(DataTable)));
            DataTable DataTable1 = myfunc.JSON2dt(Tmp_DataString1);
            
            OracleConnection conn = new OracleConnection(DBService.ConnectionString(DBLINK));//
            OracleCommand cmd = new OracleCommand();
            //OracleDataAdapter adp = new OracleDataAdapter();
            //DataSet ds = new DataSet();
            //var response = Request.CreateResponse();
            conn.Open();
            conn.ClientInfo = User.Identity.Name;
            conn.ModuleName = BaseSYS + "_" + BaseMODID;
            conn.ActionName = ActionName;
            cmd.Connection = conn;
            string Tmp_Sql = "";
            string Tmp_Str = "";
            string Tmp_Str1 = "";
            string Tmp_RtnMsg;
            string Tmp_FName = "V20306_列印報表.xlsx";      //套表的檔案名稱 , 
            string documentPath = HttpContext.Current.Server.MapPath("~") + "document\\";  // 取得實實的路徑            
            string pathFName = documentPath + Tmp_FName;
            //需要擷取大量資料時,DataReader 是很好的選擇,因為資料不會快取至記憶體。
            OracleDataReader reader;
            Workbook wk = null;
            MemoryStream mstream = new MemoryStream();
            string FileName = "V20306_列印報表_" + DateTime.Now.ToString("yyyyMMdd") + ".xlsx";
            string FileName1 = documentPath + FileName;
            try
            {
                wk = new Workbook();
                //1>將  SS_FILES. FBODY , 存至Local目錄.檔案                 
                if (File.Exists(pathFName))
                {
                    File.Delete(pathFName);
                }
                Tmp_Sql = " SELECT  FNAME,FBODY "
                                + " FROM     SS_FILES   "
                                + "   WHERE   1 = 1  "
                                + "  AND         FNAME = " + myfunc.AA(Tmp_FName);
                cmd.CommandText = Tmp_Sql;
                reader = cmd.ExecuteReader();
                byte[] file = null;
                //FileMode.OpenOrCreate: 開啟檔案若無檔案則新增
                //FileAccess.ReadWrite: 允許檔案讀取/寫入
                FileStream fs = File.Open(pathFName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
                BinaryWriter bw = new BinaryWriter(fs);
                if (reader.HasRows)
                {
                    if (reader.Read())
                    {
                        file = (byte[])reader["FBODY"];
                        //fs.Write(file,0,50000);
                        bw.Write(file);
                        wk.LoadFromStream(fs);
                        bw.Close();
                        fs.Close();
                    }
                }
                //2 > 主機.Local檔案 XLS 讀入  FStream
                Worksheet ws = wk.Worksheets[0];//獲取第一個工作表
                //寫入[SAPNO][PN][QTY][EOCND][RMK]
                string Tmp_ASPNO, Tmp_RPNOAF, Tmp_LCNO, Tmp_LRWET_;
                string Tmp_MCNM, Tmp_ORDID_, Tmp_PCTP, Tmp_FICNMA, Tmp_STLCT;
                string Tmp_PCQTY,Tmp_ASLV,Tmp_ASPRMK,Tmp_NGONOAF,Tmp_PN;
                string Tmp_LCITM, Tmp_LCETDT, Tmp_LCCHID_, Tmp_LCORAO, Tmp_LRULT;
                string Tmp_LRUWT, Tmp_LRUHG,Tmp_WTLV,Tmp_ITPR;                
                //每筆資料列印後, 不分頁列印下一筆
                for (var i = 0; i < DataTable1.Rows.Count; i++)
                {
                    Tmp_ASPNO = DataTable1.Rows[i]["ASPNO"].ToString();
                    Tmp_RPNOAF = DataTable1.Rows[i]["RPNOAF"].ToString();
                    Tmp_LCNO = DataTable1.Rows[i]["LCNO"].ToString();
                    //直接取得畫面.CaluField欄位值        
                    Tmp_LRWET_ = DataTable1.Rows[i]["LRWET_"].ToString();//系統件重量說明

                    Tmp_ORDID_ = DataTable1.Rows[i]["ORDID_"].ToString();  //訂購者姓名
                    Tmp_MCNM = DataTable1.Rows[i]["MCNM"].ToString();
                    Tmp_PCTP = DataTable1.Rows[i]["PCTP"].ToString();
                    Tmp_FICNMA = DataTable1.Rows[i]["FICNMA"].ToString();
                    Tmp_STLCT = DataTable1.Rows[i]["STLCT"].ToString();
                    Tmp_PCQTY = DataTable1.Rows[i]["PCQTY"].ToString();
                    Tmp_ASLV = DataTable1.Rows[i]["ASLV"].ToString();
                    Tmp_ASPRMK = DataTable1.Rows[i]["ASPRMK"].ToString();
                    Tmp_NGONOAF = DataTable1.Rows[i]["NGONOAF"].ToString();
                    Tmp_PN = DataTable1.Rows[i]["PN"].ToString();
                    Tmp_LCITM = DataTable1.Rows[i]["LCITM"].ToString();
                    Tmp_LCETDT = DataTable1.Rows[i]["LCETDT"].ToString();
                    Tmp_LCCHID_ = DataTable1.Rows[i]["LCCHID_"].ToString();
                    Tmp_LCORAO = DataTable1.Rows[i]["LCORAO"].ToString();
                    Tmp_LRULT = DataTable1.Rows[i]["LRULT"].ToString();
                    Tmp_LRUWT = DataTable1.Rows[i]["LRUWT"].ToString();
                    Tmp_LRUHG = DataTable1.Rows[i]["LRUHG"].ToString();
                    Tmp_WTLV = DataTable1.Rows[i]["WTLV"].ToString();
                    Tmp_ITPR = DataTable1.Rows[i]["ITPR"].ToString();
                    //GetExcelPos(欄, 行) 以 0 開始, 
                    ws.Range[myfunc.GetExcelPos(0, i+1)].Text = Tmp_ASPNO;
                    ws.Range[myfunc.GetExcelPos(1, i+1)].Text = Tmp_RPNOAF;
                    ws.Range[myfunc.GetExcelPos(2, i + 1)].Text = Tmp_LCNO;
                    ws.Range[myfunc.GetExcelPos(3, i + 1)].Text = Tmp_LRWET_;                    
                    ws.Range[myfunc.GetExcelPos(4, i + 1)].Text = Tmp_MCNM;
                    ws.Range[myfunc.GetExcelPos(5, i + 1)].Text = Tmp_ORDID_;
                    ws.Range[myfunc.GetExcelPos(6, i + 1)].Text = Tmp_PCTP;
                    ws.Range[myfunc.GetExcelPos(7, i + 1)].Text = Tmp_FICNMA;
                    ws.Range[myfunc.GetExcelPos(8, i + 1)].Text = Tmp_STLCT;
                    ws.Range[myfunc.GetExcelPos(9, i + 1)].Text = Tmp_PCQTY;
                    ws.Range[myfunc.GetExcelPos(10, i + 1)].Text = Tmp_ASLV;
                    ws.Range[myfunc.GetExcelPos(11, i + 1)].Text = Tmp_ASPRMK;
                    ws.Range[myfunc.GetExcelPos(12, i + 1)].Text = Tmp_NGONOAF;
                    ws.Range[myfunc.GetExcelPos(13, i + 1)].Text = Tmp_PN;
                    ws.Range[myfunc.GetExcelPos(14, i + 1)].Text = Tmp_LCITM;
                    ws.Range[myfunc.GetExcelPos(15, i + 1)].Text = Tmp_LCETDT;
                    ws.Range[myfunc.GetExcelPos(16, i + 1)].Text = Tmp_LCCHID_;
                    ws.Range[myfunc.GetExcelPos(17, i + 1)].Text = Tmp_LCORAO;
                    ws.Range[myfunc.GetExcelPos(18, i + 1)].Text = Tmp_LRULT;
                    ws.Range[myfunc.GetExcelPos(19, i + 1)].Text = Tmp_LRUWT;
                    ws.Range[myfunc.GetExcelPos(20, i + 1)].Text = Tmp_LRUHG;
                    ws.Range[myfunc.GetExcelPos(21, i + 1)].Text = Tmp_WTLV;
                    ws.Range[myfunc.GetExcelPos(22, i + 1)].Text = Tmp_ITPR;
                }
                
                wk.SaveToStream(mstream, FileFormat.Version2007);
                wk.SaveToFile(FileName1, FileFormat.Version2007);
                //wk.SaveToStream(mstream, FileFormat.Version2013);
                //wk.SaveToFile(FileName1, FileFormat.Version2013);                
            }
            catch (Exception e)
            {
                var Tmp_ErrMsg = e.Message;
            }
            finally
            {                
                wk.Dispose();
                conn.Close();
            }
            HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode((string)FileName, 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>"
                            + "(" + FileName + ")<br>";
            HttpCookie MyCookie = new HttpCookie("EX_DFile", HttpUtility.UrlEncode(Tmp_Str));
            HttpContext.Current.Response.Cookies.Add(MyCookie);
            HttpContext.Current.Response.End();
        }  // end of public void DoPRNLIST()

2022年8月14日 星期日

V120402 - 將後端的多筆資料,加入前端畫面的dataset - dt2JSON , JSON, JSONAA

目的:  由後端取得多筆資料,加入現有畫面的 datastore

處理說明: 1>後端如何將datatable 的資料包成 JSON的格式, 傳至前端,並解碼
                  2>前端如何解碼 JSON 的格式


1>*.cs  myfunc.cs  - 宣告 dt2JSON 函式 , 傳回 datatable T1 的  JSON格式
       using Newtonsoft.Json;

        public static string dt2JSON(DataTable dt)
        {
            string JsonString = string.Empty;
            if (dt.Rows.Count > 0)
            {
                JsonString = JsonConvert.SerializeObject(dt);
            }
            return JsonString;
        }



2>*.cs  V120402, 取得 ds , 並將 ds.Tables["T1"] 轉換成 JSON格式字串, 傳回 前端
[HttpPost]
public HttpResponseMessage get_sub_Data1()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            string Tmp_BRP = nvc["sub_BRP"];
            string Tmp_TMNO = nvc["sub_TMNO"];

            OracleCommand cmd = new OracleCommand();
            string Tmp_Sql1 = "";  //for 日期起迄
            string Tmp_Sql = "  SELECT                              
                                                    RNK,TMNO,TMNOXX,DOCNO,SHT,REV,DOCTLE,STLCT,VOL,
                                                    BRDAY_,REMARK_,STAT,NATIXX,LGTPXX "
                                        + "  FROM   ( SELECT  dense_rank()  over(order by  TMNO) as RNK,"
                                        + "    TMNO,TMNOXX,DOCNO,SHT,REV,DOCTLE,STLCT,
                                                  VOL,10 as BRDAY_,'  ' as  REMARK_,STAT,  "
                                                                      + "     NATIXX,LGTPXX "
                                                        + "   FROM     AMM_TMDWG "
                                                       + "   WHERE  1=1 ";
            //panel11
            //條碼編號 
            if (!myfunc.checkisnull(Tmp_TMNO))
            {
                Tmp_Sql = Tmp_Sql + " AND    TMNO=  " + myfunc.AA(Tmp_TMNO);
            };
            Tmp_Sql = Tmp_Sql + ")";

            cmd.CommandText = Tmp_Sql;
            string countSql = " SELECT COUNT(*) as total FROM (" + Tmp_Sql + ")";
            DataSet ds = getDataTable(cmd, countSql);

            int Tmp_TOTAL = int.Parse(ds.Tables["T1C"].Rows[0]["TOTAL"].ToString());
            string Tmp_STAT = "";
            string Tmp_Str = "";
            if (Tmp_TOTAL > 0)
            {
                Tmp_STAT = ds.Tables["T1"].Rows[0]["STAT"].ToString();
                if (Tmp_STAT == "A")
                {
                    Tmp_Str = "目前條碼編號(" + Tmp_TMNO + ")的文件已借出/已刪除, 不可借閱";
                }
            }

            //新增  CaluField 欄位  - [管制現況]            
            getKeyCode("STAT", ref ds);

            //取得最新版期, 版別
            //自訂  CaluField 欄位  - [最新版期(VNDTXY_)] [最新版別(VNTPXD_)]
            ds.Tables["T1"].Columns.Add("VNDTXY_", typeof(object));
            ds.Tables["T1"].Columns.Add("VNTPXD_", typeof(object));

            string Tmp_Val = "";  //欄位值 以 ; 分隔
            string Tmp_NATIXX = "", Tmp_LGTPXX = "", Tmp_TMNOXX = "";
            string Tmp_VNDTXY_ = "", Tmp_VNTPXD_ = "";
            OracleConnection conn = new OracleConnection(DBService.ConnectionString(DBLINK));
            OracleCommand cmd1 = new OracleCommand();
            OracleDataReader reader;
            var response = this.Request.CreateResponse();
            string Tmp_dt2JSON;
            string Tmp_RtnMsg = "";
            try
            {
                conn.Open();
                conn.ClientInfo = User.Identity.Name;
                conn.ModuleName = BaseSYS + "_" + BaseMODID;
                conn.ActionName = ActionName;
                cmd1.Connection = conn;

                foreach (DataRow row in ds.Tables["T1"].Rows)
                {
                    Tmp_NATIXX = row["NATIXX"].ToString();
                    Tmp_LGTPXX = row["LGTPXX"].ToString();
                    Tmp_TMNOXX = row["TMNOXX"].ToString();
                    Tmp_VNDTXY_ = "";
                    Tmp_VNTPXD_ = "";
                    if (Tmp_NATIXX.Length > 0)
                    {
                        //自訂 SQL , 取得 CaluField 欄位值 
                        Tmp_Sql = " SELECT ITEMXY,VNDTXY, VNTPXD "
                                       + "  FROM  TM_XY@TLS_245 "
                                       + " WHERE  OWN_DEP='L'  "
                                       + "  AND       NATIXX=" + myfunc.AA(Tmp_NATIXX)
                                       + "  AND       LGTPXX=" + myfunc.AA(Tmp_LGTPXX)
                                       + "  AND      TMNOXX=" + myfunc.AA(Tmp_TMNOXX)
                                       + "   ORDER  BY ITEMXY DESC ";
                        cmd1.CommandText = Tmp_Sql;
                        reader = cmd1.ExecuteReader();
                        //只取最大版期 & 版別
                        if (reader.Read())
                        {
                            Tmp_VNDTXY_ = Tmp_VNDTXY_ + String.Format("{0:yyyy/MM/dd}", DateTime.Parse(reader["VNDTXY"].ToString())) + ",";
                            Tmp_VNTPXD_ = Tmp_VNTPXD_ + reader["VNTPXD"].ToString() + ",";
                        }  // end of  while 
                        if (Tmp_VNDTXY_.Length > 0)
                            Tmp_VNDTXY_ = Tmp_VNDTXY_.Substring(0, Tmp_VNDTXY_.Length - 1);
                        if (Tmp_VNTPXD_.Length > 0)
                            Tmp_VNTPXD_ = Tmp_VNTPXD_.Substring(0, Tmp_VNTPXD_.Length - 1);
                        row["VNDTXY_"] = Tmp_VNDTXY_;
                        row["VNTPXD_"] = Tmp_VNTPXD_;
                    }  // end of   if (Tmp_NATIXX.Length > 0)
                }  // end of  foreach (DataRow row in ds.Tables["T1"].Rows)
                   //如何將  ds 的 T1包成 JSON格式, 傳回前遄                

                Tmp_dt2JSON = myfunc.dt2JSON(ds.Tables["T1"]);
                Tmp_RtnMsg = Tmp_dt2JSON;
                
                Tmp_Str = "{success: true,Rtn_Msg:" + myfunc.AA(Tmp_RtnMsg) + ","
                    + " }";
                response.Content = new StringContent(Tmp_Str);    // 回應內容
                return response;
            } // end of try
            catch (Exception e)
                {
                var Tmp_ErrMsg = myfunc.Get1ORA(e.Message);
                Tmp_RtnMsg = "取得[條碼編號]的資料失敗 (get_sub_data1) !!  <br> "
                                         + Tmp_ErrMsg;

//JSON 傳回字串 {"sucess": false, "Rtn_Msg" : "錯誤訊息"  },  以 myfunc.JSONAA 包含   \"
Tmp_Str = "{"+myfunc.JSONAA("success")+": false ,"+myfunc.JSONAA("failure")+": true , "
                        + myfunc.JSONAA("Rtn_Msg")+":"+myfunc.JSONAA(Tmp_RtnMsg) + "}";
                response.Content = new StringContent(Tmp_Str);    // 回應內容
                return response;
            }
            finally
            {
                conn.Close();
            }

            //return ds;
            
        }// end of get_sub_Data1();


3>*.js  , 將 Ext.Ajax 的傳回值(JSON 字串), 轉換成 JSON Object(Ext.decode(JSONString))
               var Tmp_recs = Ext.decode(Tmp_Obj["Rtn_Msg"]);
               console.log("Tmp_recs:", Tmp_recs);
               console.log("Tmp_recs.length:", Tmp_recs.length);
               var Tmp_rec;
               for (i = 0; i < Tmp_recs.length; i++) {
                     Tmp_rec = Tmp_recs[i];
                     console.log("1 Tmp_rec:", Tmp_rec);
                     console.log("Tmp_rec:", Tmp_rec);
                      Ext.getCmp("sub_Grid").store.add(Tmp_rec);
               } // for (i=0;i<)