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

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按钮时,将结果保存至数据库,生成新的页面返回,这样便可达到动态刷新页面的效果。

具体的前端界面如下:

原文地址:https://www.cnblogs.com/cloudman-open/p/11635346.html

时间: 2024-10-28 10:51:12

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

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

Part 1: 从Git中克隆代码到本地 git clone https://github.com/git/git Part 2: 在VS Code中安装Salesforce和Git插件 在VS Code中打开代码工程 安装Salesforce Extension Pack 安装Git Extension pack Part 3: 认证一个Org 打开代码工程 打开Command palette(shift+command+p/F1) SFDX: Authorize an Org 选择要登录的模

黑马程序员 【】java学习之路——TCP(三)客户端上传文件到服务器

------- <a href="http://www.itheima.com" target="blank">android培训</a>.<a href="http://www.itheima.com" target="blank">java培训</a>.期待与您交流! ---------- import java.io.*; import java.net.*; class

Android 学习之路--android基础(三)

Android 学习之路--android基础(三) | Talent?C 盒子 盒子 博客 友链 关于 Posts List 作者Talent?C转载请注明出处 前言 上一篇文章我们介绍了 活动(Activity) 的作用及相关用法,我们知道活动是用来给用户展示 UI界面 的,那么在Android中都有哪些UI控件呢?今天就让我们来简单学习几种常见的 UI控件. 如何编写UI界面? Android Studio中为我们提供两种UI界面的编辑方式, 第一种是通过Android Studio 提供

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

据网上收集的web安全工程师需要掌握哪些技能,职位要求以及如何入门,加上学习网易推出的web安全工程师微专业课程,为了进一步学习,所以给自己做了一些小小规划,也希望给同样想成为web安全工程师的同仁们一些参考. 第一部分--基础学习 1#web安全工程师职位描述与要求: 2#需要掌握基础分层图: !--首先在我们入门前,肯定需要知道什么是web,一个网站是怎么搭建的?--! 3#基础学习--静态层根据上面的分层学习,第一步进行静态层的学习,包括HTML和javascript.关于入门掌握的程度:

python学习之路基础篇(三)

一.简单回顾上次课程内容 主要内容:str|list|dict 类---对象 具体内容可以参考: http://www.cnblogs.com/wupeiqi/articles/5433925.htmlhttp://www.cnblogs.com/wupeiqi/articles/5444685.html 二.python后续学习方法:首先整理课程讲解内容到博客,然后再写作业 三.本次课程内容 1.数据类型-set 小结: 列表和集合set的区别(小知识点):列表:有序 可重复 可嵌套集合set

21000+行原生J S的学习之路(第三篇)

11. {     ()()()()()()[]()()()()T(T)TT(T[])TT (T)TT(T)TT(T)T()()()()[]} 今天我们来看下对象的constructor属性. 11.1 new()对于我们来说是一个很常用的方法比如我们实例化一个Object的时候,它里面的参数可以是任何类型的,既然是实例化一个对象那么它返回的肯定还会是一个对象. 11.2 readonly property当然就不用多说了,Object property肯定是只读的.来看看getProperty

ISO开发学习之路--第一篇--图像显示器制作(1)

项目主要工作,能够通过按钮按进行翻上一张和下一张对相片就行查看功能.这项目有点简单,但是是学习的必经过程.对学习的整理和参考. 主要目的: 1)熟悉3大控件的使用方法和规则 2)熟悉3大控件的编程方法 3)熟悉ISO开发技巧 下面是今天学习内容的源码,这部分源码实现的有点罗嗦,后期会改成,后来会用plist的方式和应用数组的方式,简化实现图片显示的方法. #import "ViewController.h" @interface ViewController () @property

IOS开发学习之路--第一篇--准备和说明

经过1个多月的对Objective-C的学习和了解,对其也有一定的认识,但是仅仅是了解,还需要今后的不断熟练和摸索才能掌握. 从现在写这个文章起,正式进入了学习IOS开发之路.之前看了很多人发表自己的论坛或者博客,觉得自己也该有这个东西,不仅可以充实学习内容,也是积累知识的过程.同时也可以总结学习过程中的各种方法. 长风破浪会有时,直挂云帆济沧海!每天进步一点点,生活乐趣大点点! 学习IOS开发,主要的学习资料: 1)OC基础,李明杰IOS开发基础视频(C和OC)经典 2)IOS开发技术,黑马2

python学习之路基础篇(第四篇)

一.课程内容回顾 1.python基础 2.基本数据类型  (str|list|dict|tuple) 3.将字符串“老男人”转换成utf-8 s = "老男人" ret = bytes(s,encoding="utf-8") print(ret) ret1 = bytes(s,encoding="gbk") print(ret1) #程序运行结果如下: b'\xe8\x80\x81\xe7\x94\xb7\xe4\xba\xba' b'\xc0