2022年12月12日 星期一

V80201- WebService PDM04 & PDM02 - 顯示在 TMGrid (修改成 T1 & T1C) - ds2T1C

 目的:  V80201- 生工OSM查詢 呼叫 WebService PDM04 & PDM02

處理說明:  1>VisualStudio 2019.IDE - 參考 WebService PDM04
                   2>呼叫 WebService.method
                   3>將 WebService傳回的 ds 顯示在 Grid (改成  T1 & T1C  格式)


 1>VisualStudio 2019.IDE - 參考 WebService PDM04




2>呼叫 WebService.method
// for getWebService_M
        [HttpPost]
        public dynamic getWebService_M()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            string Tmp_PN = myfunc.null2str(nvc["s_PN"]);
            string Tmp_ECNO = myfunc.null2str(nvc["s_ECNO"]);
            string Tmp_PDM_CONFIG = myfunc.null2str(nvc["s_PDM_CONFIG"]);
            string Tmp_PDTP = myfunc.null2str(nvc["s_PDTP"]);
            string Tmp_FACWC = myfunc.null2str(nvc["s_FACWC"]);
            string Tmp_ACNO = myfunc.null2str(nvc["s_ACNO"]);
            string Tmp_MKNO = myfunc.null2str(nvc["s_MKNO"]);
            string Tmp_CNDPROCCODE = myfunc.null2str(nvc["s_CNDPROCCODE"]);
            string Tmp_STAT = myfunc.null2str(nvc["s_STAT"]);
            string Tmp_PROCDT1 = "";
            string Tmp_PROCDT2 = "";
            string Tmp_CHKDT1 = "";
            string Tmp_CHKDT2="";
            //處理完成日期
            //string Tmp_PROCDT1 = myfunc.null2str(nvc["s_PROCDT1"]);
            if (!myfunc.checkisnull(nvc["s_PROCDT1"]))
            {
                Tmp_PROCDT1 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_PROCDT1"]));
            };
            //string Tmp_PROCDT2 = myfunc.null2str(nvc["s_PROCDT2"]);
            if (!myfunc.checkisnull(nvc["s_PROCDT2"]))
            {
                Tmp_PROCDT2 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_PROCDT2"]));
            };
            ////預計編審完成日期
            //string Tmp_CHKDT1 = myfunc.null2str(nvc["s_CHKDT1"]);
            if (!myfunc.checkisnull(nvc["s_CHKDT1"]))
            {
                Tmp_CHKDT1 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_CHKDT1"]));
            };
            //string Tmp_CHKDT2 = myfunc.null2str(nvc["s_CHKDT2"]);
            if (!myfunc.checkisnull(nvc["s_CHKDT2"]))
            {
                Tmp_CHKDT2 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_CHKDT2"]));
            };
            string Tmp_DT1, Tmp_DT2;
            AMM_PDM04.ServiceSoapClient PDM04 = new AMM_PDM04.ServiceSoapClient();
            DataSet ds;
            if (Tmp_STAT=="C")
            {
                Tmp_DT1 = Tmp_PROCDT1;
                Tmp_DT2 = Tmp_PROCDT2;
                ds = PDM04.AMM_PDM04(Tmp_PN, Tmp_ECNO, Tmp_PDM_CONFIG, Tmp_PDTP, Tmp_ACNO,
                                                                  Tmp_FACWC, Tmp_STAT, Tmp_DT1, Tmp_DT2, Tmp_MKNO,
                                                                  Tmp_CNDPROCCODE);
            }
            else
            {
                Tmp_DT1 = Tmp_CHKDT1;
                Tmp_DT2 = Tmp_CHKDT2;
                ds = PDM04.AMM_PDM01(Tmp_PN, Tmp_ECNO, Tmp_PDM_CONFIG, Tmp_PDTP, Tmp_ACNO,
                                                                  Tmp_FACWC, Tmp_STAT, Tmp_DT1, Tmp_DT2, Tmp_MKNO,
                                                                   Tmp_CNDPROCCODE);
            }


//3>將 WebService傳回的 ds 顯示在 Grid  (改成 TMGrid格式  - T1 & T1C )
            myfunc.ds2T1C(ds);
            /*
            DataTable dt = ds.Tables[0];
            dt.TableName = "T1";
            DataTable dt1 = ds.Tables.Add("T1C");
            dt1.Columns.Add("TOTAL", typeof(Int32));
            DataRow dr = ds.Tables["T1C"].NewRow();
            dr["TOTAL"] = dt.Rows.Count;
            ds.Tables["T1C"].Rows.Add(dr);
            */
            return ds;
        }




V80201 – 生工OSM查詢 – 開啟子視窗 - layout:'border' - 顯示子件資料 - 子畫面

 目的: V80201 – 生工OSM查詢 開啟子視窗

處理說明:







1>*.js 開啟子視窗的 source

1>> V80201A.js

Ext.Loader.loadScript({
    url: '../JsFunction/V80201A1.js'
});

//[顯示子件資料]鈕 - 子視窗
function ShowPNBtn_click() {
console.log(" ShowPNBtn_click  step1");
    //按鈕 : [確認] [取消]  - [顯示子件資料]鈕
    var sub_ShowPN_Btns = [
        {
            xtype: 'button', text: '確定', id: 'sub_ShowPN_OkBtn',
            listeners: {
                click: function () {
                    //mysuccessalert("mysub2_確定 ");
                    ShowPNGridDetail();
                }
            }
        },        


2>>V80201A1.js
//[顯示子件明細資料]鈕 - 子視窗Grid
function ShowPNGridDetail() {

    //按鈕 : [確認] [取消]  - [顯示子件資料]鈕
    var sub_ShowPNDetail_Btns = [
        {
            xtype: 'button', text: '瀏覽參考文件', id: 'sub_ShowRef_OkBtn',
            listeners: {
                click: function () {
                    //mysuccessalert("mysub2_確定 ");
                    ShowRefDetail();
                }
            }
        },        
        {
            xtype: 'button', text: '離開', id: 'sub_ShowRef_CancelBtn',
            listeners: {
                click: function () {
                    //mysuccessalert("mysub2_取消");
                    var Tmp_win = this.up("window");
                    if (Tmp_win == undefined) {
                        Ext.Msg.alert("取消時未取到Window Object");
                    }
                    this.up("window").close();
                    this.up("window").destroy();
                }
            }
        },
    ];

// [顯示子件資料]鈕  - Grid子畫面欄位
    var sub_Columns = [
        { header: "", xtype: "rownumberer", width: 50, align: "center", sortable: false },
        { header: "子件件號", dataIndex: "cmp_id", width: 100, TMType: "string" },
        { header: "件號名稱", dataIndex: "itm_name", width: 150, TMType: "string" },
        { header: "數量", dataIndex: "qty", width: 80, TMType: "string" },
        { header: "單位", dataIndex: "units", width: 60, TMType: "string" },
        { header: "製程", dataIndex: "mroutingtype", width: 80, TMType: "string" },
        { header: "製程名稱", dataIndex: "mroutingtype_name", width: 100, TMType: "string" },
        //{ header: "替代件號", dataIndex: "SPN", width: 100, TMType: "string" },
        //{ header: "參考文件", dataIndex: "FLNM", width: 100, TMType: "string" },        
    ];

    var sub_model = [
        { name: "cmp_id" },
        { name: "itm_name" },
        { name: "qty" },
        { name: "units" },
        { name: "mroutingtype" },
        { name: "mroutingtype_name" },
        //{ name: "SPN" },
        //{ name: "FLNM" },        
    ];

    console.log(" ShowPNGridDetail  step2");
    //子件明細 Grid
    var sub_Grid = Ext.create('TMGrid', {
        grid_id: 'sub_Grid',
        columns: sub_Columns,
        autoScroll: true,
        flex: 1,
        store: Ext.create('gridstore', { model: sub_model }),
    });

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

var sub_ShowPNDetail_Flds = [
        {
            type: 'panel', bodyStyle: "background-color:transparent;", border: 5, padding: "1",            
            layout: 'border',            
            items: [
                {
                    xtype: 'panel',
                    id: 'sub_panel1',
                    region: 'north',
                    layout: { type: 'hbox', align: 'stretch' },
                    items: [                      
                        {
                            xtype: "fieldcontainer", fieldLabel: "專案別", labelWidth: 80, flex: 5, border: 2,
                            items: [
                                { id: "sub_PROJID1", name: "sub_PROJID1", xtype: "textfield", width: 80, padding: "0 4 0 0", },
                            ]
                        },
                        {
                            xtype: "button", text: "顯示明細資料", labelWidth: 120, flex: 2, border: 2,
                            handler: function () {
                                var np = {};
                                Ext.getCmp('sub_Grid').store.getProxy().url = '../api/V80201A1API/getsubData';
                                Ext.getCmp('sub_Grid').store.getProxy().extraParams = np; //分頁OK,篩選條件OK
                                Ext.getCmp('sub_Grid').store.load();
                            }                           
                        },

                    ],
                },//end of 專案別
                {
                    xtype: 'panel',
                    id: 'sub_panel2',                    
                    region: 'center',        //自動填滿剩餘空間
                    layout: 'fit',  //如此 Grid 才會充滿 panel2
                    flex: 5,
                    border: 1,
                    items: [sub_Grid]
                },                
] // end of   layout: "vbox", padding: "5", items: [
}  //end of  sub_ShowPN_Flds , items[{
]      //end of  var sub_ShowPN_Flds 

    //"A1" : 區分不同 window_id
    var win1 = getMyWindow("顯示子件明細資料", sub_ShowPNDetail_Flds, sub_ShowPNDetail_Btns, "A1");
    win1.x = 450;
win1.setWidth(400);
    win1.setHeight(300);
    //顯示 sub Grid 資料
    var np = {};
    np["sub_BRP"] = "";
    
    Ext.getCmp('sub_Grid').store.on("load", function (me, records, successful, eOpts) {        
        if (successful) {
            console.log("successful");
            console.log("Ext.getCmp('sub_Grid').store.data", Ext.getCmp('sub_Grid').store.data);
            win1.show();
        }
    }
    );
    Ext.getCmp('sub_Grid').store.getProxy().url = '../api/V80201A1API/getsubData';
    Ext.getCmp('sub_Grid').store.getProxy().extraParams = np; //分頁OK,篩選條件OK
   //Ext.getCmp('sub_Grid').store.clearOnPageLoad = true;
    //Ext.getCmp('sub_Grid').reloadGridData();
    Ext.getCmp('sub_Grid').store.load();
    console.log(" STEP 1 Ext.getCmp('sub_Grid').store.load() ");
//Ext.getCmp('sub_Grid_ptb').hide();

};  // end of function ShowPNBtn_click() {

V20301 - 強迫更新 Source 資料 - Ctrl+F5 - Source

 目的: 當 Source(*.js) 有異動時,強迫更新 Source資料 - Ctrl+F5

處理說明: 1>Ctrl+F5 , 強迫更新 Source 資料







2022年12月11日 星期日

V80201A – OCI_ATTR_ACTION 大於32的允許長度上限 – 顯示子件畫面.挑選欄位值

 目的: V80201A顯示子件畫面.挑選欄位值 – 出現OCI_ATTR_ACTION 大於32的允許長度上限

處理說明:  1>呼叫[Controller+函式名稱] 不可>32字元
                                              Ex:    var win = EditPickx('專案配置', '../api/V80201AAPI/get_sub_PDM_CONFIGPick', ..);
                                    win.show();
                            V80201AAPI_get_sub_PDM_CONFIGPick




1>*.js

                {
                    xtype: "fieldcontainer", fieldLabel: "專案配置", labelWidth: 100, layout: "hbox", items: [
                        { id: "sub_PDM_CONFIG", name: "sub_PDM_CONFIG", xtype: "textfield", width: 100, padding: "0 4 0 0", readOnly: true, fieldCls: "readonly", },
                        {
                            xtype: "button", id: "btn_PDM_CONFIG", name: "btn_PDM_CONFIG", text: "...",
                            handler: function () {
                                var win = EditPickx('專案配置', '../api/V80201AAPI/get_sub_PDM_CONFIGPick', ['PDM_CONFIG'], ['sub_PDM_CONFIG'], J_pickstore_sub_PDM_CONFIG, J_pickcolumns_sub_PDM_CONFIG);
                                win.show();
                            }
                        },

-->
 呼叫[Controller+函式名稱] 不可>32字元
--> 
改成
                                var win = EditPickx('專案配置', '../api/V80201AAPI/get_sub_CONFIGPick', 
即可



2022年12月8日 星期四

V20301– 依欄位值,設定必填欄位 -若工單類型(DT04),則[件號]非必填欄位,否則[件號]為必填欄位

 目的: V20301 – 編輯畫面中, [工單類型]的欄位值,決定[件號]是否為必填欄位

            à 工單類型(DT04),[件號]非必填欄位

處理說明:1>change event 時設定欄位屬性,
                     不設定在 blur event , 因為DoubleClick挑選,不觸發blur event
                     Ext.getCmp("FRTP").on("change", function (me, newValue, oldValue, eOpts) {
                          if (Tmp_FRTP == "DT04") {  //若工單類別為 DT04,則件號/名稱/..允許空白
                             setFieldsCls('myform', ['WBSNO', 'FRTP', 'RQTYAF',], ['FMNO', 'FRTP_', 'MTEMPLYID_', 
                 2>按[編輯]鈕時, 依目前資料.欄位值設定編輯欄位屬性(必填,唯讀)
                  var cur_recs = Ext.getCmp('grid_Single').getSelectionModel().getSelection();
                  var cur_rec = cur_recs[0];
                  var Tmp_FRTP = cur_rec.data['FRTP'].toString();
                  if (Tmp_FRTP == "DT04") {  //若工單類別為 DT04,則件號/名稱/..允許空白
                        setFieldsCls('myform', ['WBSNO', 'FRTP', 'RQTYAF',], ['FMNO', 'FRTP_', 'MTEMPLYID_', 





1>*.js   V20301.js

1>> [工單類別]欄位 .onChange 時,依[工單類別]欄位值,設定必填欄位
    var Tmp_FRTP_Obj = Ext.getCmp("FRTP");
    if (!checkisnull(Tmp_FRTP_Obj)) {
        console.log("工單類別.Object");
        Ext.getCmp("FRTP").on("change", function (me, newValue, oldValue, eOpts) {
            console.log("工單類別.onchange");
            var Tmp_FRTP = Ext.getCmp("FRTP").getValue();
            if (Tmp_FRTP == "DT04") {  //若工單類別為 DT04,則件號/名稱/..允許空白
                console.log("工單類別=DT04");
                setFieldsCls('myform', ['WBSNO', 'FRTP', 'RQTYAF',], ['FMNO', 'FRTP_', 'MTEMPLYID_', 'FRNOAF', 'PAMMNO', 'DLEMPLYID_', 'CREMPLYID_', 'NEMPID_', 'MCODE_', 'ENGP_'], ['FMNO', 'WBSNO', 'FRTP', 'PN', 'C_NM', 'ES_NM', 'NSN', 'RQTYAF', 'SEQOAF', 'PROID', 'CDCODE', 'EONO', 'DTSOR', 'OSM', 'ISSN', 'EIAC_CUS', 'RBTHAF', 'FACWC', 'MTEMPLYID', 'FRNOAF', 'PAMMNO', 'SAPREMARK', 'REMARK', 'OGONOAF', 'RPNOAF', 'NGONOAF', 'MRPNOAF', 'PRNRAF', 'NRCLAF', 'CRNRAF', 'FREDTAF', 'PJDT', 'DLEMPLYID', 'CREMPLYID', 'QDRNO', 'BTDT', 'CSTNM', 'MDDT', 'NEMPID', 'LGROUP', 'CRNO', 'MCODE', 'ENGP']);
            }
            else
                setFieldsCls('myform', ['WBSNO', 'FRTP', 'PN', 'C_NM', 'RQTYAF', 'SEQOAF', 'EIAC_CUS', 'FACWC',], ['FMNO', 'FRTP_', 'MTEMPLYID_', 'FRNOAF', 'PAMMNO', 'DLEMPLYID_', 'CREMPLYID_', 'NEMPID_', 'MCODE_', 'ENGP_'], ['FMNO', 'WBSNO', 'FRTP', 'PN', 'C_NM', 'ES_NM', 'NSN', 'RQTYAF', 'SEQOAF', 'PROID', 'CDCODE', 'EONO', 'DTSOR', 'OSM', 'ISSN', 'EIAC_CUS', 'RBTHAF', 'FACWC', 'MTEMPLYID', 'FRNOAF', 'PAMMNO', 'SAPREMARK', 'REMARK', 'OGONOAF', 'RPNOAF', 'NGONOAF', 'MRPNOAF', 'PRNRAF', 'NRCLAF', 'CRNRAF', 'FREDTAF', 'PJDT', 'DLEMPLYID', 'CREMPLYID', 'QDRNO', 'BTDT', 'CSTNM', 'MDDT', 'NEMPID', 'LGROUP', 'CRNO', 'MCODE', 'ENGP']);
        })
    }

2>>按[編輯]鈕時,  依目前資料.[工單類別]欄位值,設定必填欄位
Ext.getCmp('btn_edit').on("click", function () {
        var cur_recs = Ext.getCmp('grid_Single').getSelectionModel().getSelection();
        if (cur_recs.length == 0) {
            mywarnalert("請先選擇要編輯的資料");
            return false;
        }
        else {
            var cur_rec = cur_recs[0];
            var Tmp_FRTP = cur_rec.data['FRTP'].toString();
            if (Tmp_FRTP == "DT04") {  //若工單類別為 DT04,則件號/名稱/..允許空白
                console.log("工單類別=DT04");
                setFieldsCls('myform', ['WBSNO', 'FRTP', 'RQTYAF',], ['FMNO', 'FRTP_', 'MTEMPLYID_', 'FRNOAF', 'PAMMNO', 'DLEMPLYID_', 'CREMPLYID_', 'NEMPID_', 'MCODE_', 'ENGP_'], ['FMNO', 'WBSNO', 'FRTP', 'PN', 'C_NM', 'ES_NM', 'NSN', 'RQTYAF', 'SEQOAF', 'PROID', 'CDCODE', 'EONO', 'DTSOR', 'OSM', 'ISSN', 'EIAC_CUS', 'RBTHAF', 'FACWC', 'MTEMPLYID', 'FRNOAF', 'PAMMNO', 'SAPREMARK', 'REMARK', 'OGONOAF', 'RPNOAF', 'NGONOAF', 'MRPNOAF', 'PRNRAF', 'NRCLAF', 'CRNRAF', 'FREDTAF', 'PJDT', 'DLEMPLYID', 'CREMPLYID', 'QDRNO', 'BTDT', 'CSTNM', 'MDDT', 'NEMPID', 'LGROUP', 'CRNO', 'MCODE', 'ENGP']);
            }
            else
                setFieldsCls('myform', ['WBSNO', 'FRTP', 'PN', 'C_NM', 'RQTYAF', 'SEQOAF', 'EIAC_CUS', 'FACWC',], ['FMNO', 'FRTP_', 'MTEMPLYID_', 'FRNOAF', 'PAMMNO', 'DLEMPLYID_', 'CREMPLYID_', 'NEMPID_', 'MCODE_', 'ENGP_'], ['FMNO', 'WBSNO', 'FRTP', 'PN', 'C_NM', 'ES_NM', 'NSN', 'RQTYAF', 'SEQOAF', 'PROID', 'CDCODE', 'EONO', 'DTSOR', 'OSM', 'ISSN', 'EIAC_CUS', 'RBTHAF', 'FACWC', 'MTEMPLYID', 'FRNOAF', 'PAMMNO', 'SAPREMARK', 'REMARK', 'OGONOAF', 'RPNOAF', 'NGONOAF', 'MRPNOAF', 'PRNRAF', 'NRCLAF', 'CRNRAF', 'FREDTAF', 'PJDT', 'DLEMPLYID', 'CREMPLYID', 'QDRNO', 'BTDT', 'CSTNM', 'MDDT', 'NEMPID', 'LGROUP', 'CRNO', 'MCODE', 'ENGP']);
        }        
    });





2022年12月7日 星期三

V120501– 顯示子畫面 - [新增領用登記] - Form - 子視窗

目的: V120501– 開啟子視窗 - [新增領用登記]  - Form

處理說明: 1>開啟子視窗 - 
                       var win = getMyWindow("新增領用登記", J_formFields_Sub1mySub1_Btns);        
                  2>定義子視窗_button
                      var mySub1_Btns = [
                         {
                            xtype: 'button', text: '確定', id: 'OkBtn_mySub1',
                           listeners: {
                               click: function () {  ..  }
                           
                  3>定義子視窗_欄位
                      var J_formFields_Sub1 = [
                  {
                           bodyStyle: "background-color:transparent;", border: false, layout: "vbox", padding: "5", items: [
                  {        



1>*.js

 //按鈕 : [新增領用登記] [掃描登記][查詢領用記錄]
    var BtnAry = [
        {
            xtype: 'button', text: '新增領用登記', id: 'UseRegBtn',
            listeners: {
                click: function () {
                    AddRegBtn_click();                    
                }
            }
        },

//新增 [新增領用登記]鈕    
    function AddRegBtn_click() {
        console.log(" 1 inside - AddRegBtn_Click 新增領用登記: ");
        //1>檢核資料是否正確 - 是否有選擇資料        
        var cur_recs = Ext.getCmp('grid_Single').getSelectionModel().getSelection(); //grid select指向選擇的第一筆        
        var cur_rec = cur_recs[0];
        console.log("cur_rec[raw][QTY]:", cur_rec["raw"]["QTY"]);
        var np1 = {};
        np1["CPNO"] = cur_rec["raw"]["CPNO"];
        np1["MATNR"] = cur_rec["raw"]["MATNR"];
        np1["WH"] = cur_rec["raw"]["WH"];
        np1["SP"] = cur_rec["raw"]["SP"];        
        np1["QTY"] = cur_rec["raw"]["QTY"];
        np1["RQTY"] = cur_rec["raw"]["RQTY"];
        np1["UNIT"] = cur_rec["raw"]["UNIT"];
        np1["CHARG"] = cur_rec["raw"]["CHARG"];        
        np1["NOTE"] = cur_rec["raw"]["NOTE"];
        np1["COMPER"] = loginInfo.id;        
        np1["PQTY"] = "";
        //2>顯示子畫面 - [新增領用登記]
        var mySub1_Btns = [
            {
                xtype: 'button', text: '確定', id: 'OkBtn_mySub1',
                listeners: {
                    click: function () {
                        //1>更新資料庫資料(AMM_COMPQTY)
                        var Tmp_Str = "";
                        if (checkisnull(Ext.getCmp("sub1_PQTY").getValue())){
                            Tmp_Str = "領用數量不可空白<br>"
                                            + " 敬請檢核 !!";
                            mywarnalert(Tmp_Str);
                            return;
                        }
                        if (Number(Ext.getCmp("sub1_PQTY").getValue()) > Number(Ext.getCmp("sub1_RQTY").getValue())) {
                            Tmp_Str = "領用數量(" + Ext.getCmp("sub1_PQTY").getValue() + ")不可大於剩餘數量(" + Ext.getCmp("sub1_RQTY").getValue() + ")<br>"
                                + " 敬請檢核 !!";
                            mywarnalert(Tmp_Str);
                            return;
                        }
                        np1["PQTY"] = Ext.getCmp("sub1_PQTY").getValue();
                        np1["SAPNO"] = Ext.getCmp("sub1_SAPNO").getValue();
                        np1["NOTE"] = Ext.getCmp("sub1_NOTE").getValue();
                        np1["COMPER"] = Ext.getCmp("sub1_COMPER").getValue();
                        np1["COMPDT"] = cnow();                      
                        Ext.Ajax.request({
                            method: 'POST',
                            params: np1,
                            async: false, //將非同步功能關閉
                            url: '../../api/V120501API/Add_AMMCOMPQTY_1',
                            success: function (response, opts) {
                                var obj = Ext.decode(response.responseText);
                                var Tmp_Str = obj["Rtn_Msg"];
                                var Tmp_success = obj["success"];
                                if (Tmp_success) {
                                    Tmp_Str = "[新增領用登記]成功 !!<br>"
                                                    + Tmp_Str;
                                    mysuccessalert(Tmp_Str);                                    
                                }
                                else {
                                    Tmp_Str = "[新增領用登記]失敗 !! <BR> "
                                                     + Tmp_Str;
                                    mywarnalert(Tmp_Str);                                    
                                }
                            },
                            failure: function (response, opts) {
                                var obj = Ext.decode(response.responseText);
                                var Tmp_Str = obj["Rtn_Msg"];
                                Tmp_Str = "[新增領用登記]失敗 !!<br>"                                    
                                                + Tmp_Str;
                                mywarnalert(Tmp_Str);                                
                                return;
                            }
                        });  // end of  Ext.Ajax.Request  for Email
                        //2> close windows
                        this.up("window").close();
                        this.up("window").destroy();
                        //3>重新更新 MDBGrid
                        Ext.getCmp("btn_Show").fireHandler();                        
                    }
                }
            },
            {
                xtype: 'button', text: '取消', id: 'CancelBtn_mySub1',
                listeners: {
                    click: function () {
                        this.up("window").close();
                        this.up("window").destroy();
                    }
                }
            },
        ];
        
        var win = getMyWindow("新增領用登記", J_formFields_Sub1, mySub1_Btns);        
        win.onshow = Sub1_onShow(np1);
        win.width = 600;
        win.height = 450;        
        win.show();
    };

2>V120201_json.js  -  子畫面欄位
// [新增領用登記]鈕  
var J_formFields_Sub1 = [
{
bodyStyle: "background-color:transparent;", border: false, layout: "vbox", padding: "5", items: [
{
xtype: "fieldcontainer", fieldLabel: "編號", labelWidth: 100, layout: "hbox", items: [
{ id: "sub1_CPNO", name: "sub1_CPNO", xtype: "textfield", width: 100, padding: "0 4 0 0", readOnly: true, fieldCls: "readonly", },
]
},  //end of 編號
{
xtype: "fieldcontainer", fieldLabel: "件號", labelWidth: 100, layout: "hbox", items: [
{ id: "sub1_MATNR", name: "sub1_MATNR", xtype: "textfield", width: 100, padding: "0 4 0 0", readOnly: true, fieldCls: "readonly", },
]
},   // end of 件號
{
xtype: "fieldcontainer", fieldLabel: "庫房", labelWidth: 100, layout: "hbox", items: [
{ id: "sub1_WH", name: "sub1_WH", xtype: "textfield", width: 100, padding: "0 4 0 0", readOnly: true, fieldCls: "readonly", },
]
}, // end of 庫房
{
xtype: "fieldcontainer", fieldLabel: "數量", labelWidth: 100, layout: "hbox", items: [
{ id: "sub1_QTY", name: "sub1_QTY", xtype: "textfield", width: 100, padding: "0 4 0 0", readOnly: true, fieldCls: "readonly",},
]
},  // end of 數量
{
xtype: "fieldcontainer", fieldLabel: "剩餘數量", labelWidth: 100, layout: "hbox", items: [
{ id: "sub1_RQTY", name: "sub1_RQTY", xtype: "textfield", width: 100, padding: "0 4 0 0", readOnly: true, fieldCls: "readonly", },
]
},  // end of 剩餘數量
{
xtype: "fieldcontainer", fieldLabel: "單位", labelWidth: 100, layout: "hbox", items: [
{ id: "sub1_UNIT", name: "sub1_UNIT", xtype: "textfield", width: 100, padding: "0 4 0 0", readOnly: true,fieldCls: "readonly", },
]
}, // end of 單位
{
xtype: "fieldcontainer", fieldLabel: "批次", labelWidth: 100, layout: "hbox", items: [
{ id: "sub1_CHARG", name: "sub1_CHARG", xtype: "textfield", width: 100, padding: "0 4 0 0", readOnly: true, fieldCls: "readonly", },
] // end of 批次.items
}, // end of 批次
{
xtype: "fieldcontainer", fieldLabel: "儲存位置", labelWidth: 100, layout: "hbox", items: [
{ id: "sub1_SP", name: "sub1_SP", xtype: "textfield", width: 100, padding: "0 4 0 0", readOnly: true, fieldCls: "readonly", },
]
}, // end of 儲存位置
{
xtype: "fieldcontainer", fieldLabel: "領用數量", labelWidth: 100, layout: "hbox", items: [
{ id: "sub1_PQTY", name: "sub1_PQTY", xtype: "textfield", width: 100, padding: "0 4 0 0", fieldCls: "required",  },
]
}, // end of 領用數量
{
xtype: "fieldcontainer", fieldLabel: "領用人員", labelWidth: 100, layout: "hbox", items: [
{ id: "sub1_COMPER", name: "sub1_COMPER", xtype: "textfield", width: 100, padding: "0 4 0 0", fieldCls: "required", },
{ id: "sub1_COMPER_", name: "sub1_COMPER_", xtype: "textfield", width: 100, padding: "0 4 0 0", fieldCls: "readonly", },
{
id: "btn_sub1_COMPER", name: "btn_sub1_COMPER", xtype: "button", text: "...",
//員工編號挑選 , TreeView 挑選    
handler: function () {
console.log(" btn_sub1_COMPER on click");
var treepanel = Ext.create('EmployeeTree', {
id: 'myEmployeeTree',
listeners: {
itemclick: function (view, record, item, index, e) {
if (record.raw.leaf) {
var info = record.raw.text;
var newStr = info.split(":");
Ext.getCmp('sub1_COMPER').setValue(newStr[0]);
Ext.getCmp('sub1_COMPER_').setValue(newStr[1]);
win_tree.close();
}
}
}
});
var win_tree = getWindow('領用人員挑選', treepanel);
win_tree.height = 400;
win_tree.show();
} // end of handler of  btn_sub1_comper
},
]
}, // end of 領用人員
{
xtype: "fieldcontainer", fieldLabel: "領用工號", labelWidth: 100, layout: "hbox", items: [
{ id: "sub1_SAPNO", name: "sub1_SAPNO", xtype: "textfield", width: 100, padding: "0 4 0 0",  },
]
}, // end of 領用工號
{
xtype: "fieldcontainer", fieldLabel: "備註(使用架次)", labelWidth: 100, layout: "hbox", items: [
{ id: "sub1_NOTE", name: "sub1_NOTE", xtype: "textarea", width: 200, padding: "0 4 0 0",  },
]
}, // end of 備註
] // end of   layout: "vbox", padding: "5", items: [
}  //end of  J_formFields_Sub1 , items[{
]      //end of  J_formFields_Sub1 , items[

V80201 – [編審狀態]異動時, 依目前編審狀態改變 radioGroup選項

目的: V80201 – [編審狀態]異動時, 依目前編審狀態改變 radioGroup選項

處理說明: 1>[編審狀態]欄位的 EditPick 的 isSuspendevent 必需設為 false,
                      當[編審狀態]欄位異動時, change event 才會觸發
                  2>設定 radio1.setCheck(true);



2>*.js
{xtype: "fieldcontainer", fieldLabel: "編審狀態", labelWidth: 70, layout: "hbox", flex: 2,
             items: [
          { xtype: "textfield", id: "s_STAT", name: "s_STAT", width: 30, padding: "0 4 0 0", value: "C" },
          { xtype: "textfield", id: "s_STAT_NM_", name: "s_STAT_NM_", width: 80, padding: "0 4 0 0", readOnly: true, fieldCls: "readonly", value: "已核准" },
          {
             xtype: "button", id: "s_btn_STAT", name: "s_btn_STAT", text: "...",
             handler: function () {
                  //isSupendevent=false; 才會觸發 event 
                      var win = EditPickx('編審狀態', '../api/V80201API/get_s_STATPick', ['STAT', 'DESCPT'], ['s_STAT', 's_STAT_NM_'], J_pickstore_s_STAT, J_pickcolumns_s_STAT,
                                                true, false);
                                            win.show();
                                        }
                                    },
                                ]
                            },// end of s_編審狀態                    



Ext.getCmp("s_STAT").on("change", function (me, newValue, oldValue, eopts) {
    //Ext.getCmp("s_STAT").on("blur", function () {
        console.log("狀態 s_STAT change !!");
        var Tmp_STAT = Ext.getCmp('s_STAT').getValue();
        if (Tmp_STAT == "C") {  //已核准 - 處理完成日期
            Ext.getCmp("s_radio1").setValue(true);
            Ext.getCmp("s_radio2").setValue(false);
        }
        else {  //未核准 - 預計編審完成日期
            Ext.getCmp("s_radio1").setValue(false);
            Ext.getCmp("s_radio2").setValue(true);
        }
    });