Salesforce功能和HEROKU数据系列:三个第三部分
本文是关于使用Salesforce Function中使用Heroku Managed Data产品的三部分系列的第二部分。在第一部分中,我们专注于Heroku Postgres的Salesforce功能。在第二部分中,我们将使用Heroku Data for Redis探索Salesforce功能。最后,在第三部分中,我们将涵盖Salesforce功能和Apache Kafka on Heroku。
核心概念简介
什么是Salesforce功能?
Salesforce功能是用于扩展您的Salesforce应用程序或流程的自定义代码。自定义代码可以利用您在Salesforce实例的安全环境中运行时选择的语言和库。
例如,您可以利用JavaScript库根据Salesforce中的触发过程来计算和缓存值。如果您是一般功能的新手,请查看Get to Know Salesforce Functionsâ€以了解它们是什么以及它们的工作方式。
Redis的Heroku数据是什么?
Heroku Data for Redis是Redis键值数据存储,由Heroku为您完全管理。这意味着Heroku照顾诸如安全,备份和维护之类的事情。您需要做的就是使用它。由于Heroku是Salesforce的一部分,因此这使访问和安全性变得更加容易。 Heroku Dev Center documentation是找到Redis Heroku数据的更多细节的绝佳场所。
REDIS的Salesforce功能 + HEROKU数据的示例
redis通常用于您需要快速访问的短暂数据。示例包括缓存的值,工人或状态数据以进行流程或访问网站的用户执行的任务队列。尽管Redis可以将数据持续到磁盘,但它主要用作内存数据存储。让我们审查几种用例,让您更好地了解Salesforce功能和REDIS如何合并在一起。
用例1:在运行函数之间存储状态
可能有时一个过程具有多个阶段,每个阶段都需要运行函数。下一个功能运行时,您要捕获该功能运行的状态,该功能由下一个运行的功能使用。
一个例子可能是一个价格引用过程,每个阶段都需要一些后端计算。不同的人或团队可能会在此过程中执行步骤。他们甚至都不属于一个销售大师。但是,每个阶段运行的功能需要了解先前的结果。
用例2:管理工作流程的队列
此用例与背景作业的灵活性有关。由于基于Salesforce的应用程序在multitenant architecture上运行,因此Salesforce对CPU和应用程序的内存使用限制。长期运行的程序通常是界限和限制的。
那么,您如何为Salesforce org承担漫长或繁重的任务?答案是Salesforce功能。您可以连接您的功能以收集所需的信息并将其插入Redis。然后,您的Heroku worker processes可以检索信息并执行任务。
用例3:缓存昂贵操作的结果
在最后一个用例中,让我们假设您有一个昂贵的查询或计算。结果不经常变化,但是需要结果的报告经常运行。例如,也许我们希望在很少发生变化的大量记录中匹配一些标准。我们可以使用Salesforce功能来完成工作并重新存储结果。随后的函数执行可以简单地抓住缓存结果。
我如何开始?
要开始,您需要在Salesforce功能方面和Heroku方面都有几块。
- 先决条件
- 开始使用Salesforce功能
从Salesforce功能访问REDIS的Heroku数据
一旦您涵盖了先决条件并创建了项目,就可以运行以下命令以使用HEROKU数据创建redis访问的函数。
要创建新的JavaScript函数,请运行以下命令:
$ sf generate function -n yourfunction -l javascript
将为您提供一个带有node.js应用程序模板的/functions
文件夹。
连接到您的redis实例
您的功能代码可以使用dotenv
软件包将REDIS URL指定为环境变量,而node-redis
软件包则作为REDIS客户端。连接到Redis可能看起来像这样:
import "dotenv/config";
import { createClient } from 'redis';
async function redisConnect() {
const redis = createClient({
url: process.env.REDIS_URL,
socket: {
tls: true,
rejectUnauthorized: false
}
});
await redis.connect();
return redis;
}
对于本地执行,使用process.env
和dotenv
假设您有一个指定REDIS_URL
的.env
文件。
将数据存储在Redis中
您的Salesforce功能的实际主体将涉及执行一些计算或数据获取,然后将结果存储在REDIS中。一个例子可能是这样:
export default async function (event, context) {
const redis = await redisConnect();
const CACHE_KEY = `my_cache_key`;
const CACHE_TTL_SECONDS = 86400;
// Check Redis for cached value
let cached_value = await redis.get(CACHE_KEY);
if (cached_value) {
return { result: cached_value }
} else {
// Perform some calculation
const calculated_value = await perform_long_running_computation();
// Store in Redis
redis.set(CACHE_KEY, calculated_value, {
EX: CACHE_TTL_SECONDS,
NX: true
});
// Return result
return { result: calculated_value }
}
}
在本地测试您的Salesforce功能
要在本地测试您的功能,您首先运行以下命令:
$ sf run function start
然后,您可以从另一个终端使用有效载荷调用该功能:
$ sf run function -l http://localhost:8080 -p '{"payloadID": "info"}'
有关本地运行功能的更多信息,请参见this guide。
关联您的Salesforce功能和Heroku环境
在本地验证我们的函数按预期运行后,我们可以将SALESEFORCE功能与计算环境相关联。 (有关如何创建计算环境和部署函数的更多信息,请参见此documentation。)
现在,通过将HEROKU用户作为合作者添加到您的函数的计算环境中来关联您的功能和Heroku环境:
$ sf env compute collaborator add --heroku-user username@example.com
环境现在可以共享HEROKU数据。接下来,您将需要计算环境的名称,以便您可以将数据存储附加到它。
$ sf env list
最后,附加数据存储。
$ heroku addons:attach <your-heroku-redis> --app <your-compute-environment-name>
以下是一些其他资源,当您开始实施Salesforce功能并访问Redis的Heroku数据时,可能对您有所帮助:
结论
这样,您会使用Salesforce功能连接到Heroku数据!
salesforce功能使您可以在Salesforce应用程序中的灵活性和自由,以访问Heroku数据,无论该数据是否在Postgres,redis,甚至是Kafka中。在我们系列的第二部分中,我们介绍了使用Salesforce功能与Heroku Data合作进行REDIS。尽管这是一个相当高的概述,但您应该能够看到结合这两个功能的潜力。在本系列的最后一篇文章中,我们将与Heroku上的Apache Kafka集成。