2022年10月12日 星期三

V20107 - Master-Detail-Detail - MDD編輯 - 取得store 欄位值 - 取得 MAX+1

 目的: V20107 - Master-Detail-Detail(MDD)  - Detail欄位新增

處理說明: 0>Master & Detail  Table設定
                       var MD_DB = Ext.create('MD_DB', {
                                                                   apiName: 'V20107',
                                                                   table_M: 'AMM_WKSTP',
                                                                   aKey_M: ['MITM'],
                                                                   table_D: ['AMM_WKSTPD', 'AMM_WKSTPDD'],  
                                                                    });
                 --> table_D 的順序需和 tab_D的資料順序相配合
                 1>開啟 Detail &  Detail-Detail
     //開啟 Detail
           Ext.getCmp('grid_M').on("selectionchange", function (view, selections, options) {
                      MD_DB.reloadDetailStore(selections[0]);        
           }    
      //開啟 Detail-Detail
          Ext.getCmp('grid_D').on("selectionchange", function (view, selections, options) {
              MD_DB.reloadDetailStorebyId_P("grid_D1", selections[0], MD_DB.apiName, ['MITM', 'WITM', 'DDITM']); 
          }
 
                  2> Detail 編輯 - Ext.getCmp('grid_D').beforeShowForm() 設定 PK 欄位值 
                       取得 Master.PK  &  Detail 新增 - 最大值+1  
                  3> Detail 設定 PK
                           Ext.getCmp('grid_D').beforeShowForm = function () {
                                     設定 Detail.MAX(WITM)+1
                           }
                      取得 store 欄位值 :  Tmp_WITM=Tmp_d_store.data.items[i].data["WITM"] ; 

                4>Detail-Detail 編輯 - Ext.getCmp('grid_D1').beforeShowForm() 設定 PK 欄位值 
                       取得 Master.PK  &  Detail.PK & Detail.Detail 新增 - 最大值+1  

                5>設定Detail-Detail編輯欄位 ReadOnly
    Ext.getCmp('grid_D').setFieldsCls = function () {
        setFieldsCls('myform_D', ['d_MITM', 'd_WITM',], ['d_MITM',],['d_MITM','d_WITM','d_STP','d_DWC','d_AQTY','d_PQTY','d_WHR','d_WDT','d_ENER','d_ENDT']);
    };

Ext.getCmp('grid_D1').setFieldsCls = function() {
        setFieldsCls('myform_D1', ['d1_MITM', 'd1_WITM', 'd1_DDITM',], ['d1_MITM', 'd1_WITM', 'd1_DDITM',],['d1_MITM','d1_WITM','d1_DDITM','d1_STP','d1_WC','d1_NOTE','d1_CLASS','d1_WHR']);
};


 


0> *.js  Master-Detail-Detail 的 Table 設定
 var MD_DB = Ext.create('MD_DB', {
        apiName: 'V20107',
        table_M: 'AMM_WKSTP',
        aKey_M: ['MITM'],
        table_D: ['AMM_WKSTPD', 'AMM_WKSTPDD'],                
      });

1> *.js  Detail  &  Detail-Detail 的資料顯示
      grid_D = Ext.getCmp('grid_D');
      grid_D.setTitle("工作步序說明");

      var grid_D1 = Ext.create('grid_D', {
grid_id: 'grid_D1',
insert_btn_id: 'btn_add_D1',
columns: J_columns_D1,
title: '子步序說明',
store: Ext.create('gridstore_D', { model: J_gridmodel_D1 }),
form_items: J_formFields_D1,
form_id: 'myform_D1'
});

Ext.getCmp('tab_D').add(grid_D1); 
        //開啟 Detail 
        Ext.getCmp('grid_M').on("selectionchange", function (view, selections, options) {
           MD_DB.reloadDetailStore(selections[0]);        
        });

       //開啟 Detail-Detail  
      Ext.getCmp('grid_D').on("selectionchange", function (view, selections, options) {
  MD_DB.reloadDetailStorebyId_P("grid_D1", selections[0], MD_DB.apiName, ['MITM', 'WITM', 'DDITM']);
    });




1>*.js - Detail 新增 - 畫面 PK 處理
 //Detail 存檔處理
    //存檔時,myform_D 自動設定欄位值 : PK,
    var D_buttonModel = Ext.create('G_D_buttonModel'); 

    var Tmp_grid_D = Ext.getCmp('grid_D');
    console.log(" Tmp_grid_D: ", Tmp_grid_D);
    if (!checkisnull(Tmp_grid_D)) {    
        console.log(" 2 Ext.getCmp(grid_D).beforeShowForm ");
        Ext.getCmp('grid_D').beforeShowForm = function () {
            //要判斷 buttonModel 的編輯模式時, 才即時去抓 modelType
            var D_modelType = D_buttonModel.getModelType();
            console.log("beforeShowForm D_modelType=", D_modelType);
            //若非[新增]模式,則不設定欄位值
            if (!(D_modelType == 1))
                return true;

            //設定 Master.MITM欄位值
            var Tmp_MITM = Ext.getCmp('MITM').getValue();
            Ext.getCmp('d_MITM').setValue(Tmp_MITM);

            console.log("1 MITM:", Tmp_MITM);
            var Tmp_WITM = get_NEXT_WITM(Tmp_MITM);
            Ext.getCmp('d_WITM').setValue(Tmp_WITM);

            return true;
        }
    }
    //取得   WITM 的下一編號 , 傳入 WITM
    // Master.[修改],  Detail 新增多筆時, 並未寫回資料庫 , 所以 MAX(WITM)不可取資料庫
    //直接由 前端取 MAX(WITM)

    function get_NEXT_WITM(par_MITM) {        
        var Tmp_MAX_WITM = 0;
        var Tmp_NEXT_WITM = 0;
        var Tmp_d_store = Ext.getCmp("grid_D").store;
        console.log("Tmp_d_store:", Tmp_d_store);
        console.log("Tmp_d_store.getCount():", Tmp_d_store.getCount());
        var Tmp_cur_WITM=0;
        for (let i = 0; i < Tmp_d_store.getCount(); i++) {
            console.log("Tmp_d_store.data.items[i].data[WITM]:", Tmp_d_store.data.items[i].data["WITM"]);
            Tmp_cur_WITM = Number(Tmp_d_store.data.items[i].data["WITM"]);
            console.log("Tmp_cur_WITM:", Tmp_cur_WITM);
            if (Tmp_cur_WITM > Tmp_MAX_WITM)
                Tmp_MAX_WITM = Tmp_cur_WITM;

            console.log("Tmp_MAX_WITM:", Tmp_MAX_WITM);
        }  // end of for 
        Tmp_NEXT_WITM = Tmp_MAX_WITM + 1;        
        return Tmp_NEXT_WITM;      

    }  // end of  function string  get_NEXT_WITM(Tmp_MITM)    


2>*.cs , Detail 寫入資料庫
[HttpPost]
        public void Insert_D()
        {
            var c = System.Web.HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            //excuteInsert(nvc, "AMM_WKSTPD");
            NameValueCollection nvc1 = new NameValueCollection();
            foreach (string k in nvc.Keys)
            {
                nvc1[k] = nvc[k];
            }            
            nvc1["ENER"] = LoginUserModel.LoginUserId;
            nvc1["ENDT"] = DateTime.Now.ToString("yyyy/MM/dd"); 
            excuteInsert(nvc1, "AMM_WKSTPD");
        }


3>*.js  編輯畫面, 日期欄位值 - 不含時間


沒有留言:

張貼留言