function EditForm () { var that = this; this.data = { target_name : "display.Edit" , trigger_name : "display.Edit.title" , o_GDD : null , key_list : "Company_SN,name" , str_confirm_message : "確定存檔?" , dt_data : null , str_iGuid : "" , detail_dts : [] // added by thomas for detail , pos_left : 200 // added by thomas for detail , pos_top : 50 // added by thomas for detail , master_detail_key_list : "" // added by thomas for detail , active : 0 // added by thomas for detail AddNewForm 是否作用中 , detail_active : 0 // added by thomas for detail Detail 編輯 是否作用中 , no_window : 0 // 不以 window 方式呈現 , detail_rows : [] // added by thomas for detail 編輯中的 detail row number -1 表示不是被編輯 , $detail_editables : [] // detail 是否須編輯, detail default , $detail_pagecontrol : 1 // detail 是否須編輯, detail default , $detail_default_value_lists : [] // added by thomas for detail default , auto_size : "1" , auto_next : 0 , closing : 0 , _opened : 0 // 是否被開啟過 , delay_init : 1 // 設為1時, 在 form init 時, 不立刻 init, 等 form open 時才 init, 可加快表單開啟速度 , details : [] // 建立的 detail 物件 , details_all : [] // 建立的 detail 物件, 包含 L3 , current_index : 0 , fontsize : "13px" , fontfamily : "Verdana, Geneva, sans-serif;" , dt_send : null , width : "" , detail_saving : 0 // detail 自動存檔中 , iGuid : "" , detail_save_refresh : 0 , keep_form : 0 , _height : 600 , get_dt_from_server : 0 // open時是否從Server端取資料 , server_content : 0 // 直接從 Server 取得 HTML 內容, 不從 Server 產生 , grid_display_name : "" , flag_error : false , data_source : null , grid_uid : "" , delete_rowno : -1 , link_single_form : false , nav_action : "" , check_key_exist : 1 , confirm_save : 1 , initialize : function () { if (is_linkurl_edit) { that.data.target_name = "display.form.Result"; that.data.no_window = 1; } if (that.data.no_window == 0 || that.data.link_single_form == true) { // that.data.o_GDD = new GrabDragDropClass(); // that.data.o_GDD.initialize(that.data.target_name, that.data.trigger_name, "", ""); $("display.Edit.title").innerHTML = "編輯資料 " + " " $j("#Edit_first").click(function() { that.data.first(); } ); $j("#Edit_prev").click(function() { that.data.prev(); } ); $j("#Edit_next").click(function() { that.data.next("N"); } ); $j("#Edit_last").click(function() { that.data.last(); } ); $j("#Edit_auto_save").click(function() { if ($j("#Edit_auto_save").hasClass("active")) { that.data.auto_next = 1; $j("#Edit_auto_save").button("option", "label", "Multi"); $j("#Edit_auto_save").button("option", "icons", {primary:'ui-icon-newwin'}); } else { that.data.auto_next = 0; $j("#Edit_auto_save").button("option", "label", "Single"); $j("#Edit_auto_save").button("option", "icons", {primary:'ui-icon-disk'}); } } ); if (that.data.link_single_form) $j("#Edit_auto_save").hide(); } for (var i = 0; i < that.data.details.length; i++) { that.data.$detail_editables[i] = 0; if ( that.data.details[i].detail_default_key_list != "" ) that.data.$detail_editables[i] = 0; // Detail Default // if (that.data.details[i].detail_default_key_list == "") that.data.$detail_editables[i] = 1; // standard } that.data.event_setting(); that.data.init_after(); } ,init_after: function() {} , event_setting : function () { var obj = this; try { set_element_event("btn.Edit.cancel", "onclick", function () { that.data.close_action();})} catch (e) {} try { set_element_event("btn.Edit.save", "onclick", obj.save); } catch (e) {} try { set_element_event("btn.Delete", "onclick", obj.delete_data); } catch (e) {} set_element_event("btn.next", "onclick", function () { obj.next("N") }); set_element_event("btn.prev", "onclick", obj.prev); // added by thomas for detail try { for (var i=0; i < that.data.details.length; i++) { // var indexes = []; // indexes["btn." + that.data.details[i].Edit_prefix + ".addDetail"] = i; $j("[name='btn." + that.data.details[i].Edit_prefix + ".addDetail']").attr("TAG",i); set_element_event("btn." + that.data.details[i].Edit_prefix + ".addDetail", "onclick", function () { obj.openDetail(-1, $j(this).attr("TAG"))}); //indexes["btn." + that.data.details[i].Edit_prefix + ".cancel"] = i; $j("[name='btn." + that.data.details[i].Edit_prefix + ".cancel']").attr("TAG",i); set_element_event("btn." + that.data.details[i].Edit_prefix + ".cancel", "onclick", function() {obj.closeDetail( $j(this).attr("TAG"))}); // indexes["btn." + that.data.details[i].Edit_prefix + ".save"] = i; $j("[name='btn." + that.data.details[i].Edit_prefix + ".save']").attr("TAG",i); set_element_event("btn." + that.data.details[i].Edit_prefix + ".save", "onclick", function() {obj.saveDetail($j(this).attr("TAG"))}); } } catch (e) {}; } , check_modified : function (o_dt, action) { if (that.data.auto_next == 1 || that.data.link_single_form == false ) return false; var flag = false; var dt = o_EditForm.form.o_Form.getDataInput(); for (var i = 0; i < dt.getFieldCount(); i++) { var f = dt.getFieldName(i); if (typeof(o_dt[f]) == "undefined") continue; if (dt.getValue(f) != o_dt[f]) { try { if (parseFloat(dt.getValue(f)) == parseFloat(o_dt[f])) continue; } catch (ex) {}; flag = true; break; } } if (!flag) { // check detail outer: for (var i = 0; i < that.data.detail_dts.length; i++) { if (that.data.detail_dts[i].delete_items != "") {flag=true; break outer;} for (var r = 0; r < that.data.detail_dts[i].MaxRow(); r++) { if (that.data.detail_dts[i].getValueByRow(r, "_dirty")=="Y" || that.data.detail_dts[i].getValueByRow(r, "iGuid") == "" ) { flag = true; break outer; } } } } if (flag) { jconfirm("資料尚未存檔, 是否存檔?", "確認", function(result) {if (result) that.data.modify_confirm_action();}) ; } else return false; } , modify_confirm_action : function () { that.data.nav_action = action; that.data.save(); return true; } , get_record_no : function () { var grid = getGrid().dataSource; var item = grid.getByUid(that.data.grid_uid); var row = 0 row = parseInt(item._row_no, 10); return (row).toString() + "/" + grid.total().toString() + " "; } , first : function () { var item = ds.getByUid(that.data.grid_uid); if (that.data.check_modified(item, "first")) return; that.data.go_record_no(1, "N"); } , last : function () { var item = ds.getByUid(that.data.grid_uid); if (that.data.check_modified(item,"last")) return; that.data.go_record_no(ds.total(), "N"); } , next : function (auto_close) { that.data.nav_action = ""; var item = ds.getByUid(that.data.grid_uid); if (that.data.check_modified(item,"next")) return; if (that.data.delete_rowno != -1) row = that.data.delete_rowno - 1 ; else row = parseInt(item._row_no, 10) ; row++; that.data.go_record_no(row,auto_close); } ,prev : function () { that.data.nav_action = ""; var item = ds.getByUid(that.data.grid_uid); if (that.data.check_modified(item, "prev")) return; var row = 0 try {row = parseInt(item._row_no, 10)} catch (e) {row = that.data.delete_rowno}; row--; if (row <= 0 || row == "") return; that.data.go_record_no(row); } , go_record_no : function (row, auto_close ) { if (typeof(auto_close) == "undefined" ) auto_close = "N"; var item = ds.getByUid(that.data.grid_uid); var pageSize= ds.pageSize(); var page = ds.page(); if (that.data.delete_recno != -1) { if (row > ds.total() && ds.total() > 0 ) row = ds.total(); else if (ds.total() == 0) { that.data.active = 0; $j("[name='btn.AddNew.cancel_add']").hide(); $j("[id='display.Edit'").hide(); o_AddNewForm.open(); return; } } row-- if (row > (ds.total() - 1) && auto_close == "N") return; if (that.data.delete_recno != -1 && ds.total() == 0 && auto_close == "Y") { that.data.close(); return; } var pageNo = parseInt(row / pageSize, 10) + 1; if (pageNo != page) { ds.one ("change", function () { if (ds.total() == 0) return; if (row < ds.total()) { var nextItem = ds.at(row % pageSize); var selectedDataItems = new myDataItems(); selectedDataItems.Add(nextItem); that.data.open(nextItem.iGuid, selectedDataItems); } else { if (auto_close == "Y") { that.data.close(); data_search(); } } }); ds.page(pageNo); } else { if (row < ds.total()) { var nextItem = ds.at(row % pageSize); var selectedDataItems = new myDataItems(); selectedDataItems.Add(nextItem); try { that.data.open(nextItem.iGuid, selectedDataItems); } catch (ex) { that.data.close(); data_search(); } } else { if (auto_close == "Y") { that.data.close(); data_search(); } } } if (row == "") return; } , getDatatableByiGuid : function (str_iGuid) { var str_url = str_page_name + "?AJAX=1&do_action=ajax_data_search&QUERY=1&ROWIGUID=" + encodeURIComponent(str_iGuid) ; var str_element_list = "XML"; var str_result = ""; var str_xml = ""; var dt = new DataTable(); with (o_SearchForm.o_Form) { DataCollection(); str_xml = dt.ExportXML("NewDataSet", "Table1", "NO,TITLE,NAME,ELE_NAME,ELE_VALUE,ELE_TYPE", 0, -1) set_element_value("XML", str_xml); } dt.connect(str_url, str_element_list); return (dt); } , open : function (str_iGuid, dataItem) { that.data.grid_uid = dataItem.dataItems[0].uid; window.history.forward(1); // 禁用上一頁 that.data._opened = 1; that.data.iGuid = str_iGuid; var dt_data ; if (that.data.get_dt_from_server != 0) { dt_data = that.data.getDatatableByiGuid(str_iGuid) ; if (dt_data.MaxRow() <= 0) { jalert("此筆資料已被其他人修改, 請重新查詢!!"); return false; } } else dt_data = dataItem; that.data.flag_error = false; that.data.dt_data = dt_data; if (that.data.link_single_form) that.data.auto_next = 0; if ( that.data.delay_init == 1) { if (that.data.form._created == 0) { that.data.form.create(); try {event_setting();} catch (e) {}; for (var i=0; i 確定刪除?"; var str_iGuid = that.data.str_iGuid; var dt_send = new DataTable(); var str_xml = ""; if (that.data.before_delete_data() == false) return (false); str_message += "\n\n"; var grid = getGrid(); for (var i = 1; i < grid.columns.length; i++) { if (i >= 10) break; if (typeof(grid.columns[i].field) == "undefined") continue; var str_buf = "\n%title%:%value%"; var str_value = that.data.dt_data.getValue(grid.columns[i].field); str_buf = str_buf.ReplaceAll("%title%", grid.columns[i].title); str_buf = str_buf.ReplaceAll("%value%", str_value); str_message += str_buf; } jconfirm(str_message, "確認", function (result) { if (result) that.data.delete_action(); }) } , delete_action : function () { var item = ds.get(that.data.iGuid); if ( that.data.form.detail == 1) { // 放入 master_detail_key list 到 __dt_key item.set("__dt_key", that.data.master_detail_key_list); } that.data.delete_rowno = parseInt(item._row_no, 10); that.data.delete_rowno -= 1; if (that.data.delete_rowno <= 0) that.data.delete_rowno = 1; getGrid().dataSource.remove(ds.get(that.data.iGuid)); that.data.data_source.one("sync",o_EditForm._after_save); getGrid().dataSource.sync(); } , before_delete_data : function () { } , after_delete_data : function () { } , check_detaildata : function (detail_row, name, element_name, value ) { } , set_width : function (w) { $j("[id='" + that.data.target_name + "']").dialog("option", "width",w ); $j("[id='" + that.data.target_name + "']>table").width(w - 50); // $j("[id='" + that.data.target_name + "']").dialog( "option", "position", ['center','top'] ); } , form : { str_form_namespace : "display.Edit.form" , str_form_name : "CMA001_EditForm" , str_template_name : "EditForm.htm" , str_form_template : "" , str_template_no_new_line : "" , str_template_with_head : "" , str_template_no_td : "" , str_template_no_head : "" , str_template_heading : "" , str_schema_name : "EditForm.xml" , display_name : "display.Edit.form" , display_detail_name : "display.EditDetail.form" // added by thomas for detail , o_dg : new DataGridExp() , o_detail_dgs : [] // added by thomas for detail , o_Form : new clsForm() , dt_schemas : [] , dt_detail_schemas : [] // added by thomas for detail , detail : 0 // added by thomas for detail 是否有 detail 表單 // , dt_schema : new DataTable() , _created : 0 , create : function () { if (that.data._opened == 0 && that.data.delay_init == 1) return; that.data.form.get_template(); that.data.form.get_schema(); with (that.data.form.o_dg) { flg_show_html = 1; flg_auto_breakline = 0; max_cols = 1000; dt = that.data.dt_schema; str_template = that.data.form.str_form_template; str_template_no_new_line = that.data.form.str_template_no_new_line; str_template_with_head = that.data.form.str_template_with_head; str_template_no_td = that.data.form.str_template_no_td; str_template_no_head = that.data.form.str_template_no_head ; str_template_heading = that.data.form.str_template_heading ; get_field_list(); if (that.data.server_content == 1) { // $j.ajax({ async:false, url: "resource/EditContent.htm", dataType:"html", cache :true, success: function (data) { $(that.data.form.display_name).innerHTML = data;} }); } else $(that.data.form.display_name).innerHTML = GetDataGrid(); } with (that.data.form.o_Form) { dt = that.data.dt_schema; str_namespace = that.data.form.str_form_namespace; str_form_name = that.data.form.str_form_name; str_template_no_new_line = that.data.form.str_template_no_new_line; check_detaildata = that.data.form.check_detaildata; create_form(); if (that.data.form.detail == 1) // added by thomas for detail { that.data.o_detail_dgs = []; var oldTABS = TABS; TABS = []; for (var i = 0; i < that.data.details.length; i++) { if ( that.data.details[i].delay_create == 0) { that.data.o_detail_dgs[i] = new DataGridExp(); with (that.data.o_detail_dgs[i]) { flg_show_html = 1; flg_auto_breakline = 0; max_cols = 1000; var old_dt = dt; dt = that.data.form.dt_detail_schemas[i]; dt_detail = that.data.form.dt_detail_schemas[i]; if (that.data.form.str_template_name != that.data.details[i].Edit_template_name) { str_template = o_Page.get_template(that.data.details[i].Edit_template_name); str_template = str_template.ReplaceAll("%namespace%", that.data.form.str_form_namespace); str_template = str_template.ReplaceAll("%FormName%", that.data.form.str_form_name); } else str_template = that.data.form.str_form_template; str_template_no_new_line = that.data.form.str_template_no_new_line; str_template_with_head = that.data.form.str_template_with_head; str_template_no_td = that.data.form.str_template_no_td; str_template_no_head = that.data.form.str_template_no_head ; str_template_heading = that.data.form.str_template_heading ; get_field_list(); $( that.data.details[i].Edit_display_name).innerHTML = GetDataGrid(); dt = old_dt; } } TABS = oldTABS; } for (var i = 0; i < that.data.details.length; i++) { if ( that.data.details[i].delay_create == 0) { var old_dt2 = dt; dt = that.data.form.dt_detail_schemas[i]; create_form(); that.data.details[i].form_created = 1; dt = old_dt2; } } } that.data.form._created = 1; } } , get_schema : function () { that.data.dt_schema = o_Page.get_schema_byNameSpace(that.data.form.str_schema_name,"Edit"); for (var i = 0; i < that.data.details.length; i++) { that.data.form.dt_detail_schemas[i] = new DataTable() that.data.form.dt_detail_schemas[i] = o_Page.get_schema_byNameSpace(that.data.form.str_schema_name,that.data.details[i].Edit_prefix); // added by thomas for detail } if (that.data.form.dt_detail_schemas.length > 0) if (that.data.form.dt_detail_schemas[0].MaxRow() > 0) that.data.form.detail = 1; // added by thomas for detail } , get_template : function () { with (that.data.form) { str_form_template = o_Page.get_template(str_template_name); str_form_template = str_form_template.ReplaceAll("%namespace%", str_form_namespace); str_form_template = str_form_template.ReplaceAll("%FormName%", str_form_name); str_template_no_td = " %namespace%.%FormName%.%ELE_NAME% " str_template_no_new_line = " %namespace%.%FormName%.%ELE_NAME% " str_template_with_head = " %TITLE% " + str_template_no_new_line str_template_no_head = " %namespace%.%FormName%.%ELE_NAME% " ; str_template_no_td = str_template_no_td.ReplaceAll("%namespace%", str_form_namespace); str_template_no_td = str_template_no_td.ReplaceAll("%FormName%", str_form_name); str_template_no_new_line = str_template_no_new_line.ReplaceAll("%namespace%", str_form_namespace); str_template_no_new_line = str_template_no_new_line.ReplaceAll("%FormName%", str_form_name); str_template_heading = " %TITLE% " str_template_with_head = str_template_with_head.ReplaceAll("%namespace%", str_form_namespace); str_template_with_head = str_template_with_head.ReplaceAll("%FormName%", str_form_name); str_template_no_head = str_template_no_head.ReplaceAll("%namespace%", str_form_namespace); str_template_no_head = str_template_no_head.ReplaceAll("%FormName%", str_form_name); str_template_heading = str_template_heading.ReplaceAll("%namespace%", this.str_form_namespace); str_template_heading = str_template_heading.ReplaceAll("%FormName%", this.str_form_name); } } , refresh_listbox : function(ele_name, row_no) { with (that.data.form) { is_list_cached = false; dt = that.data.dt_schema; if (ele_name.indexOf("Detail") > 0) { var e = ele_name.split("."); var i = e[0].substr(e[0].length - 1, 1); var index = (i == "l" ? 0 : parseInt(i, 10)); if (that.data.details[index].master_detail_style == 0) { var old_dt2 = that.data.form.o_Form.dt; that.data.form.o_Form.dt = dt_detail_schemas[index]; that.data.form.o_Form.refresh_listbox(ele_name,"Y"); that.data.form.o_Form.dt = old_dt2; is_list_cached = true; return ; } } if (!that.data.form.o_Form.refresh_listbox(ele_name,"Y")) { var old_dt2 = that.data.form.o_Form.dt; is_list_cached = true; var e = ele_name.split("."); var i = e[0].substr(e[0].length - 1, 1); var index = (i == "l" ? 0 : parseInt(i, 10)); that.data.form.o_Form.dt = dt_detail_schemas[index]; that.data.form.o_Form.refresh_listbox(ele_name, "D", row_no); that.data.form.o_Form.dt = old_dt2; } is_list_cached = true; } } , set_Tab : function() { if (TABS == "undefined") return; if (TABS.length > 0) { showTab("Edit." + TABS[0]); } } } } }