Visualforce Basic学习

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

Visualforce Page
Conroller 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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容