Create a Salesforce Function

This Quick Start provides code samples in Node.js with JavaScript. For examples using Java and TypeScript, see Explore Solutions and Sample Code.

Note

Generate Your Function 

You’re ready to create your first function. Run this command in the project root directory:

1sf generate function -n myfunction -l javascript
  • -n the name of the function; must start with a letter and contain only lowercase letters and numbers
  • -l the programming language for your function; javascript, typescript, or java

Your project now contains the basic scaffolding for your function, including supporting metadata and default boilerplate code. The project generation process creates a directory myfunction with default configuration files:

  • A package.json file that contains information about dependencies.
  • A project.toml file that contains function metadata information. See Developer Guide: Function Metadata TOML Files for more details.
  • index.js that contains boilerplate code for your function. This file is your primary source code file. It’s preconfigured with an entry point method that has parameters used to pass payload data to the function and to communicate with the invoking org. The default function in index.js logs the received payload, issues a query for Account data, and logs the query results.
1export default async function (event, context, logger) {
2  logger.info(`Invoking myfunction with payload ${JSON.stringify(event.data || {})}`);
3
4  const results = await context.org.data.query("SELECT Id, Name FROM Account");
5  logger.info(JSON.stringify(results));
6  return results;
7}

The function parameters are:

ParameterDescription
eventAn Event object that describes the triggering event and contains event data. This parameter also contains event data in the data property, sometimes called the payload.
contextSalesforce org context for reading from and writing to Salesforce. The context is pre-configured to be authenticated to the invoking org.
loggerSalesforce logger for the function.

Finish Writing Your Function 

Edit index.js and update your function to match the following example. This function uses the Salesforce Functions SDK for Node.js to insert a new Account record in your scratch org. It then queries all Account records with the given fields in the org. The new Account’s name is populated from the name field of the payload.

1export default async function (event, context, logger) {
2  logger.info(`Invoking salesforcesdkjs function with payload ${JSON.stringify(event.data || {})}`);
3
4  // Extract properties from payload
5  const { name, accountNumber, industry, type, website } = event.data;
6
7  // Validate the payload params
8  if (!name) {
9    throw new Error(`Please provide account name`);
10  }
11
12  // Define a record using the RecordForCreate type and providing the Developer Name
13  const account = {
14    type: "Account",
15    fields: {
16      Name: `${name}-${Date.now()}`,
17      AccountNumber: accountNumber,
18      Industry: industry,
19      Type: type,
20      Website: website,
21    },
22  };
23
24  try {
25    // Insert the record using the SalesforceSDK DataApi and get the new Record Id from the result
26    const { id: recordId } = await context.org.dataApi.create(account);
27
28    // Query Accounts using the SalesforceSDK DataApi to verify that your new Account was created.
29    const soql = `SELECT Fields(STANDARD) FROM Account WHERE Id = '${recordId}'`;
30    const queryResults = await context.org.dataApi.query(soql);
31    return queryResults;
32  } catch (err) {
33    // Catch any DML errors and pass the throw an error with the message
34    const errorMessage = `Failed to insert record. Root Cause: ${err.message}`;
35    logger.error(errorMessage);
36    throw new Error(errorMessage);
37  }
38}

This code is from Context_SalesforceSDK_JS sample in the functions-recipes GitHub repo.

Tip

Product Retirement Announcement

Salesforce Functions is no longer available for purchase or renewal. To preserve the capabilities that Salesforce Functions provided to your org, deploy an alternative solution before your existing order term ends. See Salesforce Functions Retirement for more information on migrating your functions. Contact your Salesforce Account Executive for more information on Heroku.