var sql = "EXEC FRDB..SP_CRM '" + D3 + "', '" + USER + "', '" + ERP + "'"; FR.remoteEvaluate('SQL("FRDB-217", "' + sql + '", 1,1))');按钮元件按下去没执行
FR.remoteEvaluate中的SQL()函数仅支持查询语句(SELECT),不支持EXEC执行存储过程。这是FineReport设计上的安全限制
系统默认开启「脚本调用公式限制」,会直接拦截FR.remoteEvaluate的使用,导致无反应。需在【数据决策系统→管理系统→安全管理→脚本调用公式限制】中关闭此开关
参数拼接语法错误当前代码存在SQL注入风险和语法闭合问题
--------
方案1:
新建【存储过程数据集】,直接调用 SP_CRM。
设置参数绑定,通过 ${参数名} 动态传递 D3, USER, ERP
方案2:
// 使用encodeURIComponent转义特殊字符 var d3_val = encodeURIComponent(D3); var user_val = encodeURIComponent(USER); var erp_val = encodeURIComponent(ERP); var sql = "EXEC FRDB..SP_CRM '" + d3_val + "', '" + user_val + "', '" + erp_val + "'"; FR.remoteEvaluate('sql("FRDB-217","' + sql.replace(/"/g, '\\"') + '",1,1)');
var sql="exec sp_rms_select_0460 "+FUNDCODE+","+DATE+","+STATUS;
var res=FR.remoteEvaluate('=sql("dbbasedata","'+sql+'",1,1)');
=====解释说明
var sql="exec 存储过程名称 "+参数1+","+参数2+","+参数3;
var res=FR.remoteEvaluate('=sql("数据库连接","'+sql+'",1,1)');
-----------------
记得关闭这个