Visualforce是一个Web开发框架,允许开发人员构建可以在Lightning平台上本地托管的自定义用户界面。其框架包含:前端的界面设计,使用的类似于HTML的标记语言;以及后端的控制器,使用类似于Java的Apex语言。

哪些版本支持Visualforce?

众所周知,Salesforce分为多个版本,不同的版本功能之间存在一定的差异,而支持Visualforce的版本:Contact Manager,Group,Professional,Enterprise,Unlimited,Performance和Developer Edition。

Visualforce的优势?

作为Markup语言,Visualforce有如下优点:

  • 与其他基于Web的用户界面技术集成:因为Visualforce markup最终呈现的是HTML格式,所以开发人员可以将visualforce markup与标准的HTML, JavaScript,Flash一起使用。
  • MVC开发模式:Visualforce通过视图,控制器模式,开发人员可以轻松拆分和构建用户界面的外观和应用程序的业务逻辑。
  • 托管平台:Visualforce页面完全由Lightning平台编译和呈现,因此无论显示或编辑的数量如何,它都与Salesforce标准页面的性能相同。
  • 可自动升级:升级Lighnting平台的其他组件时,无需重新Visualforce页面。由于页面作为元数据存储的,所以它会与系统的其余部分一起自动升级。

Visualforce页面有两个主要元素组成:Markup和Controller

  • Markup:Visualforce标签,HTML,JavaScript或嵌入在单个控件中的任何其他基于Web的代码组成 <apex:page >标签。这里定义了页面中使用的用户界面组件以及它们的显示方式。
  • Controller:是一组指令,用于与指定的Markup进行交互,为其提供数据访问和修改,使用类似与Java的Apex语言。

一般说来,不涉及sObject的数据处理(增删改查)时,仅Markup部分便已足够;若涉及sObject的数据处理,则需创建一个控制器(class类),并将该类与View绑定。

Markup

在这里创建一个下拉菜单选择并动态刷新的案例。

<!--对于单Visualforce Page,所有的Page都必须包含在一个Page内-->
<apex:page controller="SP_FilterConditionPageController">
<!--from:Visualforce页面的一部分,允许用户输入和提交按钮的表单-->
<apex:form >
<!--outputlabel:输入输出字段的标签-->
<apex:outputlabel value="Site Name" for="siteValue" />
<!--selectList:选项列表,允许用户选择一个值或多个值-->
<apex:selectList value="{!siteName}" size="1" id="siteValue" multiselect="false">
<!--selectOptions:作为selectList的子组件,提供选择对象的集合-->
<apex:selectOptions value="{!siteItems}"/>
</apex:selectList>
<apex:outputlabel value="Display Months" for="values2" />
<apex:selectList value="{!displayMonth}" size="1" id="values2" multiselect="false">
<apex:selectOptions value="{!monthItems}"/>
</apex:selectList>
<!--commandButton:输入元素的按钮,按钮执行有控制器定义,收到响应后刷新页面-->
<apex:commandButton value="Apply" action="{!apply}" rerender="out" status="status"/>
</apex:form> <!--outputPanel:将组件组合在一起进行AJAX刷新-->
<apex:outputPanel id="out">
<!--显示AJAX更新请求状态的组件-->
<apex:actionstatus id="status">
<apex:facet name="stop">
</apex:facet>
</apex:actionstatus>
</apex:outputPanel>
</apex:page>

{!**}: 表示controller中的变量。

controller类

服务端的控制器类,为前端界面的下拉菜单提供数据,并在选择数据后修改对象对应的字段值。

注意:按钮Action的响应必须为PageReference.

public with sharing class SP_FilterConditionPageController {
String displayMonth;
String siteName;
String currentDisplayMonth;
//获取当前页面的对象ID
Id accountId = ApexPages.CurrentPage().getparameters().get('id'); public String getDisplayMonth() {
if(displayMonth == null) {
List<Account__c> accounts = [select Display_Months__c, Display_Site__c
from Account__c
where id = :accountId limit 1];
displayMonth = accounts[0].Display_Months__c;
}
return displayMonth;
} public void setDisplayMonth(String displayMonth) {
this.displayMonth = displayMonth;
} public String getSiteName() {
return siteName;
} public void setSiteName(String siteName) {
this.siteName = siteName;
} public PageReference apply() {
if(displayMonth != null || siteName != null){
List<Account__c> accounts = [select Display_Months__c, Display_Site__c
from Account__c
where id = :accountId limit 1];
for(Account__c account: accounts) {
if(displayMonth != null) {
account.Display_Months__c = displayMonth;
}
if(siteName != null) {
account.Display_Site__c = siteName;
}
}
if(Schema.sObjectType.Account__c.isUpdateable()) {
//更新对象
update accounts;
}
} //根据当前对象ID,产生新的页面
PageReference pageRef = new pageReference('/' + accountId);
pageRef.setRedirect(true);
return pageRef;
} public List<SelectOption> getSiteItems() {
List<SelectOption> options = new List<SelectOption>();
List<Sites__c> sites = [select WebEx_URL__c, Site_Status__c, Lockdown_Flag__c
from Sites__c
where Account__c = :accountId];
for(Sites__c site: sites){
if(site.Site_Status__c == 'inactive' || site.Lockdown_Flag__c == 'Not Available') {
continue;
}
options.add(new SelectOption(site.Webex_URL__c, site.Webex_URL__c));
}
return options;
} public List<SelectOption> getMonthItems() {
List<SelectOption> options = new List<SelectOption>();
options.add(new SelectOption('Last 6 Months', 'Last 6 Months'));
options.add(new SelectOption('Last 12 Months', 'Last 12 Months'));
options.add(new SelectOption('Last 18 Months', 'Last 18 Months'));
options.add(new SelectOption('Last 24 Months', 'Last 24 Months'));
options.add(new SelectOption('Last 36 Months', 'Last 36 Months')); return options;
}
}

在上述案例中,前端界面在下拉框中选择对应的site Name和 Display Name值,点击Apply按钮时,将结果保存至数据库,生成新的页面返回,这样便可达到动态刷新页面的效果。

具体的前端界面如下:

Salesforce学习之路-developer篇(三)利用Visualforce Page实现页面的动态刷新案例学习的更多相关文章

  1. Salesforce学习之路(六)利用Visualforce Page实现页面的动态刷新功能

    Visualforce是一个Web开发框架,允许开发人员构建可以在Lightning平台上本地托管的自定义用户界面.其框架包含:前端的界面设计,使用的类似于HTML的标记语言:以及后端的控制器,使用类 ...

  2. Salesforce学习之路-developer篇(四)Visualforce结合Reports展示图表

    Salesforce作为一款CRM系统,个人觉得最重要的环境便是在于数据的展示和联动,而Salesforce也本身提供了相当强大的功能,Report在展示图表的方面十分强大,前段时间更是宣布以157亿 ...

  3. Salesforce学习之路-developer篇(二)利用Jenkins和Bitbucket实现Salesforce的CI/CD功能

    上文提到,基于CRM的二次开发是必不可少的,但是在实际项目中CI/CD是不可忽略的一个重要部分,与传统的Java,Python项目不同,如果对Salesforce进行持续集成和持续部署呢? 结合找到的 ...

  4. Salesforce学习之路-developer篇(一)利用VS Code结合Git开发Salesforce

    Part 1: 从Git中克隆代码到本地 git clone https://github.com/git/git Part 2: 在VS Code中安装Salesforce和Git插件 在VS Co ...

  5. Salesforce学习之路-developer篇(五)一文读懂Aura原理及实战案例分析

    1. 什么是Lightning Component框架? Lightning Component框架是一个UI框架,用于为移动和台式设备开发Web应用程序.这是一个单页面Web应用框架,用于为Ligh ...

  6. Salesforce学习之路-developer篇(五)Aura组件原理及常用属性

    很喜欢曾经看到的一句话:以输出倒逼输入.以输出的形式强制自己学习,确实是高效的学习方式,真的很棒.以下仅为个人学习理解,如有错误,欢迎指出,共同学习. 1. 什么是Lightning Componen ...

  7. STM32学习之路入门篇之指令集及cortex——m3的存储系统

    STM32学习之路入门篇之指令集及cortex——m3的存储系统 一.汇编语言基础 一).汇编语言:基本语法 1.汇编指令最典型的书写模式: 标号 操作码        操作数1, 操作数2,... ...

  8. 我的web安全工程师学习之路——规划篇

    据网上收集的web安全工程师需要掌握哪些技能,职位要求以及如何入门,加上学习网易推出的web安全工程师微专业课程,为了进一步学习,所以给自己做了一些小小规划,也希望给同样想成为web安全工程师的同仁们 ...

  9. Vue学习之路第一篇(学习准备)

    1.开发工具的选择 这个和个人的开发习惯有关,并不做强求,厉害的话用记事本也可以.但是我还是建议用人气比较高的编辑工具,毕竟功能比较全面,开发起来效率比较高. 我之前写前端一直用的是sublimete ...

随机推荐

  1. SCRUM的五个价值观

    转自:http://www.scrumcn.com/agile/scrum-knowledge-library/scrum.html#tab-id-8 承诺 – 愿意对目标做出承诺 专注– 把你的心思 ...

  2. Scrum的三个仪式:Sprint规划会,Scrum每日站会,Sprint评审会

    转自:http://blog.sina.com.cn/s/blog_6997f01501010m21.html Sprint Planning Meeting(Sprint规划会) 根据Product ...

  3. wps10.1中将txt转为excel

    1.将想要保存的内容保存为txt格式,用分隔符分隔好(包括空格.制表符.英文的逗号以及分号四种). 2.打开wps 3.点击数据->导入数据,选择刚才的txt文件 4.一步步操作,即可.

  4. 洛谷- P1306 斐波那契公约数 - 矩阵快速幂 斐波那契性质

    P1306 斐波那契公约数:https://www.luogu.org/problemnew/show/P1306 这道题目就是求第n项和第m项的斐波那契数字,然后让这两个数求GCD,输出答案的后8位 ...

  5. CodeForces 715B Complete The Graph 特殊的dijkstra

    Complete The Graph 题解: 比较特殊的dij的题目. dis[x][y] 代表的是用了x条特殊边, y点的距离是多少. 然后我们通过dij更新dis数组. 然后在跑的时候,把特殊边都 ...

  6. 模板汇总——ST(暂)

    int Log[N]; struct ST { ], a[N]; void init(int n) { ]=-); i < N; i++) Log[i] = Log[i - ] + ((i &a ...

  7. POJ 2391 Ombrophobic Bovines(Floyd+二分+最大流)

    题目链接 题意:农场有F(1 <= F <= 200)片草地用于放牛,这些草地有P(1 <= P <= 1500)连接,农场的草地上有一些避雨点,奶牛们可以在避雨点避雨,但是避 ...

  8. 【LeetCode】[0002] 【两数之和】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 给出两个非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字.如果 ...

  9. 洛谷 P1059【明明的随机数】 题解

    事实上,完全可以先将输入进来带有重复的元素们保存进一个数组并对该数组进行排序,再将该数组的各个元素逐个判断是否与前一元素相同(重复与否的判断),将不重复的元素转移至另一个数组,与此同时进行对不重复元素 ...

  10. Graph and Chart Study

    1.选择主题 “Themes”,以"Graph"——“preset7” 为例: 2.选择“Canvas”——“GraphChart”预制体,1.Set data categorie ...