2023年1月2日 星期一

Visual Studio IDE 環境設定 - 背景顏色/字型大小/字型顏色

目的:  Visual Studio IDE 環境設定 - 背景顏色/字型大小/字型顏色

操作說明: 1>由工具 --> 選項 --> 環境

                  2>[字型與色彩]

                  3>由工具 --> 選項 --> 匯入和匯出設定








2>Visual Studio IDE 環境設定匯入  - 工具à匯入和匯出設定












3>目前 Visual Studio 2019 的環境設定檔, 範例放置路徑如下:
D:\A_PROJ\000_維航處\01_教育訓練\0_VisualStudio2019\000_IDE_Setting\microed_202010.vssettings\microed_202010.vssettings

2022年12月26日 星期一

V80201- 請稍候訊息 - 1>Label方式 2>LoadMask方式

目的:  V80201- 顯示 請稍候訊息

處理說明: 1>畫面上,以 label 顯示訊息 - 請稍候  - label.setVisible(true)  ;
                  2>載入完成時, label.setVisible(false)  ;
                  3>Ext.Ajax 的  async 必需為 true, 異步式處理, 即去後端處理時,前端仍需繼續處理
                       ,如此前端才會顯示等待訊息




一.以 Label 方式處理
1>*.js
  //資料處理中..,請稍候
                {
                    xtype: 'label',
                    id: 'waitlbl1',
                    text: '.',
                    hidden: false,
                }, // end of 請稍候
                {
                    xtype: 'label',
                    id: 'waitlbl',

                    text: '資料處理中,請稍候...',
                    hidden: true,
                    style: {color: 'blue',}

                }, // end of 請稍候

{
            xtype: 'button', text: '確定', id: 'sub_ShowPN_OkBtn',
            listeners: {
                click: function () {
                    //mysuccessalert("mysub2_確定 ");
                    Ext.getCmp("waitlbl").setVisible(true);
                    //Ext.getCmp("waitlbl").setX(100);                                        
                    //myMask.show();                    
                    ShowPNGridDetail(par_PN, par_ECNO, par_CNDPROCCODE, par_ASN);
                }
            }
        },        


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('waitlbl').setVisible(false);            
            //myMask.unmask();                    
            //myMask.hide();                                
        }
    }

二.以 LoadMask方式處理

目的:  V80201- 顯示 請稍候訊息  - 以 LoadMask 方式

處理說明: 1>畫面上,以 LoadMask 顯示訊息 - 請稍候  - Ext.getCmp("myMask").show();

                  2>載入完成時, - Ext.getCmp("myMask").hide();





1>*.js
var myMask = new Ext.LoadMask(Ext.getBody(), {
     msg: '資料處理中,請稍候...',
     id: 'myMask',

});

//顯示訊息
Ext.getCmp("myMask").show();

//隱藏訊息
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("myMask").hide();
        }
    }
    );






2022年12月13日 星期二

V80201 – 按鈕.預設值: disabled, 若有資料,才設為 enabled - 按鈕.Enabled

 目的: V80201 – 按鈕.預設值: disable,  若有資料,才設為 enabled



1>*.js


//按鈕 : [顯示子件資料] [顯示施工步序]
var BtnAry = [
{
xtype: 'button', text: '顯示子件資料', id: 'ShowPNBtn', disabled : true,
listeners: {
click: function () {
var cur_recs = Ext.getCmp("grid_Single").getSelectionModel().getSelection();
if (cur_recs.length == 0) {
var Tmp_Str = "請先選擇要查詢的件號資料";
mywarnalert(Tmp_Str);
return;
}
else {
var cur_rec = cur_recs[0];
var Tmp_PN = cur_rec.data["ITM_ID"];
var Tmp_ECNO = cur_rec.data["EC_MC_ID"];
var Tmp_CNDPROCCODE = cur_rec.data["DISPOSITION_CODE"];
var Tmp_ASN = cur_rec.data["CUT_IN"];
ShowPNBtn_click(Tmp_PN,Tmp_ECNO,Tmp_CNDPROCCODE,Tmp_ASN);
}
} // end of click
} // end of listeners
}, // end of 顯示子件資料
{
xtype: 'button', text: '顯示施工步序', id: 'ShowSTEPBtn', disabled: true,
listeners: {
click: function (me, e, eOpts) {
console.log(" 1 顯示施工步序: ");
var cur_recs = Ext.getCmp("grid_Single").getSelectionModel().getSelection();
if (cur_recs.length == 0) {
var Tmp_Str = "請先選擇要查詢的件號資料";
mywarnalert(Tmp_Str);
return;
}
else {
var cur_rec = cur_recs[0];
var Tmp_PN = cur_rec.data["ITM_ID"];
var Tmp_ECNO = cur_rec.data["EC_MC_ID"];
var Tmp_CNDPROCCODE = cur_rec.data["DISPOSITION_CODE"];
var Tmp_ASN = cur_rec.data["CUT_IN"];
ShowSTEPBtn_click(Tmp_PN, Tmp_ECNO, Tmp_CNDPROCCODE, Tmp_ASN);
}
}
} // end of listener
}, // end of 顯示施工步序
];



  gridstore.on("load", function () {
                                console.log("gridstore.onload !!");
                                if (gridstore.data.getCount() == 0) {
                                    Ext.getCmp("ShowPNBtn").setDisabled(true);
                                    Ext.getCmp("ShowSTEPBtn").setDisabled(true);
                                    mywarnalert("無符合條件的資料!!");
                                }
                                else {
                                    Ext.getCmp("ShowPNBtn").setDisabled(false);
                                    Ext.getCmp("ShowSTEPBtn").setDisabled(false);
                                }

V80201- 子視窗顯示資料,顯示第1筆的欄位值 -select(0)無效

 目的: V80201- 子視窗顯示資料,顯示第1筆的欄位值

處理說明: 1>select(0)無效
                   2>改用 grid_store.data.items[0].data["specdata1"];



1>*.js

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);
            var grid_store = Ext.getCmp('sub_Grid').store;
            if (grid_store.getCount() > 0) {
                //若有資料,則預設選擇第一筆
                var Tmp_Str = grid_store.data.items[0].data["specdata1"];
                Ext.getCmp("sub_specdata1").setValue(Tmp_Str);
                /*
                //select(0) 無效
                console.log("count>0");
                Ext.getCmp('sub_Grid').getSelectionModel().select(0);                
                Ext.getCmp('sub_Grid').fireEvent("selectionchange");
                */
            }
            win1.show();
        }
    }
    );



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() {