Salesforce中隐藏批准历史相关列表(Related List)中的“提交审批”按钮 - 方案与实践
2018-03-14 10:48
423 查看
【场景描述】:在配置或开发批准过程时,业务中经常需要在点击提交审批按钮时对当前单子状态作校验,并提示客户在什么条件下才能提交审批。那通常的做法是自定义提交审批按钮,执行js方法,调用webservice的校验逻辑。
【平台特性】:在Salesforce中,标准页面上的审批历史相关列表上的提交审批按钮不能通过配置的方式移除。
基于前面的介绍,我们会面临一个尴尬的问题:自定义按钮展示在Detail页面上,辨准按钮展示在Related List页面上,一旦用户点击了Related List上的按钮,那这个自定义按钮放在上面就显得自欺欺人了。
【How to do? - 套路】
通常我们会通过将审批初始提交人设为超级管理员或加一个checkbox控制准入条件,这样业务人员不管在什么条件下点击了Related List上的按钮都会进入到无效的访问权限页面。
使用checkbox方法思路:
a、新建checkbox字段(是否为标准审批按钮),默认unchecked;- 若默认为checked,那历史数据不会勾上。
b、配置准入条件,该字段为true,才允许进入;
c、代码中设置req.setSkipEntryCriteria(true),用来跳过进入条件即可。
搞事情>=< - 身为处女座的我怎么能忍受上面这种解决方案呢?于是开始探索其他可能行......
1、自定义一个VF页面(仅仅包含批准历史相关列表),然后在VF里面使用Js Hack去隐藏按钮;
【效果Preview】:
【Step by Step】:
a、开发VF logic code:
<apex:page standardController="ApprovalTest__c">
<script src="https://code.jquery.com/jquery-2.x-git.min.js"></script>
<script>
$j = jQuery.noConflict();
console.log(window.location.href);
console.log(window.location.href.indexOf(".com/a0C"));
console.log(window.location.href.indexOf(".com/a0C") != -1);
if(window.location.href.indexOf(".com/a0C") == -1) {
$j(document).ready(function() {
$j("input[name='piSubmit']").hide();
});
}
</script>
<apex:relatedList list="ProcessSteps" id="customApprovalList"></ape
4000
x:relatedList>
</apex:page>b、将页面VF加入页面布局:
之后,you make it.
2、在Home Page的sidebar中注入Js,通过Js hack的方式隐藏Related List上的提交审批按钮;
I have already gone through solution here Display "Submit for Approval" button in the Approval History related list based on condition but since new release summer 15 home page component no more supports JS , so that does not worked for me.
看到上面一句话不禁有些伤心,summer 15之后不能在html类型的home component中加js。
【step by step】:
a、自定义injection Custom Links;- 注意静态资源的引用
b、在自定义Link类型主页组件里添加injection custom link;
c、在主页布局中启用injection-box自定义组件。
【效果preview】:
最终你会发现,这种方式你需要点击sidebar自定义链接后才能实现隐藏的效果。
3、通过在VF类型home page component中加入js代码,不可行。原因:不能快iframe操作dom。
【总结】:首推配置的方式,其次是方法1。
参考资料:
https://salesforce.stackexchange.com/questions/38918/end-of-javascript-sidebar-workarounds-salesforce-classic-aloha#comment144978_98915
https://help.salesforce.com/articleView?d=70130000000NIyh&eid=singlesend&id=Message-Alerts-and-Custom-Links-Home-Page-Components-changes&language=en_US&type=1
【平台特性】:在Salesforce中,标准页面上的审批历史相关列表上的提交审批按钮不能通过配置的方式移除。
基于前面的介绍,我们会面临一个尴尬的问题:自定义按钮展示在Detail页面上,辨准按钮展示在Related List页面上,一旦用户点击了Related List上的按钮,那这个自定义按钮放在上面就显得自欺欺人了。
【How to do? - 套路】
通常我们会通过将审批初始提交人设为超级管理员或加一个checkbox控制准入条件,这样业务人员不管在什么条件下点击了Related List上的按钮都会进入到无效的访问权限页面。
使用checkbox方法思路:
a、新建checkbox字段(是否为标准审批按钮),默认unchecked;- 若默认为checked,那历史数据不会勾上。
b、配置准入条件,该字段为true,才允许进入;
c、代码中设置req.setSkipEntryCriteria(true),用来跳过进入条件即可。
搞事情>=< - 身为处女座的我怎么能忍受上面这种解决方案呢?于是开始探索其他可能行......
1、自定义一个VF页面(仅仅包含批准历史相关列表),然后在VF里面使用Js Hack去隐藏按钮;
【效果Preview】:
【Step by Step】:
a、开发VF logic code:
<apex:page standardController="ApprovalTest__c">
<script src="https://code.jquery.com/jquery-2.x-git.min.js"></script>
<script>
$j = jQuery.noConflict();
console.log(window.location.href);
console.log(window.location.href.indexOf(".com/a0C"));
console.log(window.location.href.indexOf(".com/a0C") != -1);
if(window.location.href.indexOf(".com/a0C") == -1) {
$j(document).ready(function() {
$j("input[name='piSubmit']").hide();
});
}
</script>
<apex:relatedList list="ProcessSteps" id="customApprovalList"></ape
4000
x:relatedList>
</apex:page>b、将页面VF加入页面布局:
之后,you make it.
2、在Home Page的sidebar中注入Js,通过Js hack的方式隐藏Related List上的提交审批按钮;
I have already gone through solution here Display "Submit for Approval" button in the Approval History related list based on condition but since new release summer 15 home page component no more supports JS , so that does not worked for me.
看到上面一句话不禁有些伤心,summer 15之后不能在html类型的home component中加js。
【step by step】:
a、自定义injection Custom Links;- 注意静态资源的引用
{!REQUIRESCRIPT("/resource/1402932484000/JQuery320")} $j = jQuery.noConflict(); if(window.location.href.indexOf(".com/a0C") != -1) { $j(document).ready(function() { $j("input[name='piSubmit']").hide(); $j(".relatedProcessHistory .pbHeader h3").css('padding', '8px 0'); }); }
b、在自定义Link类型主页组件里添加injection custom link;
c、在主页布局中启用injection-box自定义组件。
【效果preview】:
最终你会发现,这种方式你需要点击sidebar自定义链接后才能实现隐藏的效果。
3、通过在VF类型home page component中加入js代码,不可行。原因:不能快iframe操作dom。
【总结】:首推配置的方式,其次是方法1。
参考资料:
https://salesforce.stackexchange.com/questions/38918/end-of-javascript-sidebar-workarounds-salesforce-classic-aloha#comment144978_98915
https://help.salesforce.com/articleView?d=70130000000NIyh&eid=singlesend&id=Message-Alerts-and-Custom-Links-Home-Page-Components-changes&language=en_US&type=1
相关文章推荐
- salesforce中实现点击编辑按钮,在inputField上展示已保存的记录值而非清空值&自定义展示Approval History相关列表
- stack 和双向列表 LinkedList 的使用-----没有实践
- js 页面按钮提交后 创建显示loading div 操作完成后 再隐藏或删除 进度div
- User Information List- SharePoint中隐藏的用户列表
- SharePoint2010隐藏文档库或列表的ribbon按钮以及ribbon Location
- salesforce 零基础学习(四十六)动态美观显示列表中记录的审批状态
- Python list(列表)实践
- Redis 与列表(List)相关的命令
- html表单(文本框、密码、单选、复选、提交、重置、普通、隐藏、文件按钮、下拉选项)
- 表单,单行文本框,密码框,单选框,列表框(下拉列表),浏览框,隐藏域,多行文本框,图像按钮,提交按钮,重置按钮,普通按钮
- html 和 html5(一)(表格 | 列表 | 提交按钮 | 单选 |复选 | 框架 | 脚本 | html字符实体 )
- 前端之路——第三篇:列表、表单、提交按钮、html布局、css的display,制造第一个表单提交案例
- Salesforce 代码实现提交审批
- Atitit.列表页面and条件查询的实现最佳实践(1)------设置查询条件and提交查询and返回json数据
- Axure RP Pro - 相关问题 - 在规格文档中动态面板中的droplist下拉列表框部件会重复输出选项列表
- Atitit.列表页面and条件查询的实现最佳实践(1)------设置查询条件and提交查询and返回json数据
- OpenERP-隐藏多对多域弹出列表视图的"新建"按钮(Hide the "Create" button from the popup list view of a many2many field)
- 带有文件域和下拉列表的表单无法通过按钮提交到servlet
- 如何访问隐藏的列表- workflow history list
- 【原】提交按钮被隐藏,回车一样提交表单