在对数据复选后,获取当前行的数据,下发到别的数据库表 console.log('cesi-----------')//获取当前值var boxes = _g().getWidgetsByName("box");console.log('查看-----------',boxes);//获取当前页的复选按钮控件数组var selectedRows = ;console.log('查看-----------',selectedRows)if (typeof(boxes) != "undefined") {for (i = 0; i < boxes.length; i++) { if (boxes.selected()) { selectedRows.push(boxes.options.location); //如果控件大于1个,则遍历判断是否选中,将选中的控件所在的单元格编号塞进数组中 } }} else { if (boxes.selected()) { selectedRows.push(boxes.options.location); //如果控件只有1个,则直接判断是否选中,选中的话把单元格编号塞进数组中 }}console.log('查看-----------',selectedRows)// 转义函数:处理SQL中的单引号等特殊字符function escapeSql(str) { if (str === null || str === undefined) return ''; return String(str).replace(/'/g, "''"); // 将单引号替换为两个单引号避免SQL语法错误}// 2. 定义目标表(按设备名称分类)var tableMap = { "成型机": "plan_production_schedule_cx", "硫化机": "plan_production_schedule_lh"};// 3. 遍历选中行,分类处理(从0开始遍历所有选中行)for (var i = 0; i < selectedRows.length; i++) { var rowIndex = selectedRows; // 选中行的索引 // 4. 获取当前行数据(修复对象语法,添加逗号分隔) var rowData = { "equipment_code": escapeSql(FR.cellStr(rowIndex, 1)), // 第2列:设备编码 "equipment_name": escapeSql(FR.cellStr(rowIndex, 2)), // 第3列:设备名称 "work_team_code": escapeSql(FR.cellStr(rowIndex, 3)), // 第4列:班组编码 "work_team_name": escapeSql(FR.cellStr(rowIndex, 4)), // 第5列:班组名称 "work_team_time": escapeSql(FR.cellStr(rowIndex, 5)), // 第6列:班次 "plan_code": escapeSql(FR.cellStr(rowIndex, 6)), // 第7列:任务编号 "status": escapeSql(FR.cellStr(rowIndex, 7)), // 第8列:任务状态 "process_order": escapeSql(FR.cellStr(rowIndex, 8)), // 第9列:生产顺序号 "product_code": escapeSql(FR.cellStr(rowIndex, 9)), // 第10列:物料编码 "product_name": escapeSql(FR.cellStr(rowIndex, 10)), // 第11列:物料名称 "product_spec": escapeSql(FR.cellStr(rowIndex, 11)), // 第12列:规格 "qty": escapeSql(FR.cellStr(rowIndex, 12)), // 第13列:数量 "unit": escapeSql(FR.cellStr(rowIndex, 13)), // 第14列:单位 "start_time": escapeSql(FR.cellStr(rowIndex, 14)), // 第15列:计划开始时间 "end_time": escapeSql(FR.cellStr(rowIndex, 15)), // 第16列:计划结束时间 "stock_out_time_of_next_process": escapeSql(FR.cellStr(rowIndex, 16)), // 第17列:下工序缺料时间点 "importance": escapeSql(FR.cellStr(rowIndex, 17)), // 第18列:重要程度 "formula_code": escapeSql(FR.cellStr(rowIndex, 18)), // 第19列:指定配方编码 "formula_version": escapeSql(FR.cellStr(rowIndex, 19)), // 第20列:指定配方版本 "process_method_code": escapeSql(FR.cellStr(rowIndex, 20)), // 第21列:指定工艺编码 "process_method_version": escapeSql(FR.cellStr(rowIndex, 21)) // 第22列:指定工艺版本 }; // 5. 判断设备类型(使用equipment_name字段,修复之前的"设备编号"错误) var deviceName = rowData.equipment_name; var targetTable = tableMap; if (!targetTable) { FR.Msg.alert("提示", `设备类型【${deviceName}】无匹配目标表,跳过该行!`); continue; } // 6. 拼接SQL(修复VALUES部分的逗号缺失问题) var sql = ` INSERT INTO ${targetTable} ( equipment_code, equipment_name, work_team_code, work_team_name, work_team_time, plan_code, status, process_order, product_code, product_name, product_spec, qty, unit, start_time, end_time, stock_out_time_of_next_process, importance, formula_code, formula_version, process_method_code, process_method_version ) VALUES ( '${rowData.equipment_code}', '${rowData.equipment_name}', '${rowData.work_team_code}', '${rowData.work_team_name}', '${rowData.work_team_time}', '${rowData.plan_code}', '${rowData.status}', '${rowData.process_order}', '${rowData.product_code}', '${rowData.product_name}', '${rowData.product_spec}', '${rowData.qty}', '${rowData.unit}', '${rowData.start_time}', '${rowData.end_time}', '${rowData.stock_out_time_of_next_process}', '${rowData.importance}', '${rowData.formula_code}', '${rowData.formula_version}', '${rowData.process_method_code}', '${rowData.process_method_version}' ) `; // 7. 执行SQL try { FR.remoteEvaluate({ sql: sql, dbLink: "服务器1(计划)" // 确保连接名与设计器配置一致 }); FR.Msg.alert("提示", `第 ${rowIndex + 1} 行数据已下发到【${targetTable}】`); } catch (e) { FR.Msg.alert("错误", `第 ${rowIndex + 1} 行下发失败:${e.message}`); console.error("SQL执行错误:", e, "SQL语句:", sql); // 控制台打印详细错误 }}FR.Msg.alert("完成", "数据下发处理完成!");