Total 202 Questions
Last Updated On : 20-Feb-2026
To ensure SFRA best practices and protect against request forgery, the developer
introduced CSRF token
generation in the customer address form:
< form …="" action="“submit”" >
< input name="” $ {dw.web.CSRFProtection.getTokenName()}”
value =“ $ {dw.web.CSRFProtection.generateToken()”>
…
< the rest= "" of= "" the = "" form= "" fields="" >
…
To implement CSRF protection when the form is submitted, the developer needs to
introduce the CSRF
validation using one or both of these methods as applicable:
validateRequest
validateAjaxRequest
Where in the code does the developer need to add this CSRF validation check?
A. In the controller function that displays the form
B. In the middleware chain of the controller post route
C. In the controller function that handles the submitted form
D. In the model function that persists the form data
Explanation:
In SFRA, CSRF protection is enforced at the point where state changes can occur, which is almost always the POST (or other write) endpoint that processes the submitted form.
Your snippet shows that the developer already implemented token generation in the form markup using:
dw.web.CSRFProtection.getTokenName() (to output the expected parameter name), and
dw.web.CSRFProtection.generateToken() (to generate a session-bound token value)
That covers the “token creation + inclusion in request” part. However, protection is incomplete until the server validates that token when the request comes back in.
SFRA best practice is to apply CSRF validation as middleware in the route definition, not manually inside business logic. This is precisely why SFRA provides middleware functions like:
csrfProtection.validateRequest (for standard form submits), and
csrfProtection.validateAjaxRequest (for AJAX requests)
When you attach CSRF validation middleware to the POST route, you ensure:
Every request to that endpoint is checked before any processing happens
The validation is centralized, consistent, and repeatable (no developer forgetfulness)
If validation fails, SFRA can route to the standard CSRF failure handling flow (e.g., CSRF-AjaxFail patterns for AJAX)
The controller action logic stays clean—focused on business rules rather than security plumbing
Salesforce’s SFRA documentation explicitly describes that CSRF checks are performed as a middleware step (for example, csrfProtection.validateAjaxRequest) and points to controllers (like Account.js) as examples of this pattern.
So the correct place to add validation is the middleware chain of the POST route—exactly option B.
Why the other options are incorrect
A. In the controller function that displays the form
Rendering the form is where you generate the token and output it, but CSRF attacks happen when a malicious site tries to trick a user into submitting a forged request. The protection must be enforced at submission time, not at display time. Displaying the form doesn’t verify anything—there is no incoming state-changing request yet.
C. In the controller function that handles the submitted form
While it’s technically possible to call CSRFProtection.validateRequest() inside the handler, it’s not SFRA best practice because it scatters security checks into business logic and makes it easy to miss validation in future routes. SFRA intentionally provides CSRF middleware so validation is applied consistently before route logic executes.
D. In the model function that persists the form data
Models should focus on data shaping and business logic, not request security. Putting CSRF validation in the model is architecturally wrong because CSRF is an HTTP/request concern (controller/middleware layer). It also becomes hard to ensure the model is only called from properly validated contexts.
References
Salesforce B2C Commerce Docs — Forms / Securing Forms in SFRA: CSRF provided as middleware (validateAjaxRequest)
SFRA source: CSRF middleware implementation (app_storefront_base/.../scripts/middleware/csrf.js)
dw.web.CSRFProtection API: token generation and validation methods (validateRequest, validateAjaxRequest)
Consider the following information:
• A merchant has this three-tier category structure setup in the Storefront catalog:
New Arrivals > Women > Clothing
• The category named Clothing has all the clothing items for Women and is merchandised.
• A Search Refinement named Newness is correctly configured for the Clothing category.
When a merchandiser views the Clothing category, the Search Refinement appears and Works as
expected. However, the merchandiser does not see the Search Refinement when searching for Clothing via the Storefront search.
What is the Reason?
A. There are conflicting Search Refinement definitions for Clothing and one of its parent categories
B. The Search Refinement definition is not set up for the Women category
C. The Search Refinement definition is not set up for the New Arrivals Category.
D. The Search Refinement definitions is not set up for the Root Category
Explanation:
In Salesforce B2C Commerce, when a shopper uses Storefront search, refinements (like "Newness") are not only controlled by the category where the product resides, but also by its parent categories in the search context.
In this case:
The "Clothing" category has the "Newness" refinement set correctly.
However, storefront search results are often scoped or filtered based on higher-level categories, like "New Arrivals" or "Women" in the navigation hierarchy.
If the "New Arrivals" category doesn't include the same Search Refinement (i.e., "Newness"), it will not appear when customers search and land on that category context.
This happens because refinements from parent categories must be explicitly configured, even if the child category is set up correctly.
❌ Why Other Options Are Incorrect:
A. Conflicting Search Refinement definitions
Not applicable — conflict isn’t causing this issue. It's about missing refinements, not conflicting ones.
B. Not set up for Women
While possible, the context of the question points to "New Arrivals" as the entry point for search results.
D. Not set up for Root Category
The root category is not relevant unless the search is scoped to it directly. That’s not the case here.
Universal Containers is preparing their storefront to use Open Commerce APIs (OCAPI).
To which hook should the Digital Developer move taxation logic to ensure consistent order totals within B2C Commerce?
A. dw.ocapi.shop.order.validateOrder
B. dw.ocapi.shop.basket.calculate
C. dw.ocapi.shop.basket.afterPostShipment
D. dw.ocapi.shop.order.afterPOST
Explanation:
Why B is correct
When integrating Open Commerce API (OCAPI) — especially the Shop API — for cart and checkout operations (e.g., mobile apps, headless storefronts, or external systems adding products, applying coupons, etc.), the tax calculation must happen consistently every time the basket changes.
The dw.ocapi.shop.basket.calculate hook is specifically designed for this purpose. It is triggered automatically by the Shop API after any modification to the basket (add/remove item, update quantity, apply coupon, set shipping method, etc.). This hook allows you to:
- Recalculate taxes using the built-in tax calculation logic or custom logic
- Update line item prices, basket totals, and shipping costs
- Ensure the basket always reflects accurate, up-to-date totals before returning the response
This is the official recommendation from Salesforce for maintaining consistent order totals in OCAPI-integrated scenarios. Moving taxation logic here guarantees that every API response shows the correct tax-inclusive totals, preventing discrepancies between storefront views and backend orders.
Example usage (in hooks.js):
exports.basket_calculate = function (basket) {
// Custom tax logic or call default tax calculation
require('*/cartridge/scripts/cart/tax').calculateTaxes(basket);
// Optional: adjust shipping, discounts, etc.
};
Why the other options are incorrect
- A. dw.ocapi.shop.order.validateOrder
→ This hook runs only when the order is created (after the basket is converted to an order via POST /orders). It is too late for consistent basket totals — the shopper sees incorrect taxes during cart interaction. It is meant for final validation, not ongoing calculation.
- C. dw.ocapi.shop.basket.afterPostShipment
→ This hook (if it exists — note: the actual name is usually dw.ocapi.shop.basket.afterPost) runs after a shipment is added/updated. It is far too narrow and late — it misses most basket modifications (e.g., adding products or coupons).
- D. dw.ocapi.shop.order.afterPOST
→ This hook runs after an order has already been created via OCAPI POST /orders. At this point, the basket is already converted to an order, and taxes should have been finalized earlier. Using this would miss all pre-order basket interactions.
Key takeaway
For consistent basket-level calculations (taxes, promotions, shipping, totals) in OCAPI Shop API integrations, always use the basket.calculate hook. This is explicitly called out in the documentation as the place to centralize pricing and taxation logic when using OCAPI.
References
Salesforce B2C Commerce OCAPI Documentation → Hooks → Shop API Hooks
Trailhead: Extending OCAPI with Hooks → Taxation in Headless Scenarios
A client has two B2C Commerce sites in the same instance: one for the U.S market, the other for the
European market. The products they make are sold with different safety certificates based-on the world
location.
For example, they sell a smartphone with certificate A in the U.S and certificate B in Europe, a
hairdryer with certificate C in the U.S and certificate D in Europe, and more
How should a developer allow the merchant to display the appropriate certification logo in the produce to details page, depending on the customer’s location?
A. Add a Localizable custom attribute to the Certificate system object type.
B. Ad and Image custom preference to the Sitepreference system object type
C. Add a Site-specific custom attribute to the Product system object type.
D. Add a Localizable custom preference to the SitePreference system object type.
Explanation:
In Salesforce B2C Commerce, when you have multiple sites (e.g., U.S. and Europe) sharing the same product catalog, but needing site-specific display logic — such as different certification logos — the best practice is to use site-specific custom attributes on the Product system object.
This allows each site to:
Define its own value for the same attribute (e.g., certificationLogo)
Display the appropriate logo on the product detail page based on the current site context
Avoid duplicating products or catalogs unnecessarily
Key characteristics of site-specific attributes:
They override the global value for a specific site
They are non-localizable (localizable attributes are for language/locale differences)
They are ideal for regional compliance, merchandising, or visibility rules
🔧 Example Implementation
Create a custom attribute on the Product system object:
ID: certificationLogo
Type: Image or String (URL to image)
Mark it as site-specific
Assign site-specific values in Business Manager:
For U.S. site: certificationLogo = /images/certA.png
For EU site: certificationLogo = /images/certB.png
Render in ISML:
< isif condition = " $ { pdict. Product. custom. certificationLogo } " >
< img src = " $ { pdict. Product. custom. certificationLogo } " alt = " Certification Logo " >
< / isif >
❌ Why the other options are incorrect
A. Localizable custom attribute on Certificate system object
Localizable attributes are for language differences, not site-specific logic. Also, Certificate isn’t a standard system object unless custom-defined.
B. Image custom preference on SitePreference
Site preferences are global to the site, not tied to individual products.
D. Localizable custom preference on SitePreference
Again, this is for localization, not product-specific logic.
A Digital Developer is working in a sandbox on a site named test-site using the domain test.demandware.net.
The Developer needs to compile a url to make an Open Commerce API (OCAPI) request that returns product information. By default, which URL format is a proper Open Commerce API for Sandbox?
A. https://test.demandware.com/dw/shop/products/M1355?client_id=aaa...
B. https://www.test.com/s/test-site/sfc/shop/products/M1355?client_id=aaa...
C. https://test.demandware.net/s/test-site/dw/shop/v18_3/products/M1355?client_id=aaa...
D. https://www.test.com/dw/shop/v18_3/products/M1355?client_id=aaa..
Explanation:
This URL follows the standard format required for a sandbox environment. Each segment of this URL is essential for the platform to route the request correctly:
Hostname (test.demandware.net):
Sandboxes typically use the .net domain.
Site Context (/s/test-site):
OCAPI requests (especially Shop API) must be context-aware, meaning they need to know which site's catalog and settings to use.
API Identifier (/dw/shop):
This tells the server you are accessing the "Shop" category of the Open Commerce API.
Version (/v18_3):
OCAPI requires an explicit version (e.g., v18_3, v21_10). Without this, the request will fail.
Resource Path (/products/M1355):
The specific endpoint for product details.
Authentication (?client_id=aaa...):
Every OCAPI request must include a registered Client ID for permission validation.
Why Answer C is Correct: Anatomy of an OCAPI Request
To understand why Option C is the only valid choice, we must look at the mandatory components of an OCAPI URL for a non-production instance (Sandbox or Development):
Instance URL:
Sandboxes provided by Salesforce use the format [instance_name].demandware.net. Options A and D use incorrect domains (.com) or generic vanity URLs (www.test.com), which would require specific DNS and alias configurations not present by default.
The /s/ Prefix:
In B2C Commerce, the /s/ path segment indicates a site-specific request. Since product information is tied to a specific site's catalog, the site ID (test-site) must be included in the path.
The /dw/ Prefix:
This is the reserved path that distinguishes API requests from standard storefront HTML requests.
Version Control:
OCAPI is versioned to ensure backward compatibility. A URL without a version string (like Option A or B) is technically invalid.
Why the Incorrect Answers are Wrong
A. https://test.demandware.com/dw/shop/products/M1355...
This is incorrect for three reasons: it uses the .com domain (usually reserved for Production), it is missing the mandatory site context (/s/test-site), and it is missing the API version (e.g., /v18_3).
B. https://www.test.com/s/test-site/sfc/shop/products/M1355...
This uses an incorrect API identifier. The platform uses /dw/ for OCAPI, not /sfc/. Additionally, it assumes a vanity domain (www.test.com) which is not the default format for a sandbox.
D. https://www.test.com/dw/shop/v18_3/products/M1355...
Similar to Option A, this is missing the site context (/s/test-site). While it has the versioning correct, the server would not know which site's product M1355 to retrieve without the site ID in the URL.
Reference
Salesforce Developers: OCAPI URL Syntax and Versioning
Infocenter: Accessing OCAPI on Sandboxes
A merchant wants customers to be able to order gift vouchers via their site. Since they can issue an
unlimited number of these digital vouchers, this item should be available to sell at all items.
How can a developer use Business Manager to ensure that the gift vouchers are always available?
A. Check the perpetual flag in the product inventory record
B. Check the Available to Sell (ATS) flag dor the producto set
C. Set StockLevel = maxAllocation for the producto.
D. Manually set the inventory to a high numbe.
Explanation:
Why A is correct
In Salesforce B2C Commerce (SFCC), the perpetual flag (also called Perpetual Inventory) is the exact feature designed for products that should always be available for sale, regardless of stock levels — such as digital gift vouchers, downloadable products, services, or any item with unlimited supply.
When the perpetual flag is checked in the product's inventory record:
The system ignores the actual stock level (ATS – Available to Sell).
The product is treated as having infinite inventory.
Customers can order any quantity without triggering out-of-stock or backorder behavior.
No manual stock updates or allocations are ever required — perfect for unlimited digital gift vouchers.
How to configure it in Business Manager:
Go to Merchant Tools → Products and Catalogs → Products.
Find and open the gift voucher product.
Navigate to the Inventory tab.
Check the box labeled Perpetual (or Perpetual Inventory depending on version).
Save the product.
This is the official, recommended, and most efficient way to handle unlimited digital products like gift vouchers. It prevents common issues like accidental stock depletion and eliminates the need for recurring inventory jobs or manual adjustments.
Why the other options are incorrect
B. Check the Available to Sell (ATS) flag for the product
There is no flag called "Available to Sell" in the product or inventory settings. ATS is a calculated value (stock level minus reserved quantities), not a toggle you can check. This option is misleading and does not exist.
C. Set StockLevel = maxAllocation for the product
maxAllocation is a threshold setting that limits how many units can be allocated per order — not a way to make inventory unlimited. Setting StockLevel to maxAllocation would still allow stock to deplete over time, requiring manual resets — not suitable for truly unlimited items.
D. Manually set the inventory to a high number
This is a workaround (e.g., setting stock to 999,999), but it is not best practice. Stock can still eventually run out (if sales are extremely high), it requires periodic manual updates, and it does not leverage the platform's built-in perpetual inventory feature. This approach is error-prone and not scalable.
Key takeaway
For digital gift vouchers or any item that should never go out of stock, always use the perpetual flag. This is explicitly documented for digital and unlimited-supply products and is a very common exam scenario testing inventory management knowledge.
References
Salesforce B2C Commerce Documentation → Inventory Management → Perpetual Inventory
"Use perpetual inventory for products that are always available, such as digital goods or gift cards."
Trailhead: Managing Inventory in B2C Commerce → Module on Perpetual Flag
Business Manager Help → Products → Inventory Tab → Perpetual checkbox description
Given the following ISML example, how should a developer reference the product object in
the current
iteration of thebasket?
< isloop ítems = ”$ { pdict. Basket. products } ” var = ” product ” status = “ loopstatus ” >
…
< / isloop >
A. product
B. pdict.Basket.products{loopstatus}
C. loopstatus.product
D. pdict.product
Explanation:
Within an ISML <isloop> tag in B2C Commerce, when a developer specifies a var attribute (in this case, var="product"), that variable name becomes the direct reference to the current iteration's object within the loop body. The platform automatically binds each item from the source collection (pdict.Basket.products) to this declared variable as it iterates. Therefore, inside the loop, the developer can simply reference product to access properties and methods of the current product object in the basket.
The ISML templating engine handles this variable assignment through its internal context management system. When the loop executes, it:
Takes the next item from the pdict.Basket.products collection
Assigns it to the variable name specified in the var attribute (product)
Makes this variable available in the current template scope
Executes the loop body with that binding
Repeats for each item in the collection
This design follows clean, intuitive templating principles where loop variables are directly accessible by their assigned names. For example, within the loop, developers could write:
${product.ID} - ${product.name} - $${product.price}
This would output the ID, name, and price of each product in the basket. The product variable contains the full product object with all its properties and methods, exactly as it exists in the pdict.Basket.products collection.
The status="loopstatus" attribute creates a separate object containing loop metadata (index, count, first, last properties), but this doesn't affect how the main item variable is accessed. The loopstatus variable would be used for information like loopstatus.index (current position) or loopstatus.first (boolean for first iteration), while product remains the direct reference to the data object.
This approach aligns with standard templating patterns across multiple frameworks and provides clean, readable code that's easy for developers to understand and maintain. The direct variable naming (product) is both semantically clear and technically correct within the ISML execution context.
Why Other Options Are Incorrect
B. pdict.Basket.products{loopstatus}
This syntax is completely invalid in ISML and demonstrates a misunderstanding of how loop variables work. There's no array or collection indexing syntax using curly braces in ISML, and loopstatus is an object containing metadata, not an index number. Even if attempting to use an index, the correct approach would be pdict.Basket.products[loopstatus.index], but this unnecessarily complicates what should be simple direct variable access. More fundamentally, this approach defeats the purpose of the var attribute, which exists specifically to provide direct, clean access to loop items without needing to reference the original collection.
C. loopstatus.product
This incorrectly assumes that the loop item is stored as a property of the status object. The loopstatus variable only contains loop metadata (index, count, first, last), not the actual data items from the collection. The var="product" attribute creates a separate, independent variable at the same scope level as loopstatus, not nested within it. This syntax would result in either an error or an undefined value since loopstatus doesn't have a product property.
D. pdict.product
This attempts to access a product property directly on the pipeline dictionary (pdict), but no such property exists in the described context. The pdict contains the Basket object, which contains the products collection, but there's no direct pdict.product property. This syntax ignores the loop context entirely and would either return null or undefined or access an unrelated product property elsewhere in the pipeline dictionary if one happened to exist. It fundamentally misunderstands how loop variable scoping works in ISML templates.
References
ISML Tag Library Documentation: The official <isloop> tag documentation explicitly states: "The var attribute defines the name of the variable that will hold the current item in the iteration. This variable is available within the loop body."
B2C Commerce Template Developer Guide: "Working with Loops in ISML" provides examples showing direct variable usage from the var attribute without additional qualification.
SFRA (Storefront Reference Architecture) Code Examples: All loop implementations in the reference architecture use the direct variable name approach (e.g., <isloop items="${pdict.products}" var="product">${product.name}</isloop>).
Salesforce Trailhead Modules: "B2C Commerce Templating" demonstrates that loop variables are accessed directly by their declared names.
Best Practices Guide: "ISML Loop Patterns" recommends using meaningful var attribute names and accessing them directly for cleaner, more maintainable template code.
The ISML templating engine is designed to make loop variables directly accessible by their declared names, providing a clean, intuitive syntax that reduces complexity and improves code readability. This design choice reflects established templating best practices used across multiple web development frameworks.
A client uses tax tables in Business Manager to calculate tax. They recently started shipping to a new
country, Italy, and the taxi s not being calculated correctly on the Storefront
What is the likely problem?
A. Tax Region is configured wrong.
B. Tax Country is missing
C. Tax Jurisdiction is missin
D. Tax Locale is configured wrong
Explanation:
In Salesforce B2C Commerce, tax calculation can be configured in Business Manager using tax tables. These tables rely on a hierarchy of definitions: Tax Country → Tax Region → Tax Jurisdiction. When a merchant expands into a new country, the very first requirement is to ensure that the Tax Country is defined in Business Manager. Without this, the system cannot apply tax rules for that country, even if regions or jurisdictions are later configured.
In this scenario, the merchant has started shipping to Italy, but taxes are not being calculated correctly. The most likely cause is that Italy has not been added as a Tax Country in Business Manager. If the country is missing, the storefront cannot map orders shipped to Italy to any tax table, resulting in incorrect or missing tax calculations.
Once the Tax Country is added, developers or administrators can configure regions (e.g., provinces) and jurisdictions (specific rules for cities or postal codes) if needed. But the country definition is the foundation — without it, the system cannot even begin to apply tax logic.
✅ Why Option B is Correct
Tax tables require a Tax Country entry to function.
If Italy is missing, no tax rules can be applied to shipments there.
This is the most common issue when expanding to new countries.
Adding Italy as a Tax Country ensures the storefront recognizes it and applies the correct tax rates.
❌ Why the Other Options Are Incorrect
A. Tax Region is configured wrong → Regions are subdivisions of a country. If the country itself is missing, regions won’t matter.
C. Tax Jurisdiction is missing → Jurisdictions are more granular (city/postal code). Again, they depend on the country being defined first.
D. Tax Locale is configured wrong → Locale affects language and formatting, not tax calculation.
📘 Reference
Salesforce B2C Commerce Documentation – Tax Tables:
“Tax tables are defined by country, region, and jurisdiction. A country must be configured before regions or jurisdictions can be applied.”
Salesforce Help – Tax Configuration
Given the requirements:
• To show the washing instructions for a clothing product on a dedicated section the detail page
• Washing instructions come from the product information manager(PIM)
• To have this attribute available to localize in the Storefront.
Which action meets these requirements?
A. Set the product system object type as localizable
B. Add a resource file for every locale for which the attribute needs to be translated.
C. Set the custom attribute as localizable
D. Add a custom attribute for each locale
Explanation:
Let’s map the requirements carefully to Salesforce B2C Commerce concepts:
Requirements recap
Show washing instructions on the product detail page
Data comes from the Product Information Manager (PIM) → this means product data, not UI copy
The attribute must be localizable in the storefront
Where washing instructions belong
Because washing instructions:
Are specific to each product
Are managed by merchandisers in Business Manager / PIM
Vary by locale (language/region)
They clearly belong as a product attribute, not a template resource.
In B2C Commerce, product attributes can be:
System attributes (predefined by Salesforce)
Custom attributes (merchant-defined)
Since “washing instructions” is not a standard system attribute, the correct approach is to create a custom product attribute.
How localization works for product data
Salesforce B2C Commerce supports localization at the attribute level for many system objects, including Product. When you mark a custom product attribute as localizable:
Business Manager allows entering different values per locale (e.g., en_US, de_DE, it_IT)
The correct value is automatically resolved based on the shopper’s locale
The value is retrieved in ISML as product.custom.washingInstructions with no extra logic
Indexing, caching, and storefront rendering all work correctly
This exactly satisfies all three requirements:
Data comes from PIM ✅
Appears on PDP ✅
Localized per locale ✅
This is also Salesforce best practice for localized product data.
Why the other options are incorrect
❌ A. Set the product system object type as localizable
The Product system object is already localizable. Localization is not enabled or disabled at the object level in this way.
You cannot (and should not) mark the entire Product object as localizable to solve a single attribute requirement. Localization is controlled per attribute, not per object.
This answer shows a misunderstanding of how localization is configured in B2C Commerce.
❌ B. Add a resource file for every locale
Resource bundles (.properties files) are used for:
Static UI text
Labels
Messages
Headings
They are not meant for product-specific data coming from PIM.
Using resource bundles would mean:
The same washing instructions apply to all products
Merchandisers cannot manage the data per product
You lose the connection to PIM entirely
This directly violates the requirement that the data comes from product information manager (PIM).
❌ D. Add a custom attribute for each locale
This is a classic anti-pattern.
Creating attributes like:
washingInstructions_en
washingInstructions_de
washingInstructions_it
Leads to:
Schema explosion
Difficult maintenance
Hard-coded locale logic in templates/controllers
Poor indexing and reporting
Violates Salesforce best practices
Salesforce explicitly provides localizable attributes to avoid this approach.
References
Salesforce B2C Commerce – Custom Attributes on System Objects
Product Information Manager (PIM) Overview
Below is a form definition snippet from the newsletter.xml file:
< !-- ? xml versión = ” 1.0 ” ? -- >
< form xmlns = " http://www.demandware.com/xml/form/2008-04-15 " >
< field formid = "” email ”" lavel = "” Email ” type = ” String ”" mandatory = "” True ”" max-length = "” 50 ”" > < / field >
< / form >
Which line of code creates a JSON object to contain the form data?
A. Server.form.getForm(‘dwfrm_newsletter’)
B. Server.form.getForm(‘newsletter’);
C. Server.forms.getForm(‘newsletter’)
D. Server.forms.getForm(‘dwfrm_newsletter’)En el controller: En el Formulario:
Explanation:
In Salesforce B2C Commerce SFRA, forms are defined in XML files (for example, newsletter.xml) and then referenced in controllers using the Server.forms.getForm() API.
This API creates a JSON object representation of the form, which contains all the fields, values, and validation states.
The key detail here is how the form ID is mapped between the XML definition and the controller.
How the mapping works:
In the XML file, the form is defined with a root
| Page 5 out of 21 Pages |
| 2345678 |
| Salesforce-B2C-Commerce-Cloud-Developer Practice Test Home |
Our new timed Salesforce-B2C-Commerce-Cloud-Developer practice test mirrors the exact format, number of questions, and time limit of the official exam.
The #1 challenge isn't just knowing the material; it's managing the clock. Our new simulation builds your speed and stamina.
You've studied the concepts. You've learned the material. But are you truly prepared for the pressure of the real Salesforce Certified B2C Commerce Cloud Developer - Comm-Dev-101 exam?
We've launched a brand-new, timed Salesforce-B2C-Commerce-Cloud-Developer practice exam that perfectly mirrors the official exam:
✅ Same Number of Questions
✅ Same Time Limit
✅ Same Exam Feel
✅ Unique Exam Every Time
This isn't just another Salesforce-B2C-Commerce-Cloud-Developer practice questions bank. It's your ultimate preparation engine.
Enroll now and gain the unbeatable advantage of: