博客
Blog

2020年08月28日

第15次公司内部学习会

 7月31日,举行了第十五回公司内部学习会。
 此次的题目【RemoteAction的案例】和【SFDX Falcon】都是与salesforce相关的。这次也学到了很多东西。

RemoteAction的案例

 RemoteAction是一种可以从Visualforce页面直接向Apex控制器的AJAX执行请求的工具。
 通过使用RemoteAction,可从控制器上断开页面执行异步动作,也可在页面上执行任务而不重载整个页面。此外,也有助于减轻视图状态的问题。
 为了能够在调用的时候准确地传递必要的数据、RemoteAction具有能够非常有效地调用控制器和从页面上传递数据的功能。

Remote Action的添加方法

①添加到Visualforce页面
 在Visualforce页面中使用RemoteAction的时候,JavaScript的调用参数作为请求追加。
 远程方法调用是同步运行的,但不等待回复。若返回响应,则回调函数将异步处理响应。

②用Apex里的方法的声明
 几乎所有的Apex方法都可以作为RemoteAction来调用,但是方法必须遵守一些简单的规则。

1.在控制器中,Apex的方法声明时,必须把@RemoteAction加到开头。
2.Apex的@RemoteAction方法是static,并且必须是global或public。
3.在方法中,对于参数来说,可以是Apex的原始类型、集合、指定类型的sObject、通用sObject、用户定义的Apex的类和接口。在通用sObject中,为了确定实际类型,必须指定ID或sobjectType的值。在接口参数中,也需要指定apexType来确定实际类型。
4.在方法中,可以返回Apex的原始类型、sObject、集合、用户定义的Apex类和枚举、SaveResult、UpsertResult、DeleteResult、SelectOption或PageReference。
5.在RemoteAction中所使用的方法,需要根据名字和参数的数量来唯一识别,且不能重载。
例如,使用上述方法时,不能同时存在多个getItemId(Integer productNumber)方法。可代替的方案是用不同的名称声明多个方法。
• getItemIdFromName(String objectName)
• getItemIdFromProductNumber(Integer productNumber)

③远程方法和继承
 可通过在被继承方法中的Apex控制器调用远程执行。@RemoteAction方法被检索或被调用时,Visualforce会查询页面控制器的继承等级,在控制器的父类中检索@RemoteAction方法。

远程响应的处理

 通过远程方法的返回函数异步处理远程方法调用的响应。此回调函数接受以下参数:
• 表示远程调用时的event对象
• 根据远程Apex方法返回的result对象
 函数可以根据返回的数据更新页面信息和用户界面元素。
 event对象提供了远程调用的针对成功或失败情况下有用的值。

Remote Action VS Action Function

 能提供与Remote Action相似功能的有Action Function。Action Function能够通过使用【apex:actionFunction】组件进行利用。
 通常,【apex:actionFunction】更容易使用,必要的代码也会比较少。但另一方面,JavaScript可以提供更高的灵活性。

 这两个具体的不同点的一部分如下所示。
【apex:actionFunction】标签
1.用户可指定重新显示对象
2.发送表格
3.不需要JavaScript的记述

RemoteAction
1.用户可以传递参数
2.提供回调
3.需要一些JavaScript的记述

限制及考虑事项

・在RemoteAction调用时,虽然不受API限制,但使用RemoteAction的Visualforce页面适用所有标准Visualforce的限制。
・默认情况下,远程呼叫的响应必须在30秒内返回。超过这个的话,呼叫会超时。如果完成请求需要更多的时间,要把超时时间设到120秒。
・请求的大小上限是包括数据头共4MB。
・远程调用的响应大小上限为15MB。

 自己也正好在业务中使用过RemoteAction。因为工作中工期的原因,没有什么系统地学习的机会,所以看了这次的发表,我也想能系统地理解而努力。

SFDX Falcon


 接下来是关于SFDX Falcon的发表。
 SFDX Falcon是Salesforce公司开发的用于提高Salesforce的Package开发便利性的SalesforceCLI插件。具体来说,这是一个用于使Package开发流程自动化的插件。



 SFDX Falcon有两种功能。
・AppExchange package kit
便于SFDX中ISV包开发的工具及模板

・AppExchange Demo kit
可轻松创建包含Package的演示工程目录的套件

AppExchange package kit

 使用CircleCI这个CI工具,可以自动配置模板用于Package开发环境、环境部署、beta版制作等操作。用户可以在Salesforce Devhub环境、package环境中预先登录SalesforceCLI,剩下的只需在SFDX Falcon中输入交互式所需的信息即可完成雏形。
 以这种雏形进行开发,在Github上push后CircleaCI会自动运行,根据情况进行自动化的执行。

AppExchange Demo kit

 包装开发完成后,可以简单地创建演示工程目录。
 根据软件包的不同,有可能会需要安装后追加设置、测试用户和测试记录等。
 虽然需要准备必要的东西,但是只要在demokit中定义一次,就可以一直创建出同样的演示工程目录。
 如果事先登录Devhub组织的话,也可以通过输入命令来创建演示工程目录。

注意点

・不支持Windows。由于路径是在Linux下预设的,所以在Windows下使用时会发生引用错误。
・想要在Windows中使用时,需要将SFDX Falcon的安装路径改写为Windows支持的路径。


 Salesforce有这么方便的工具呢。我想充实相关知识,也想自己也能早点掌握。

Page top