Salesforce怎么自定义控制器

81次阅读
没有评论

共计 3538 个字符,预计需要花费 9 分钟才能阅读完成。

今天丸趣 TV 小编给大家分享一下 Salesforce 怎么自定义控制器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

一. 自定义控制器

  通过在 apex:page 控制器属性中引用控制器类的名称,将自定义控制器添加到 Visualforce 页面。当我们的页面使用自定义控制器时,不能使用标准控制器。页面使用不同的属性来设置自定义控制器。
1. 可以通过 Developer Console 创建一个简单的 VF 页面 , 点击 File– New — Visualforce Page  创建一个 Visualforce 页面 .

    页面名称我们就叫做 OPDSortManage 

apex:page controller= OPDSortManageController 
  apex:form 
  apex:pageBlock title= Contacts List  id= contacts_list 
 
  !--  偷工减材中... -- 
  /apex:pageBlock 
  /apex:form 
 /apex:page

当我们的页面编辑好的时候点击保存时, 会说我们的 Controller 未定义, 所以小喵建议大家可以先创建 Controller 其次再创建页面

2. 可以通过 Developer Console 创建一个简单的自定义控制器, 点击 File– New– Apex Class  创建一个 Apex 类

  类名的话就需要跟我们的页面上引用的 Controller 的类名一致了哦!

Getter 方法将数据从您的控制器中拖出到您的页面上。有相应的 setter 方法可以让你从页面提交值到你的控制器。

public with sharing class OPDSortManageController { public Integr Num {get;set;} // 模拟变量  get  取值  set  设值
 
 // 构造
 public OPDSortManageController(){
 num = 0 ;
 }
}

  当我们每次更改代码之后记得保存哦!

3. 切换回我们的 OPDSortManage 页面并再次保存。这次会提示我们保存成功, 如果出现其他错误的话, 就需要小伙伴们认真审查代码了.

4. 点击预览打开您的页面的预览,就可以在进行更改时查看。应该打开一个新窗口,显示标准的 Salesforce 页面标题和侧边栏元素,但没有内容。

二. 标准控制器

 “Visualforce 使用传统的模型 - 视图 - 控制器(MVC)范例,并包括复杂的内置控制器来处理标准动作和数据访问,并提供与 Force.com 数据库的简单而紧密的集成。这些内置控制器通常称为标准控制器,甚至称为标准控制器。

        这意味着为了使 Salesforce 中的数据显示在 Visualforce 页面上,需要一个控制器。控制器是在 Visualforce 页面中引用的 Apex 类。正是这个控制器使 Visualforce 页面能够在页面上显示 Salesforce 数据。控制器从 Salesforce“获取”数据并将其“设置”在 Visualforce 页面上。

          自定义控制器和标准控制器之间的区别在于,标准控制器已经提供了创建,读取,更新,删除(CRUD)操作。并且由于绝大多数标准和自定义对象已经具有可用于与该对象关联的数据进行交互的标准控制器,因此我们无需自己编写用于控制器的代码。

apex:page standardController= Account  recordSetVar= accounts  tab sidebar= false 
 apex:pageBlock  
 apex:pageBlockTable value= {!accounts}  var= a 
 apex:column value= {!a.name} / 
 /apex:pageBlockTable 
 /apex:pageBlock 
 /apex:page

          我们只需使用“standardController =”Account”行即可使用 Account 标准对象引用 Visualforce 页面。此处无需 Apex 代码。这非常有帮助,因为这意味着我们可以在测试或生产环境中利用 DataTables.js 和 Visualforce,而无需编写任何 Apex 代码。

三. 扩展性控制器      

    如果你是一个懵懂的少年, 你可能和小喵一样写过这样的代码 ↓

错误代码案例 :

apex:page standardController= Account  Controller= AccountController  recordSetVar= accounts  sidebar= false 
 apex:pageBlock  
 apex:pageBlockTable value= {!Account}  var= a 
 apex:column value= {!a.name} / 
 /apex:pageBlockTable 
 /apex:pageBlock 
 /apex:page

那么, 这样的代码在保存时将会给你报错, 大致的意思就是 一个页面不能既存在 StandardController 标准控制器, 又存在 Controller 自定义控制器.

“控制器就是控制器。扩展不是控制器。不同之处在于扩展不能独自放置在页面上。换句话说,除非页面上首先有一个控制器,否则不允许使用扩展名。另一个显着特征是页面只允许一个控制器。但是可以根据需要添加任意数量的扩展。”

正确案例 :

1. 当我们同时需要用到 标准控制器 和 自定义控制器时, 可以将自定义控制器设为扩展性的

       standardController : 标准控制器

       Controller : 自定义控制器

       extensions  :  扩展性控制器

apex:page standardController= Solution_Programme__c  extensions= Solution_ProgrammeDeleteController  action= {!init}  sidebar= true 
  apex:outputPanel layout= none  rendered= {!IF(is_Alert_Delete, false,true )} 
  apex:form  
  apex  Solution 方案只有状态为草案中时才可删除 /apex br/ 
  apex  请点击 a href= javascript: history.go(-1)   返回 /a /apex 
  /apex:form 
  /apex:outputPanel 
  apex:outputPanel layout= none  rendered= {!IF(is_Alert_Delete, true, false)} 
  apex:form  
  apex  删除成功 /apex br/ 
  apex  请点击 a href= javascript: history.go(-1)   返回 /a /apex 
  /apex:form 
  /apex:outputPanel 
 /apex:page

2. 自定义控制器

public with sharing class Solution_ProgrammeDeleteController { public String ids {get;set;}
 public boolean is_Alert_Delete {get; set;}
 public Solution_ProgrammeDeleteController(ApexPages.StandardController controller)
 { ids = ApexPages.currentPage().getParameters().get( id 
 }
 public void init(){ Solution_Programme__c solutionProgrames =[select id , Status__c from Solution_Programme__c where id = :ids];
 if (solutionProgrames.Status__c.contains( 草案中)){
 delete solutionProgrames;
 is_Alert_Delete = true;
 }else {
 is_Alert_Delete = false; 
 }
 
 }
}

以上就是“Salesforce 怎么自定义控制器”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,丸趣 TV 小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计3538字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)