JsonImporterGen.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. // 输入输出参数格式化
  2. input = INPUT;
  3. try {
  4. input = decodeURIComponent(input);
  5. } catch(e) {}
  6. try {
  7. input = base64.decode(input);
  8. } catch(e) {}
  9. try {
  10. input = JSON.parse(input);
  11. input = JSON.parse(input);
  12. } catch(e) {}
  13. output = {};
  14. // 主执行阶段
  15. try {
  16. if (!input.classname) { // like /cncc/itil/project
  17. throw ("需要指定classname");
  18. }
  19. if (input.classname[0] != "/") { // like /cncc/itil/project
  20. throw ("classname必须以 / 开头");
  21. }
  22. sjsfn = input.jsfilename;
  23. if (!sjsfn) {
  24. sjsfn = "/script" + input.classname; // like /script/cncc/itil/project
  25. }
  26. if (sjsfn.substring(0, 8) != "/script/") {
  27. throw ("jsfilename必须以 /script/ 开头");
  28. }
  29. sjsfn = sjsfn.replace(/\.js$/, "");
  30. output.file = sjsfn;
  31. dtm = new Date().toJSON();
  32. mql = "insert into " + input.classname + " (\n";
  33. mql_values = ") values (\n";
  34. mql_end = ")";
  35. values = "";
  36. fieldmap = input.fieldmap;
  37. if (!fieldmap) {
  38. fieldmap = {};
  39. }
  40. xfieldmap = {};
  41. xfields = [];
  42. clsfields = {};
  43. try {
  44. fieldslist = odb.classfields(input.classname);
  45. for (var fi = 0; fi < fieldslist.length; fi++) {
  46. fld = fieldslist[fi];
  47. fname = fld.name;
  48. if (/^\w+\:.*/.test(fname)) {
  49. fname = fname.replace(/^\w+\:/, "");
  50. }
  51. if (fname && fld.ftype) {
  52. clsfields[fname] = {
  53. iskey: fld.iskey,
  54. ftype: fld.ftype,
  55. };
  56. }
  57. }
  58. } catch(e) {}
  59. for (var k in input.data) {
  60. xk = fieldmap[k];
  61. if (!xk) {
  62. xk = "j_"; // 区别于其它字段,自动创建的字段以 j_ 开头
  63. for (var i = 0; i < k.length; i++) {
  64. if (k[i] >= 'A' && k[i] <= 'Z') {
  65. xk += "_" + k[i].toLowerCase();
  66. } else {
  67. xk += k[i];
  68. }
  69. }
  70. fieldmap[k] = xk;
  71. }
  72. xfields.push(xk);
  73. xfieldmap[xk] = k;
  74. }
  75. xfields.sort();
  76. fsep = ",";
  77. for (var i = 0; i < xfields.length; i++) {
  78. if (i == xfields.length - 1) {
  79. fsep = "";
  80. }
  81. xk = xfields[i];
  82. k = xfieldmap[xk];
  83. mql += xk + fsep + "\n";
  84. mql_values += "?" + fsep + "\n";
  85. values += " ";
  86. v = input.data[k];
  87. if (!clsfields[xk]) {
  88. throw("字段不存在", xk)
  89. }
  90. switch (clsfields[xk].ftype) {
  91. case "text":
  92. case "varchar":
  93. if (typeof(v) == "object") {
  94. values += "JSON.stringify(";
  95. values += "input." + k + ", \" \", 4)" + fsep;
  96. values += JSON.stringify(v, " ", 4).replace(/^/mg, " // ").replace(/ /, " ");
  97. } else {
  98. values += "\"\"+";
  99. values += "input." + k + fsep;
  100. values += (""+v).replace(/^/mg, " // ").replace(/ /, " ");
  101. }
  102. break;
  103. default:
  104. values += "input." + k + fsep;
  105. values += (""+v).replace(/^/mg, " // ").replace(/ /, " ");
  106. }
  107. values += "\n ";
  108. }
  109. mql += mql_values + mql_end;
  110. values = "\n " + values;
  111. datainfo = "{";
  112. datacheck = "";
  113. if (input.mustfield) {
  114. ids = input.mustfield.split(",");
  115. for (var i = 0; i < ids.length; i++) {
  116. id = ids[i];
  117. if (i > 0) {
  118. datacheck += "\n ";
  119. }
  120. datacheck += "if (!input." + id + ") {\n ";
  121. datacheck += " throw (\"输入参数必须为对象,且指定属性" + id + "\");\n ";
  122. datacheck += "}";
  123. if (i == 0) {
  124. datainfo += "\n ";
  125. } else {
  126. datainfo += ",\n ";
  127. }
  128. datainfo += " " + id + ": input." + id;
  129. }
  130. }
  131. datainfo += "\n ";
  132. datainfo += "}";
  133. importjs = dfs.read("/script/matrix/utils/JsonImporter.template.js");
  134. importjs = importjs.replace(/___istesting___/mg, input.istesting);
  135. importjs = importjs.replace(/___classname___/mg, input.classname);
  136. importjs = importjs.replace(/___datetime_now___/mg, dtm);
  137. importjs = importjs.replace(/if\s*\(\s*___datacheck___\s*\)\s*\{.*\}/mg, datacheck);
  138. importjs = importjs.replace(/___mql___/mg, mql);
  139. importjs = importjs.replace(/___values___/mg, values);
  140. importjs = importjs.replace(/___datainfo___/mg, datainfo);
  141. output.content = importjs;
  142. dfs.write(sjsfn + ".js", importjs);
  143. } catch(e) {
  144. if (typeof(e) == "object") {
  145. output.error = e;
  146. } else if (typeof(e) == "string") {
  147. output.error = "错误:" + e;
  148. } else {
  149. output.error = JSON.stringify(e);
  150. }
  151. }
  152. // 返回输出信息
  153. OUTPUT = output;