Xử lý query biến kết quả trả về

Đùng dể bẩy lỗi các trường hợp cập nhật cơ sỡ dũ liệu.

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

Mục liên quan: