让Genexus9 U2集成JQuery

步骤如下:

1.下载最新jquery的js包(http://jquery.com/)并拷贝至tomcat的genexus工程下,和setevent.js等文件同一目录。因为jquery并不是genexus自带的js包,所以发布时需要手动拷贝过去。

2.新建webpanner名为:hwbp01,画面上追加一个按钮名为:Button1,在Genexus的Start事件里加入如下代码:

  1. Event Start
  2.     &WS_SESSION.Set('TEST_SESSION_VALUE', '0')
  3.     W_V_SAVE_SESSION_URL = "http://localhost:8080/SCRM4U/servlet/hwbp01"
  4.     W_V_SAVE_SESSION_EVT = "E'TESTEVENT'."
  5.     FORM.HeaderRawHTML  = '<script language=javascript src="/SCRM4U/jquery.js"></script>' + newline()  
  6.                         + '<script language=javascript>' + newline()  
  7.                         + 'function goto_history(){' + newline()
  8.                         + '    $.ajax({  ' + newline()
  9.                         + '         type: "post",  ' + newline()
  10.                         + '         async : false,  ' + newline()
  11.                         + '         url:  "' + &W_V_SAVE_SESSION_URL + '", ' + newline()
  12.                         + '         data: "_EventName=' + &W_V_SAVE_SESSION_EVT + '",  ' + newline()
  13.                         + '         success: function(response){ ' + newline()
  14.                         + '             alert(response); ' + newline()
  15.                         + '             var url = "/SCRM4U/servlet/hwbp02";' + newline()
  16.                         + '             window.open(url,'+ newline()
  17.                         + '             "入力履歴参照",'+ newline()
  18.                         + '             "height=600,width=850,top=30,left=90,toolbar=yes,menubar=yes,scrollbars=yes,resizable=yes,location=no,status=yes");' + newline()
  19.                         + '         }   ' + newline()
  20.                         + '    }); ' + newline()
  21.                         + '}' + newline()
  22.                         + '</script>' + newline()
  23.     Button1.JSEvent('onclick', 'goto_history()')
  24. EndEvent  // Start

另外还需追加一个Test事件:

  1. Event 'TestEvent'
  2.     
  3.     &WS_SESSION.Set('TEST_SESSION_VALUE', '1')
  4. EndEvent  // 'TestEvent'

新建另一个webpanner名为:hwbp02,Start事件如下:

  1. Event Start
  2.     W_V_TESTVALUE = &WS_SESSION.Get('TEST_SESSION_VALUE')
  3. EndEvent  // Start

=====================================================================================

请注意:

以上为触发ajax的按钮在Grid外的情况,如果在Grid里面(即每行都有一个按钮),因为参数中涉及到行数,方法有所不同。

 

假设ajax将触发后台的事件为:

  1. Event 'HistoryEvent'
  2.     P_V_OPEN_SQ    = &WS_SESSION.Get('P_V_OPEN_SQ')
  3.     P_V_OPEN_NO    = &WS_SESSION.Get('P_V_OPEN_NO')
  4. //    &W_V_ROW = &WEB_REQUEST.GetVariable('_EventName')
  5. //    &W_FIRST = &W_V_ROW.IndexOf('.')
  6. //    &W_LAST  = &W_V_ROW.Length()
  7. //    &W_N_ROW_NUM = Val(&W_V_ROW.Substring(&W_FIRST + 1,&W_LAST))
  8. //
  9. //    do 'CHANGE_DATAGRID_SUB'
  10. //    do 'ORDER_CAPTION_INITIAL'
  11. //
  12. //    &W_N_CNT = 1
  13. //    for each line in grd_enr_info
  14. //        if &W_N_CNT = &W_N_ROW_NUM
  15. //        &WS_SESSION.Set('TESTVALUE1',      &D_V_GRD_SCRG_NO)
  16. //            &WS_SESSION.Set('TESTVALUE2',      &D_V_GRD_PSN_NM)
  17. //            &WS_SESSION.Set('TESTVALUE3',      Trim(&P_V_OPEN_SQ))
  18. //            &WS_SESSION.Set('TESTVALUE4',      &P_V_OPEN_NO)
  19. //            &WS_SESSION.Set('TESTVALUE5',      &D_V_OPN_SBJ_NM)
  20. //            exit
  21. //        endif
  22. //        &W_N_CNT = &W_N_CNT + 1
  23. //    endfor
  24.     &WS_SESSION.Set('TESTVALUE1',      &D_V_GRD_SCRG_NO)
  25.     &WS_SESSION.Set('TESTVALUE2',      &D_V_GRD_PSN_NM)
  26.     &WS_SESSION.Set('TESTVALUE3',      Trim(&P_V_OPEN_SQ))
  27.     &WS_SESSION.Set('TESTVALUE4',      &P_V_OPEN_NO)
  28.     &WS_SESSION.Set('TESTVALUE5',      &D_V_OPN_SBJ_NM)
  29. EndEvent  // 'HistoryEvent'

StartEvent中的代码为:

  1.  W_V_SAVE_SESSION_URL = "/SCRM4U/servlet/hwbp03"
  2.  W_V_SAVE_SESSION_EVT = "E'HISTORYEVENT'."  
  3.     FORM.HeaderRawHTML = '<script language=javascript src="/SCRM4U/jquery.js"></script>' + newline()  
  4.                        + '<script language=javascript>' + newline()  
  5.                         + 'function goto_history(num){' + newline()
  6.                         + '    var no = num.replace(/(^/s*)|(/s*$)/g, "").substr(1); ' + newline()
  7.                         + '    var pgrd = document.MAINFORM.nRC_Grd_enr_info.value; ' + newline()
  8.                         + '    var subj = document.MAINFORM._D_V_OPN_SBJ_NM.value; ' + newline()
  9.                         + '    var _D_V_GRD_SCRG_NO_X = "_D_V_GRD_SCRG_NO_"+no;  ' + newline()
  10.                         + '    var _D_V_GRD_PSN_NM_X = "_D_V_GRD_PSN_NM_"+no; ' + newline()
  11.                         + '    var scrg = eval("document.MAINFORM." + _D_V_GRD_SCRG_NO_X).value; ' + newline()
  12.                         + '    var psnm = eval("document.MAINFORM." + _D_V_GRD_PSN_NM_X).value; ' + newline()
  13.                         + '    $.ajax({  ' + newline()
  14.                         + '         type: "post",  ' + newline()
  15.                         + '         async : false,  ' + newline()
  16.                         + '         url:  "' + &W_V_SAVE_SESSION_URL + '", ' + newline()
  17.                         + '         data: "_EventName=' + &W_V_SAVE_SESSION_EVT + '"+no+"nRC_Grd_enr_info="+pgrd+"_D_V_OPN_SBJ_NM="+subj+"&"+_D_V_GRD_SCRG_NO_X+"="+scrg+"&"+_D_V_GRD_PSN_NM_X+"="+psnm,' + newline()
  18.                         + '         success: function(response){ ' + newline()
  19.                         //+ '             alert(response); ' + newline()
  20.                  
  21.                         + '         }   ' + newline()
  22.                         + '    }); ' + newline()
  23.                         + '    var url = "/SCRM4U/servlet/hwbp04";' + newline()
  24.                         + '    window.open(url,'+ newline()
  25.                         + '         "hwbp04",'+ newline()
  26.                         + '         "height=600,width=850,top=30,left=90,toolbar=yes,menubar=yes,scrollbars=yes,resizable=yes,location=no,status=yes");' + newline()
  27.                         + '}' + newline()
  28.                        + '</script>' + newline()

Grid的初期处理:

  1. Event grd_enr_info.Load
  2.     W_N_INDEX_NUM = 10001
  3.     for W_N_GRD_IDX = 1 to &W_S_ETR_SHT_RP_INFO.Count
  4.         if (&W_N_GRID_START <= &W_N_GRD_IDX) and (&W_N_GRID_END >= &W_N_GRD_IDX)
  5.             D_V_GRD_NO       = &W_N_GRD_IDX//NO
  6.             ......
  7.         
  8. //            W_V_GRD_PSN_NM_JS = &D_V_GRD_PSN_NM
  9. //            W_V_OPN_SBJ_NM    = &D_V_OPN_SBJ_NM
  10. //            //java [!&W_V_GRD_PSN_NM_JS!] = GXutil.URLEncode([!&W_V_GRD_PSN_NM_JS!]);
  11. //            //java [!&W_V_OPN_SBJ_NM!]    = GXutil.URLEncode([!&W_V_OPN_SBJ_NM!]);
  12. //            btn_history.JSEvent("onclick", "goto_history('" + &D_V_GRD_SCRG_NO + "','" + &W_V_GRD_PSN_NM_JS + "','" + Trim(&P_V_OPEN_SQ) + "','" + &P_V_OPEN_NO + "','" + &W_V_OPN_SBJ_NM + "')")
  13.             btn_history.JSEvent("onclick", "goto_history('" + str(&W_N_INDEX_NUM) + "')")
  14.             W_N_INDEX_NUM = &W_N_INDEX_NUM + 1
  15.             load
  16.         endif
  17.     endfor
  18. EndEvent

我们发现,当按钮在Grid时,触发的事件参数形如: E'XXEVENT'.0001的形式,由最后四位数据来确定按钮所处的行数。上面的代码中自动加入了分析行数的功能了。

值得一提的是,Genexus后台为了能正确的判断实行哪些操作,在页面上放置了很多的Hidden.以下简单说明这里用到的参数:

nRC_Grd_enr_info:Grid中每页可显示的最大行数

_EventName:页面触发的事件参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值