我本来是想做主子表添加更新的,但主子表不在同一个页面上,我就想把子页面上的所有值都提取出来,但提取出来后在服务端命令中操作太麻烦了,还是用ai生成javascript命令香,直接生成子表的sql命令进行添加修改。- // 活字格专用:根据ID判断生成INSERT或UPDATE语句
- function generateSQLForForguncy() {
- try {
- // 1. 从活字格变量获取输入值
- const biaomin = Forguncy.CommandHelper.getVariableValue("biaomin");
- const shuruzhi = Forguncy.CommandHelper.getVariableValue("shuruzhi");
- const id = Forguncy.CommandHelper.getVariableValue("id"); // 新增:ID变量
-
- // 验证输入
- if (!biaomin || typeof biaomin !== 'string') {
- throw new Error("表名变量 'biaomin' 必须是字符串");
- }
-
- if (!Array.isArray(shuruzhi)) {
- throw new Error("输入数据变量 'shuruzhi' 必须是数组");
- }
-
- // 2. 处理数据
- const fields = [];
- const values = [];
- const rawValues = [];
- const setClauses = []; // 用于UPDATE语句
-
- shuruzhi.forEach(item => {
- // 每个对象只有一个键值对
- const key = Object.keys(item)[0];
- const value = item[key];
-
- fields.push(key);
- rawValues.push(value);
-
- // 处理SQL值格式
- let formattedValue;
- if (value === null) {
- formattedValue = 'null';
- } else if (typeof value === 'number') {
- formattedValue = value;
- } else if (typeof value === 'string') {
- // 转义单引号,防止SQL注入
- const escapedValue = value.replace(/'/g, "''");
- formattedValue = `'${escapedValue}'`;
- } else if (typeof value === 'boolean') {
- formattedValue = value ? '1' : '0';
- } else {
- formattedValue = `'${JSON.stringify(value)}'`;
- }
-
- values.push(formattedValue);
- setClauses.push(`${key} = ${formattedValue}`); // 为UPDATE准备
- });
-
- // 3. 根据id判断生成INSERT或UPDATE语句
- let sql;
- let sqlType;
-
- // 判断id是否为空(null、undefined、空字符串都视为空)
- const isEmptyId = id === null || id === undefined || id === '' || String(id).trim() === '';
-
- if (isEmptyId) {
- // id为空,生成INSERT语句
- sql = `INSERT INTO ${biaomin} (${fields.join(',')}) VALUES (${values.join(',')});`;
- sqlType = "INSERT";
- } else {
- // id不为空,生成UPDATE语句
- // 注意:这里假设id是证书ID,使用certificate_id作为条件
- sql = `UPDATE ${biaomin} SET ${setClauses.join(', ')} WHERE certificate_id = '${id}';`;
- sqlType = "UPDATE";
- }
-
- // 4. 将结果保存到活字格变量
- Forguncy.CommandHelper.setVariableValue("sql", sql);
- Forguncy.CommandHelper.setVariableValue("sqlType", sqlType);
- Forguncy.CommandHelper.setVariableValue("fieldList", `(${fields.join(',')})`);
- Forguncy.CommandHelper.setVariableValue("valueList", `(${values.join(',')})`);
-
- // 5. 返回成功信息
- return {
- success: true,
- message: `SQL(${sqlType})生成成功`,
- sql: sql,
- type: sqlType
- };
-
- } catch (error) {
- // 错误处理
- console.error("生成SQL时出错:", error.message);
-
- // 将错误信息保存到变量
- Forguncy.CommandHelper.setVariableValue("sql", "");
- Forguncy.CommandHelper.setVariableValue("sqlType", "ERROR");
- Forguncy.CommandHelper.setVariableValue("error", error.message);
-
- return {
- success: false,
- message: error.message
- };
- }
- }
- // 在活字格中调用
- generateSQLForForguncy();
复制代码 |