Dùng để bẩy lỗi trong 1 số trường hợp lỗi mạng, lỗi session đăng nhập.
* Ngoài datatable của sql trả về còn có thêm 1 datatable hệ thống
__SYS_Query
Row 0:
************************
State: 100
DESC: Connect server success
************************
State: 400
DESC: Login error
* Quy trình chính khi click 1 nút lên và gọi hàm có gởi dữ liệu đến server
- Kiểm tra có internet không ? check_iif_callServer
- Kiểm tra kết nối đến server thành công
* Nếu hết hạn hay để quá lâu mới truy cập sẽ trả về 400
* Có 2 hàm
CheckServer_Run_Query(data);
CheckServer_Internet_Run_Query(data); // tự gọi luôn hàm check_iif_callServer
Lưu javascript tại themes\lib_cm\check_ev_do.js
Ví dụ 1 hàm angular
--- 2 dòng copy vào
if( !Check_iif_Before_CallServer()) return;
if(!CheckServer_Run_Query( response.data)) return;
//Hay
if(!CheckServer_Run_Query( response.data)) {loadding_hide(); return; }
-----------------------------
$scope.LuuDuLieu= function (objJS,ev) {
// Kiểm tra internet trước, nếu mạng rớt sẽ báo sau đó kết thúc, không cần gọi server
if( !Check_iif_Before_CallServer()) return;
$http({
method : "POST",
url : "google.com"
}).then(function mySuccess(response)
{//Xem server trả về có đăng nhập thành công không ?
if(!CheckServer_Run_Query( response.data)) return;
// mới code tiếp xử lý dữ liệu trả về,
COMMON_thongBaoLuuXong(response.data.chungtu_save);
$scope.loadData_ChungTu();
}, function myError(response)
{
alert( "LỖI:"+ response.statusText );
}
);
}
// Hàm này đã có sẵn trong hệ thống
function CheckServer_Run_Query(data)
{
//START: KIEM TRA TRUOC KHI GOI SERVER
if( data.__SYS_Query[0].STATE ==400)
{
alert("** Đăng nhập thất bại !\n > Vui lòng đăng nhập lại");
OpenBrWindow("/adminxml/sys_Login.aspx?popu=1", "Login",600,500);
return false;
}
if(!check_iif_callServer())
return false;
//END: KIEM TRA TRUOC KHI GOI SERVER
return true;
}
* Hàm có sẵn trong themes/lib_cm
CheckServer_Run_Query(data)
- Nếu mất kết nối internet hay đăng nhập sẽ báo lỗi.
var url="/adminxml/Query_Do.aspx?name=BanHangOnline/DatHang_Luu&out=json";
$.post( url,
data
)
.done(function( data ) {
//alert( JSON.stringify(data ) );//alert( data.__SYS_Query[0].STATE );
if( !CheckServer_Run_Query(data)) // GỌI SAU DÒNG data
return ;
// Code tiếp....
});
** nếu angular
var url= "/adminxml/Query_Do.aspx?name=BanHangOnline/SoDo&out=json";
$http({
method : "GET",
url : url
}).then(function mySuccess(response)
{
if( !CheckServer_Run_Query(response.data))
return ;
//Code...
}//then
,function myError(response)
{
alert( "LỖI: "+ response.statusText );
}
); //$http
* Nếu là Query Insert và Update thì query trả về:
CountDo: 1
1: là số bảng ghi insert, update, delete thành công, dựa vào để xác định việc cập nhập có thành công không ?
*************************************************
-- Cách code thêm có xử lý loading và bẩy lỗi:
* (1): Thêm nút lệnh có xử lý đóng
<button type="button" class="btSave btn btn-danger" state=""><i class="far fa-save"></i> Lưu</button>
<button type="button" class="btSave btSaveClose btn btn-danger" state="close"><i class="far fa-save"></i> Lưu và đóng</button>
<button type="button" class="btCloseFrm btn btn-primary"><i class="fas fa-times-circle"></i> Đóng</button>
********************************
* (2): Thêm lệnh cho sự kiện nút lưu
$(".btSave").click(function(){
..... thêm vào đây
});
********************************
alert_pIIF_stand('* Đang lưu...');
var data = {};
$.each( $("#frmMe").serializeArray(), function() {
data[this.name]= htmlEncode( this.value);
if(this.name=="CotNgay") // nếu có kểu ngày
data[this.name]= convertDate_dmy_ymd( data[this.name] ).replaceAll("/","-") ;
});
var state= $(this).attr("state");
var url="/adminxml/Query_Do.aspx?name=NhaHang/HopDong_CapNhat&key="+urlGetValuePara("key")+"&out=json";
$.post( url,
data
)
.done(function( data ) {
//*******PRINT TEST ************
// alert( JSON.stringify(data ) );
// alert_pIIF_stand_close();
// alert( data.__SYS_Query[0].STATE);
if( data.__SYS_Query[0].STATE==100 ) // kết nối thành công server và thực query
{
if( data.Q1[0].CountDo !=undefined)
{
if( data.Q1[0].CountDo>1)
alert_pIIF('Thông báo',"Lưu thành công",2500,"success");
else
alert_pIIF('Thông báo',"Lưu gặp lỗi",3000,"danger");
}
if( data.Q1[0].Return !=undefined)
alert_pIIF('Lỗi', data.Q1[0].Return);
}// if( data.__SYS_Query[0].STATE==100 )
else if( data.__SYS_Query[0].STATE==400 ) // kết nối thành công server nhưng login error
{
alert_pIIF('Thông báo',"Đăng nhập thất bại !",5000,"danger");
}
if(state=="close" && data.__SYS_Query[0].STATE==100)
{
// Nếu là pupop thì đóng và nạp lại
setTimeout(function(){
//window.parent.alert_pIIF_stand('* Đang nạp lại...'); //muốn xuất hiện thông báo
window.parent.IIF_f_Close_Popup_R();
}, 1200);
}
})
.fail(function() {
alert( "Error SYS ....." );
})
.always(function() {
//alert( "finished" );
});
**** Khi chạy lỗi kiểm tra lại
1. Biến Query trả về có phải Q1 hay không, nếu là Q2 sửa lại, hay sửa lại code JS cho phù hợp
2. Trong query cần sửa lệnh
- Thêm điều kiện nếu ngày null, xem cấu hình lệnh cấu hình ngày null x
- Cấu hình SqlConfig
<SqlConfig>
Call:ExecuteNonQuery
</SqlConfig>
Vì cần trả về số bảng ghi thực hiện được, không để ExecuteScalar
3. Nút đóng chưa thực hiện được, thêm
$('.btCloseFrm').click(function(){
window.parent.IIF_f_Close_Popup();
});
x