Apex & Lightning Salesforce 学习笔记及报错问题(持续更新)

这篇博客记录了作者在学习Salesforce Apex和Lightning时遇到的问题及解决方法,包括在Lightning Experience显示页面、Apex字段标签、函数和方法的使用、SOQL查询注意事项、单元测试、日期处理等多个方面。博主通过实例分享了学习心得,如循环引用SOQL的两种方式、使用静态资源的技巧以及如何处理报错等。
摘要由CSDN通过智能技术生成

博主还在学习Salesforce的过程中,在学习期间上网了解并记录了很多比较基础的东西,故将笔记写于此篇。本人才疏学浅,文中如果有不对或值得讨论的地方,欢迎大家提出来,一起探讨共同进步。👇👇👇

在Lightning Experience中显示编辑后的页面

第一次尝试在dev cosole中写代码后,进行页面显示时,出现以下画面:
在这里插入图片描述
由于需要在Lightning Experience中显示,则需要在控制台中输入 ctrl+shift+j

$A.get("e.force:navigateToURL").setParams(
{
   "url": "/apex/pageName"}).fire();

//您还可以通过以下方式预览带有记录ID的页面:将记录ID参数添加到JavaScript中URL的末尾:
$A.get("e.force:navigateToURL").setParams(
{
   "url": "/apex/pageName?&id=00141000004jkU0AAI"}).fire();

在这里插入图片描述
于是右键打开了控制台,输入上述代码后发现报错,如下:
在这里插入图片描述
谷歌后(https://developer.salesforce.com/forums/?id=9060G0000005MvtQAE)终于在一个评论中找到了答案,如下:
在这里插入图片描述
点击进去后(https://developer.salesforce.com/forums/?id=9060G000000BiGtQAK)看到了这个回答,才知道是控制器打开错了,如下:
https://developers.google.com/web/tools/chrome-devtools/console/
https://trailhead.salesforce.com/fr/modules/visualforce_fundamentals/units/visualforce_creating_pages
在这里插入图片描述
更改你的页面名字,即可跳转到对应页面,如下:
在这里插入图片描述
注意:只能在Lghtning中才可以使用上述代码,在经典版本中照样会报错,如下:
在这里插入图片描述

Account.Owner

在这里插入图片描述

引用自定义字段

如果您创建了自己的自定义对象(而不是像Account一样使用对象)并且想知道如何引用字段,则必须遵循一个稍微不同的过程。从设置中,在快速查找框中输入对象,然后选择对象,选择您的对象,然后选择该字段。 API名称现在指示您必须在Visualforce页面中使用的字段的名称。例如,如果您的字段名为Foo,则其API名称为Foo__c,并且您将使用该名称引用它 – 如:{! myobject__c.foo__c}。

Apex中的一些字段标签

大多数这些组件的名称都以“apex:input”开头,您可以在组件参考中找到它们。对于选择列表和单选按钮控件,请查找名称以“apex:select”开头的组件。
<apex:pageBlock>:是一个结构化的用户界面元素,用于对页面上的相关项进行分组。使用自动建议添加它,并将标题属性设置为“块标题”。
<apex:pageBlockSection>:是另一个将结构和层次结构添加到页面的组件。呈现时,用户可以折叠<apex:pageBlockSection>元素以隐藏除标题以外的所有内容。
<apex:detail>:显示特定记录的详细信息,以及相关记录(如联系人,案例,机会等)的列表。快速将记录详细信息添加到使用标准控制器的页面。<apex:detail>是一个粗粒度输出组件,它只在一行标记中向页面添加许多字段,部分,按钮和其他用户界面元素。还要注意,它添加到页面的所有内容都使用Salesforce Classic样式。定制<apex:detail>的外观有相当多的属性。
<apex:relatedList>:显示与当前记录相关的记录列表。(可根据自己所需来显示)
在这里插入图片描述
<apex:outputField>:显示记录中的各个字段。当你需要更多的控制你的页面布局时,你可以单独添加字段。显示结果为:Burlington Textiles Corp of AmericaBurlington Textiles Corp of America(336) 222-7000Apparel¥350,000,000(全部显示在一行中,没有标签,也没有其他格式)。如果用<apex:pageBlock>和<apex:pageBlockSection>组件包装起来,则显示为,如下:
在这里插入图片描述
(当在<apex:pageBlockSection>中使用<apex:outputField>时,它将采用两列布局,很好地添加字段标签,对齐和样式字段和标签)
<apex:pageBlockTable>:将数据表添加到页面。是一个迭代组件,用于生成一个数据表,并附有平台样式。如下:
在这里插入图片描述
<apex:enhancedList><apex:listViews>是您可能要用于或代替<apex:relatedList>的其他粗粒度组件。
<apex:form><apex:inputField>创建一个页面来编辑数据。<apex:form>是一个Visualforce组件,它将其中的所有内容打包成可以作为页面操作的一部分发送回服务器的东西。
<apex:inputField>为与其关联的记录数据字段创建屏幕表单字段,可用于捕获任何标准或自定义对象字段的用户输入,并且尊重在字段定义上设置的任何元数据,例如字段是必需的还是唯一的,或者当前用户是否有权查看或编辑它。
<apex:commandButton>:在用户界面上添加一个按钮,如下:
在这里插入图片描述
<apex:pageMes​​sages>:显示任何表单处理错误或消息,如下:
在这里插入图片描述
<apex:outputLink>:链接(https://help.salesforce.com/articleView?id=custom_links_constructing.htm&type=5)。如下:
在这里插入图片描述
recordSetVar:该属性表示VF(visual force)页面使用面向集合的标准控制器。属性的值表示传递给页面的记录集的名称表示集合记录。可以在表达式中使用此记录集来返回在页面上显示的值或对记录集执行操作。如下:
在这里插入图片描述
<apex:dataList>
<apex:repeat>
{!listViewOptions}:来获取可用于对象的列表视图过滤器的列表
{!filterId}:设置列表视图过滤器用于标准列表控制器的结果。如下:
在这里插入图片描述
在这里插入图片描述
<apex:commmandLink>:组件引用标准列表控制器Previous和Next提供的两个操作方法。结果是执行“上一个”或“下一个”操作的链接(分页)。action属性设置为引用控制器中action方法的表达式。(请注意,与getter方法相比,action方法的名称与引用它们的表达式相同。)如图:
在这里插入图片描述
(图上所示方法:该操作方法更改排序顺序专用变量,然后该表被重新渲染?)
<apex:facet>:让我们将列标题的内容设置为我们想要的任何内容
<apex:actionFunction >:Saleforce之actionFunction和setTimeout 定时调用
在这里插入图片描述
<apex:actionPoller>
在这里插入图片描述
<apex:actionRegion >操作区域是最重要的标签之一,有助于提高页面性能。因此,我们应该在视觉力页面中尽量利用动作区域。
actionRegion组件仅定义请求期间服务器处理的组件;它不定义在请求完成时重新呈现页面的那一部分。我们仍将在操作组件上使用reRender属性来确定应重新渲染AJAX请求完成的区域。
还有一点需要注意的是,即使使用<apex:actionRegion>组件,整个表单仍会提交,但是actionRegion内部的唯一区域是由服务器处理的。
还有一点要注意的是使用操作区域传递验证规则。
在这里插入图片描述
在没有<apex:actionRegion >标签时,下拉框的值被发生改变则会直接显示错误信息。这是因为,当通过诸如“ onClick”或“ onChange”等事件生成AJAX请求时,整个<apex:form>都将提交到Force.com服务器,以将Industry value设置为NULL进行处理。因此出现错误。
在这里插入图片描述
在有<apex:actionRegion >标签时,若都没有值在点击save后才会显示报错信息。“ ActionRegion”告诉Force.com Server应该处理哪些组件。这里,当在诸如“ KeyPress”或“ onClick”等事件上生成AJAX请求时,服务器将处理ActionRegion内部的任何内容。因此,我们不会收到错误。
在这里插入图片描述

Apex中常用函数

URLENCODE():替换特定字符的符号。由于万维网联盟 (W3C) 制定了 URL 编码标准,因此不能通过 URL 传递某些“不安全”的字符,例如空格和标点符号。自定义按钮和链接会转义这些字段,因此无需经过 URL 编码。如果需要编码 URL,请在合并字段中使用 URLENCODE() 函数,比如:{!URLENCODE(text)},使用您希望编码的合并字段或文本字符串替换 text。例如:如果合并字段 foo__c 包含 Mark’s page, {!URLENCODE(foo_c)} 将导致:%3CB%3EMark%27s%20page%3C%2Fb%3E。
URLFOR(): 链接到 Visualforce 页面。请在 URLFOR() 中使用页面的相对路径,该路径为 /apex/PageName。例如,要链接到称为 MissionList 的未与某个记录相关联的 Visualforce 页面,请使用以下用法。

{
   ! URLFOR(/apex/MissionList” ) }

当您在 URLFOR() 中使用 Visualforce 页面并且想要向页面中传递记录 ID 时,您必须将 ID 作为参数传入。

{
   ! URLFOR(/apex/Mission”, null, [id=Mission__c.Id] ) }

$Action 全局变量和 URLFOR():指向到 Salesforce 页面。
在 Salesforce 中创建指向一个页面的自定义按钮或链接时,请使用 $Action 全局变量来构建链接,而不是粘贴页面的路径。那么,如果贵组织迁移到了另一台服务器或者页面的 URL 发生改变,该链接仍然会指向正确的位置。要构建链接,请使用带有 $Action 变量的 URLFOR() 公式函数。

{
   !URLFOR( $Action.Case.NewCase, Account.Id )}

“客户”对象上的该自定义链接会打开新建个案表单,将个案创建为客户记录的子级。您可以针对任何可查找“客户”对象的对象使用此过程。要创建不是另一记录子级的记录,您可以使用 $ObjectType.ObjectName 作为第二参数。例如:

{
   !URLFOR( $Action.Case.NewCase, $ObjectType.Case )}

$Action 全局变量需要一个记录 ID 或 $ObjectType。例如,这些公式可分别创建指向选项卡和客户详细信息页面的的链接。

{
   !URLFOR( $Action.Account.Tab, $ObjectType.Account )}
{
   !URLFOR( $Action.Account.View, Some_Account_Lookup__c.Id )}

URLFOR() 函数可获取其他可选参数,作为查询字符串参数传递到目标。您可以在用 Visualforce 页面覆盖标准操作时使用这些参数,以传入 Visualforce 页面或其控制器需要的其他参数。例如,如果在关闭个案时想要将个案上名为“实际交付日期”的自定义字段的值更改为今天,您可以使用:

{
   !URLFOR($Action.Case.CloseCase, Case.Id, [ actualDeliveryDate=TODAY()] )}

然后,您可以用 Visualforce 页面覆盖“结束个案”操作,并在 Visualforce 页面或其控制器中设置“实际交付日期”字段中的值。有关详细信息,请参阅在 Visualforce 页面中使用查询字符串参数”。
ceiling():数学函数。将数字向上四舍五入为最接近的整数;如果是负数,避免四舍五入为零。

常用方法

getContacts():方被称为getter方法,它是一个通用模式,其中{!您的Visualforce标记中的someExpression}将自动连接到控制器中名为getSomeExpression()的方法。这是让页面访问需要显示的数据的最简单的方法。

分页功能

<apex:page standardController="Contact" recordSetVar="contacts">
    <apex:form>
        <apex:pageBlock title="Contact List" id="contacts_list">
            Filter:
            <apex:selectList value="{!filterId}" size="1">
                <apex:selectOptions value="{!listViewOptions}"/>
                <apex:actionSupport event="onchange" reRender="contacts_list"/>
            </apex:selectList>
            
            <apex:pageBlockTable value="{!contacts}" var="ct">
                <apex:column value="{!ct.FirstName}"/>
                <apex:column value="{!ct.LastName}"/>
                <apex:column value="{!ct.Email}"/>
                <apex:column value="{!ct.Account.Name}"/>
            </apex:pageBlockTable>
            
            <table style="width:100%">
                <tr>
                	<td>
                        <apex:outputText value="{!PageNumber} of {!ceiling(ResultSize / PageSize)}">
                        </apex:outputText>
                    </td>
                    <td aligh="center">
                        <!-- 上一页 -->
                    	<apex:commandLink action="{!Previous}" value="《 Previous" rendered="{!HasPrevious}"/>
                        <apex:outputText style="color:#ccc" value="《 Previous" rendered="{!NOT(HasPrevious)}"></apex:outputText>
                        
                        <!-- 下一页 -->
                        <apex:commandLink action="{!Next}" value="Next 》" rendered="{!HasNext}"/>
                        <apex:outputText style="color:#ccc" value="Next 》" rendered="{!NOT(HasNext)}"></apex:outputText>
                    </td>
                    <td align="right">
                        Records per page:<!-- 按多少条数据分页 -->
                    	<apex:selectList value="{!PageSize}" size="1">
                            <apex:selectOption itemValue="5" itemLabel="5"/>
                            <apex:selectOption itemValue="20" itemLabel="20"/>
                            <apex:actionSupport event="onchange" reRender="contacts_list"/>
                        </apex:selectList>
                    </td>
                
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值