2023年6月16日 星期五

V120202D - model -如何看 store.model的欄位值 - 子畫面.store 未顯示資料

目的: V120202D - 子畫面.store 未顯示資料 - model -如何看 store.model的欄位值

處理說明: 1>後端.store 有傳回 ds (含 T1 & T1C) , 但是前端未顯示資料
                  2>如何看 store.model 欄位值 , 
                       --> Store.model.setFields.[[Scopes]].0.J_gridmodel.Array(14)





1>*.js  - grid 未顯示資料  - 因為 store.model  --> sub_model 多一[ ]  , 修正即可
var sub_model = [              
  [
            { name: "APNO" },
            { name: "APER" },
            { name: "APDT" },
            {
                name: "QTY",
                convert: function (value, record) { return Ext.util.Format.round(value, 2); }
            },
            { name: "UNIT" },
            { name: "PN" },
            { name: "MATNR" },
            { name: "WH_" },
            { name: "SP_" },
            { name: "MAKTX" },
            { name: "MPKUPP" },
            { name: "MPKUPDT" },
            { name: "STAT" },
            { name: "STAT_" },                    
]
    ];






2023年6月8日 星期四

V20302 - 交修件除帳 - 勾選 – 保留分頁勾選資料 - checkbox - cbxArr

 目的: V20303 - 交修件除帳 - 勾選 保留分頁勾選資料

處理說明:    1>利用    cbxArr : 記錄目前挑選資料.PK    ,
                                                                cbxIdx++;
             cbxArr[cbxIdx] = record.get('FMNO');
                     2>勾選時, 會觸發  columns      renderler    event 
                                               按[ ]時,若目前未勾選
                                                                                     cbxIdx++;
                      cbxArr[cbxIdx] = record.get('FMNO'); 
                                                                       若已勾選
                                     chkd = '';
                    cbxArr[i] = '';
                     3>利用 cbxArr1[ ] 儲存目前勾選資料內容 - Object { FMNO: xxxx, TYPEAF: xxxx}
                  cbxArr1[cbxIdx] = {
                 FMNO: record.get('FMNO'), 
                                              TYPEAF: record.get('TYPEAF'),
AMMNO: record.get('AMMNO'), OGONOAF: record.get('OGONOAF'), NGONOAF: record.get('NGONOAF'), 
SAPNO_: record.get('SAPNO_'), PN_: record.get('PN_'),
C_NM: record.get('C_NM'), SEQOAF: record.get('SEQOAF'), MB1A: record.get('MB1A'), RBTHAF: record.get('RBTHAF'), RPNOAF: record.get('RPNOAF'), MRPNOAF: record.get('MRPNOAF'), 
WBSNO: record.get('WBSNO'), DTSOR: record.get('DTSOR'), RQTYAF: record.get('RQTYAF'), NSN: record.get('NSN'), EIAC_CUS: record.get('EIAC_CUS'), 
FACWC: record.get('FACWC'), FRTP: record.get('FRTP'), STATFM: record.get('STATFM'), STATFM_: record.get('STATFM_'), 
};










1>*.js

var J_columns = [
{ header: "", xtype: "rownumberer", width: 40, align: "center", sortable: false },
{
header: "勾選", dataIndex: "CHECK", width: 40, xtype: 'checkcolumn',
renderer: function (value, metadata, record, rowIndex, colIndex, store) {
var chkd = '';
if (store.currentPage != curPage) {
if ((cbxArr.indexOf(record.get('FMNO'))) >= 0) {
chkd = 'checked';
}
}
else {
var i = cbxArr.indexOf(record.get('FMNO'));
if ((value === 'Y') || (value === true)) {
if (i < 0) {
chkd = 'checked';
cbxIdx++;
cbxArr[cbxIdx] = record.get('FMNO');
cbxArr1[cbxIdx] = {
FMNO: record.get('FMNO'), TYPEAF: record.get('TYPEAF'),
AMMNO: record.get('AMMNO'), OGONOAF: record.get('OGONOAF'), 
                                NGONOAF: record.get('NGONOAF'), SAPNO_: record.get('SAPNO_'),
                                PN_: record.get('PN_'),C_NM: record.get('C_NM'), 
                                SEQOAF: record.get('SEQOAF'), MB1A: record.get('MB1A'), 
                                RBTHAF: record.get('RBTHAF'), RPNOAF: record.get('RPNOAF'), 
                                MRPNOAF: record.get('MRPNOAF'), WBSNO: record.get('WBSNO'), 
                                DTSOR: record.get('DTSOR'), RQTYAF: record.get('RQTYAF'), 
                                NSN: record.get('NSN'), EIAC_CUS: record.get('EIAC_CUS'), 
FACWC: record.get('FACWC'), FRTP: record.get('FRTP'), 
                                STATFM: record.get('STATFM'), STATFM_: record.get('STATFM_'), 
};
console.log("cbxArr[cbxIdx]=", record.get('FMNO'));
}
else {
chkd = '';
cbxArr[i] = '';
cbxArr1[i] = {};
}
}
else {
if (i >= 0) {
chkd = '';
cbxArr[i] = '';
cbxArr1[i] = {};
}
}
}
var cbx = "<input  type='checkbox'  name='" + (record.get('FMNO') + "_V20302") + "'   " + chkd + " >";
return cbx;
},
},


2023年5月31日 星期三

V120202 -getUrlStr() - url傳回字串 - checkRtnOk() – [全部選取] [全部取消] – 允許分頁選取保留 - checkbox - url傳回值

 目的: V120202 – [全部選取] [全部取消] – 允許分頁選取保留 -checkbox

處理說明:  1>[全部選取]鈕
                                           1>將目前 store.CHECK   欄位均設為    true                                          
                                           2>cbxAry  :   將所有的  PK(APNO)     存入  cbxAry                                           


1>*. js
//全部選取 , 將所有資料 PK 加入 cbxArr 
    function SelAllBtn_click() {
        var Tmp_PKStr = "";  //所有資料 PK 字串, 以 , 分隔
        var Tmp_url = "../../api/V120202API/getALLPKStr";
        var np = grid.store.getProxy().extraParams;
        var rtn = getUrlStr(Tmp_url, np, "全部選取鈕");
        if (checkRtnOK(rtn)) {
              set_PgAll();
             var Tmp_PKStr = rtn;
            setCbxArr(Tmp_PKStr);            
    }  // end of SelAllBtn_click


//全部取消 , 將所有資料 PK 加入 cbxArr 
    function unSelAllBtn_click() {
        var Tmp_PKStr = "";  //所有資料 PK 字串, 以 , 分隔
        var Tmp_url = "../../api/V120202API/getALLPKStr";
        var np = grid.store.getProxy().extraParams;
        var rtn = getUrlStr(Tmp_url, np, "全部取消鈕");
        if (checkRtnOK(rtn)) {
            //set_AllUn();            
            set_PgUn();
            resetCbxArr();
        } // end of chkRtnOk(rtn)
    }  // end of unSelAllBtn_click

2>*.cs
//取所有資料.PKStr , 並以 , 分隔
        [HttpPost]
        public dynamic getALLPKStr()
        {            
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            //DataSet ds = getGridDataPage();
            //return ds;
            string Tmp_LCAA = nvc["s_LCAA"];
            string Tmp_ASN = nvc["s_ASN"];
            string Tmp_MATNR = nvc["s_MATNR"];
            string Tmp_APNO = nvc["s_APNO"];
            string Tmp_APER = nvc["s_APER"];

            string Tmp_APDT1 = "";   //申請日期  - 起迄
            string Tmp_APDT2 = "";   //申請日期  - 起迄
            if (!myfunc.checkisnull(nvc["s_APDT1"]))
            {
                Tmp_APDT1 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_APDT1"]));
            };
            if (!myfunc.checkisnull(nvc["s_APDT2"]))
            {
                Tmp_APDT2 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_APDT2"]));
            };

            //單況(A/B/C/D/Z)
            string Tmp_STAT = nvc["s_STAT"];


            OracleCommand cmd = new OracleCommand();
            string Tmp_Sql = " SELECT  RNK,     "
                                       + "   APNO,LCAA,ASN,SAPNO,PN,MATNR,RPN,QTY,UNIT,"
                                       + "    APER,APDT,STAT,MPKUPP,MPKUPDT,COMPER,COMPDT,DELTP,DELTDT  "
                                       + "  FROM  ( "
                                      + "   select  dense_rank()  over(order by  APNO) as RNK,"
                                                  + "   APNO,LCAA,ASN,SAPNO,PN,MATNR,RPN,QTY,UNIT,  "
                                                  + "   APER,APDT,STAT,MPKUPP,MPKUPDT,COMPER,COMPDT,DELTP,DELTDT  "
                                      + "  FROM  AMM_COMQ "
                                      + "  Where  1=1  ";

            //機位
            if (!myfunc.checkisnull(Tmp_LCAA))
            {
                Tmp_Sql = Tmp_Sql + " AND   LCAA  = " + myfunc.AA(Tmp_LCAA);
            };
            //機號
            if (!myfunc.checkisnull(Tmp_ASN))
            {
                Tmp_Sql = Tmp_Sql + " AND   ASN= " + myfunc.AA(Tmp_ASN);
            };
            //物料編號
            if (!myfunc.checkisnull(Tmp_MATNR))
            {
                Tmp_Sql = Tmp_Sql + " AND   (       (MATNR  LIKE " + myfunc.AA("%" + Tmp_MATNR + "%") + ")"
                                                                 + "  OR  (MATNR IN (  SELECT  SPN  "
                                                                                                   + " FROM    AMM_SPN "
                                                                                                   + " WHERE  PN LIKE " + myfunc.AA("%" + Tmp_MATNR + "%")
                                                                                                   + "  AND       STATUS='A'   ) )"
                                                                + ")";
            };
            //申請單號
            if (!myfunc.checkisnull(Tmp_APNO))
            {
                Tmp_Sql = Tmp_Sql + " AND   APNO  = " + myfunc.AA(Tmp_APNO);
            };
            //申請人
            if (!myfunc.checkisnull(Tmp_APER))
            {
                Tmp_Sql = Tmp_Sql + " AND   APER= " + myfunc.AA(Tmp_APER);
            };

            string Tmp_Sql1 = "";
            //申請日期 - 起  - 迄
            if ((!myfunc.checkisnull(Tmp_APDT1)) || (!myfunc.checkisnull(Tmp_APDT2)))
            {
                if (!myfunc.checkisnull(Tmp_APDT1))
                {
                    Tmp_Sql1 = Tmp_Sql1 + "  AND        APDT>=" + myfunc.AA(Tmp_APDT1);
                };
                if (!myfunc.checkisnull(Tmp_APDT2))
                {
                    Tmp_Sql1 = Tmp_Sql1 + "  AND        APDT<=" + myfunc.AA(Tmp_APDT2);
                }
                Tmp_Sql = Tmp_Sql + Tmp_Sql1;
            };


            //單況 : 待撥料/撿料中/撿料完成/已領用/已撤銷(A/B/C/D/Z)  全部: ALL - radioboxgroup
            if (!myfunc.checkisnull(Tmp_STAT))
            {
                switch (Tmp_STAT)
                {
                    case "ALL":  //全部
                        Tmp_Sql = Tmp_Sql;
                        break;
                    default:
                        Tmp_Sql = Tmp_Sql + " AND   STAT=" + myfunc.AA(Tmp_STAT);
                        break;
                }
            };

            Tmp_Sql = Tmp_Sql + "   )   ";

            cmd.CommandText = Tmp_Sql;
            string countSql = " SELECT COUNT(*) as total FROM (" + Tmp_Sql + ")";
            //匯出時 ,取全部資料, par_paging =false , 取全部資料
            DataSet ds = getDataTable(cmd, countSql, false);

            int Tmp_Cnt = ds.Tables["T1"].Rows.Count;
            var Tmp_PKStr = "";
            for (var i=0; i<Tmp_Cnt;i++)
            {
                DataRow dr = ds.Tables["T1"].Rows[i];
                Tmp_APNO = dr["APNO"].ToString();
                Tmp_PKStr = Tmp_PKStr + Tmp_APNO + ",";
            }
            if (Tmp_PKStr != "")
            {
                Tmp_PKStr = Tmp_PKStr.TrimEnd(',');
            }
            return Tmp_PKStr;
        }

js 設定中斷點設定 - breakpoint -javascript

目的: 在前端 js 設定中斷點 , breakpoint  - 啟用 前端 breakpoint

處理說明: 1>在 Visual Studio 設定 breakpoint - 啟用
                      偵錯 --> 選項 --> 一般 --> [V]為 ASP.NET 啟用 JavaScript 偵錯
                  2>設定之後, 即可在 *.js 啟用中斷點偵錯










V120202 – 勾選 checkbox , 分頁時可以保留勾選 - old

 目的: V120202 – 勾選 checkbox , 分頁時可以保留勾選 

處理說明: 1>*_json.js  利用 cbxAry 記錄目前勾選資料的 PK(APNO)
                       var cbxArr = []; //記錄目前 PK Array ,(PK:APNO)
                       var cbxIdx = -1; //記錄目前 cbxAry 的 index
                        var curPage = 0; //記錄目前 Page (store)
                  2>*_json.js , columns 新增  CHECK欄位, onClick 會觸發 renderer event ,
                       若原本未勾選, 則變勾選, 若原本勾選,則變未勾選
                       var J_columns = [{
               header: "勾選", dataIndex: "CHECK", width: 40, xtype: 'checkcolumn',
        renderer: function (value, metadata, record, rowIndex, colIndex, store) {
                                :
                                 var i = cbxArr.indexOf(record.get('APNO'));
if ((value === 'Y') || (value === true)) {
if (i < 0) {
chkd = 'checked';
cbxIdx++;
cbxArr[cbxIdx] = record.get('APNO');
}
else {
chkd = '';
cbxArr[i] = '';
}
}
               3>*.js  , 若 store.onload 則記錄目前的 頁次(store.currentPage),且顯示 CHECK是否勾選
                         curPage=gridstore.currentPage;   
                         var idx = cbxArr.indexOf(rec.data['APNO']);
                          if (idx >= 0) {  rec.data['CHECK'] = true; }
                          else {  rec.data['CHECK'] = false; }






V120202 – radioGroup 排成2行 – 垂直 , columns - V80202F – 列印- radioGroup : 橫向排列 layout: ‘hbox’

 目的: V120202 – radioGroup 排成2 垂直

           V80202F – 列印- radioGroup : 橫向排列 layout: ‘hbox’

處理說明: 1> V120202 – radioGroup 排成2 垂直 {
                                xtype: 'radiogroup', fieldLabel: '單況', labelWidth: 100,
                                //layout: 'vbox',  //vbox:直向  , hbox: 橫向 , 不可設為 vbox,否則仍會排成一行
                                vertical: true,    columns: [50, 50],
                                id: 's_STAT', 
                                items: [
                                    {
                                        boxLabel: '待撥料',
                                        name: 's_STAT',
                                        inputValue: 'A',
                                        width: 70,
                                        //checked: true,
                                        //id: 's_checkbox1'
                                    }, .....
                           






1>*.js
 //交機現況: 在廠機/已交機/全部
    var cmp_ARPSTS = get_cmp_rdgrp1('交機現況', 'sub_ARPSTS',   100,'hbox');
    var cmp_ARPSTS1 = get_cmp_rd0('在廠機', 'sub_ARPSTS', 80, '1');
    var cmp_ARPSTS2 = get_cmp_rd0('已交機', 'sub_ARPSTS', 80, '2');
    var cmp_ARPSTS3 = get_cmp_rd0('全部', 'sub_ARPSTS', 80, '3');
    cmp_ARPSTS.items.push(cmp_ARPSTS1, cmp_ARPSTS2, cmp_ARPSTS3);    
    cmp_ARPSTS1.checked = true;

2>myfunc.js - get_cmp_rdgrp1
//get_cmp_rdgrp1 - 取得 checkgroup 元件,
//par_layout: 'vbox' - 直向  radio   , 'hbox' : 橫向 radio
function get_cmp_rdgrp1(par_caption, par_id, par_l_width, par_layout, par_flex) {
    if (checkisnull(par_flex)) {
        par_flex = 10;
    }
    if (checkisnull(par_layout)) {
        par_layout = 'vbox';  //預設直向 radio
    }
    var rtn_cmp =
    { //已完工, 未完工 --> 兩者不能同時勾選
        xtype: 'radiogroup', fieldLabel: par_caption,
        labelWidth: par_l_width, 
        layout: par_layout,        
        width: '100%',
        id: par_id,        
        items: [],
    }
    return rtn_cmp;
}


2023年5月25日 星期四

V20302 – [資料顯示] – 全部資料顯示在同一頁, 以便[匯出Excel] - 全部勾選 - 匯出所有的資料

 目的: V20302 –[資料顯示]–全部資料顯示在同一頁, 顯示所有資料

           以便[匯出Excel] - 全部勾選 - 匯出所有的資料

處理說明:   1>所有資料筆數 : gridstore.data.length;
                    2>toolbar.Paging : 顯示資料更新,  




1>*.js
                           var gridstore = Ext.getCmp('grid_Single').store;
                            //console.log('2  gridstore: ', gridstore);
                            gridstore.getProxy().url = '../api/V20302API/getGridData_M?par_paging=false';
                            gridstore.getProxy().extraParams = np; //分頁OK,篩選條件OK
                            var Tmp_cnt = 0;
                            gridstore.on('load', function () {
                                console.log("onload  gridstore.data.length:", gridstore.data.length);
                                Ext.getCmp('grid_Single').store.pageSize = gridstore.data.length;
                                console.log("Ext.getCmp(grid_ptb): ", Ext.getCmp('grid_ptb'));
      console.log(" 0 Ext.getCmp(grid_ptb).afterPageText: ", Ext.getCmp('grid_ptb').afterPageText);        
                                Ext.getCmp('grid_ptb').updateInfo();            
                                // toolbar.Paging  顯示  頁,共1頁                    
                                Tmp_cnt = Tmp_cnt + 1;
                                if (Tmp_cnt<=1)
                                   Ext.getCmp('grid_ptb').moveLast();

                            })