2024年7月12日 星期五

V20304D – 確認轉TLS – 將所勾選的資料,存入StringList , 再轉成字串 -List

 目的: V20304D – 確認轉TLS – 將所勾選的資料,存入StringList , 再轉成字串

處理說明:    1>>宣告 List<string> 儲存 string List
                                                  List<String> List_OGONOAF = new List<string>();
                    2>加入 string List 
                          for (var i = 0; i < dt1.Rows.Count; i++)
                         {
                               if (List_OGONOAF.IndexOf(Tmp_OGONOAF) == -1)
                                 {  List_OGONOAF.Add(Tmp_OGONOAF); }
                     3> StringList 轉成字串
           //將勾選的[提領編號][件號][交修件號存入 cookie V20304D_content6
            string Tmp_List_OGONOAF= String.Join(", ", List_OGONOAF.ToArray());


1>*.cs

//1>>宣告 List<string> 儲存 string List
    List<String> List_OGONOAF = new List<string>();
    List<String> List_PN = new List<string>();
    List<String> List_RPNOAF = new List<string>();
 
//2>加入 string List 
for (var i = 0; i < dt1.Rows.Count; i++)
    {
  if (List_OGONOAF.IndexOf(Tmp_OGONOAF) == -1)
      {  List_OGONOAF.Add(Tmp_OGONOAF); }
      if (List_RPNOAF.IndexOf(Tmp_RPNOAF) == -1)
      {  List_RPNOAF.Add(Tmp_RPNOAF); }
      if (List_PN.IndexOf(Tmp_PN) == -1)
      {  List_PN.Add(Tmp_PN); }
}
     //3> StringList 轉成字串
//將勾選的[提領編號][件號][交修件號存入 cookie V20304D_content6
      string Tmp_List_OGONOAF= String.Join(", ", List_OGONOAF.ToArray());
      string Tmp_List_PN = String.Join(", ", List_PN.ToArray());
      string Tmp_List_RPNOAF = String.Join(",", List_RPNOAF.ToArray());
      string Tmp_V20304D_content6 = "提領編號:" + Tmp_List_OGONOAF + "\r\n"
                                + "維修件號:" + Tmp_List_PN + "\r\n"
                                + "交修單號:" + Tmp_List_RPNOAF + "\r\n";
      MyCookie1 = new HttpCookie("V20304D_content6", HttpUtility.UrlEncode(Tmp_V20304D_content6));
      HttpContext.Current.Response.Cookies.Add(MyCookie1);
      HttpContext.Current.ApplicationInstance.CompleteRequest();

2024年7月7日 星期日

V20304A – 1>將空字串維持空字串, 小數的位數維持2位小數 – 即 model 的數值不轉換(convert) - renderer時若為小數,則格式化

目的: V20304A – 1>將空字串維持空字串, 小數的位數維持2位小數
                                  – 即 model 的數值不轉換(convert)
                             2>將空字串變成 0.00,小數的位數維持2位小數 – 即 model的數值,需轉換
                             3>輸出的數量,小數的格式(0000.00) – 即columns的 renderer的數值,需格式化

處理說明: 1>將空字串維持空字串,  - model
                         {  name: "RQHR",
                            //convert: function (value, record) { return Ext.util.Format.round(value, 2); }
                           },
                     2>小數欄位輸出的格式 : 0000.00
                        {
        header: "需求工時", dataIndex: "RQHR", width: 70, sortable: false, align: "right", TMType: "float",
        renderer: Ext.util.Format.numberRenderer('0,000.00'),
        editor: { xtype: 'textfield', allowBlank: true }, //允許空白
    },


1>V20304A_JSON.js
var sub_model = [
    { name: "FMNO" },
    { name: "AMINO" },
    { name: "ITM" },
    { name: "ITMNO" },
    { name: "WKDESC" },
    {
        name: "STDHR",
        convert: function (value, record) { return Ext.util.Format.round(value, 2); }
    },
    {
        name: "RQHR",
        //convert: function (value, record) { return Ext.util.Format.round(value, 2); }
    },
    { name: "REMARK" },
    { name: "PNSHTNO" }
];

var sub_Columns = [
    { header: "", xtype: "rownumberer", width: 40, align: "center", sortable: false },
    //{ header: "系統件單號", dataIndex: "FMNO", width: 130, sortable: false, TMType: "string" },
    { header: "AMM項次", dataIndex: "AMINO", width: 80, sortable: false, TMType: "string" },
    //{ header: "流水序號", dataIndex: "ITM", width: 50, sortable: false, TMType: "string" },
    { header: "項次", dataIndex: "ITMNO", width: 70, sortable: false, TMType: "string" },
    { header: "工作項目", dataIndex: "WKDESC", width: 150, sortable: false, TMType: "string" },
    { header: "標準工時", dataIndex: "STDHR", width: 70, sortable: false, align: "right", TMType: "float", renderer: Ext.util.Format.numberRenderer('0,000.00') },
    {
        header: "需求工時", dataIndex: "RQHR", width: 70, sortable: false, align: "right", TMType: "float",
        renderer: Ext.util.Format.numberRenderer('0,000.00'),
        editor: { xtype: 'textfield', allowBlank: true }, //允許空白
        //editor: 'textfield',
    },
    {
        header: "備註", dataIndex: "REMARK", width: 250, sortable: false, TMType: "string",
        editor: { xtype: 'textfield', allowBlank: true }, //允許空白
        },
    //{ header: "件號專用表單編號", dataIndex: "PNSHTNO", width: 500, sortable: false, TMType: "string" }
];

V20304 – 拆檢結果登錄 – Detail 顯示 Memo欄位值

 目的: V20304 – 拆檢結果登錄 – Detail 顯示 Memo欄位值
處理說明: 1>Detail_Panel 加入Memo欄位靠右
                       var cmp_panel_NOTEAR = get_cmp_panel1(300);
                       cmp_panel_NOTEAR.title = '檢測結果說明';
                       cmp_panel_NOTEAR.dock = 'right';
                       cmp_panel_NOTEAR.layout = 'fit';    
                       var cmp_textarea_NOTEAR = get_cmp_txtarea0("memo_NOTEAR", 300);
                        cmp_textarea_NOTEAR.readOnly = true;
                        cmp_panel_NOTEAR.items.push(cmp_textarea_NOTEAR);
                       Ext.getCmp('grid_D').addDocked(cmp_panel_NOTEAR);
                 2>設定Memo欄位值 
                      Ext.getCmp("grid_D").on('selectionchange', function (me, eOpts) {
                      var cur_recs = Ext.getCmp('grid_D').getSelectionModel().getSelection();
                      if (cur_recs.length > 0) {
                           var cur_rec = cur_recs[0];
                           var Tmp_NOTEAR = cur_rec.data['NOTEAR'].toString();
                           console.log("cmp_textarea_NOTEAR 1:", cmp_textarea_NOTEAR);
                          Ext.getCmp("memo_NOTEAR").setValue(Tmp_NOTEAR);
                          //自行宣告的Object    cmp_panel_NOTEAR 並沒有  Ext.的函式 , Ex: .setValue();
                          //cmp_textarea_NOTEAR .setValue(Tmp_NOTEAR);
                       }
                         else {
                                   Ext.getCmp("memo_NOTEAR").setValue("");
                                 }
                    });  //end of Ext.getCmp("grid_D").on('selectionchange'




2024年7月4日 星期四

V20304 - 檢測結果登錄 – 如何在Detail Tab – Grid右邊 加入Memo欄位[檢測結果]欄位

 目的: V20304 - 檢測結果登錄 如何在Detail Tab – Grid右邊 加入Memo欄位[檢測結果]欄位

處理說明:




V20304A - 工時提列 - Grid的 Columns 不對 - 相同變數名稱被覆蓋

 目的: V20304A - 工時提列 - Grid的 Columns 不對 - 相同變數名稱被覆蓋

處理說明:  1>JavaScript 的相同變數宣告, 相同變數名稱, 會被最新的變數覆蓋
                       V20304A_JSON.js 定義  sub_Columns
                       V20304D1_JSON.js 也定義  sub_Columns
                   2>因V20304D1_JSON.js 最後載進來
                       所 sub_Columns 會覆蓋 V20304A_JSON.js 的 sub_Columns
                   3>若同時載進來的子程式(V20304*.js )
                       其全域的變數名稱(*_JSON.js)不可重覆, 以免彼此互相覆蓋
                   4>全域變數名稱取不同名稱, 即可解決該問題
                       V20304A_JSON.js 定義  sub_Columns_V20304A
                       V20304D1_JSON.js 也定義  sub_Columns_V20304D1




1>*.js
Ext.Loader.loadScript({
    url: '../JsFunction/V20304_JSON.js',
    onLoad: function(){
       Ext.syncRequire('TM.TMMDViewEdit');
    }
});

//將載入 V20304A/B/C/D/D1/E/F/H.js , 並載入V20304A_JSON.js  V20304D1_JSON.js
Ext.Loader.loadScript({ url: '../JsFunction/myfunc.js' });
Ext.Loader.loadScript({ url: '../JsFunction/V20304A.js' });  //工時提列
Ext.Loader.loadScript({ url: '../JsFunction/V20304B.js' }); //單筆匯出
Ext.Loader.loadScript({ url: '../JsFunction/V20304C.js' }); //單筆匯入
Ext.Loader.loadScript({ url: '../JsFunction/V20304D.js' }); //確認轉TLS
Ext.Loader.loadScript({ url: '../JsFunction/V20304E.js' });  //批次匯出
Ext.Loader.loadScript({ url: '../JsFunction/V20304F.js' });   //批次匯入
Ext.Loader.loadScript({ url: '../JsFunction/V20304H.js' });   //維修附檔

1>>V20304A.js
Ext.Loader.loadScript({ url: '../JsFunction/myfunc.js', });
Ext.Loader.loadScript({ url: '../GUITemplate/EmployeeTree.js' });
Ext.Loader.loadScript({ url: '../JsFunction/V20304A_JSON.js',});

2>>V20304A_JSON.js  - 宣告的變數為 全域變數
// [工時提列]鈕  - Grid子畫面欄位 - AMM_AR
var sub_model = [
    { name: "FMNO" },
    { name: "AMINO" },
    { name: "ITM" },
    { name: "ITMNO" },
    { name: "WKDESC" },
    {
        name: "STDHR",
        convert: function (value, record) { return Ext.util.Format.round(value, 2); }
    },
    {
        name: "RQHR",
        convert: function (value, record) { return Ext.util.Format.round(value, 2); }
    },
    { name: "REMARK" },
    { name: "PNSHTNO" }
];

var sub_Columns = [
    { header: "", xtype: "rownumberer", width: 40, align: "center", sortable: false },
    //{ header: "系統件單號", dataIndex: "FMNO", width: 130, sortable: false, TMType: "string" },
    { header: "AMM項次", dataIndex: "AMINO", width: 80, sortable: false, TMType: "string" },
    //{ header: "流水序號", dataIndex: "ITM", width: 50, sortable: false, TMType: "string" },
    { header: "項次", dataIndex: "ITMNO", width: 70, sortable: false, TMType: "string" },
    { header: "工作項目", dataIndex: "WKDESC", width: 150, sortable: false, TMType: "string" },
    { header: "標準工時", dataIndex: "STDHR", width: 70, sortable: false, align: "right", TMType: "float", renderer: Ext.util.Format.numberRenderer('0,000.00') },
    {
        header: "需求工時", dataIndex: "RQHR", width: 70, sortable: false, align: "right", TMType: "float", renderer: Ext.util.Format.numberRenderer('0,000.00'),
        editor: { xtype: 'textfield', allowBlank: true }, //允許空白
        //editor: 'textfield',
    },
    {
        header: "備註", dataIndex: "REMARK", width: 250, sortable: false, TMType: "string",
        editor: { xtype: 'textfield', allowBlank: true }, //允許空白
        },
    //{ header: "件號專用表單編號", dataIndex: "PNSHTNO", width: 500, sortable: false, TMType: "string" }
];


3>>V20304D.js
Ext.Loader.loadScript({ url: '../JsFunction/myfunc.js' });
Ext.Loader.loadScript({ url: '../JsFunction/V20304D1.js' });

4>>V20304D1.js
Ext.Loader.loadScript({ url: '../GUITemplate/EmployeeTree.js' });
Ext.Loader.loadScript({ url: '../JsFunction/V20304D1_JSON.js',});

5>V20304D1_JSON.js
// JavaScript source code
var sub_Fields = [
{ name: "EMPLYNM" },
{ name: "NOTES_MAIL" },
];
var sub_Columns = [
{ header: "姓名", dataIndex: "EMPLYNM", width: 80, TMType: "string" },
{ header: "Email", dataIndex: "NOTES_MAIL", width: 130, TMType: "string" },
];

2024年6月25日 星期二

V80203 - win.query 用法 – Runtime 新增按鈕 – 多筆勾選 – 多選

 目的:V80203  - win.query 用法 – Runtime 新增按鈕 – 多筆勾選 – 多選

處理說明:1>win.query( xtype), class: "button","gridpanel" ,'button[text="關閉"]'
                     Ex:  var Tmp_gridid = win.query("gridpanel")[0].id;
                             var Tmp_button = win.query('button[text="關閉"]')[0]; 
                             var Tmp_toolbar = Tmp_button.up('toolbar');
                 2>取得多筆勾選欄位值
                       var Tmp_gridid = win.query("gridpanel")[0].id;
                       var Tmp_items = Ext.getCmp(Tmp_gridid).getView().selModel.selected.items;
                        for (i = 0; i < Tmp_items.length; i++) {
                                        //Tmp_Str = Tmp_Str+Tmp_items[i].data["LWA"] + ",";
                                        Tmp_Str = Tmp_Str + Tmp_items[i].data[par_r_fld] + ",";
                                    }

query 用法參考網址 : https://ithelp.ithome.com.tw/articles/10134838


1>*.js
var Tmp_btn=win.query(‘button[text=”關閉”]’)[0];
var Tmp_toolbar=Tmp_btn.up(“toolbar”);
Tmp_toolbar.insert(0,[
{xtype:”button”, text:”確定”, handler:function(){
      var Tmp_gridid = win.query("gridpanel")[0].id;
      var Tmp_items = Ext.getCmp(Tmp_gridid).getView().selModel.selected.items;
      for (i = 0; i < Tmp_items.length; i++) {
         Tmp_Str = Tmp_Str + Tmp_items[i].data[par_r_fld] + ",";
       }
if (Tmp_Str.length > 0) {
     Tmp_Str = Tmp_Str.substr(0, Tmp_Str.length - 1);
}
}},
{xtype:”button”, text:”取消”, handler:function(){
win.close();
}},
]);






2024年6月24日 星期一

V80203 – 多筆挑選 – 如何取得[V]勾選的多筆欄位值 - 多筆勾選 - 多選 - [V]精準

 目的: V80203 – 多筆挑選 如何取得[V]勾選的多筆欄位值

處理說明: 1>多筆挑選的設定: get_pick_btn1 --> EditPickx(  ,isUseCheckBox=true); 允許多筆勾選
                                                    get_pick_btn0 : 只可挑選一筆
                        var cmp_LWA = get_cmp_txt1('LWA', 's_LWA', 80, 130);
                        var cmp_pick_LWA = get_pick_btn1('挑選LWA', 's_btn_LWA',
                                                             '../api/V80203API/get_s_LWAPick?isComplete=0',
                                                          ['LWA'], ['s_LWA'], J_pickstore_s_LWA, J_pickcolumns_s_LWA);
                         var cmp_prc_LWA = get_cmp_chk1('精準', 's_prc_LWA', 50, '3');
                        cmp_LWA.items.push(cmp_pick_LWA, cmp_prc_LWA);

                  2>如何取得 多筆挑選的欄位值 
                     var id = win.query('gridpanel')[0].id;
                      var Tmp_items = Ext.getCmp(gridpanel_id).getView().selModel.selected.items;
                       for (i = 0; i < Tmp_items.length ; i++) {
                            Tmp_Str = Tmp_Str+Tmp_items[i].data["LWA"] + ",";
                        }

                        


1>*.js
 //LWA    
    var cmp_LWA = get_cmp_txt1('LWA', 's_LWA', 80, 130);
   //多筆勾選用 get_pick_btn1  ,  單筆選取  get_pick_btn0
    var cmp_pick_LWA = get_pick_btn1('挑選LWA', 's_btn_LWA',
        '../api/V80203API/get_s_LWAPick?isComplete=0',
        ['LWA'], ['s_LWA'], J_pickstore_s_LWA, J_pickcolumns_s_LWA);
    //var cmp_prc_LWA = get_cmp_chk1('精準', 's_prc_LWA', 50, '3');    
    //cmp_LWA.items.push(cmp_pick_LWA, cmp_prc_LWA);
    cmp_LWA.items.push(cmp_pick_LWA,);


myfunc.js
//get_pick_btn1(欄位名稱,欄位id , 呼叫url ,傳回欄位名稱s,傳回填入欄位s,   ) : 允許多筆挑選
function get_pick_btn1(par_title, par_id, par_url, par_r_fld, par_r_id, par_model, par_columns) {
    var rtn_cmp =
    {
        xtype: "button", id: par_id, name: par_id, text: "...",
        handler: function () {
            //var win = EditPickx('AMMNO', '../api/V40AAPI/get_s_AMMNOPick?isComplete=0', ['AMMNO'], ['s_AMMNO'], J_pickstore_s_AMMNO, J_pickcolumns_s_AMMNO);
                                            //                                                                                                                
//EditPickx(.. ,paging,suspendevent,stripsrows,ischeckbox)   - ischeckbox=true 多筆勾選
            var win = EditPickx(par_title, par_url, par_r_fld, par_r_id, par_model, par_columns, false, false, true, true);
            win.show();
            //win.beforeclose = beforeclose1;  //本行指令無法作用
            //win.on('close', beforeclose1);
            //function beforeclose1(par_me, par_eOpts) {
            //    mywarnalert("離開前 before close  event!!");
            //};
            //加入[確認][取消]鈕
            var pop_grid_id = win.query("gridpanel")[0].id;
            var bar = Ext.getCmp(pop_grid_id).down("toolbar");
            //var bar = Ext.getCmp(pop_grid_id).down("buttons");
            console.log("win: ", win);
            //var bar = win.query("buttons");
            //console.log("bar - win.buttons", bar);
            bar.insert(bar.items.length, [
                { xtype: "tbfill" },
                {
                    xtype: "button", text: "確認", handler: function () {
                        //console.log(emObj.emList); //取得勾選的紀錄
                        var id = win.query('gridpanel')[0].id;
                        var Tmp_items = Ext.getCmp(id).getView().selModel.selected.items;
                        console.log("Tmp_items:", Tmp_items); //取得勾選的紀錄
                        var Tmp_Str = "";
                        for (i = 0; i < Tmp_items.length ; i++) {
                            Tmp_Str = Tmp_Str+Tmp_items[i].data["LWA"] + ",";
                        }
                        if (Tmp_Str.length > 0) {
                            Tmp_Str = Tmp_Str.substr(0, Tmp_Str.length-1);
                        }
                        console.log("Tmp_Str=", Tmp_Str);                        
                        mywarnalert("按[確認]鈕 !! - Tmp_Str=" + Tmp_Str);
                        Ext.getCmp(par_r_id).setValue(Tmp_Str);
                        win.close();
                    }
                },
                {
                    xtype: "button", text: "取消", handler: function () {
                        win.close();
                    }
                }
            ]);           
            
        }
    };
    return rtn_cmp;
};
2>*.cs
if (!myfunc.checkisnull(Tmp_LWA))
            {
                if (Tmp_prc_LWA == "true")
                    Tmp_Sql = Tmp_Sql + " AND  LWA=" + myfunc.AA(Tmp_LWA);
                else  //將 0011,0012  -->  '0001','0012'
                    Tmp_Sql = Tmp_Sql + " AND  LWA  IN (" + myfunc.AddQuoteStr(Tmp_LWA)+")";
                //else
                //    Tmp_Sql = Tmp_Sql + " AND  LWA  LIKE  " + myfunc.AA("%" + Tmp_LWA + "%");
            };