// 输入输出参数格式化 input = INPUT; try { input = decodeURIComponent(input); } catch(e) {} try { input = base64.decode(input); } catch(e) {} try { input = JSON.parse(input); input = JSON.parse(input); } catch(e) {} output = {}; // 主执行阶段 try { if (!input.classname) { // like /cncc/itil/project throw ("需要指定classname"); } if (input.classname[0] != "/") { // like /cncc/itil/project throw ("classname必须以 / 开头"); } sjsfn = input.jsfilename; if (!sjsfn) { sjsfn = "/script" + input.classname; // like /script/cncc/itil/project } if (sjsfn.substring(0, 8) != "/script/") { throw ("jsfilename必须以 /script/ 开头"); } sjsfn = sjsfn.replace(/\.js$/, ""); output.file = sjsfn; dtm = new Date().toJSON(); mql = "insert into " + input.classname + " (\n"; mql_values = ") values (\n"; mql_end = ")"; values = ""; fieldmap = input.fieldmap; if (!fieldmap) { fieldmap = {}; } xfieldmap = {}; xfields = []; clsfields = {}; try { fieldslist = odb.classfields(input.classname); for (var fi = 0; fi < fieldslist.length; fi++) { fld = fieldslist[fi]; fname = fld.name; if (/^\w+\:.*/.test(fname)) { fname = fname.replace(/^\w+\:/, ""); } if (fname && fld.ftype) { clsfields[fname] = { iskey: fld.iskey, ftype: fld.ftype, }; } } } catch(e) {} for (var k in input.data) { xk = fieldmap[k]; if (!xk) { xk = "j_"; // 区别于其它字段,自动创建的字段以 j_ 开头 for (var i = 0; i < k.length; i++) { if (k[i] >= 'A' && k[i] <= 'Z') { xk += "_" + k[i].toLowerCase(); } else { xk += k[i]; } } fieldmap[k] = xk; } xfields.push(xk); xfieldmap[xk] = k; } xfields.sort(); fsep = ","; for (var i = 0; i < xfields.length; i++) { if (i == xfields.length - 1) { fsep = ""; } xk = xfields[i]; k = xfieldmap[xk]; mql += xk + fsep + "\n"; mql_values += "?" + fsep + "\n"; values += " "; v = input.data[k]; if (!clsfields[xk]) { throw("字段不存在", xk) } switch (clsfields[xk].ftype) { case "text": case "varchar": if (typeof(v) == "object") { values += "JSON.stringify("; values += "input." + k + ", \" \", 4)" + fsep; values += JSON.stringify(v, " ", 4).replace(/^/mg, " // ").replace(/ /, " "); } else { values += "\"\"+"; values += "input." + k + fsep; values += (""+v).replace(/^/mg, " // ").replace(/ /, " "); } break; default: values += "input." + k + fsep; values += (""+v).replace(/^/mg, " // ").replace(/ /, " "); } values += "\n "; } mql += mql_values + mql_end; values = "\n " + values; datainfo = "{"; datacheck = ""; if (input.mustfield) { ids = input.mustfield.split(","); for (var i = 0; i < ids.length; i++) { id = ids[i]; if (i > 0) { datacheck += "\n "; } datacheck += "if (!input." + id + ") {\n "; datacheck += " throw (\"输入参数必须为对象,且指定属性" + id + "\");\n "; datacheck += "}"; if (i == 0) { datainfo += "\n "; } else { datainfo += ",\n "; } datainfo += " " + id + ": input." + id; } } datainfo += "\n "; datainfo += "}"; importjs = dfs.read("/script/matrix/utils/JsonImporter.template.js"); importjs = importjs.replace(/___istesting___/mg, input.istesting); importjs = importjs.replace(/___classname___/mg, input.classname); importjs = importjs.replace(/___datetime_now___/mg, dtm); importjs = importjs.replace(/if\s*\(\s*___datacheck___\s*\)\s*\{.*\}/mg, datacheck); importjs = importjs.replace(/___mql___/mg, mql); importjs = importjs.replace(/___values___/mg, values); importjs = importjs.replace(/___datainfo___/mg, datainfo); output.content = importjs; dfs.write(sjsfn + ".js", importjs); } catch(e) { if (typeof(e) == "object") { output.error = e; } else if (typeof(e) == "string") { output.error = "错误:" + e; } else { output.error = JSON.stringify(e); } } // 返回输出信息 OUTPUT = output;