function clsForm()
{
this.dt = new DataTable();
this.dt_detail = new DataTable();
this.str_namespace = "display.form";
this.str_form_name = "FormName";
this.str_display_name = "%namespace%.%FormName%.%EleName%";
this.flg_error = false;
this.error_msg = null;
this.functions = null;
this.required_mark = " *"; // 必輸欄位顯示的符號
this.refreshing_listbox = false;
this.set_message = function (ele_name, str)
{
try
{
if (str == "")
$(this.str_namespace + "." + this.str_form_name + "." + ele_name + ".message").innerHTML = "";
else
$(this.str_namespace + "." + this.str_form_name + "." + ele_name + ".message").innerHTML = "
" + str;
}
catch (e)
{
//window.status = "clsForm.set_message() 錯誤訊息:" + e.Message;
try
{
$(ele_name + ".message").innerHTML = "
" + str;
}
catch (e)
{
}
}
}
this.clear_message = function ()
{
var dt = this.dt;
for (var row = 0; row < dt.MaxRow(); row++)
{
var ele_name = dt.getValueByRow(row, "ELE_NAME");
this.set_message(ele_name, "");
}
}
this.clear_detail_message = function (dt)
{
if (typeof(dt) == "undefined") return;
for (var row = 0; row < dt.MaxRow(); row++)
{
var ele_name = dt.getValueByRow(row, "ELE_NAME");
this.set_message(ele_name, "");
}
}
this.get_schema = function (str_url, str_element_list)
{
var _dt = new DataTable();
this.dt = new DataTable();
alert("clsForm.get_schema()");
try
{
var str_result = _dt.connect(str_url, str_element_list);
this.dt.ImportXML(_dt.getValue("XML"), "NewDataSet", "", 0, -1);
return (true);
}
catch (e)
{
alert("clsForm.get_schema() 發生錯誤!\n 錯誤訊息:" + e.Message);
return (false);
}
}
//***************************************************************************************************
// schema_dt, detail_row, control_name 為 Grid 使用
this.create_textbox = function(row, element_name, element_param, str_url, str_element_list, schema_dt, detail_row, control_name, _value, _name)
//***************************************************************************************************
{
var required = false;
if (typeof (schema_dt) == "undefined") {
var detail = false
var dt = this.dt;
}
else {
var detail = true;
var dt = schema_dt;
}
var str_HEAD = dt.getValueByRow(row, "HEAD");
var _display_content = new StringBuilder();
_display_content.Append(str_HEAD);
var str_NOT_NULL = dt.getValueByRow(row, "NOT_NULL");
var str_NUMERIC = dt.getValueByRow(row, "NUMERIC");
var str_TYPE = dt.getValueByRow(row, "TYPE");
var str_DECIMAL = dt.getValueByRow(row, "DECIMAL");
var str_LEN = dt.getValueByRow(row, "LEN");
var str_TAIL = dt.getValueByRow(row, "TAIL");
var str_WATERMARK = dt.getValueByRow(row, "WATERMARK");
var str_URL = dt.getValueByRow(row, "URL");
str_URL = str_URL.ReplaceAll("%page_name%", str_page_name);
var str_display_name = this.str_display_name;
var element_id = "";
// if (detail)
// element_id = element_name + "_" + detail_row.toString();
// else
element_id = element_name;
//
switch (str_TYPE.toUpperCase()) {
case "COLOR": // 調色盤
_display_content.Append("
");
_display_content.replace("%name%", element_name);
str_display_name = str_display_name.ReplaceAll("%namespace%", this.str_namespace);
str_display_name = str_display_name.ReplaceAll("%FormName%", this.str_form_name);
str_display_name = str_display_name.ReplaceAll("%EleName%", element_name);
$(str_display_name).innerHTML = _display_content.ToString();
$j("[id=" + element_name + "_picker]").ColorPicker({
flat: true,
color: '#00ff00',
onSubmit: function(hsb, hex, rgb) {
set_element_value(this.parent().attr("EDITOR"), hex);
},
onChange: function(hsb, hex, rgb) {
set_element_value(this.parent().attr("EDITOR"), hex);
}
});
$j("[id=" + element_name + "_btn]").attr("TAG", "0");
$j("[id=" + element_name + "_btn]").attr("PICKER", element_name + "_picker");
$j("[id=" + element_name + "_picker]").hide();
$j("[id=" + element_name + "_picker]").attr("EDITOR", element_name);
$j("[id=" + element_name + "_btn]").bind('click', function() {
if ($j(this).attr("TAG") == "0") {
//$j("[id=" + $j(this).attr("PICKER") + "]").ColorPickerSetColor(
$j("[id=" + $j(this).attr("PICKER") + "]").show();
$j(this).attr("TAG", "1");
}
else {
$j("[id=" + $j(this).attr("PICKER") + "]").hide();
$j(this).attr("TAG", "0");
}
});
$j("[name=" + element_name + "]").keyup(function() {
try {
if (this.value.length == 6)
$j("[id=" + this.name + "_btn]").css('backgroundColor', '#' + get_element_value(this.name));
} catch (e) { };
}
);
// 定義取得value的function
function getValueColor(ele_name) {
return ($j("[name=" + ele_name + "]").val());
}
function setValueColor(ele_name, ele_value) {
$j("[name=" + ele_name + "]").val(ele_value);
$j("[id=" + ele_name + "_btn]").css('backgroundColor', '#' + ele_value);
try { $j("[id=" + ele_name + "_picker]").ColorPickerSetColor(ele_value) } catch (e) { };
}
controls.add(element_name, getValueColor, setValueColor);
return;
break;
case "FILE":
_display_content.Append(" ");
_display_content.replace("%name%", element_name);
str_display_name = str_display_name.ReplaceAll("%namespace%", this.str_namespace);
str_display_name = str_display_name.ReplaceAll("%FormName%", this.str_form_name);
str_display_name = str_display_name.ReplaceAll("%EleName%", element_name);
$(str_display_name).innerHTML = _display_content.ToString();
function createUploader() {
var uploader = new qq.FileUploader({
element: document.getElementById(element_name),
action: str_URL
});
}
if (this.functions == null) this.functions = new Array();
this.functions.push(createUploader);
return;
break;
case "String".toUpperCase():
element_param += " size='%len%' maxlength='%len%'";
element_param = element_param.ReplaceAll("%len%", str_LEN);
break;
case "Numeric".toUpperCase():
var _length = parseInt(str_LEN, 10);
if (str_DECIMAL != "" && str_DECIMAL != "0")
_length += 1;
element_param += " size='%len%' maxlength='%len%' STYLE='text-align:right'";
element_param = element_param.ReplaceAll("%len%", _length);
break;
case "Integer".toUpperCase():
element_param += " size='%len%' maxlength='%len%' STYLE='text-align:right'";
element_param = element_param.ReplaceAll("%len%", str_LEN);
break;
case "Date".toUpperCase():
str_WATERMARK = "YYYYMMDD";
element_param += " size='10' maxlength='10'";
element_param = element_param.ReplaceAll("%len%", "10");
element_param += " onblur=\"if (this.value.length==8) this.value=this.value.substring(0,4)+'/'+this.value.substring(4,6)+'/'+this.value.substring(6,8);\""
break;
case "Time".toUpperCase():
element_param += " size='%len%' maxlength='%len%'";
element_param = element_param.ReplaceAll("%len%", "5");
break;
case "DateTime".toUpperCase():
element_param += " size='20' maxlength='20'";
break;
case "YearMon".toUpperCase():
element_param += " size='7' maxlength='7'";
break;
default:
element_param += " size='20' maxlength='20'";
break;
}
var element_disabled = dt.getValueByRow(row, "ELE_DISABLED");
if (str_NOT_NULL == "1" && (this.str_namespace == "display.Edit.form" || this.str_namespace == "display.AddNew.form" || detail == true)
&& element_disabled != "1") {
required = true;
element_param += " style=\"border-color:red\"";
}
str_display_name = str_display_name.ReplaceAll("%namespace%", this.str_namespace);
str_display_name = str_display_name.ReplaceAll("%FormName%", this.str_form_name);
str_display_name = str_display_name.ReplaceAll("%EleName%", element_name);
if (str_TYPE.toUpperCase() == "FILE") {
_display_content.Append("");
}
else
_display_content.Append("");
if (str_TYPE.toUpperCase() == "BUTTON" && element_disabled != "1") {
_display_content.Append(" ");
}
if (str_TYPE.toUpperCase() == "Date".toUpperCase() && element_disabled != "1") {
// debugger; // 20191021 ccyang debug
var t_func = function() {
var year = (new Date()).getFullYear() + 5;
$j("[id=" + element_id + "]").datepicker({ dateFormat: 'yy/mm/dd',
showOn: 'button',
buttonImage: '/' + COMPANY_CODE + '/' + COMPANY_CODE + '/img/Calendar.png',
buttonImageOnly: true,
showButtonPanel: true,
changeYear: true,
yearRange: "1900:" + year,
onSelect: function(dateText, inst) {
calendarOnUpdate(this.id);
// 20191025 ccyang add
if (typeof onselect_func == 'function') {
onselect_func(dateText, inst,this.id);
} else {
// alert("not exist");
}
},
onClose: function(dateText, inst) {
calendarOnClose(this.id);
}
});
}
this.push_function(t_func)
controls.add(element_name, getValue, setValue);
}
if (str_TYPE.toUpperCase() == "YearMon".toUpperCase() && element_disabled != "1") {
var t_func = function() {
$j("[id=" + element_id + "]").datepicker({ dateFormat: 'yy/mm',
showOn: 'button',
buttonImage: '/' + COMPANY_CODE + '/' + COMPANY_CODE + '/img/Calendar.png',
buttonImageOnly: true,
showButtonPanel: true,
changeYear: true,
onSelect: function(dateText, inst) {
calendarOnUpdate(this.id);
},
onClose: function(dateText, inst) {
calendarOnClose(this.id);
}
});
}
this.push_function(t_func);
controls.add(element_name, getValue, setValue);
}
_display_content.Append(str_TAIL);
if (required) {
_display_content.Append(this.required_mark);
};
_display_content.replace("%name%", element_name);
_display_content.replace("%param%", element_param);
if (str_WATERMARK != "") {
var t_func = function() {
$j("[id=" + element_id + "_button]").watermark(str_WATERMARK, "watermark2");
}
this.push_function(t_func)
// 加入共用控制項
controls.add(element_name, getValue, setValue);
}
// 定義取得value的function
function getValue(ele_name) {
if ($(ele_name).value == str_WATERMARK)
return "";
if (str_TYPE.toUpperCase() == "Date".toUpperCase() || str_TYPE.toUpperCase() == "YearMon".toUpperCase()) {
return $(ele_name).value.ReplaceAll("/", "")
}
return $(ele_name).value;
}
function setValue(ele_name, ele_value) {
if (str_TYPE.toUpperCase() == "Date".toUpperCase()) {
$(ele_name).value = (ele_value == "" ? "" : ele_value.toString().substring(0, 4) + "/" + ele_value.toString().substring(4, 6) + "/" + ele_value.toString().substring(6, 8));
return;
}
if (str_TYPE.toUpperCase() == "YearMon".toUpperCase()) {
$(ele_name).value = (ele_value == "" ? "" : ele_value.toString().substring(0, 4) + "/" + ele_value.toString().substring(4, 6));
return;
}
$(ele_name).value = ele_value;
}
if (str_TYPE.toUpperCase() == "Date".toUpperCase()) {
// alert (_display_content);
}
try {
$(str_display_name).innerHTML = _display_content.ToString();
}
catch (e) {
alert("沒有這個物件可以使用:" + "display." + element_name);
}
if (str_TYPE.toUpperCase() == "BUTTON") {
var icon_name = dt.getValueByRow(row, "SYS_LIST_ITEM");
$j("[name='" + element_name + "_button']").button(
{ icons: {
primary: icon_name == "" ? "ui-icon-search" : icon_name
},
text: false
}).click(function(event) { event.stopPropagation(); textbutton_onclick(element_name); });
}
}
//***************************************************************************************************
this.create_html = function (row, element_name, element_param, str_url, str_element_list, schema_dt, detail_row, control_name, _value, _name)
//***************************************************************************************************
{
if (typeof(schema_dt) == "undefined")
{
var detail = false
var dt = this.dt;
}
else
{
var detail = true;
var dt = schema_dt;
}
var str_HEAD = dt.getValueByRow(row, "HEAD");
var _display_content = str_HEAD;
var str_NOT_NULL = dt.getValueByRow(row, "NOT_NULL");
var str_NUMERIC = dt.getValueByRow(row, "NUMERIC");
var str_TYPE = dt.getValueByRow(row, "TYPE");
var str_LEN = dt.getValueByRow(row, "LEN");
var str_display_name = this.str_display_name;
var required = false;
var str_TAIL = dt.getValueByRow(row, "TAIL");
if (element_param == "")
{
switch (str_TYPE.toUpperCase())
{
case "String".toUpperCase():
case "Numeric".toUpperCase():
element_param = "size='%len%' maxlength='%len%'";
element_param = element_param.ReplaceAll("%len%", str_LEN);
break;
case "DateTime".toUpperCase():
element_param = "size='20' maxlength='20'";
break;
default:
element_param = "size='20' maxlength='20'";
break;
}
var element_disabled = dt.getValueByRow(row, "ELE_DISABLED");
if (str_NOT_NULL == "1" && (this.str_namespace == "display.Edit.form" ||this.str_namespace == "display.AddNew.form")
&& element_disabled != "1")
{
element_param += " style=\"border-color:red\"";
required = true;
}
}
var str_display_name = this.str_display_name;
str_display_name = str_display_name.ReplaceAll("%namespace%", this.str_namespace);
str_display_name = str_display_name.ReplaceAll("%FormName%", this.str_form_name);
str_display_name = str_display_name.ReplaceAll("%EleName%", element_name);
_display_content += "";
_display_content = _display_content.ReplaceAll("%name%", element_name);
_display_content = _display_content.ReplaceAll("%param%", element_param);
_display_content += str_TAIL;
if (required)
{
_display_content += this.required_mark;
} ;
$(str_display_name).innerHTML = _display_content;
function getValue(ele_name)
{
return $j("[name=" + element_name + "]").html();
}
function setValue(ele_name, ele_value)
{
$j("[name=" + element_name + "]").html(ele_value);
}
// 加入共用控制項
controls.add(element_name, getValue, setValue);
}
//***************************************************************************************************
this.create_daterange = function (row, element_name, element_param)
//***************************************************************************************************
{
var dt = this.dt;
var str_HEAD = dt.getValueByRow(row, "HEAD");
var _display_content = str_HEAD;
var str_NOT_NULL = dt.getValueByRow(row, "NOT_NULL");
var str_NUMERIC = dt.getValueByRow(row, "NUMERIC");
var str_TYPE = dt.getValueByRow(row, "TYPE");
var str_DECIMAL = dt.getValueByRow(row, "DECIMAL");
var str_LEN = dt.getValueByRow(row, "LEN");
var str_display_name = this.str_display_name;
var required = false;
var str_TAIL = dt.getValueByRow(row, "TAIL");
var element_id = element_name + "1" ;
var element_id2 = element_name + "2" ;
if (element_param == "")
{
element_param = "size='10' maxlength='10'";
element_param = element_param.ReplaceAll("%len%", "10");
var element_disabled = dt.getValueByRow(row, "ELE_DISABLED");
if (str_NOT_NULL == "1" && (this.str_namespace == "display.Edit.form" ||this.str_namespace == "display.AddNew.form")
&& element_disabled != "1")
{
required = true;
element_param += " style=\"border-color:red\"";
}
}
str_display_name = str_display_name.ReplaceAll("%namespace%", this.str_namespace);
str_display_name = str_display_name.ReplaceAll("%FormName%", this.str_form_name);
str_display_name = str_display_name.ReplaceAll("%EleName%", element_name);
_display_content += "";
var t_func = function () {
$j("[id=" + element_id + "]").datepicker({ dateFormat: 'yy/mm/dd',
showOn: 'button',
buttonImage: '/' + COMPANY_CODE + '/' + COMPANY_CODE + '/img/Calendar.png',
buttonImageOnly: true,
showButtonPanel: true,
onSelect: function(dateText, inst) {
calendarOnUpdate(this.id);
} ,
onClose: function(dateText, inst) {
calendarOnClose(this.id);
}
});
}
this.push_function (t_func)
var t_func = function () {
$j("[id=" + element_id2 + "]").datepicker({ dateFormat: 'yy/mm/dd',
showOn: 'button',
buttonImage: '/' + COMPANY_CODE + '/' + COMPANY_CODE + '/img/Calendar.png',
buttonImageOnly: true,
showButtonPanel: true,
onSelect: function(dateText, inst) {
calendarOnUpdate(this.id);
} ,
onClose: function(dateText, inst) {
calendarOnClose(this.id);
}
});
}
this.push_function (t_func)
_display_content2 = _display_content;
_display_content = _display_content.ReplaceAll("%name%", element_name + "1");
_display_content = _display_content.ReplaceAll("%param%", element_param);
_display_content2 = _display_content2.ReplaceAll("%name%", element_name + "2");
_display_content2 = _display_content2.ReplaceAll("%param%", element_param);
_display_content = _display_content + "~" + " " + _display_content2;
_display_content += str_TAIL;
if (required)
{
_display_content += this.required_mark;
} ;
try
{
$(str_display_name).innerHTML = _display_content;
}
catch (e)
{
alert("沒有這個物件可以使用:" + "display." + element_name);
}
// 定義取得value的function
function getValue(ele_name)
{
var _element = document.getElementsByName(ele_name+"1");
var _element2 = document.getElementsByName(ele_name+"2");
if (_element.length == 1 && _element2.length == 1)
{
return (_element[0].value.ReplaceAll("/", "") + "," + _element2[0].value.ReplaceAll("/", ""));
}
}
function setValue(ele_name, ele_value)
{
if (ele_value == "") ele_value = ",";
var values = ele_value.split(",");
var _element = document.getElementsByName(ele_name+"1");
var _element2 = document.getElementsByName(ele_name+"2");
if (_element.length == 1 && _element2.length == 1)
{
_element[0].value = (values[0] == "" ? "" : values[0].toString().substring(0, 4) + "/" + values[0].toString().substring(4, 6) + "/" + values[0].toString().substring(6, 8));
_element2[0].value = (values[1] == "" ? "" : values[1].toString().substring(0, 4) + "/" + values[1].toString().substring(4, 6) + "/" + values[1].toString().substring(6, 8));
}
}
// 加入共用控制項
controls.add(element_name, getValue, setValue);
}
//***************************************************************************************************
this.create_time = function (row, element_name, element_param, str_url, str_element_list, schema_dt, detail_row, control_name, _value, _name)
//***************************************************************************************************
{
if (typeof(schema_dt) == "undefined")
{
var detail = false
var dt = this.dt;
}
else
{
var detail = true;
var dt = schema_dt;
}
var str_HEAD = dt.getValueByRow(row, "HEAD");
var _display_content = "";
var str_NOT_NULL = dt.getValueByRow(row, "NOT_NULL");
var str_NUMERIC = dt.getValueByRow(row, "NUMERIC");
var str_TYPE = dt.getValueByRow(row, "TYPE");
var str_DECIMAL = dt.getValueByRow(row, "DECIMAL");
var str_LEN = dt.getValueByRow(row, "LEN");
var str_display_name = this.str_display_name;
var required = false;
var str_TAIL = dt.getValueByRow(row, "TAIL");
var element_disabled = dt.getValueByRow(row, "ELE_DISABLED");
var len = dt.getValueByRow(row, "LEN");
element_param += " size='%len%' maxlength='%len%' ";
if (str_NOT_NULL == "1" && (this.str_namespace == "display.Edit.form" ||this.str_namespace == "display.AddNew.form")
&& element_disabled != "1")
{
required = true;
element_param += " style=\"border-color:red\"";
}
if (element_disabled == "1")
{
element_param += " disabled=\"true\"";
}
str_display_name = str_display_name.ReplaceAll("%namespace%", this.str_namespace);
str_display_name = str_display_name.ReplaceAll("%FormName%", this.str_form_name);
str_display_name = str_display_name.ReplaceAll("%EleName%", element_name);
_display_content += "";
// -----------------------------------------------------------------------------
_display_content2 = _display_content;
_display_content = _display_content.ReplaceAll("%events%", "onkeyup='autoTab(\"" + element_name + "_h\", \"" + element_name + "_m\",\"" + len + "\");'");
_display_content = _display_content.ReplaceAll("%name%", element_name + "_h");
_display_content = _display_content.ReplaceAll("%param%", element_param);
_display_content2 = _display_content2.ReplaceAll("%name%", element_name + "_m");
_display_content2 = _display_content2.ReplaceAll("%param%", element_param);
_display_content2 = _display_content2.ReplaceAll("%events%", "");
_display_content = _display_content.ReplaceAll("%len%", len);
_display_content2 = _display_content2.ReplaceAll("%len%", 2);
_display_content = _display_content + " : " + _display_content2;
_display_content += str_TAIL;
if (required)
{
_display_content += this.required_mark;
} ;
try
{
$(str_display_name).innerHTML = str_HEAD + _display_content;
}
catch (e)
{
alert("沒有這個物件可以使用:" + "display." + element_name);
}
// 定義取得value的function, 由 get_element_value 呼叫
function getValue(ele_name)
{
var _element = document.getElementsByName(ele_name+"_h");
var _element2 = document.getElementsByName(ele_name+"_m");
if (_element.length == 1 && _element2.length == 1)
{
if (_element[0].value == "" || _element2[0].value == "")
return ("");
else
return (parseInt(_element[0].value,10) * 60 + parseInt(_element2[0].value,10));
}
}
function setValue(ele_name, ele_value)
{
var _element = document.getElementsByName(ele_name+"_h");
var _element2 = document.getElementsByName(ele_name+"_m");
if (_element.length == 1 && _element2.length == 1)
{
if (ele_value == "")
{
_element[0].value="";
_element2[0].value="";
}
else
{
_element[0].value = Format(parseInt(ele_value / 60,10), "00");
_element2[0].value = Format(parseInt(ele_value % 60,10), "00");
}
}
}
// 加入共用控制項
controls.add(element_name, getValue, setValue);
}
//***************************************************************************************************
this.create_iframe = function (row, element_name, element_param)
//***************************************************************************************************
{
var dt = this.dt;
var str_URL = dt.getValueByRow(row, "URL");
var _display_content = "";
var str_NOT_NULL = dt.getValueByRow(row, "NOT_NULL");
var str_NUMERIC = dt.getValueByRow(row, "NUMERIC");
var str_TYPE = dt.getValueByRow(row, "TYPE");
var str_DECIMAL = dt.getValueByRow(row, "DECIMAL");
var LEN = dt.getValueByRow(row, "LEN");
var str_display_name = this.str_display_name;
var required = false;
var element_disabled = dt.getValueByRow(row, "ELE_DISABLED");
// element_param = "width='%width%' height='%height%'";
//element_param = element_param.ReplaceAll("%width%", LEN[0]);
//element_param = element_param.ReplaceAll("%height%", LEN[1]);
if (str_NOT_NULL == "1" && (this.str_namespace == "display.Edit.form" ||this.str_namespace == "display.AddNew.form")
&& element_disabled != "1")
{
required = true;
element_param += " style=\"border-color:red\"";
}
if (element_disabled == "1")
{
element_param += " disabled=\"true\"";
}
str_display_name = str_display_name.ReplaceAll("%namespace%", this.str_namespace);
str_display_name = str_display_name.ReplaceAll("%FormName%", this.str_form_name);
str_display_name = str_display_name.ReplaceAll("%EleName%", element_name);
// _display_content += "
";
_display_content = "