2025年2月20日 星期四

V20304A – [工時提列] – Grid.欄位 設為唯讀,不可修改 , Grid欄位設為可編輯

 目的: V20304A – [工時提列] – 若工時已登錄,則Grid 設為唯讀,不可修改

處理說明:
1.Grid 欄位,允許編輯
    {
      header: "備註", dataIndex: "REMARK", width: 250, sortable: false, TMType: "string",
      editor: { xtype: 'textfield', allowBlank: true }, //允許空白
    },
   
2>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 }),
            plugins: [                
                Ext.create('Ext.grid.plugin.CellEditing', { // 不會出現[Update][Cancel]鈕, 直接編輯 
                    clicksToEdit: 1,                           // 按一下進行編輯,預設為按兩下
                    clicksToMoveEditor: 1,   //在編輯模式下切換編輯另一行的行為1表示點選一就切換;                                                                  //2表示點2下才切換。
                })],
            //})],
        }); 

3>Grid 欄位唯讀
  Ext.getCmp("sub_Grid").on("beforeedit", function (editor, context) {
            return false; // 禁止編輯
        });        




1>V20304A_JSON.js
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: 'numberfield', allowBlank: true }, //允許空白        

    },
    {
        header: "備註", dataIndex: "REMARK", width: 250, sortable: false, TMType: "string",
        editor: { xtype: 'textfield', allowBlank: true }, //允許空白
        },
    //{ header: "件號專用表單編號", dataIndex: "PNSHTNO", width: 500, sortable: false, TMType: "string" }
];


2>V20304.js
1>> 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 }),
            plugins: [                
                Ext.create('Ext.grid.plugin.CellEditing', { // 不會出現[Update][Cancel]鈕, 直接編輯 
                    clicksToEdit: 1,                           // 按一下進行編輯,預設為按兩下
                    clicksToMoveEditor: 1,   //在編輯模式下切換編輯另一行的行為1表示點選一就切換;                                                                  //2表示點2下才切換。
                })],
            //})],
        });
        
2>> Grid 欄位唯讀, 不可編輯
//2025/02/21 , OPHR='N',仍列出工時,以便使用者查詢,但唯讀,不可修改
    if (par_OPHR == "N") {
        Ext.getCmp("sub_V20304A_OkBtn").setVisible(false);        
         //Ext.getCmp("sub_Grid").plugins = [];
        //var grid = new Ext.grid.EditorGridPanel({
        Ext.getCmp("sub_Grid").on("beforeedit", function (editor, context) {
            return false; // 禁止編輯
        });        

    }


2025年2月18日 星期二

V20305 – [刪除] – 刪除明細資料,並重新顯示Detail - 不使用 Template [刪除]鈕

 目的:  V20305 – [刪除] – 刪除明細資料,並重新顯示Detail

處理說明: 1>不使用原始的 Template [刪除]功能
                       Ext.getCmp("btn_del").beforeDel = function () {
                             return false;
                         }
                  2>自行定義[刪除]   - 刪除 Detail資料 - GetUrlStr()
                        np["ITMUOCD"] = cur_rec.data["ITMUOCD"];
                       //STEP1: 刪除 Detail 資料 - 明細需求件號
                      var Tmp_url = '../../api/V20305API/Delete_D';
                      var Tmp_RtnStr = getUrlStr(Tmp_url, np, "刪除明細需求件號(AMM_UOCD)");
                       if (!checkRtnOK(Tmp_RtnStr)) {
                          mywarnalert(Tmp_RtnStr);
                          return;
                       }    
                 3>刪除後,重新顯示Detail資料 - fireEvent("selectionchange", ..)
                    var cur_recs = Ext.getCmp('grid_M').getSelectionModel().getSelection();
                    Ext.getCmp('grid_M').fireEvent("selectionchange"
                                                                         Ext.getCmp("grid_M").getSelectionModel(), cur_recs);



1>*.js
Ext.getCmp('btn_del').on("click", function () {
var Tmp_AMMNO = "";
var Tmp_RQPN = "";
var cur_recs = Ext.getCmp('grid_D').getSelectionModel().getSelection();
if (cur_recs.length > 0) {
var cur_rec = cur_recs[0];
Tmp_AMMNO = nulltoStr(cur_rec.data['AMMNO']);
Tmp_RQPN = nulltoStr(cur_rec.data['RQPN']);
}
var Tmp_Str = "確定要刪除本筆需求明細件號資料嗎 ?\n"
        + "[AMM單號(" + Tmp_AMMNO + ") 提料件號(" + Tmp_RQPN + ")]\n";
    var id = confirm(Tmp_Str);
    if (!id)        
        return false;
    //取得目前所勾選資料,再匯出    
    var np = {};
    np["RPNOAF"] = cur_rec.data["RPNOAF"];
    np["EIAC"] = cur_rec.data["EIAC"];
    np["EI_LCN"] = cur_rec.data["EI_LCN"];
    np["EI_ALC"] = cur_rec.data["EI_ALC"];
    np["NHA_LCN"] = cur_rec.data["NHA_LCN"];
    np["NHA_ALC"] = cur_rec.data["NHA_ALC"];
    np["LCN"] = cur_rec.data["LCN"];
    np["ALC"] = cur_rec.data["ALC"];
    np["PN"] = cur_rec.data["PN"];
    np["ITMUOCD"] = cur_rec.data["ITMUOCD"];
    //STEP1: 刪除 Detail 資料 - 明細需求件號
    var Tmp_url = '../../api/V20305API/Delete_D';
    var Tmp_RtnStr = getUrlStr(Tmp_url, np, "刪除明細需求件號(AMM_UOCD)");
    if (!checkRtnOK(Tmp_RtnStr)) {
        mywarnalert(Tmp_RtnStr);
        return;
    }    

    var cur_recs = Ext.getCmp('grid_M').getSelectionModel().getSelection();
    Ext.getCmp('grid_M').fireEvent("selectionchange", Ext.getCmp("grid_M").getSelectionModel(), cur_recs);
    mysuccessalert("刪除完成!!");
});

2>*.cs
//刪除 - 明細資料(AMM_UOCD, AMM_UOC)
        [HttpPost]
        public dynamic Delete_D()
        {
            //取得參數值
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;            
            string Tmp_RPNOAF = nvc["RPNOAF"] ;
            string Tmp_EIAC = nvc["EIAC"] ;
            string Tmp_EI_LCN = nvc["EI_LCN"] ;
            string Tmp_EI_ALC = nvc["EI_ALC"] ;
            string Tmp_NHA_LCN = nvc["NHA_LCN"] ;
            string Tmp_NHA_ALC = nvc["NHA_ALC"] ;
            string Tmp_LCN = nvc["LCN"] ;
            string Tmp_ALC = nvc["ALC"] ;
            string Tmp_PN = nvc["PN"] ;
            string Tmp_ITMUOCD = nvc["ITMUOCD"] ;
            int Tmp_cnt;
            string Tmp_RtnMsg = "";
            string Tmp_Sql = "";
            string n = funId + "_Delete";
            HttpCookie MyCookie;
            DataTable Tmp_dt1 = new DataTable();
            try
            {
                Tmp_Sql = "  DELETE   FROM    AMM_UOCD   "
                                + "  WHERE   1=1 "
                                + "   AND        RPNOAF=" + myfunc.AA(Tmp_RPNOAF)
                                + "   AND        EIAC=" + myfunc.AA(Tmp_EIAC)
                                + "   AND        EI_LCN=" + myfunc.AA(Tmp_EI_LCN)
                                + "   AND        EI_ALC=" + myfunc.AA(Tmp_EI_ALC)
                                + "   AND        NHA_LCN=" + myfunc.AA(Tmp_NHA_LCN)
                                + "   AND        NHA_ALC=" + myfunc.AA(Tmp_NHA_ALC)
                                + "   AND        LCN=" + myfunc.AA(Tmp_LCN)
                                + "   AND        ALC=" + myfunc.AA(Tmp_ALC)
                                + "   AND        PN=" + myfunc.AA(Tmp_PN);
                myfunc.SqlExec(Tmp_Sql);
            }
            catch (Exception e)
            {
                Tmp_RtnMsg = myfunc.Get1ORA(e.Message);
                Tmp_RtnMsg = "錯誤:刪除零件件號("+Tmp_PN+")失敗!!<br>"                                                                                 
                                         + Tmp_RtnMsg;            
            }
            return Tmp_RtnMsg;
        }

Visual Studio 快捷鈕 - 綜整


 https://summer10920.github.io/2020/10-23/article-vscode/

2025年2月17日 星期一

V20305 –[編輯] [刪除]鈕 - 不用Parent.Delete函式,自行定義 Delete處理(只刪除Detail目前資料)

 目的:V20305 [編輯][刪除]鈕 - 不用Parent.Delete函式,自行定義[刪除][編輯]鈕

處理說明: 1>隱藏 [編輯]頁 & [編輯按鈕]
                        Ext.getCmp('MDViewEdit_M').setTabVisible(0, false);
                        TMMDViewEdit.setTemplateBtnVisible(false);
                  2>自行新增[編輯][刪除]鈕
                      var Btn_Ary = [
                        {
                               xtype: 'button', text: '編輯', id: 'btn_edit1', iconCls: 'icon-edit',
                               listeners: {
                                  click: function () {                    
                                              mysuccessalert("按  [編輯]鈕");
                                    }
                              }
                       }, //end of [編輯]鈕
                      {
                        xtype: 'button', text: '刪除', id: 'btn_del1', iconCls: 'icon-delete',
                        listeners: {
                               click: function () {                    
                                          mysuccessalert("按  [刪除]鈕");
                                                      }
                                        }
                         }, //end of [刪除]鈕
                3>[刪除]後,重新顯示資料
        Ext.getCmp('grid_M').fireEvent("selectionchange", Ext.getCmp("grid_M").getSelectionModel(), cur_recs);



1>*.js

//[編輯]鈕,不套用 Template [編輯]鈕, 自行處理
    Ext.getCmp('MDViewEdit_M').setTabVisible(0, false);
    TMMDViewEdit.setTemplateBtnVisible(false);

 //新增按鈕 : [編輯][刪除] [全部選取] [全部取消][工時提列] [單筆工時匯出'] [單筆工時匯入']
    var Btn_Ary = [
        {
            xtype: 'button', text: '編輯', id: 'btn_edit1', iconCls: 'icon-edit',
            listeners: {
                click: function () {                    
                    mysuccessalert("按  [編輯]鈕");
                }
            }
        }, //end of [編輯]鈕
        {
            xtype: 'button', text: '刪除', id: 'btn_del1', iconCls: 'icon-delete',
            listeners: {
                click: function () {                    
                    mysuccessalert("按  [刪除]鈕");
                }
            }
        }, //end of [刪除]鈕

//[刪除]鈕, click
    Ext.getCmp('btn_del1').on("click", function () {
        var Tmp_AMMNO = "";
        var Tmp_RQPN = "";
        var cur_recs = Ext.getCmp('grid_D').getSelectionModel().getSelection();
        if (cur_recs.length > 0) {
            var cur_rec = cur_recs[0];
            Tmp_AMMNO = nulltoStr(cur_rec.data['AMMNO']);
            Tmp_RQPN = nulltoStr(cur_rec.data['RQPN']);
        }
        var Tmp_Str = "確定要刪除本筆需求明細件號資料嗎 ?\n"
            + "[AMM單號(" + Tmp_AMMNO + ") 提料件號(" + Tmp_RQPN + ")]\n";
        var id = confirm(Tmp_Str);
        if (!id)
            return false;

        //取得目前所勾選資料,再匯出    
        var np = {};
        np["RPNOAF"] = cur_rec.data["RPNOAF"];
        np["EIAC"] = cur_rec.data["EIAC"];
        np["EI_LCN"] = cur_rec.data["EI_LCN"];
        np["EI_ALC"] = cur_rec.data["EI_ALC"];
        np["NHA_LCN"] = cur_rec.data["NHA_LCN"];
        np["NHA_ALC"] = cur_rec.data["NHA_ALC"];
        np["LCN"] = cur_rec.data["LCN"];
        np["ALC"] = cur_rec.data["ALC"];
        np["PN"] = cur_rec.data["PN"];
        np["ITMUOCD"] = cur_rec.data["ITMUOCD"];

        //STEP1: 刪除 Detail 資料 - 明細需求件號
        var Tmp_url = '../../api/V20305API/Delete_D';
        var Tmp_RtnStr = getUrlStr(Tmp_url, np, "刪除明細需求件號(AMM_UOCD)");
        if (!checkRtnOK(Tmp_RtnStr)) {
            mywarnalert(Tmp_RtnStr);
            return;
        }
        var cur_recs = Ext.getCmp('grid_M').getSelectionModel().getSelection();
         //刪除後,重新顯示資料
        Ext.getCmp('grid_M').fireEvent("selectionchange", Ext.getCmp("grid_M").getSelectionModel(), cur_recs);
        mysuccessalert("刪除完成!!");
    });

V80201 - PDM & PLM WebService 1>參考 2>ConnectionService - New

 目的: V80201 - PDM  & PLM WebService匯入

處理說明:  1>參考  :  [加入服務參考] - 匯入 WebService

                   2>ConnectionService  :  WebService匯入後的節點 

                  3>本 Web Service 已開發完成的 WSDL如下
                      http://enovia/AMM/Service.asmx
                      method: AMM_PDM01/AMM_PDM04/AMM_PLM04

                 4>WebService設定後,相關設定記錄在Web.config 
                      (會有重覆的 endpoint ,必需 remark)                     

                 5>*.cs 呼叫 WebService 
                      ds = PLM04.AMM_PLM04(傳入參數)

1>匯入WebService : 參考 - 加入[服務參考]



2>加入[服務參考]:  WebService 網址 + method


3>Connection Service : WebService 匯入後的函式


4>WebService設定後,相關設定記錄在Web.config 


5>*.cs
PLM_WS.ServiceSoapClient PLM04 = new PLM_WS.ServiceSoapClient();
            DataSet ds=null;
            if (Tmp_STAT=="C")
            {
                Tmp_DT1 = Tmp_PROCDT1;
                Tmp_DT2 = Tmp_PROCDT2;
 ds = PLM04.AMM_PLM04(Tmp_PN, Tmp_ECNO, Tmp_PDM_CONFIG, Tmp_PDTP, Tmp_ACNO,
                                 Tmp_FACWC, Tmp_STAT, Tmp_DT1, Tmp_DT2, Tmp_MKNO,
                                 Tmp_CNDPROCCODE);
            }







測試區 - 發佈 - 設定

 目的: 測試區  - 發佈  - 設定  - 發佈至[資料夾]

處理說明: 1>發佈至[資料夾] , 非[網頁伺服器(IIS)]

                  2>發佈資料夾位置: \\192.30.8.240\TLSWEB_AMM5



發佈資料夾位置: \\192.30.8.240\TLSWEB_AMM5





2025年1月21日 星期二

由 GitLab 下載 TLSAMM_WEB專案 master Source 至 Local目錄

 目的: 由 GitLab 下載 TLSAMM_WEB專案 master  Source 至 Local目錄_操作說明

處理說明: 一. 將 GitLab 的專案Source 下載至 Local  *.zip 檔案 
                        1>開啟 GitLab 的網站  (https://gitlab/)
                        2>選擇 TLSWEB_AMM 專案  of  GitLab
                        3>將 TLSWEB_AMM專案的 GitLab.master.sourece 下載至Local目錄 *.zip
                        4>以 Visual Studio 開啟  TLSWEB_AMM.sln 專案檔
                        缺點:
                                以 *.zip 方式下載至 Local 目錄,開啟   TLSWEB_AMM.sln 專案檔
                                無 GitLab 的原始相關資料(master/分支, 異動點/推送) 

                  二. 直接由 Visual Studio.[Git變更] 複製 TLSWEB_AMM 專案 Source 至Local目錄
                         1> 開啟沒有 GitLab 的專案
                         2> [複製存放庫]  
                               1>>輸入要複製的存放庫來源(https://gitlab/850/TLSWEB_AMM)
                               2>>輸入Local路徑(C:\Users\611292\Source\Repos5\TLSWEB_AMM)


                        



一. 將 GitLab 的專案Source 下載至 Local  *.zip 檔案

1>開啟 GitLab 的網站  (https://gitlab/)


2>開啟 TLSWEB_AMM 專案 of  GitLab



 3>將 TLSWEB_AMM專案的 GitLab.master.sourece 下載至Local目錄 
     (C:\Users\611292\source\repos2\)













   二. 直接由 Visual Studio.[Git變更] 複製 TLSWEB_AMM 專案 Source 至Local目錄
          1> [檔案]  --> [複製存放庫]   or   [Git變更] -->[複製存放庫]


2>複製存放庫至本地的目錄:    [檔案] --> [複製存放庫]