目的: 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
}
設定 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)
//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 編輯畫面, 日期欄位值 - 不含時間