场景描述:很多时候,标准的功能并不能完全满足业务需求,完全开发一个新的页面显得有点多余,所以就有了在标准页面上嵌套自定义内容(page/component)的需要。
下面我们将围绕上述场景作详细解释:
Q1、有什么开关可以让Visualforce Pages显示在Page Layout侧边栏吗,就像下图所示?
A:开关就是需要一个含有standardController的page即可,如下:
Q2、实际开发时有哪些注意事项?
A:1、相关User的简档必须有该page/apex的访问权限;2、自定义页面中展示的字段如果包含关系对象的字段,该User需要有该记录的访问权限,需要考虑RLS;3、如果想展示一张关系字段的图片(富文本),这时如果采取此策略,frame的大小控制会比较困难,背景色的设置会比较困难。
2和3分别如下图:
上述问题解决方案补充:最佳实践是单独开一个section,然后设置为一行显示,同时在该section点击小扳手设置宽度比例和高度,效果就会更棒!
下面是在富文本字段中取img的url的controller:
public class ACC_PromotionEventExtension { public String imgUrl{get;set;} private final Event event; public ACC_PromotionEventExtension(ApexPages.StandardController stdController) { this.event = (Event)stdController.getRecord(); System.debug('event: ' + event); String promotionId = [SELECT WhatId FROM Event WHERE Id = :event.Id LIMIT 1].WhatId; ACC_Promotion__c promotion = [SELECT Id, ACC_Promotion_Image__c FROM ACC_Promotion__c WHERE Id = :promotionId LIMIT 1]; System.debug('RichField: ' + promotion.ACC_Promotion_Image__c); if(promotion.ACC_Promotion_Image__c != null) { String firstSubString = promotion.ACC_Promotion_Image__c.substringBetween('<img', 'img>'); System.debug('First substring: ' + firstSubString); String secondSubString = firstSubString.substringBetween('src="', '"'); System.debug('Second substring: ' + secondSubString); String link = secondSubString.replace('amp;', ''); System.debug('Link: ' + link); imgUrl = link; } } }