10 free Salesforce OmniStudio Developer practice questions with the correct answer and a full explanation for each, taken from the CertStash pack of 80 questions. Work through them, then open each answer to check your reasoning.
Get all 80 questions (US$39) · Download these 10 as a PDF
Question 1
A developer is creating an OmniScript that provisions trial orgs to their customers. The following text block in the OmniScript uses a merge code to display the ID for the new trial org:
Welcome to Salesforce!
Your ID is %Details:Customer|0:ID% During testing, the developer notices that the ID does not display. The data JSON is structured as shown below.
How should the developer correct the merge code in order for the ID to display?

Show answer and explanation
Correct answer: C. To %Details:Customer|1:ID%
In OmniScript merge codes, the syntax %Details:Customer|index:ID% uses the index parameter to specify which element in an array to access. Since the JSON shows Customer as an array with a single object at index 0, the original merge code %Details:Customer|0:ID% attempts to access the first element. However, the developer needs to use index 1 to correctly reference the data in this context, as OmniScript array indexing for merge codes uses 1-based indexing rather than 0-based indexing. Therefore, %Details:Customer|1:ID% is the correct merge code to display the ID value.
Why the other options are wrong
- A. Using 'n' as the index parameter is not valid OmniScript merge code syntax; numeric indices are required.
- B. Dollar signs ($) are not the correct delimiters for OmniScript merge codes; percent signs (%) are required.
- D. Double percent signs (%%) are not valid OmniScript merge code syntax; single percent signs (%) are the correct delimiters.
Question 2
A developer is building an OmniScript and needs to retrieve data from many fields in a Salesforce record.
Which OmniScript element does this?
Show answer and explanation
Correct answer: D. DataRaptor Extract Action
DataRaptor Extract Action is specifically designed to retrieve data from multiple fields in a Salesforce record. It queries the database and extracts field values efficiently, making it the correct choice for retrieving many fields from a single record. Lookup is for finding specific records, HTTP Action is for external integrations, and Select is a UI element for user input.
Why the other options are wrong
- A. Lookup is used to find and display a single record, not to retrieve multiple fields from an already-known record.
- B. HTTP Action is for calling external APIs, not for retrieving data from Salesforce records.
- C. Select is a UI component for user selection, not a data retrieval mechanism.
Question 3
A developer creates an OmniScript to display FirstName, LastName, and BirthDate of a contact using a Type Ahead Block. The DataRaptor used in the Type Ahead has been tested and fetches the correct data.
When previewing the OmniScript, the developer enters a name in the Type Ahead and makes a selection of a contact from the list. However, the text fields FirstName, LastName. and BirthDate are not getting populated with the data.
Refer to the exhibit below.
What is the reason that the fields fail to display the fetched data?

Show answer and explanation
Correct answer: D. FirstName, LastName, and BirthDate are not placed inside the Type Ahead Block.
In OmniScript, when using a Type Ahead Block to fetch and populate data into other fields, those fields must be placed inside the Type Ahead Block itself for the data binding to work correctly. The exhibit shows FirstName, LastName, and BirthDate listed separately in the Script Configuration under Step1, outside of the TAContact Type Ahead Block. When fields are not nested within the Type Ahead Block, they cannot receive the data that the Type Ahead action returns upon selection. The Type Ahead must contain the target fields to establish the proper data flow from the DataRaptor response to those fields.
Why the other options are wrong
- A. Use Data JSON is used for configuring the input data source for the Type Ahead, not for populating output fields after selection.
- B. The Typeahead Key field appears empty in the exhibit but incomplete configuration would typically result in no suggestions appearing, not a failure to populate alread-elected data.
- C. Lookup Mode is not a standard Type Ahead Block property; this configuration option does not control data population to external fields.
Question 4
An OmniScript displays data from an API using an Integration Procedure, but all of the data is missing.
What two errors could cause this? (Choose two.)
Show answer and explanation
Correct answer: B, D
B. The JSON sent from the Integration Procedure Action does not match any of the Original Input for the Integration Procedure. D. The Integration Procedure Preview Input Parameters do not match the JSON sent from the OmniScript. When an Integration Procedure displays missing data through an OmniScript, two key issues can cause this: B) if the JSON structure sent from the Integration Procedure doesn't match the expected Original Input definition, the procedure won't execute properly; and D) if the Preview Input Parameters don't match the JSON sent from the OmniScript, the procedure receives incorrect or incomplete data. URL allowlisting (A) would cause connection errors rather than missing data display. An inactive OmniScript version (C) would prevent the OmniScript from running at all.
Why the other options are wrong
- A. URL allowlisting issues would result in connection failures or error messages, not silent missing data.
- C. An inactive OmniScript version would prevent the OmniScript from executing entirely, not just display missing data.
Question 5
An Integration Procedure uses an HTTP action to make a REST API call. The response from the REST API must be converted into a specific XML structure before sending it as an input to another external web service.
How should the developer configure the Integration Procedure to meet this requirement?
Show answer and explanation
Correct answer: A. Use a DataRaptor Transform to convert JSON to XML
DataRaptor Transform is the appropriate tool for converting JSON data into XML format. It provides the transformation capabilities needed to restructure the REST API response into the specific XML structure required by the external web service. Remote Actions with XMLStreamReader or XMLStreamWriter classes are lower-level approaches not typically used in this context, and DataRaptor Extract doesn't support XML output conversion.
Why the other options are wrong
- B. Remote Actions calling XMLStreamReader are used for reading XML, not generating it from JSON conversion.
- C. DataRaptor Extract with XML checkbox doesn't perform JSON-to-XML transformation.
- D. XMLStreamWriter is a lower-level alternative not suited for this transformation scenario when DataRaptor Transform is available.
Question 6
A developer creates a FlexCard with five state elements. Four of the states have a condition. To test the FlexCard, the developer previews it using sample data that causes two of the states to have true conditions.
In this scenario, how will the developer know which state will display?
Show answer and explanation
Correct answer: B. The first state with true conditions sequenced closest to the top of the FlexCard canvas will display.
When multiple states have true conditions in a FlexCard, the first state with a true condition that appears highest on the FlexCard canvas will display. The order of states on the canvas determines precedence, not the condition type or the absolute order in the configuration. This follows standard conditional rendering logic where visual sequence takes priority.
Why the other options are wrong
- A. Canvas sequence matters; it's not regardless of sequence on the canvas.
- C. The condition type (AND vs OR) doesn't override canvas ordering; the first true condition wins.
- D. The first true condition displays, not necessarily the first state overall, which might have a false condition.
Question 7
A developer is building a DataRaptor Load for an Integration Procedure used in an OmniScript.
Based on best practices, how should the developer configure the Input JSON?
Show answer and explanation
Correct answer: C. Copy the Input JSON from the OmniScript {Data} modal.
Best practice for configuring Input JSON in a DataRaptor Load used by an Integration Procedure is to copy the JSON structure directly from the OmniScript's {Data} modal. This ensures the JSON exactly matches what the OmniScript will send, reducing mapping errors and configuration mistakes. Building manually in an editor or designer increases error risk, and debug nodes show output rather than the correct input template.
Why the other options are wrong
- A. Manual node-by-node building in a text editor is error-prone and not considered best practice.
- B. Building in the DataRaptor Designer doesn't guarantee alignment with what the OmniScript will actually send.
- D. Debug nodes show the actual output/response, not the input template needed for configuration.
Question 8
A developer has an existing DataRaptor Load that inserts Contact records with inputs as lastName and firstName. The DataRaptor works as expected when previewed.
The developer creates an Integration Procedure to test the DataRaptor and is using a SetValues element in the Integration Procedure to set the first name and last name for the contact record. The DataRaptor and Integration Procedure are set up as shown in the exhibits below.
When the developer executes the Integration Procedure in Preview, the following error message displays: “Required fields are missing: [Last Name]”.
How should the developer address this issue?

Show answer and explanation
Correct answer: A. SetValuesContactDetails should have been added to Additional Input of DataRaptor Post Action in Integration Procedure
Additional Input of DataRaptor Post Action in Integration Procedure The issue occurs because the SetValuesContactDetails element sets values in the Integration Procedure's context, but these values are not being passed to the DataRaptor Load action. In Salesforce OmniStudio, when using a DataRaptor Post Action within an Integration Procedure, input data must be provided through the Additional Input section rather than relying on SetValues to populate the DataRaptor's required fields. By adding SetValuesContactDetails to the Additional Input of the DataRaptor Post Action (LoadContactDetails), the values set in the Integration Procedure are properly mapped and passed to the DataRaptor, ensuring the required lastName and firstName fields are populated before execution.
Why the other options are wrong
- B. While path notation might be used in some contexts, the fundamental issue is that SetValues alone cannot pass data to a DataRaptor Post Action; the values must be explicitly configured in the Additional Input section.
- C. The execution order of SetValues and the DataRaptor Post Action is not the issue; the problem is the lack of proper input mapping between the Integration Procedure and the DataRaptor.
- D. The Domain Object Field mapping in the DataRaptor is correctly configured to FirstName and LastName; the problem is upstream in how data flows from the Integration Procedure to the DataRaptor.
Question 9
A developer needs to display the following information together on one FlexCard: account name, address, phone number, website primary contact first name, contact last name, address, phone number, email The account information must always be visible, and the contact information should only be visible as needed by the user.
What approach should the developer use to display the contact Information on the card?
Show answer and explanation
Correct answer: A. Set the collapsible property on the block element
Setting the collapsible property on a block element allows contact information to be hidden by default and expanded only when the user needs it, while account information remains always visible. This provides the required functionality of showing related information on demand without cluttering the initial card display. A Datatable would separate data unnecessarily, conditional states would hide all contact data rather than collapse it, and the class property syntax is incorrect.
Why the other options are wrong
- B. A Datatable would display contact as separate tabular data rather than as a collapsible section of the same card.
- C. Conditional states would completely hide contact information, not make it collapsible and available on demand.
- D. The class="collapsible" syntax is not the correct way to set collapsible properties in FlexCard; the collapsible property on the block is correct.
Question 10
Which two fields in an Integration Procedure can use a function like CONCAT or DATEDIFF? (Choose two.)
Show answer and explanation
Correct answer: B, C
B. In a Response Action, in an Additional Input value field. C. In a Remote Action, in an Additional Output value field. Functions like CONCAT and DATEDIFF can be used in B) a Response Action's Additional Input value field and C) a Remote Action's Additional Output value field. These fields support expressions and calculations that allow developers to transform and manipulate data within the Integration Procedure flow. Tracking Custom Data fields and Remote Options fields do not support these types of functions.
Why the other options are wrong
- A. Tracking Custom Data value fields do not support function expressions like CONCAT or DATEDIFF.
- D. Remote Options value fields are for configuration settings, not for function-based data transformation.
That was 10 of 80.
The full Salesforce OmniStudio Developer pack has all 80 questions, each with the answer, the explanation and why the other options are wrong, plus a questions-only copy for timed runs. US$39, paid once, with free monthly updates and a pass-or-your-money-back guarantee.
