Visualforce是salesforce特有的web开发框架,可以用来开发用户界面,visualforce Page类似一个单独的web页面,Visualforce Form是可以与服务器交互的表单,当用户需要填写修改数据时使用。
有几种方法使用Visualforce Page
1.从App Launcher中打开一个独立的页面
2.作为一个Tab打开。
3.在标准的Page layout中显示。
4.作为Lightning app builder页面中的一个组件。
5.通过快速操作打开。
6.通过按钮或链接打开(包括自定义和覆盖标准按钮)。
一个Visualforce Page的URL : https://MyDomainName.my.salesforce.com/apex/HelloWorld
Visualforce不区分大小写,
{! …}告诉Visualforce,大括号内的任何内容都是动态的,并以表达式语言编写,它的值是在运行时计算和替换的,其实就是变量拉。.
下面是一个Visualforce Page
有一些常用的标签,<Apex:page> <Apex:pageBlock>,页面中也可以嵌入HTML代码
<apex:detail>以Salesforce Classic样式显示一条用户记录。
<apex:detail>一次显示许多相关列表
与用户交互的表单<Apex:form>.如果你需要返回服务器数据,可以使用form
表单<apex:form>, 文本输入框<apex:inputField>,按钮<apex:commandButton>
<apex:outputLink>组件输出内容
URLFOR() 利用$Action全局变量,指向联系人编辑或者删除的链接。用法:{! URLFOR($Action.Contact.Delete, contact.Id) }
<apex:pageCommandButton>操作按钮,可以放在apex:pageBlockButtons>中,样式为 上下都有操作按钮,且居中。
<apex:pageBlockButtons> 不能包含在其他<apex:pageBlockSection>内,会报错,must direct parent blabla……。
<apex:inputCheckbox/>复选框
用来显示处理过程中产生的错误信息。最简单的是用法是
详细用法可参考:https://www.crmsalesforcetraining.com/visualforce-apexpagemessage-tag/
在Preview一个页面时通过新的tab打开,如需要Lightning Experience中打开,可使用Chrome开发工具。
但是使用Chrome工具打开页面时报错误。搜索了一下,直接Preview VFP,是没有Lightning
关于这个问题的讨论:
https://developer.salesforce.com/forums/?id=9060G000000BiGtQAK
Playground 即使切换到Lightning experience,ctrl+shift+j还是会切换到classic,所以使用下面代码依然报错。
用org,使用下面代码,会先打开helloworld页面,但是又回到classic home页面。
$A.get("e.force:navigateToURL").setParams(
{"url": "/apex/HelloWorld"}).fire();
List包含有序的对象集合。Apex中的List是Array的同义词,两者可以互换使用。
List<String> colors = new List<String>();
String[] colors = new List<String>();
全局变量
Visualforce中的全局变量 Global Variable:$User,$Setup,$Orgnization
比如可以通过$User.Name获取登录用户的姓名,其他常用的全局变量请参考:
https://developer.salesforce.com/docs/atlas.en-us.224.0.pages.meta/pages/pages_variables_global.htm
标准控制器StandardController
Visualforce使用MVC模式,V(View)这里就是Visualforce Page,通过控制类与数据库进行交互。
Standard Controller 和 Standard List Controller的区别
单个记录数据的显示:使用Standard Controller ;列表的显示使用Standard List Controller。使用过程:
1.当页面被加载,并且<apex:page>组件被激活时,它激活客户对象的标准控制器。
2.标准控制器可以看到URL中有一个ID参数,并搜索并检索匹配的客户记录。
3.标准控制器接受记录并将其放入可供页面使用的变量中。该变量与标准控制器的sObject:Account具有相同的名称。它是一个对象变量,并包含Account sObject上可用的所有字段。
4.四个Visualforce表达式都引用了Account变量。他们使用“点符号”访问Account变量中的各个字段。所以,{! Account.Name}获取客户的名称,依此类推。
列表控制器Standard List Controller
标准控制器是单个记录的,List是显示一个列表的。在代码书写上。
列表控制器在<apex:page>组件上设置standardController属性,这点同标准控制器。然后设置recordSetVar属性。recordSetVar设置一个变量名称,用来表示记录的集合,所以这个变量通常被命名为对象名称的复数,这里是Contacts。
<apex:pageBlockTable> 显示表格数据,比如展示Related List。其中value属性指向的变量就是上面recordSetVar,即该表格用来展示Contacts List。var的作用是把该列表中的一条记录指定一个变量名,后面一列值只可以直接用变量名展示,比如ct.FirstName。
</apex:column>展示其中的一列。
其他的迭代组件,<apex:dataList>和<apex:repeat>。
过滤器的使用:
{! listViewOptions} 用来显示当前对象的视图列表。
{! filterId} 设置列表视图过滤器选择的结果,这个变量必须是String类型的。
<apex:actionSupport 有两个属性,event是触发的事件,reRender是页面更新的对象,当前的contacts_list是pageBlock的id。
所以当下拉列表变化时,只刷新pageBlock部分,而不是整个页面。
静态资源的使用
静态资源使用$ Resource全局变量进行引用,该变量可以由Visualforce直接使用,也可作为URLFOR()之类的函数参数。
下载最新版的jQuery文件,上传到Statc Resources中,然后就可以直接在vfp中使用,$Resource.jQuery.
使用点符号将它与<apex:includeScript>(用于JavaScript文件),<apex:stylesheet>(用于CSS样式表)或<apex:image>(用于图形文件)标签中的资源名称相结合它到你的页面。
同样静态图片也可以上传到系统中,vfimagetest为资源名称,后面cats/kitten1.jpg是放在压缩包中的图片,直接使用即可。
自定义控制器
//前面说的都是vfpage通过标准控制器返回数据并展示到页面的方法。
另外还可以通过自定义控制器,从数据库查询数据,返回到一个List。vf page再通过该List展示到页面的方法。
这一步需要的操作是:1创建一个Visualforce Page,2创建一个Controller Class
在class中加入变量的方法,以下两个语句都可以:
方法1: List<Case> results = Database.query(
'SELECT Id, CaseNumber ' +
'FROM Case where status=\'' + strStatus +'\''
);
方法2: List<Case> results =[SELECT Id, CaseNumber FROM Case where status=:strStatus];
这个Module做完好久了,一直忙没时间整理,最近又看一遍算温故知新了。
参考文档:
https://developer.salesforce.com/docs/atlas.en-us.224.0.apexcode.meta/apexcode/langCon_apex_collections.htm
在遇到问题中,发现有个博主详细记录了学习过程,很赞:
https://blog.csdn.net/weixin_42213195/article/details/102623984
P6