页面动态JS加载脚本,是点晴MIS系统中一项非常重要的功能,可以动态加载JS脚本、自定义SQL语句获取JSON返回值等,从而对页面上的元素进行更为个性化的控制,以及增加新的功能。
为了避免动态JS加载自定义SQL语句时,别有用心的人员通过浏览器调试模式自行修改自定义SQL语句给系统带来安全隐患,点晴MIS系统页面动态JS加载脚本设计时,必须严格按照以下规范来引入自定义SQL语句。
一、点击相应模块页面右上角按钮“页面JS脚本”,进入后先在页面最顶部增加需要使用的自定义SQL语句
增加自定义SQL语句时,系统会自动给每个SQL语句分配一个20位长的唯一识别码,后面引用此自定义SQL语句时,必须使用此20位唯一识别码,不允许直接在JS中写SQL语句:
1、上述值更改后直接生效,本页最下方保存按钮不会保存本位置内容变更;
2、在下面JS脚本中需要动态使用SQL的位置,用上面固定长度20位的识别码代替真实自定义SQL语句,可以有效防范SQL被用户篡改;
3、请不要在下面的JS脚本中直接使用SQL语句,直接写入的SQL不会被后台执行;
4、输入自定义SQL时,SQL中需要接收的变量,用“{传入参数名称}”代替,示例:
select TOP(1) inquiry_list_id,inquiry_of_price, inquiry_of_tax_price, max_quantity, min_quantity from scm_inquiry_order_list right OUTER JOIN scm_inquiry_order on scm_inquiry_order.inquiry_order_id=scm_inquiry_order_list.inquiry_order_id where scm_inquiry_order_list.client_code='{client_code}' AND scm_inquiry_order_list.product_code='{product_code}' and (('{order_quantity}'<=max_quantity and '{order_quantity}'>=min_quantity) or max_quantity=0) and scm_inquiry_order.orderstat=1 order by inquiry_list_id desc
二、在下面的表体JS、提交前JS、提交后JS、按钮JS四个脚本框中,视需要引入上面增加的自定义SQL语句
引入自定义SQL语句时,必须使用上面系统分配的20位唯一识别码,考虑到SQL中需要带入JS传入的变量,所以约定按照以下格式引入自定义SQL语句以及接收JS传入的参数:
"自定义SQL语句唯一码?参数1="+参数1值+"&参数2="+参数2值+"&参数3="+参数3值;
var sql_str="SQL2410240936XALWYO3?client_code="+client_code+"&product_code="+product_code;
类似于页面URL地址结构,第一个值必须是自定义SQL语句唯一识别码,后面是接收传入的参数。
范例参见点晴ERP系统新增采购单-》JS提取询价单价:
自定义SQL语句:
select TOP(1) inquiry_list_id,inquiry_of_price, inquiry_of_tax_price, max_quantity, min_quantity from scm_inquiry_order_list right OUTER JOIN scm_inquiry_order on scm_inquiry_order.inquiry_order_id=scm_inquiry_order_list.inquiry_order_id where scm_inquiry_order_list.client_code='{client_code}' AND scm_inquiry_order_list.product_code='{product_code}' and (('{order_quantity}'<=max_quantity and '{order_quantity}'>=min_quantity) or max_quantity=0) and scm_inquiry_order.orderstat=1 order by inquiry_list_id desc
表体JS:
async function get_purchase_price(client_code,product_code,order_quantity,at_num){ //方法2,用于复杂查询,直接传入完整SQL
var sql_str="SQL2310231215LLNNVIT?client_code="+client_code+"&product_code="+product_code+"&order_quantity="+order_quantity;
var get_id="tmpID"+at_num; //随意命名,用于临时暂存数据的ID,不与页面上其他ID重复即可
var alert_flag=1;
var wait_time=3000;
get_sql_value(sql_str, get_id, alert_flag); //本行勿动,以上变量会自动传入本函数
var tmpValue=await getSomething(get_id,wait_time); //本行勿动,以上变量会自动传入本函数
//alert(id_value+"所在岗位:"+tmpValue); //tmpValue即为获得的字段值,此行开始自行写JS脚本
var myobj=JSON.parse(tmpValue);
no_num=0;
for(var i=0;i<myobj.length;i++){
try{document.getElementById('inquiry_list_id'+at_num).value=myobj[i].inquiry_list_id;}catch(err){}
try{document.getElementById('order_tax_price'+at_num).value=myobj[i].inquiry_of_tax_price;}catch(err){}
try{document.getElementById('inquiry_max_quantity'+at_num).value=myobj[i].max_quantity;}catch(err){}
try{document.getElementById('inquiry_min_quantity'+at_num).value=myobj[i].min_quantity;}catch(err){}
try{document.getElementById('order_price'+at_num).value=myobj[i].inquiry_of_price;}catch(err){}
try{document.getElementById('product_sum_price'+at_num).value=zeroformat(myobj[i].inquiry_of_price*document.getElementById('order_quantity'+at_num).value);}catch(err){}
try{document.getElementById('product_sum_tax_price'+at_num).value=zeroformat(myobj[i].inquiry_of_tax_price*document.getElementById('order_quantity'+at_num).value);}catch(err){}
no_num++;
}
sum_list_price();
}
执行JS按钮脚本:
if(!confirm("你确定要提取询价价格吗?")){return false;}
var client_code=document.getElementById("client_code").value;
if (client_code==""){alert("执行JS失败:供应商名称禁止为空!");return false;}
var num=document.getElementById("num").value;
for (var tmpNum=0;tmpNum<num;tmpNum++)
{
var product_code=document.getElementById("product_code"+tmpNum).value;
var order_quantity=document.getElementById("order_quantity"+tmpNum).value;
if(product_code!="" && order_quantity>0)
{
get_purchase_price(client_code,product_code,order_quantity,tmpNum);
}
}
相关教程:
如何给点晴MIS系统任意页面增加自定义JS函数及操作脚本功能,并支持JS直接提取SQLServer数据库后台数据参与运算或赋值显示[2254]
http://17810.oa22.cn
该文章在 2024/10/30 11:37:23 编辑过