16、Visualforce开发实用技巧与技术要点

Visualforce开发实用技巧与技术要点

Visualforce开发实用技巧与技术要点

1. 权限检查与DML操作

在相关列表组件中,若缺少前置检查,当用户配置文件缺乏相应权限时,页面可能会崩溃。对于通过命令按钮执行的自定义DML操作,可添加如下检查:

<apex:commandButton value="Update"  rendered="{!$ObjectType.Account.Updateable}" action="{!customAccountUpdate}"/>

若想深入了解在Visualforce(VF)和Apex中实施CRUD(创建、读取、更新、删除)/FLS(字段级安全)的方法,可访问以下链接:
- http://wiki.developerforce.com/page/Enforcing_CRUD_and_FLS
- http://wiki.developerforce.com/page/Testing_CRUD_and_FLS_Enforcement

2. 杂项技巧

2.1 查询百万行数据

默认情况下,Apex代码一次最多只能查询50,000行数据,这在某些场景下可能会受限。为突破此限制,可在 <apex:page /> 组件中使用 readOnly 属性,该属性可将查询行数上限提升至100万行,但会限制页面执行DML操作的能力。此属性适用于生成只读报表、图表等页面。

2.2 页面渲染为PDF

VF运行时允许通过在Apex页面标签中设置 renderAs pdf ,将页面渲染为PDF格式,示例代码如下:

<apex:page renderAs="pdf" />

以下是一些关于打印复杂页面的实用技巧链接,如添加页码、页脚图片以及控制PDF样式等:
- Creating professional PDF documents with CSS and Visualforce: http://wiki.developerforce.com/page/Creating_Professional_PDF_Documents_with_CSS_and_Visualforce
- Header and footer tweaks: http://forceguru.blogspot.in/2010/12/header-footer-in-pdf.html

2.3 动态VF组件

有时,复杂的组件结构无法直接通过Visualforce代码绘制,即页面的某些组件需要根据Apex逻辑以编程方式创建,而这在VF代码中难以实现。此时,使用动态Visualforce组件是个不错的选择。例如,创建 apex:outputText 的Apex代码如下:

Component.Apex.OutputText opText = new Component.Apex.OutputText();
opText.value = account.BillingCity; // Billing City based on previously loaded Account record

几乎所有VF组件都有对应的Apex等效代码。关于创建相关列表的实际示例,可参考VF开发者指南:http://www.salesforce.com/us/developer/docs/pages/Content/pages_dynamic_vf_components_sample.htm

2.4 图表

在Visualforce中展示信息为图表时,可选择使用第三方API(如Google Charts)或原生Visualforce图表(于Winter ‘13版本正式发布)。除非客户倾向于第三方图表解决方案,否则建议使用Visualforce图表,原因如下:
| 对比项 | 第三方图表 | Visualforce图表 |
| — | — | — |
| 许可证和使用条款 | 需要确保与应用业务模型兼容 | 无此顾虑 |
| 成本 | 可能需额外付费,并受使用和负载限制 | 无需额外付费 |
| 稳定性 | 第三方服务器维护期间,应用页面可能无法访问或崩溃 | 符合平台维护窗口,应用整体性能良好 |
| 代码复杂度 | 可能需要较多代码进行集成 | 通常只需最少的代码即可连接 |

以下是一个简单的绘制图表的代码示例:

<apex:page standardController="Opportunity" recordSetVar="opps">
  <apex:chart data="{!opps}" width="600" height="400">
    <apex:axis type="Category" position="left" fields="Name" title="Opportunities"/>
    <apex:axis type="Numeric" position="bottom" fields="Amount" title="Amount"/>
    <apex:barSeries orientation="horizontal" axis="bottom"  xField="Name" yField="Amount"/>
  </apex:chart>
</apex:page>

3. 其他技术要点

3.1 开发环境相关

开发环境包括开发版、沙盒等,不同环境有不同的用途和特点。开发版适用于个人或合作伙伴开发,沙盒可分为配置沙盒、开发沙盒和全量沙盒等。以下是开发环境的选择和使用流程:

graph LR
    A[选择开发环境] --> B{开发需求}
    B -->|个人开发| C[个人开发版]
    B -->|团队协作| D[合作伙伴开发版]
    B -->|测试与模拟| E[沙盒]
    E --> F{沙盒类型}
    F -->|仅配置| G[配置沙盒]
    F -->|开发测试| H[开发沙盒]
    F -->|全量数据模拟| I[全量沙盒]

3.2 数据操作

数据操作包括数据导入、导出和集成。数据导入时,需先确定数据源,准备数据,进行测试导入并分析结果,最后完成导入。数据导出可使用数据加载器。数据集成可借助第三方工具实现。以下是数据导入的步骤:
1. 确定数据源
2. 准备数据
3. 进行测试导入并分析结果
4. 完成数据导入

3.3 代码优化

Apex代码优化包括使用正确的命名规范、简化循环、减少脚本语句等。例如,使用枚举来优化常量,示例代码如下:

public enum MyConstants {
    CONSTANT_1('Value 1'),
    CONSTANT_2('Value 2');

    private final String value;

    MyConstants(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }
}

3.4 安全与权限

在Apex和VF中,需实施CRUD/FLS检查,以确保数据的安全性和用户对数据的合法访问。例如,在VF页面中使用 $ObjectType 全局变量进行权限检查。

3.5 调试与监控

可使用调试日志和监控工具来跟踪资源使用情况、查找错误。调试日志可在设置区域使用,同时可设置调试日志过滤器。

4. 总结

本文涵盖了Visualforce开发的多个方面,包括权限检查、数据查询、页面渲染、组件创建、图表展示等实用技巧,以及开发环境选择、数据操作、代码优化、安全与权限管理和调试监控等技术要点。通过合理运用这些技巧和方法,可提高开发效率,优化应用性能,确保应用的安全性和稳定性。在实际开发中,可根据具体需求选择合适的技术和方法,不断探索和实践,以提升开发水平。

Visualforce开发实用技巧与技术要点

5. 报表与仪表盘

5.1 报表类型

报表类型丰富多样,不同类型适用于不同的业务场景。以下是常见报表类型及其特点:
| 报表类型 | 特点 |
| — | — |
| 表格报表(Tabular Report) | 简单直接,以表格形式展示数据,适合快速查看大量数据 |
| 汇总报表(Summary Report) | 可对数据进行分组和汇总,能查看小计和总计 |
| 矩阵报表(Matrix Report) | 以二维表格形式展示数据,可按行和列进行分组和汇总 |
| 联合报表(Joined Report) | 可将多个对象的数据组合在一个报表中 |

5.2 报表创建与操作

创建报表时,可使用条件高亮、自定义汇总公式等功能。报表还支持过滤、排序、导出、打印等操作。以下是创建报表的一般步骤:
1. 选择报表类型
2. 选择对象和字段
3. 设置过滤条件
4. 进行分组和汇总设置
5. 使用条件高亮和自定义汇总公式
6. 保存并运行报表

5.3 仪表盘

仪表盘可将多个报表组合在一起,以直观的方式展示关键数据。仪表盘支持数据刷新、过滤器设置等功能。以下是仪表盘的使用流程:

graph LR
    A[创建仪表盘] --> B{选择报表}
    B --> C[添加报表到仪表盘]
    C --> D[设置布局和样式]
    D --> E[设置数据刷新和过滤器]
    E --> F[保存并查看仪表盘]

6. 页面设计与优化

6.1 页面布局与模板

在VF代码中,可定义页面布局和模板,以实现页面的复用。例如,使用 <apex:composition> 组件来包含其他VF页面,示例代码如下:

<apex:composition template="{!$Page.MyTemplate}">
    <apex:define name="body">
        <!-- 页面内容 -->
    </apex:define>
</apex:composition>

6.2 视图状态管理

视图状态是VF页面中的一个重要概念,需对其进行有效管理,以避免页面性能下降。可通过避免使用多个表单、仅查询所需字段等方式来限制视图状态。以下是管理视图状态的方法:
1. 使用视图状态检查器来监控视图状态大小
2. 避免使用多个表单
3. 仅查询所需字段
4. 使用静态变量和瞬态变量

6.3 页面性能优化

页面性能优化包括加速Ajax调用、优化JavaScript远程调用等。例如,使用 action regions 来划分Ajax调用区域,使用 immediate 属性来立即执行操作。以下是加速Ajax调用的方法:
1. 使用 action regions 来划分Ajax调用区域
2. 使用 immediate 属性来立即执行操作
3. 仅重新渲染需要更新的组件

7. 组件与对象

7.1 标准对象与自定义对象

Salesforce中有多种标准对象,如账户、联系人、机会等,同时也支持创建自定义对象。自定义对象的设计需考虑数据结构、对象关系、页面布局等因素。以下是标准对象和自定义对象的对比:
| 对象类型 | 特点 |
| — | — |
| 标准对象 | 系统自带,具有固定的字段和功能 |
| 自定义对象 | 可根据业务需求自定义字段、关系和页面布局 |

7.2 对象关系

对象关系包括查找关系、主从关系和多对多关系等。选择合适的对象关系对于数据建模和业务逻辑实现至关重要。以下是常见对象关系的特点:
| 关系类型 | 特点 |
| — | — |
| 查找关系(Lookup Relationship) | 一个对象引用另一个对象,可独立存在 |
| 主从关系(Master-Detail Relationship) | 子对象依赖于父对象,父对象删除时子对象也会被删除 |
| 多对多关系(Many-to-Many Relationship) | 通过中间对象来实现两个对象之间的多对多关联 |

7.3 组件使用

VF组件可用于构建页面和实现交互功能。常见的VF组件包括 apex:outputText apex:inputField apex:commandButton 等。例如,使用 apex:inputField 组件来创建输入字段,示例代码如下:

<apex:inputField value="{!account.Name}" />

8. 持续学习与实践

8.1 学习资源

可通过Salesforce开发者官网、开发者论坛、相关书籍等渠道获取更多的学习资源。例如,Salesforce开发者官网提供了丰富的文档和教程,开发者论坛可与其他开发者交流经验和解决问题。

8.2 实践项目

通过实践项目来巩固所学知识,提高开发技能。可从简单的项目开始,逐步增加项目的复杂度。在实践过程中,不断总结经验,优化代码和解决方案。

8.3 社区参与

参与Salesforce开发者社区,与其他开发者分享经验、交流技术,了解最新的行业动态和技术趋势。通过社区参与,可拓宽视野,提升自己的技术水平和影响力。

9. 总结

Visualforce开发是一个综合性的领域,涉及到多个方面的知识和技能。本文详细介绍了Visualforce开发中的各种实用技巧和技术要点,包括权限检查、数据操作、代码优化、报表与仪表盘、页面设计与优化等。通过掌握这些知识和技能,并不断学习和实践,开发者可以开发出高效、安全、稳定的应用程序,满足不同业务场景的需求。在未来的开发过程中,开发者应持续关注技术的发展和变化,不断提升自己的能力,以适应不断变化的市场需求。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值