2025年2月18日 星期二

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>複製存放庫至本地的目錄:    [檔案] --> [複製存放庫]



















2024年12月29日 星期日

M-D-D : grid_D的selectionchange event 需加上selections.length > 0的判斷, 以免觸發2次 & 非同步造成顯示資料錯誤

目的: M-D-D - grid_D的selectionchange event 這邊有沒有加上selections.length > 0的判斷

處理說明:

 如果有寫到M-D-D三層式架構的部分,

麻煩檢查一下JS在grid_D的selectionchange event 這邊有沒有加上selections.length > 0的判斷,

如果沒有加這句,再麻煩加一下,以避免跑進去selectionchange兩次,還有非同步造成的顯示資料錯誤的情況,

謝謝!


Ext.getCmp('grid_D2').on("selectionchange", function (self, selections, options) {

        if (selections.length > 0) {

            var gridstore_D = Ext.getCmp('grid_D2_D').store;

            gridstore_D.proxy.url = '../api/B10202API/getGridData_D2_D';

            var np_D = {};

            for (var j = 0; j < MD_DB.aKey_M.length; j++) {

                console.log(selections[0].get("FLINO"))

                np_D[MD_DB.aKey_M[j]] = selections[0].get(MD_DB.aKey_M[j]);

            }

            np_D['CITM'] = selections[0].get('CITM');

            gridstore_D.getProxy().extraParams = np_D;

            Ext.getCmp('grid_D2_D').reloadGridData(false);

        }

        else {

            Ext.getCmp('grid_D2_D').store.removeAll();

            Ext.getCmp('grid_D2_D').getView().refresh();

        }


    });


2024年12月26日 星期四

個人網頁建置心得 - 朱騏

 怎麼建立自己的個人網站?


建立個人網站,是知識工作者的必經之路。但很多人在選擇工具時,卻常常走冤枉路。我想分享自己從 2020 ~ 2024 這 5 年來,嘗試各種網站工具的經驗和心得。


下面是我花了上萬塊學費,得到的經驗教訓。

第一站Hugo 的美好與限制 - 靜態網頁
2020 年,我開始接觸 Hugo。
當時透過 Hahow 的課程,我學會用 Hugo 框架搭配 Github Pages 建立一個靜態網站。
對於只需要放些許個人資訊與放部落格的人來說,這種方式已經相當方便。但隨著我接觸到更多關於個人品牌經營的知識,我發現單純的靜態頁面已經不夠用了。
要自己部署跟改 Code 真的太麻煩,於是我動身前往下一站。

第二站:WordPress 與 SaaS 工具的嘗試
2022 年,我開始使用 WordPress自架個人官網。
當時看了像是網路帶路姬、犬哥 WordPress 的教學,發現這真是...一個巨大的坑。光是各種插件的搭配使用,下班後的3 小時就這樣不見了。不過按照影片手把手的教學,大概 2 個禮拜可以搞定網域跟基本頁面的設定。
這是個人網站的部分。
另外我也嘗試許多國外 SaaS 工具,像是:
• 用 Gumroad 來銷售自己的數位產品
• 用 Ghost 來做付費訂閱制的網站
但在經營過程中,我發現了一個大問題:多網站的混亂。

舉例來說,如果客戶需要:
• 查看線上課程,要登錄A 網站
• 瀏覽內容介紹,要進去個人官網
• 報名線上活動,要切換到活動通
這種分散的架構讓我的粉絲很困擾,因為他們永遠搞不懂某個東西在哪裡!


於是我再次動身前往下一站,也是我的最後一站。


▋第三站:找到整合解決方案


2024 年,我遇到了路老闆的服務。


他的平台把「知識經濟」需要的功能都整合在一起了,像是

1.  線上課程:直接在網站內架設課程頁面

2. 活動管理:整合線上與實體活動的付費功能

3. 部落格文章:訂閱制功能能區分免費與付費內容


這有兩個好處

• 對我來說:就是一站式管理自己所有的內容,不用再做各種 URL 跳轉到不同的 SaaS 工具

• 對粉絲來說:進來網站可以看到我提供的所有內容,包含文章、課程、活動。


當內容都集中在一個網站內,我對外溝通與宣傳都方便。


...


以上就是我在這條路上,摸索 5 年的經驗。


有興趣的話,可以私訊 Louis Lin 詢問。


另外如果你喜歡這篇貼文,歡迎現在就訂閱我的「知識複利週報」。


每週二 12:00 ,固定和你分享一篇「知識工作者如何透過網路寫作,從 1 → 100 打造自己的線上事業」的 900 字文章。


教你建立一套寫作系統,徹底解決「文章寫了就浪費,無法變現」的困擾。