Loading...
Loading...
Create Business Manager extension cartridges for B2C Commerce. Use when building admin tools, BM menu items, or custom BM pages (bm_* cartridges). Covers bm_extensions.xml, menu items, dialog actions, and form extensions.
npx skill4agent add salesforcecommercecloud/b2c-developer-tooling b2c-business-manager-extensions| Extension Type | Purpose |
|---|---|
| Menu Items | Add top-level menu sections |
| Menu Actions | Add functional links under menus |
| Dialog Actions | Add buttons to existing BM pages |
| Form Extensions | Add fields to existing forms |
/bm_my_extension
/cartridge
bm_extensions.xml # Extension definitions (required)
/controllers
MyExtension.js # Controller for menu actions
/templates
/default
/extensions
mypage.isml # Custom BM pages
/static
/default
/icons
my-icon.gif # Menu icons<?xml version="1.0" encoding="UTF-8"?>
<extensions xmlns="http://www.demandware.com/xml/extensibility/2013-04-24">
<!-- Menu Item: Creates section in navigation -->
<menuitem id="my-tools" name="label.menu.mytools"
site="false" position="10">
<icon path="icons/my-icon.gif"/>
</menuitem>
<!-- Menu Action: Creates link under menu item -->
<menuaction id="my-dashboard" menupath="my-tools"
name="label.action.dashboard">
<exec pipeline="MyExtension" node="Dashboard"/>
<sub-pipelines>
<pipeline name="MyExtension"/>
</sub-pipelines>
</menuaction>
</extensions><menuitem id="custom-tools"
name="label.menu.customtools"
site="false"
position="10">
<description>Custom administration tools</description>
<icon path="icons/tools-icon.gif"/>
</menuitem>| Attribute | Required | Description |
|---|---|---|
| Yes | Unique identifier |
| Yes | Resource key for display name |
| No | |
| No | Sort order (higher = higher in list) |
<menuaction id="product-export"
menupath="custom-tools"
name="label.action.productexport">
<description>Export products to CSV</description>
<exec pipeline="ProductExport" node="Start"/>
<sub-pipelines>
<pipeline name="ProductExport"/>
</sub-pipelines>
<icon path="icons/export-icon.gif"/>
</menuaction>| Attribute | Required | Description |
|---|---|---|
| Yes | Unique identifier |
| No | Parent menu item ID |
| Yes | Resource key for display name |
pipeline="ControllerName"node="ActionName"<dialogaction id="order-export-btn"
menuaction-ref="order-search"
xp-ref="OrderPage-OrderDetails">
<exec pipeline="OrderExport" node="Export"/>
<icon path="icons/export.gif"/>
<parameters>
<parameter name="OrderNo"/>
</parameters>
</dialogaction>| Attribute | Required | Description |
|---|---|---|
| Yes | Unique identifier |
| Yes | Parent menu action ID |
| Yes | Extension point ID |
OrderPage-OrderDetailsProductPage-DetailsCustomerPage-Profile<formextension id="order-search-extension">
<valueinput type="string" name="customOrderField">
<label xml:lang="x-default">Custom Field</label>
<label xml:lang="de">Benutzerdefiniertes Feld</label>
</valueinput>
<valueinput type="string" name="exportStatus">
<label xml:lang="x-default">Export Status</label>
<option>Pending</option>
<option>Exported</option>
<option>Failed</option>
</valueinput>
</formextension>'use strict';
var ISML = require('dw/template/ISML');
var URLUtils = require('dw/web/URLUtils');
exports.Dashboard = function () {
ISML.renderTemplate('extensions/dashboard', {
title: 'My Dashboard',
data: getReportData()
});
};
exports.Dashboard.public = true;
exports.ProcessAction = function () {
var params = request.httpParameterMap;
var itemId = params.itemId.stringValue;
// Process the action
var result = processItem(itemId);
// Redirect back or show result
response.redirect(URLUtils.url('MyExtension-Dashboard', 'result', result));
};
exports.ProcessAction.public = true;<!DOCTYPE html>
<html>
<head>
<title>${pdict.title}</title>
<link rel="stylesheet" href="${URLUtils.staticURL('/css/bm-custom.css')}"/>
</head>
<body>
<div class="bm-content">
<h1>${pdict.title}</h1>
<table class="bm-table">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<isloop items="${pdict.data}" var="item">
<tr>
<td>${item.id}</td>
<td>${item.name}</td>
<td>
<a href="${URLUtils.url('MyExtension-ProcessAction', 'itemId', item.id)}">
Process
</a>
</td>
</tr>
</isloop>
</tbody>
</table>
</div>
</body>
</html>label.menu.customtools=Custom Tools
label.action.dashboard=Dashboard
label.action.productexport=Product Exportlabel.menu.customtools=Benutzerdefinierte Werkzeuge
label.action.dashboard=Instrumententafel
label.action.productexport=Produktexport