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

2022年7月26日 星期二

V120502 - [列印包裝貼紙]鈕 - 1>下載 SS_FILES樣板檔, 2>填寫欄位值, 3>將該檔案傳送至前端

目的: 將資料內容印至標籤印表機

處理說明 : 1>Browser前端無法取得本機的印表機清單, 也無法設定本機印表機的頁面長寬

                   2>將資料寫入 xls檔案, 傳送至本機前端, 由使用者自行選擇標籤印表機後,列印

                       --> 如何將前端store的 3筆資料,送至後端去處理,將這3筆資料填入樣板檔

                   3>將檔案寫入 pdf檔案網頁 , 由使用者按右鍵列印, 仍要選擇印表機





一.自訂 class , 將store 資料變成 JSON字串, 再由 JSON字串轉成 Object,
      -JSON Serialize  & DeSerialize
1>js 將 store 的資料轉成  JSON String  - *.js  
   var Tmp_data_JSON = "";  //將store資料轉成 JSON 的字串
        var Tmp_sub_np = {};
        let Tmp_DataAry = [];
        var Tmp_Str="";
        for (i = 0; i < Tmp_sub_store.getCount(); i++) {
            cur_rec = Tmp_sub_store.getAt(i);
            Tmp_Str = "第" + i.toString() + "筆";
            console.log(Tmp_Str+"cur_rec:", cur_rec);
            Tmp_SAPNO = cur_rec.data['SAPNO'];
            Tmp_PN = cur_rec.data['PN'];
            Tmp_QTY = cur_rec.data['QTY'];
            Tmp_EOCND = cur_rec.data['EOCND'];
            Tmp_RMK = cur_rec.data['RMK'];  
            Tmp_sub_np = {
                SAPNO: Tmp_SAPNO,
                PN: Tmp_PN,
                QTY: Tmp_QTY,
                EOCND: Tmp_EOCND,
                RMK: Tmp_RMK,
            }
            console.log(Tmp_Str + "Tmp_sub_np:", Tmp_sub_np);
            Tmp_DataAry.push(Tmp_sub_np);
        }
        console.log("Tmp_DataAry:", Tmp_DataAry);
        let Tmp_DataString = JSON.stringify(Tmp_DataAry);
        console.log("Tmp_DataString:", Tmp_DataString);

        var np = {};
        np = {
            DataString: Tmp_DataString  //Tmp_DataString:  將目前子畫面的資料轉成 JSON字串
        };        

        Ext.getCmp('mySubForm').submit({
            //Ext.Ajax.request({
            url: '../../api/V120502API/DoPRNLIST',
            method: 'POST',
            async: false,
            standardSubmit: true, // 非 Ajax 的方式  //若要傳送檔案至前端, standardSubmit必需設為 true  
            params: np,
        });


2>c# - 將 np 參數的  JSON 字串, 轉 Object 
       public class DataCls
        {
            public string SAPNO { get; set; }         //SAP工號
            public string PN { get; set; }             //件號
            public int  QTY { get; set; }          //數量
            public string EOCND { get; set; }             //EO+CND
            public string RMK { get; set; }             //備註
        }

   [HttpPost]
        public void DoPRNLIST()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            // 1>將 SS_FILES.FBOLD 存成 Local檔案
            //取得目前子畫面的欄位值
            string Tmp_DataString = nvc["DataString"];    
List<DataCls> DataObjList = (List<DataCls>) JsonConvert.DeserializeObject(Tmp_DataString, (typeof(List<DataCls>)));

            string Tmp_SAPNO, Tmp_PN, Tmp_EOCND, Tmp_RMK;
            int Tmp_QTY;
            DataCls DataObj;
            for (var i=0;i<DataObjList.Count;i++)
            {
                DataObj = DataObjList[i];
                Tmp_SAPNO=DataObj.SAPNO;
                Tmp_PN = DataObj.PN;
                Tmp_EOCND= DataObj.EOCND;
                Tmp_RMK = DataObj.RMK;
            }



二.利用現有Table class,將 Table 資料(Object)轉成 JSON字串, 再將 JSON字串轉成 Table(Object)
1>js , 將Object資料(Table)轉成   JSON String , 當參數傳至後端
        let Tmp_DataAry1 = [];
        var Tmp_Str="";
        for (i = 0; i < Tmp_sub_store.getCount(); i++) {
            cur_rec = Tmp_sub_store.getAt(i);
            console.log(Tmp_Str + "cur_rec:", cur_rec);
            Tmp_DataAry1.push(cur_rec.data);
       }
        let Tmp_DataString1 = JSON.stringify(Tmp_DataAry1);
        var np = {};
        np = {
        DataString1: Tmp_DataString1  //Tmp_DataString:  將目前子畫面的資料(Table)轉成 JSON字串
        };        

        Ext.getCmp('mySubForm').submit({
            //Ext.Ajax.request({
            url: '../../api/V120502API/DoPRNLIST',
            method: 'POST',
            async: false,
     standardSubmit: true, // 非 Ajax 的方式  //若要傳送檔案至前端, standardSubmit必需設為 true 
            params: np,
        });



2>cs , 將參數(JSON String)轉成 Table(Object) , 讀取 Object 屬性值
//加入JSON格式轉換參考  , JsonConvert.DeserialObject(,)
using Newtonsoft.Json; 


public void DoPRNLIST()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            //取得目前子畫面的欄位值
string Tmp_DataString1 = nvc["DataString1"];//Tmp_DataString:  將目前子畫面的資料. JSON字串  DataTable DataTable1=(DataTable)JsonConvert.DeserializeObject(Tmp_DataString1, (typeof(DataTable)));

 string Tmp_SAPNO, Tmp_PN, Tmp_EOCND, Tmp_RMK;
            int Tmp_QTY;
            for (var i=0; i<DataTable1.Rows.Count;i++)
            {
                Tmp_SAPNO = DataTable1.Rows[i]["SAPNO"].ToString();
                Tmp_PN = DataTable1.Rows[i]["PN"].ToString();
                Tmp_QTY = int.Parse(DataTable1.Rows[i]["QTY"].ToString());
                Tmp_EOCND = DataTable1.Rows[i]["EOCND"].ToString();
                Tmp_RMK = DataTable1.Rows[i]["RMK"].ToString();
            }