JS获取选中行的数据

在对数据复选后,获取当前行的数据,下发到别的数据库表 

console.log('cesi-----------')

//获取当前值

var boxes = _g().getWidgetsByName("box");

console.log('查看-----------',boxes);

//获取当前页的复选按钮控件数组

var selectedRows = [];

console.log('查看-----------',selectedRows)

if (typeof(boxes[0]) != "undefined") {

for (i = 0; i < boxes.length; i++) {

if (boxes[i].selected()) {

selectedRows.push(boxes[i].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[i]; // 选中行的索引

    // 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[deviceName];

    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("完成", "数据下发处理完成!");

企业微信截图_17554979842444.png

FineReport 帆软用户SZTRNEJF7j 发布于 2025-8-18 14:21
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
snrtuemcLv8专家互助
发布于2025-8-18 14:23

帆软没有

FR.cellStr

这个函数啊,你哪边来的

  • 帆软用户SZTRNEJF7j 帆软用户SZTRNEJF7j(提问者) 我可以用什么呢
    2025-08-18 14:24 
  • snrtuemc snrtuemc 回复 帆软用户SZTRNEJF7j(提问者) 不知道你这个要做什么,正常雷士的函数是这个用法
    单元格的编辑后或者编辑结束事件
    var cr = FR.cellStr2ColumnRow(location); //根据单元格编号获取行列索引
    var col = cr.col; //列号
    var ro = cr.row; //行号
    2025-08-18 14:26 
最佳回答
0
用户k6280494Lv6专家互助
发布于2025-8-18 14:27
  • 3关注人数
  • 24浏览人数
  • 最后回答于:2025-8-18 14:27
    请选择关闭问题的原因
    确定 取消
    返回顶部