siebel 在list applet 的列上绑定点击事件

本文介绍如何在Siebel系统的列表Applet中为特定列绑定点击事件,并展示如何通过JavaScript添加自定义代码来实现这一功能。该方法适用于需要对列表中的每一项进行独立操作的场景。

In last post we learnt how to bind a click event to a image on the form applet. This will work on any control on form applet as long as you have right selectors but this trick will fail in the list applet as the column is repeated for each row which means you cannot just use one selector for every row.In this post I will show you how to bind a click event for a column in each row.

Requirement:

On click of a Opportunity Status in list applet a confirm dialog should popup asking if you want to change the status of the record.

Solution (8.1.1.11):

I am not going to go into details of how to add the JS file entries to manifest screen and jump straight into the solution.This solution involves creating only a PR file.We need to add custom code to 2 methods in the PR that are

BindData : Used to add a unique identifier to our column to facilitate binding of click event (in this particlar case a custom css class).
BindEvents: Actually write the code to bind the click event of the column.

Solution Details – BindData:

1
2
3
4
5
6
7
8
9
ListPopup.prototype.BindData = function(bRefresh) {
SiebelAppFacade.ListPopup.superclass.BindData.call(this, bRefresh);
varpm = this.GetPM(); //get pm
varrecordSet = this.GetPM().Get( "GetRecordSet"); //get record set
varrecordLength = recordSet.length; //get count for loop
forvari = 0; i < recordLength i code>
$("#"+ (i+1) + "Account_Status").addClass("hoverlink"); //add custom class (for binding) to status column in each row
}
//end of bind data

The code for bind data event is pretty simple. Run loop around all the records and add class with name hoverlink to the Account Status column. In a list applet each control is given a unique id which is a combination of row number and the field name with spaces replaced by underscrore (_). Using this knowledge we construct the selector and add class to our desired column ( in this case Account Status ) for each row.

The Second part of the solution is binding the click event to each column. For this part we will use our newly added class in BindData function.

BindEvents:

1
2
3
4
5
6
7
8
9
10
11
12
ListPopup.prototype.BindEvents = function(controlSet) {
SiebelAppFacade.ListPopup.superclass.BindEvents.call(this);
varpHolder = this.GetPM().Get("GetFullId"); //get placeholder
$('#s_'+ pHolder + "_div table.ui-jqgrid-btable").on("click","td.hoverlink",{ctx:this},function(event){ //bind the click event and pass the context
varrowId = $(this).parent().attr("id"); //get the row number of the column that has been clicked
event.data.ctx.OnRowSelect(rowId); //physically select the row. Really important
ShowDialog("Change Status ?", event); // show dialog
event.preventDefault(); //stop the normal processing which is focusing on the current field
returnfalse;
});
}

In bind events we make use jQuery “on” function to bind the click event on the class and pass the data. One important line of code that I would like point out is

1
event.data.ctx.OnRowSelect(rowId); //physically select the row. Really important

Since we are interrupting the normal click event and introduce a custom handler it is important to physically select the row so that server side methods can work on the right record. If don’t do that then the server side will act upon the last selected line. Finally we call the ShowDialog function to show jQuery Modal Dialog.

ShowDialog:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
functionShowDialog(msg, event){
vardialogHTML = "
"+ msg + "
"</code>//create a dummy div to hold dialog
varpm = event.data.ctx.GetPM(); // this will be needed in order to execute Applet/BC methods
//create a jquery dialog
$(dialogHTML).dialog({ //set the options
autoOpen: true,
height: 'auto',
width: 'auto',
title:'Confirm',
close: function(){
$(this).dialog("destroy"); //destroy the dialog on close
},
"IL_AD3"class="IL_AD"<buttons:{
"OK": {
'text':'Ok',
'click'function(){
//Synchronous call to a applet/bc method to be called on click of OK button
//pm.ExecuteMethod("InvokeMethod","AnyMethod");
$(this).dialog("close"); //close dialog
}
},
"Cancel": {
'text':'Cancel',
'click'function(){
//Synchronous call to a applet/bc method that needs to be called on click of cancel button
//pm.ExecuteMethod("InvokeMethod","AnyMethod");
$(this).dialog("close");
}
}
}
});
}
</td></tr></tbody></table>

This function just creates a jQuery Dialog and sets up the button to execute appropriate Server methods. This is how the dialog box will look like.

Notice an hand icon on when the mouse goes over Status column ? This was done through css

1
.hoverlink {cursor:pointer;}
源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、或各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码和压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式或取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值