頁面動態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 編輯過