Salesforce异步进程
2021/12/4 7:16:50
本文主要是介绍Salesforce异步进程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
异步进程:
异步进程用于在单独的线程内来运行进程。异步进程是一个在后台运行,不需要用户等到任务结束的进程或者方法。异步进程好处很多,包括不需要用户等待,节省响应时间等等。
异步进程主要有以下几种形式:
类型 | 介绍 | 常用场景 |
Future方法 | 在自己线程中运行,直到资源可用才行 | Web service callout. |
Batch Apex | 运行大量的Job,数量超过正常处理限制 | 数据DML操作 |
QueueableApex | 和Future类似,但是提供额外的工作链,允许完成更复杂的类型 | 执行顺序处理操作与外部Web服务。 |
ScheduledApex | 计划指定时间运行Apex | 固定时间的任务,例如每日或每周等任务 |
- Future方法
Future方法用于异步处理,常用于Web service callout操作.Future方法需要有几个规范:
1.方法必须是静态static的;
2.方法上方需要使用@Future标签;
3.方法返回类型必须是void类型;
4.方法参数必须是模块私有的变量,不能使public等;
5.方法参数不允许使用标准的Object或sObject类型,可以使用基本类型或者集合类型;
6.不能再一个future方法调用另一个future方法,当future方法运行的时候也不可以在trigger中调用;
7.future方法中不能使用getContent()和getContentAsPDF()方法。
有几点需要注意:
1)future方法执行不保证质量,如果需要好的质量可以使用Queueable方法;
2)可以允许两个future方法同时运行,当两个future方法同时对一条记录进行操作时,可能引起记录锁定或者运行时异常。
总之,使用future方式不保证质量。。。。。。而且有很多限制,开发的时候能不用就不用,如果必须使用情况下自己评估一下。
- Queueable
Queueable接口有着类似future的特性,类似将future特性和批处理功能混合在一起,相对future方法来讲,有很大的优势:
1.可以使用Object和sObject类型作为参数;
2.便于监控,可以直接通过System.enqueueJob()方法运行返回AsyncApexJob ,方法不用限制在startTest()和stopTest()方法中;
3.可以链接两个job,一个Queueable接口方法可以调用另一个Queueable接口。
Queueable在执行异步的时候大部分可以替代掉future,但是不是所有的情况都可以替换。当一个方法有时需要同步执行有时需要异步执行,相对来讲用future操作更为简单,毕竟不需要修改方法的内容,只是注解而已。
- ScheduledApex
定时任务相对来说,使用比较方便。当你需要在指定时间日期去执行某些操作(比如定期清理垃圾数据等等)时,定时任务就显得尤为便利。
定时任务的声明和调用都很简单,通过以下步骤即可完成操作:
1.实现Schedulable接口,并重写execute方法,此方法体内实现需要定时执行的操作;
2.使用System.schedule()方法实现定时任务的调用。
注意:定时任务在每24小时同时只允许最多100个定时任务。超过数量则会抛出异常。
System.schedule()方法有三个参数:第一个参数为定时任务名称;第二个参数为定时任务执行时间;第三个参数为需要执行的定时任务的对象。
关于定时任务执行时间有很多需要注意的地方:
执行时间字符串通过空格分隔每个时间点,时间点的顺序为:
Seconds Minutes Hours Day_of_month Month Day_of_week optional_year
最后,Schedulable除了在代码中通过System.schedule()方法启动定时任务还可以通过页面设置启动定时器。步骤如下:
1.点击setup-->develop-->Apex Classes;
2.点击Schedule Apex按钮;
3.输入Job Name,为定时任务显示的任务名称,点击Apex Class的查找按钮选择需要定时任务的实现Schedulable接口的类,设定时间,点击保存;
4.定时任务创建成功,在setup-->Jobs-->Scheduled Jobs中可以看到创建的定时任务了。
通过页面设置启动定时器和代码的区别为:使用页面配置定时器无法精确到分和秒。
这篇关于Salesforce异步进程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升