@salesforce/b2c-cli 2.3.1 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/dev.js +8 -8
- package/bin/run.js +5 -7
- package/content/guidance/b2c/b2c-business-manager-extensions/SKILL.md +361 -0
- package/content/guidance/b2c/b2c-business-manager-extensions/references/EXTENSIONS-XML.md +458 -0
- package/content/guidance/b2c/b2c-controllers/SKILL.md +301 -0
- package/content/guidance/b2c/b2c-controllers/references/CLASSIC-PATTERNS.md +335 -0
- package/content/guidance/b2c/b2c-controllers/references/SFRA-PATTERNS.md +400 -0
- package/content/guidance/b2c/b2c-custom-api-development/SKILL.md +281 -0
- package/content/guidance/b2c/b2c-custom-api-development/references/CONTRACT.md +142 -0
- package/content/guidance/b2c/b2c-custom-api-development/references/IMPLEMENTATION.md +153 -0
- package/content/guidance/b2c/b2c-custom-api-development/references/TESTING.md +118 -0
- package/content/guidance/b2c/b2c-custom-caches/SKILL.md +279 -0
- package/content/guidance/b2c/b2c-custom-job-steps/SKILL.md +520 -0
- package/content/guidance/b2c/b2c-custom-job-steps/references/CHUNK-ORIENTED.md +377 -0
- package/content/guidance/b2c/b2c-custom-job-steps/references/JOBS-XML.md +212 -0
- package/content/guidance/b2c/b2c-custom-job-steps/references/STEPTYPES-JSON.md +373 -0
- package/content/guidance/b2c/b2c-custom-job-steps/references/TASK-ORIENTED.md +344 -0
- package/content/guidance/b2c/b2c-custom-objects/SKILL.md +327 -0
- package/content/guidance/b2c/b2c-custom-objects/references/OCAPI-SEARCH.md +298 -0
- package/content/guidance/b2c/b2c-forms/SKILL.md +242 -0
- package/content/guidance/b2c/b2c-forms/references/FORM-XML.md +409 -0
- package/content/guidance/b2c/b2c-hooks/SKILL.md +500 -0
- package/content/guidance/b2c/b2c-hooks/references/OCAPI-SCAPI-HOOKS.md +403 -0
- package/content/guidance/b2c/b2c-hooks/references/ORDER-HOOK-LIFECYCLE.md +169 -0
- package/content/guidance/b2c/b2c-hooks/references/SYSTEM-HOOKS.md +433 -0
- package/content/guidance/b2c/b2c-isml/SKILL.md +320 -0
- package/content/guidance/b2c/b2c-isml/references/EXPRESSIONS.md +366 -0
- package/content/guidance/b2c/b2c-isml/references/TAGS.md +443 -0
- package/content/guidance/b2c/b2c-localization/SKILL.md +344 -0
- package/content/guidance/b2c/b2c-localization/references/PATTERNS.md +407 -0
- package/content/guidance/b2c/b2c-logging/SKILL.md +352 -0
- package/content/guidance/b2c/b2c-logging/references/LOG-FILES.md +282 -0
- package/content/guidance/b2c/b2c-metadata/SKILL.md +406 -0
- package/content/guidance/b2c/b2c-metadata/references/SYSTEM-OBJECTS.md +320 -0
- package/content/guidance/b2c/b2c-metadata/references/XML-EXAMPLES.md +366 -0
- package/content/guidance/b2c/b2c-onboarding/SKILL.md +154 -0
- package/content/guidance/b2c/b2c-ordering/SKILL.md +391 -0
- package/content/guidance/b2c/b2c-page-designer/SKILL.md +410 -0
- package/content/guidance/b2c/b2c-page-designer/references/ATTRIBUTE-TYPES.md +436 -0
- package/content/guidance/b2c/b2c-page-designer/references/META-DEFINITIONS.md +340 -0
- package/content/guidance/b2c/b2c-querying-data/SKILL.md +289 -0
- package/content/guidance/b2c/b2c-querying-data/references/PERFORMANCE-APIS.md +74 -0
- package/content/guidance/b2c/b2c-scapi-admin/SKILL.md +53 -0
- package/content/guidance/b2c/b2c-scapi-admin/references/CLIENT-EXAMPLES.md +440 -0
- package/content/guidance/b2c/b2c-scapi-admin/references/INTEGRATION-PATTERNS.md +518 -0
- package/content/guidance/b2c/b2c-scapi-admin/references/OAUTH-SCOPES.md +337 -0
- package/content/guidance/b2c/b2c-scapi-shopper/SKILL.md +56 -0
- package/content/guidance/b2c/b2c-scapi-shopper/references/CHECKOUT-FLOW.md +466 -0
- package/content/guidance/b2c/b2c-scapi-shopper/references/CLIENT-EXAMPLES.md +351 -0
- package/content/guidance/b2c/b2c-scapi-shopper/references/COMMON-PATTERNS.md +390 -0
- package/content/guidance/b2c/b2c-scapi-shopper/references/SCOPES.md +290 -0
- package/content/guidance/b2c/b2c-slas-auth-patterns/SKILL.md +420 -0
- package/content/guidance/b2c/b2c-slas-auth-patterns/references/PASSKEYS.md +126 -0
- package/content/guidance/b2c/b2c-slas-auth-patterns/references/SESSION-BRIDGE.md +267 -0
- package/content/guidance/b2c/b2c-slas-auth-patterns/references/TOKEN-LIFECYCLE.md +367 -0
- package/content/guidance/b2c/b2c-webservices/SKILL.md +318 -0
- package/content/guidance/b2c/b2c-webservices/references/FTP-SERVICES.md +524 -0
- package/content/guidance/b2c/b2c-webservices/references/HTTP-SERVICES.md +578 -0
- package/content/guidance/b2c/b2c-webservices/references/SERVICES-XML.md +351 -0
- package/content/guidance/b2c/b2c-webservices/references/SOAP-SERVICES.md +587 -0
- package/content/guidance/b2c-cli/b2c-am/SKILL.md +277 -0
- package/content/guidance/b2c-cli/b2c-bm-users-roles/SKILL.md +210 -0
- package/content/guidance/b2c-cli/b2c-cap/SKILL.md +131 -0
- package/content/guidance/b2c-cli/b2c-cip/SKILL.md +116 -0
- package/content/guidance/b2c-cli/b2c-cip/references/KNOWN_TABLES.md +105 -0
- package/content/guidance/b2c-cli/b2c-cip/references/SALES_ANALYSIS.md +50 -0
- package/content/guidance/b2c-cli/b2c-cip/references/STARTER_QUERIES.md +147 -0
- package/content/guidance/b2c-cli/b2c-code/SKILL.md +146 -0
- package/content/guidance/b2c-cli/b2c-config/SKILL.md +481 -0
- package/content/guidance/b2c-cli/b2c-content/SKILL.md +176 -0
- package/content/guidance/b2c-cli/b2c-debug/SKILL.md +138 -0
- package/content/guidance/b2c-cli/b2c-docs/SKILL.md +301 -0
- package/content/guidance/b2c-cli/b2c-ecdn/SKILL.md +137 -0
- package/content/guidance/b2c-cli/b2c-ecdn/references/ADVANCED.md +97 -0
- package/content/guidance/b2c-cli/b2c-ecdn/references/SECURITY.md +75 -0
- package/content/guidance/b2c-cli/b2c-import-set-migrations/SKILL.md +265 -0
- package/content/guidance/b2c-cli/b2c-job/SKILL.md +70 -0
- package/content/guidance/b2c-cli/b2c-job/references/EXPORT.md +121 -0
- package/content/guidance/b2c-cli/b2c-job/references/IMPORT.md +55 -0
- package/content/guidance/b2c-cli/b2c-job/references/RUN-AND-MONITOR.md +148 -0
- package/content/guidance/b2c-cli/b2c-logs/SKILL.md +249 -0
- package/content/guidance/b2c-cli/b2c-metrics/SKILL.md +315 -0
- package/content/guidance/b2c-cli/b2c-mrt/SKILL.md +207 -0
- package/content/guidance/b2c-cli/b2c-mrt/references/BUNDLE-COMMANDS.md +203 -0
- package/content/guidance/b2c-cli/b2c-mrt/references/ENVIRONMENT-COMMANDS.md +218 -0
- package/content/guidance/b2c-cli/b2c-mrt/references/PROJECT-COMMANDS.md +154 -0
- package/content/guidance/b2c-cli/b2c-sandbox/SKILL.md +112 -0
- package/content/guidance/b2c-cli/b2c-scapi-custom/SKILL.md +126 -0
- package/content/guidance/b2c-cli/b2c-scapi-schemas/SKILL.md +70 -0
- package/content/guidance/b2c-cli/b2c-scapi-schemas/references/CLI-EXAMPLES.md +108 -0
- package/content/guidance/b2c-cli/b2c-site-import-export/SKILL.md +57 -0
- package/content/guidance/b2c-cli/b2c-site-import-export/references/IMPORT-OPTIONS.md +118 -0
- package/content/guidance/b2c-cli/b2c-site-import-export/references/METADATA-XML.md +381 -0
- package/content/guidance/b2c-cli/b2c-site-import-export/references/WORKFLOWS.md +182 -0
- package/content/guidance/b2c-cli/b2c-sites/SKILL.md +112 -0
- package/content/guidance/b2c-cli/b2c-slas/SKILL.md +182 -0
- package/content/guidance/b2c-cli/b2c-webdav/SKILL.md +186 -0
- package/content/guidance/b2c-ops/b2c-checkout-triage/SKILL.md +68 -0
- package/content/guidance/b2c-ops/b2c-edge-traffic-triage/SKILL.md +69 -0
- package/content/guidance/b2c-ops/b2c-job-health/SKILL.md +80 -0
- package/content/guidance/b2c-ops/b2c-job-health/references/job-logs.md +21 -0
- package/content/guidance/b2c-ops/b2c-order-failure-triage/SKILL.md +66 -0
- package/content/guidance/b2c-ops/b2c-order-failure-triage/references/order-evidence.md +87 -0
- package/content/guidance/b2c-ops/b2c-production-triage/SKILL.md +88 -0
- package/content/guidance/b2c-ops/b2c-production-triage/references/escalation.md +57 -0
- package/content/guidance/index.json +1969 -0
- package/content/guidance/storefront-next/sfnext-accessibility/SKILL.md +103 -0
- package/content/guidance/storefront-next/sfnext-accessibility/references/checklist.md +64 -0
- package/content/guidance/storefront-next/sfnext-analytics-consent/SKILL.md +91 -0
- package/content/guidance/storefront-next/sfnext-analytics-consent/references/CUSTOM-ADAPTER.md +49 -0
- package/content/guidance/storefront-next/sfnext-authentication/SKILL.md +127 -0
- package/content/guidance/storefront-next/sfnext-authentication/references/COOKIES.md +39 -0
- package/content/guidance/storefront-next/sfnext-authentication/references/LOGIN-FLOWS.md +59 -0
- package/content/guidance/storefront-next/sfnext-commerce-features/SKILL.md +67 -0
- package/content/guidance/storefront-next/sfnext-commerce-features/references/FEATURE-PREREQUISITES.md +37 -0
- package/content/guidance/storefront-next/sfnext-components/SKILL.md +153 -0
- package/content/guidance/storefront-next/sfnext-components/references/COMPONENT-AUTHORING.md +118 -0
- package/content/guidance/storefront-next/sfnext-components/references/SHAPE-TOKENS.md +51 -0
- package/content/guidance/storefront-next/sfnext-components/references/STORYBOOK.md +54 -0
- package/content/guidance/storefront-next/sfnext-components/references/TOKEN-SYSTEM.md +53 -0
- package/content/guidance/storefront-next/sfnext-components/references/TROUBLESHOOTING.md +19 -0
- package/content/guidance/storefront-next/sfnext-configuration/SKILL.md +163 -0
- package/content/guidance/storefront-next/sfnext-configuration/references/ENV-VARIABLES.md +55 -0
- package/content/guidance/storefront-next/sfnext-configuration/references/MULTI-SITE-URLS.md +137 -0
- package/content/guidance/storefront-next/sfnext-data-fetching/SKILL.md +140 -0
- package/content/guidance/storefront-next/sfnext-data-fetching/references/ACTIONS.md +53 -0
- package/content/guidance/storefront-next/sfnext-data-fetching/references/API-CLIENTS.md +34 -0
- package/content/guidance/storefront-next/sfnext-data-fetching/references/LOADERS.md +73 -0
- package/content/guidance/storefront-next/sfnext-data-fetching/references/SCAPI-FETCHER.md +39 -0
- package/content/guidance/storefront-next/sfnext-deployment/SKILL.md +127 -0
- package/content/guidance/storefront-next/sfnext-deployment/references/MRT-DEPLOYMENT.md +59 -0
- package/content/guidance/storefront-next/sfnext-extensions/SKILL.md +118 -0
- package/content/guidance/storefront-next/sfnext-extensions/references/ACTION-HOOKS.md +57 -0
- package/content/guidance/storefront-next/sfnext-extensions/references/BASE-AUDIT.md +68 -0
- package/content/guidance/storefront-next/sfnext-extensions/references/CLI-AND-INSTALL.md +58 -0
- package/content/guidance/storefront-next/sfnext-extensions/references/EXTENSION-EXAMPLES.md +79 -0
- package/content/guidance/storefront-next/sfnext-hybrid-storefronts/SKILL.md +93 -0
- package/content/guidance/storefront-next/sfnext-hybrid-storefronts/references/HYBRID-PROXY-CONFIG.md +86 -0
- package/content/guidance/storefront-next/sfnext-i18n/SKILL.md +152 -0
- package/content/guidance/storefront-next/sfnext-i18n/references/locale-config.md +35 -0
- package/content/guidance/storefront-next/sfnext-overview/SKILL.md +101 -0
- package/content/guidance/storefront-next/sfnext-page-designer/SKILL.md +202 -0
- package/content/guidance/storefront-next/sfnext-page-designer/references/BUSINESS-MANAGER.md +46 -0
- package/content/guidance/storefront-next/sfnext-page-designer/references/COMPONENT-REGISTRY.md +111 -0
- package/content/guidance/storefront-next/sfnext-page-designer/references/DECORATOR-PATTERNS.md +168 -0
- package/content/guidance/storefront-next/sfnext-page-designer/references/REVIEW-CHECKLIST.md +83 -0
- package/content/guidance/storefront-next/sfnext-page-designer/references/TROUBLESHOOTING.md +35 -0
- package/content/guidance/storefront-next/sfnext-performance/SKILL.md +102 -0
- package/content/guidance/storefront-next/sfnext-performance/references/PERFORMANCE-REVIEW-CHECKLIST.md +85 -0
- package/content/guidance/storefront-next/sfnext-performance/references/SUSPENSE-AND-STREAMING.md +58 -0
- package/content/guidance/storefront-next/sfnext-project-setup/SKILL.md +147 -0
- package/content/guidance/storefront-next/sfnext-project-setup/references/PROJECT-STRUCTURE.md +61 -0
- package/content/guidance/storefront-next/sfnext-project-setup/references/SCRIPTS.md +47 -0
- package/content/guidance/storefront-next/sfnext-project-setup/references/SFNEXT-CLI.md +63 -0
- package/content/guidance/storefront-next/sfnext-quality-gates/SKILL.md +70 -0
- package/content/guidance/storefront-next/sfnext-quality-gates/references/lint-and-budgets.md +39 -0
- package/content/guidance/storefront-next/sfnext-revalidation/SKILL.md +121 -0
- package/content/guidance/storefront-next/sfnext-revalidation/references/POLICIES-AND-TAGS.md +55 -0
- package/content/guidance/storefront-next/sfnext-routing/SKILL.md +123 -0
- package/content/guidance/storefront-next/sfnext-routing/references/ROUTE-CONVENTIONS.md +65 -0
- package/content/guidance/storefront-next/sfnext-routing/references/URLS-AND-SEO-ROUTES.md +22 -0
- package/content/guidance/storefront-next/sfnext-scapi/SKILL.md +126 -0
- package/content/guidance/storefront-next/sfnext-scapi/references/WORKED-EXAMPLE.md +39 -0
- package/content/guidance/storefront-next/sfnext-security/SKILL.md +129 -0
- package/content/guidance/storefront-next/sfnext-security/references/COOKIE-DOMAIN.md +39 -0
- package/content/guidance/storefront-next/sfnext-security/references/TURNSTILE.md +43 -0
- package/content/guidance/storefront-next/sfnext-seo/SKILL.md +95 -0
- package/content/guidance/storefront-next/sfnext-seo/references/MULTI-DOMAIN-BASE-PATH.md +17 -0
- package/content/guidance/storefront-next/sfnext-seo/references/SEO-ROUTES.md +31 -0
- package/content/guidance/storefront-next/sfnext-state-management/SKILL.md +114 -0
- package/content/guidance/storefront-next/sfnext-state-management/references/PATTERNS.md +45 -0
- package/content/guidance/storefront-next/sfnext-testing/SKILL.md +151 -0
- package/content/guidance/storefront-next/sfnext-testing/references/E2E.md +38 -0
- package/content/guidance/storefront-next/sfnext-testing/references/STORYBOOK-PATTERNS.md +97 -0
- package/content/guidance/storefront-next/sfnext-testing/references/UNIT-AND-ROUTE-TESTS.md +60 -0
- package/content/guidance/storefront-next/sfnext-theming/SKILL.md +104 -0
- package/content/guidance/storefront-next/sfnext-theming/references/REBRAND-CHECKLIST.md +29 -0
- package/dist/commands/cap/install.d.ts +1 -0
- package/dist/commands/cap/list.d.ts +1 -0
- package/dist/commands/cap/pull.d.ts +1 -0
- package/dist/commands/cap/tasks.d.ts +1 -0
- package/dist/commands/cap/uninstall.d.ts +1 -0
- package/dist/commands/cip/describe.d.ts +1 -0
- package/dist/commands/cip/query.d.ts +1 -0
- package/dist/commands/cip/report/bot-traffic-share.d.ts +1 -0
- package/dist/commands/cip/report/checkout-funnel-dropoff.d.ts +1 -0
- package/dist/commands/cip/report/controller-error-rate-trend.d.ts +1 -0
- package/dist/commands/cip/report/controller-health-scorecard.d.ts +1 -0
- package/dist/commands/cip/report/customer-registration-trends.d.ts +1 -0
- package/dist/commands/cip/report/discount-depth-breakdown.d.ts +1 -0
- package/dist/commands/cip/report/inventory-stockout-by-location.d.ts +1 -0
- package/dist/commands/cip/report/new-vs-returning-buyer-revenue.d.ts +1 -0
- package/dist/commands/cip/report/ocapi-client-usage.d.ts +1 -0
- package/dist/commands/cip/report/ocapi-requests.d.ts +1 -0
- package/dist/commands/cip/report/payment-method-performance.d.ts +1 -0
- package/dist/commands/cip/report/product-co-purchase-analysis.d.ts +1 -0
- package/dist/commands/cip/report/promotion-discount-analysis.d.ts +1 -0
- package/dist/commands/cip/report/promotion-roi-leaderboard.d.ts +1 -0
- package/dist/commands/cip/report/recommender-effectiveness.d.ts +1 -0
- package/dist/commands/cip/report/remote-include-performance.d.ts +1 -0
- package/dist/commands/cip/report/revenue-by-channel.d.ts +1 -0
- package/dist/commands/cip/report/sales-analytics.d.ts +1 -0
- package/dist/commands/cip/report/sales-summary.d.ts +1 -0
- package/dist/commands/cip/report/scapi-cache-hit-ratio.d.ts +1 -0
- package/dist/commands/cip/report/scapi-error-rate-by-status.d.ts +1 -0
- package/dist/commands/cip/report/scapi-latency-distribution.d.ts +1 -0
- package/dist/commands/cip/report/scapi-traffic-latency.d.ts +1 -0
- package/dist/commands/cip/report/search-query-performance.d.ts +1 -0
- package/dist/commands/cip/report/top-referrers.d.ts +1 -0
- package/dist/commands/cip/report/top-selling-products.d.ts +1 -0
- package/dist/commands/cip/report/zero-result-searches.d.ts +1 -0
- package/dist/commands/cip/tables.d.ts +1 -0
- package/dist/commands/code/activate.d.ts +1 -0
- package/dist/commands/code/delete.d.ts +1 -0
- package/dist/commands/code/deploy.d.ts +1 -0
- package/dist/commands/code/download.d.ts +1 -0
- package/dist/commands/code/watch.d.ts +1 -0
- package/dist/commands/commands/search.d.ts +35 -0
- package/dist/commands/commands/search.js +85 -0
- package/dist/commands/commands/search.js.map +1 -0
- package/dist/commands/content/export.d.ts +1 -0
- package/dist/commands/content/list.d.ts +1 -0
- package/dist/commands/content/validate.d.ts +1 -0
- package/dist/commands/debug/cli.d.ts +1 -0
- package/dist/commands/debug/index.d.ts +1 -0
- package/dist/commands/docs/cache.d.ts +1 -0
- package/dist/commands/docs/download.d.ts +1 -0
- package/dist/commands/docs/read.d.ts +1 -0
- package/dist/commands/docs/schema.d.ts +1 -0
- package/dist/commands/docs/search.d.ts +1 -0
- package/dist/commands/docs/skill.d.ts +41 -0
- package/dist/commands/docs/skill.js +183 -0
- package/dist/commands/docs/skill.js.map +1 -0
- package/dist/commands/ecdn/cache/purge.d.ts +1 -0
- package/dist/commands/ecdn/certificates/add.d.ts +1 -0
- package/dist/commands/ecdn/certificates/delete.d.ts +1 -0
- package/dist/commands/ecdn/certificates/list.d.ts +1 -0
- package/dist/commands/ecdn/certificates/update.d.ts +1 -0
- package/dist/commands/ecdn/certificates/validate.d.ts +1 -0
- package/dist/commands/ecdn/cipher-suites/get.d.ts +1 -0
- package/dist/commands/ecdn/cipher-suites/update.d.ts +1 -0
- package/dist/commands/ecdn/firewall/create.d.ts +1 -0
- package/dist/commands/ecdn/firewall/delete.d.ts +1 -0
- package/dist/commands/ecdn/firewall/get.d.ts +1 -0
- package/dist/commands/ecdn/firewall/list.d.ts +1 -0
- package/dist/commands/ecdn/firewall/reorder.d.ts +1 -0
- package/dist/commands/ecdn/firewall/update.d.ts +1 -0
- package/dist/commands/ecdn/logpush/jobs/create.d.ts +1 -0
- package/dist/commands/ecdn/logpush/jobs/delete.d.ts +1 -0
- package/dist/commands/ecdn/logpush/jobs/get.d.ts +1 -0
- package/dist/commands/ecdn/logpush/jobs/list.d.ts +1 -0
- package/dist/commands/ecdn/logpush/jobs/update.d.ts +1 -0
- package/dist/commands/ecdn/logpush/ownership.d.ts +1 -0
- package/dist/commands/ecdn/mrt-rules/create.d.ts +1 -0
- package/dist/commands/ecdn/mrt-rules/delete.d.ts +1 -0
- package/dist/commands/ecdn/mrt-rules/get.d.ts +1 -0
- package/dist/commands/ecdn/mrt-rules/rules/delete.d.ts +1 -0
- package/dist/commands/ecdn/mrt-rules/rules/update.d.ts +1 -0
- package/dist/commands/ecdn/mrt-rules/update.d.ts +1 -0
- package/dist/commands/ecdn/mtls/create.d.ts +1 -0
- package/dist/commands/ecdn/mtls/delete.d.ts +1 -0
- package/dist/commands/ecdn/mtls/get.d.ts +1 -0
- package/dist/commands/ecdn/mtls/issue.d.ts +1 -0
- package/dist/commands/ecdn/mtls/list.d.ts +1 -0
- package/dist/commands/ecdn/mtls/setup.d.ts +1 -0
- package/dist/commands/ecdn/origin-headers/delete.d.ts +1 -0
- package/dist/commands/ecdn/origin-headers/get.d.ts +1 -0
- package/dist/commands/ecdn/origin-headers/set.d.ts +1 -0
- package/dist/commands/ecdn/page-shield/notifications/create.d.ts +1 -0
- package/dist/commands/ecdn/page-shield/notifications/delete.d.ts +1 -0
- package/dist/commands/ecdn/page-shield/notifications/list.d.ts +1 -0
- package/dist/commands/ecdn/page-shield/policies/create.d.ts +1 -0
- package/dist/commands/ecdn/page-shield/policies/delete.d.ts +1 -0
- package/dist/commands/ecdn/page-shield/policies/get.d.ts +1 -0
- package/dist/commands/ecdn/page-shield/policies/list.d.ts +1 -0
- package/dist/commands/ecdn/page-shield/policies/update.d.ts +1 -0
- package/dist/commands/ecdn/page-shield/scripts/get.d.ts +1 -0
- package/dist/commands/ecdn/page-shield/scripts/list.d.ts +1 -0
- package/dist/commands/ecdn/rate-limit/create.d.ts +1 -0
- package/dist/commands/ecdn/rate-limit/delete.d.ts +1 -0
- package/dist/commands/ecdn/rate-limit/get.d.ts +1 -0
- package/dist/commands/ecdn/rate-limit/list.d.ts +1 -0
- package/dist/commands/ecdn/rate-limit/update.d.ts +1 -0
- package/dist/commands/ecdn/security/get.d.ts +1 -0
- package/dist/commands/ecdn/security/update.d.ts +1 -0
- package/dist/commands/ecdn/speed/get.d.ts +1 -0
- package/dist/commands/ecdn/speed/update.d.ts +1 -0
- package/dist/commands/ecdn/waf/groups/list.d.ts +1 -0
- package/dist/commands/ecdn/waf/groups/update.d.ts +1 -0
- package/dist/commands/ecdn/waf/managed-rules/list.d.ts +1 -0
- package/dist/commands/ecdn/waf/managed-rules/update.d.ts +1 -0
- package/dist/commands/ecdn/waf/migrate.d.ts +1 -0
- package/dist/commands/ecdn/waf/owasp/get.d.ts +1 -0
- package/dist/commands/ecdn/waf/owasp/update.d.ts +1 -0
- package/dist/commands/ecdn/waf/rules/get.d.ts +1 -0
- package/dist/commands/ecdn/waf/rules/list.d.ts +1 -0
- package/dist/commands/ecdn/waf/rules/update.d.ts +1 -0
- package/dist/commands/ecdn/waf/rulesets/list.d.ts +1 -0
- package/dist/commands/ecdn/waf/rulesets/update.d.ts +1 -0
- package/dist/commands/ecdn/zones/create.d.ts +1 -0
- package/dist/commands/ecdn/zones/list.d.ts +1 -0
- package/dist/commands/job/execution/delete.d.ts +1 -0
- package/dist/commands/job/export.d.ts +1 -0
- package/dist/commands/job/import-set.d.ts +1 -0
- package/dist/commands/job/import.d.ts +1 -0
- package/dist/commands/job/log.d.ts +1 -0
- package/dist/commands/job/run.d.ts +1 -0
- package/dist/commands/job/run.js +1 -1
- package/dist/commands/job/run.js.map +1 -1
- package/dist/commands/job/search.d.ts +1 -0
- package/dist/commands/job/wait.d.ts +1 -0
- package/dist/commands/logs/get.d.ts +1 -0
- package/dist/commands/logs/list.d.ts +1 -0
- package/dist/commands/logs/tail.d.ts +1 -0
- package/dist/commands/metrics/controller.d.ts +1 -0
- package/dist/commands/metrics/ecdn.d.ts +1 -0
- package/dist/commands/metrics/mrt.d.ts +1 -0
- package/dist/commands/metrics/ocapi.d.ts +1 -0
- package/dist/commands/metrics/overall.d.ts +1 -0
- package/dist/commands/metrics/sales.d.ts +1 -0
- package/dist/commands/metrics/scapi-hooks.d.ts +1 -0
- package/dist/commands/metrics/scapi.d.ts +1 -0
- package/dist/commands/metrics/third-party.d.ts +1 -0
- package/dist/commands/mrt/bundle/delete.d.ts +1 -0
- package/dist/commands/mrt/bundle/deploy.d.ts +1 -0
- package/dist/commands/mrt/bundle/download.d.ts +1 -0
- package/dist/commands/mrt/bundle/history.d.ts +1 -0
- package/dist/commands/mrt/bundle/list.d.ts +1 -0
- package/dist/commands/mrt/bundle/save.d.ts +1 -0
- package/dist/commands/mrt/bundle/upload-v2.d.ts +1 -0
- package/dist/commands/mrt/env/access-control/list.d.ts +1 -0
- package/dist/commands/mrt/env/b2c.d.ts +1 -0
- package/dist/commands/mrt/env/clone.d.ts +1 -0
- package/dist/commands/mrt/env/create.d.ts +1 -0
- package/dist/commands/mrt/env/delete.d.ts +1 -0
- package/dist/commands/mrt/env/get.d.ts +1 -0
- package/dist/commands/mrt/env/invalidate.d.ts +1 -0
- package/dist/commands/mrt/env/list.d.ts +1 -0
- package/dist/commands/mrt/env/redirect/clone.d.ts +1 -0
- package/dist/commands/mrt/env/redirect/create.d.ts +1 -0
- package/dist/commands/mrt/env/redirect/delete.d.ts +1 -0
- package/dist/commands/mrt/env/redirect/list.d.ts +1 -0
- package/dist/commands/mrt/env/update.d.ts +1 -0
- package/dist/commands/mrt/env/var/delete.d.ts +1 -0
- package/dist/commands/mrt/env/var/list.d.ts +1 -0
- package/dist/commands/mrt/env/var/push.d.ts +1 -0
- package/dist/commands/mrt/env/var/set.d.ts +1 -0
- package/dist/commands/mrt/org/b2c.d.ts +1 -0
- package/dist/commands/mrt/org/cert/create.d.ts +1 -0
- package/dist/commands/mrt/org/cert/delete.d.ts +1 -0
- package/dist/commands/mrt/org/cert/get.d.ts +1 -0
- package/dist/commands/mrt/org/cert/list.d.ts +1 -0
- package/dist/commands/mrt/org/cert/restart-validation.d.ts +1 -0
- package/dist/commands/mrt/org/list.d.ts +1 -0
- package/dist/commands/mrt/org/member/add.d.ts +1 -0
- package/dist/commands/mrt/org/member/get.d.ts +1 -0
- package/dist/commands/mrt/org/member/list.d.ts +1 -0
- package/dist/commands/mrt/org/member/remove.d.ts +1 -0
- package/dist/commands/mrt/org/member/update.d.ts +1 -0
- package/dist/commands/mrt/project/create.d.ts +1 -0
- package/dist/commands/mrt/project/delete.d.ts +1 -0
- package/dist/commands/mrt/project/get.d.ts +1 -0
- package/dist/commands/mrt/project/list.d.ts +1 -0
- package/dist/commands/mrt/project/member/add.d.ts +1 -0
- package/dist/commands/mrt/project/member/get.d.ts +1 -0
- package/dist/commands/mrt/project/member/list.d.ts +1 -0
- package/dist/commands/mrt/project/member/remove.d.ts +1 -0
- package/dist/commands/mrt/project/member/update.d.ts +1 -0
- package/dist/commands/mrt/project/notification/delete.d.ts +1 -0
- package/dist/commands/mrt/project/notification/get.d.ts +1 -0
- package/dist/commands/mrt/project/update.d.ts +1 -0
- package/dist/commands/mrt/save-credentials.d.ts +1 -0
- package/dist/commands/mrt/tail-logs.d.ts +1 -0
- package/dist/commands/mrt/user/api-key.d.ts +1 -0
- package/dist/commands/mrt/user/email-prefs.d.ts +1 -0
- package/dist/commands/mrt/user/profile.d.ts +1 -0
- package/dist/commands/scaffold/init.js +2 -1
- package/dist/commands/scaffold/init.js.map +1 -1
- package/dist/commands/scapi/custom/status.d.ts +1 -0
- package/dist/commands/scapi/schemas/get.d.ts +9 -0
- package/dist/commands/scapi/schemas/get.js +51 -19
- package/dist/commands/scapi/schemas/get.js.map +1 -1
- package/dist/commands/scapi/schemas/list.d.ts +6 -0
- package/dist/commands/scapi/schemas/list.js +28 -18
- package/dist/commands/scapi/schemas/list.js.map +1 -1
- package/dist/commands/setup/get.d.ts +36 -0
- package/dist/commands/setup/get.js +67 -0
- package/dist/commands/setup/get.js.map +1 -0
- package/dist/commands/setup/ide/tsserver-plugin.d.ts +1 -0
- package/dist/commands/setup/ide/vscode-types.d.ts +1 -0
- package/dist/commands/setup/index.js +4 -3
- package/dist/commands/setup/index.js.map +1 -1
- package/dist/commands/setup/inspect.d.ts +1 -0
- package/dist/commands/setup/inspect.js +15 -4
- package/dist/commands/setup/inspect.js.map +1 -1
- package/dist/commands/setup/instance/create.d.ts +9 -0
- package/dist/commands/setup/instance/create.js +22 -6
- package/dist/commands/setup/instance/create.js.map +1 -1
- package/dist/commands/setup/instance/list.d.ts +1 -0
- package/dist/commands/setup/instance/list.js +3 -4
- package/dist/commands/setup/instance/list.js.map +1 -1
- package/dist/commands/setup/instance/remove.d.ts +1 -0
- package/dist/commands/setup/instance/remove.js +5 -5
- package/dist/commands/setup/instance/remove.js.map +1 -1
- package/dist/commands/setup/instance/set-active.d.ts +6 -0
- package/dist/commands/setup/instance/set-active.js +20 -5
- package/dist/commands/setup/instance/set-active.js.map +1 -1
- package/dist/commands/setup/openshell.d.ts +1 -0
- package/dist/commands/setup/set.d.ts +37 -0
- package/dist/commands/setup/set.js +87 -0
- package/dist/commands/setup/set.js.map +1 -0
- package/dist/commands/setup/skills.d.ts +1 -0
- package/dist/commands/setup/unset.d.ts +37 -0
- package/dist/commands/setup/unset.js +55 -0
- package/dist/commands/setup/unset.js.map +1 -0
- package/dist/commands/slas/client/create.d.ts +1 -0
- package/dist/commands/slas/client/delete.d.ts +1 -0
- package/dist/commands/slas/client/get.d.ts +1 -0
- package/dist/commands/slas/client/list.d.ts +1 -0
- package/dist/commands/slas/client/open.d.ts +1 -0
- package/dist/commands/slas/client/update.d.ts +1 -0
- package/dist/commands/slas/token.d.ts +1 -0
- package/dist/commands/slas/token.js +2 -1
- package/dist/commands/slas/token.js.map +1 -1
- package/dist/commands/webdav/get.d.ts +1 -0
- package/dist/commands/webdav/rm.d.ts +1 -0
- package/dist/help.d.ts +25 -0
- package/dist/help.js +96 -0
- package/dist/help.js.map +1 -0
- package/dist/lib/scaffold/generate-helper.js +3 -2
- package/dist/lib/scaffold/generate-helper.js.map +1 -1
- package/dist/lib/skills.d.ts +19 -0
- package/dist/lib/skills.js +75 -0
- package/dist/lib/skills.js.map +1 -0
- package/dist/utils/cip/command.d.ts +1 -0
- package/dist/utils/ecdn/zone-command.d.ts +1 -0
- package/dist/utils/setup/config-field-command.d.ts +25 -0
- package/dist/utils/setup/config-field-command.js +41 -0
- package/dist/utils/setup/config-field-command.js.map +1 -0
- package/dist/utils/slas/client.d.ts +1 -0
- package/oclif.manifest.json +20802 -16968
- package/package.json +11 -5
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
# Chunk-Oriented Job Steps Reference
|
|
2
|
+
|
|
3
|
+
Complete patterns for chunk-oriented job steps.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- Product exports/imports
|
|
8
|
+
- Order processing
|
|
9
|
+
- Customer data sync
|
|
10
|
+
- Inventory updates
|
|
11
|
+
- Any bulk data operation with countable items
|
|
12
|
+
|
|
13
|
+
**Important:** Chunk-oriented steps **cannot** define custom exit status. They always finish with either **OK** or **ERROR**.
|
|
14
|
+
|
|
15
|
+
## Basic Structure
|
|
16
|
+
|
|
17
|
+
```javascript
|
|
18
|
+
'use strict';
|
|
19
|
+
|
|
20
|
+
var iterator;
|
|
21
|
+
|
|
22
|
+
exports.beforeStep = function (parameters, stepExecution) {
|
|
23
|
+
// Initialize: open files, start queries
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
exports.getTotalCount = function (parameters, stepExecution) {
|
|
27
|
+
return iterator.count;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
exports.read = function (parameters, stepExecution) {
|
|
31
|
+
if (iterator.hasNext()) {
|
|
32
|
+
return iterator.next();
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
exports.process = function (item, parameters, stepExecution) {
|
|
37
|
+
// Transform item
|
|
38
|
+
return transformedItem;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
exports.write = function (items, parameters, stepExecution) {
|
|
42
|
+
// Write chunk
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
exports.afterStep = function (success, parameters, stepExecution) {
|
|
46
|
+
// Cleanup
|
|
47
|
+
};
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Product Export Example
|
|
51
|
+
|
|
52
|
+
```javascript
|
|
53
|
+
'use strict';
|
|
54
|
+
|
|
55
|
+
var ProductMgr = require('dw/catalog/ProductMgr');
|
|
56
|
+
var File = require('dw/io/File');
|
|
57
|
+
var FileWriter = require('dw/io/FileWriter');
|
|
58
|
+
var Logger = require('dw/system/Logger');
|
|
59
|
+
|
|
60
|
+
var log = Logger.getLogger('job', 'ProductExport');
|
|
61
|
+
var products;
|
|
62
|
+
var writer;
|
|
63
|
+
|
|
64
|
+
exports.beforeStep = function (parameters, stepExecution) {
|
|
65
|
+
var outputPath = parameters.OutputFile || '/export/products.csv';
|
|
66
|
+
var outputFile = new File(File.IMPEX + outputPath);
|
|
67
|
+
|
|
68
|
+
// Ensure the directory exists. dw.io.File has no parent accessor, so
|
|
69
|
+
// derive the directory from the path and create it directly.
|
|
70
|
+
var dirPath = outputPath.substring(0, outputPath.lastIndexOf('/'));
|
|
71
|
+
new File(File.IMPEX + dirPath).mkdirs();
|
|
72
|
+
|
|
73
|
+
writer = new FileWriter(outputFile, 'UTF-8');
|
|
74
|
+
writer.writeLine('ID,Name,Brand,Price,Online');
|
|
75
|
+
|
|
76
|
+
// Query all products
|
|
77
|
+
products = ProductMgr.queryAllSiteProducts();
|
|
78
|
+
|
|
79
|
+
log.info('Starting product export');
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
exports.getTotalCount = function (parameters, stepExecution) {
|
|
83
|
+
return products.count;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
exports.read = function (parameters, stepExecution) {
|
|
87
|
+
if (products.hasNext()) {
|
|
88
|
+
return products.next();
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
exports.process = function (product, parameters, stepExecution) {
|
|
93
|
+
// Skip masters (export variants only) or filter as needed
|
|
94
|
+
if (product.master) {
|
|
95
|
+
return; // Filter out
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Extract and transform data
|
|
99
|
+
return {
|
|
100
|
+
id: product.ID,
|
|
101
|
+
name: escapeCsv(product.name || ''),
|
|
102
|
+
brand: product.brand ? escapeCsv(product.brand) : '',
|
|
103
|
+
price: product.priceModel.price ? product.priceModel.price.value : 0,
|
|
104
|
+
online: product.online ? 'Y' : 'N'
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
exports.write = function (items, parameters, stepExecution) {
|
|
109
|
+
for (var i = 0; i < items.size(); i++) {
|
|
110
|
+
var item = items.get(i);
|
|
111
|
+
writer.writeLine([
|
|
112
|
+
item.id,
|
|
113
|
+
item.name,
|
|
114
|
+
item.brand,
|
|
115
|
+
item.price,
|
|
116
|
+
item.online
|
|
117
|
+
].join(','));
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
exports.afterStep = function (success, parameters, stepExecution) {
|
|
122
|
+
if (products) {
|
|
123
|
+
products.close();
|
|
124
|
+
}
|
|
125
|
+
if (writer) {
|
|
126
|
+
writer.close();
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (success) {
|
|
130
|
+
log.info('Product export completed successfully');
|
|
131
|
+
} else {
|
|
132
|
+
log.error('Product export failed');
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
function escapeCsv(str) {
|
|
137
|
+
if (str.indexOf(',') >= 0 || str.indexOf('"') >= 0) {
|
|
138
|
+
return '"' + str.replace(/"/g, '""') + '"';
|
|
139
|
+
}
|
|
140
|
+
return str;
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Order Processing Example
|
|
145
|
+
|
|
146
|
+
```javascript
|
|
147
|
+
'use strict';
|
|
148
|
+
|
|
149
|
+
var OrderMgr = require('dw/order/OrderMgr');
|
|
150
|
+
var Transaction = require('dw/system/Transaction');
|
|
151
|
+
var Logger = require('dw/system/Logger');
|
|
152
|
+
|
|
153
|
+
var log = Logger.getLogger('job', 'OrderProcess');
|
|
154
|
+
var orders;
|
|
155
|
+
|
|
156
|
+
exports.beforeStep = function (parameters, stepExecution) {
|
|
157
|
+
var status = parameters.OrderStatus || 'NEW';
|
|
158
|
+
|
|
159
|
+
// Query orders by status
|
|
160
|
+
orders = OrderMgr.searchOrders(
|
|
161
|
+
'status = {0}',
|
|
162
|
+
'creationDate asc',
|
|
163
|
+
require('dw/order/Order')[status]
|
|
164
|
+
);
|
|
165
|
+
|
|
166
|
+
log.info('Found ' + orders.count + ' orders to process');
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
exports.getTotalCount = function (parameters, stepExecution) {
|
|
170
|
+
return orders.count;
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
exports.read = function (parameters, stepExecution) {
|
|
174
|
+
if (orders.hasNext()) {
|
|
175
|
+
return orders.next();
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
exports.process = function (order, parameters, stepExecution) {
|
|
180
|
+
// Validate order can be processed
|
|
181
|
+
if (order.paymentStatus.value !== require('dw/order/Order').PAYMENT_STATUS_PAID) {
|
|
182
|
+
log.warn('Skipping order ' + order.orderNo + ' - not paid');
|
|
183
|
+
return; // Filter out
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return order;
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
exports.write = function (orders, parameters, stepExecution) {
|
|
190
|
+
for (var i = 0; i < orders.size(); i++) {
|
|
191
|
+
var order = orders.get(i);
|
|
192
|
+
|
|
193
|
+
Transaction.wrap(function () {
|
|
194
|
+
// Update order status
|
|
195
|
+
order.setExportStatus(require('dw/order/Order').EXPORT_STATUS_EXPORTED);
|
|
196
|
+
log.info('Processed order: ' + order.orderNo);
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
exports.afterStep = function (success, parameters, stepExecution) {
|
|
202
|
+
if (orders) {
|
|
203
|
+
orders.close();
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## Customer Sync Example
|
|
209
|
+
|
|
210
|
+
```javascript
|
|
211
|
+
'use strict';
|
|
212
|
+
|
|
213
|
+
var CustomerMgr = require('dw/customer/CustomerMgr');
|
|
214
|
+
var HTTPClient = require('dw/net/HTTPClient');
|
|
215
|
+
var Transaction = require('dw/system/Transaction');
|
|
216
|
+
var Logger = require('dw/system/Logger');
|
|
217
|
+
|
|
218
|
+
var log = Logger.getLogger('job', 'CustomerSync');
|
|
219
|
+
var customers;
|
|
220
|
+
var apiUrl;
|
|
221
|
+
var apiKey;
|
|
222
|
+
|
|
223
|
+
exports.beforeStep = function (parameters, stepExecution) {
|
|
224
|
+
apiUrl = parameters.APIEndpoint;
|
|
225
|
+
apiKey = parameters.APIKey;
|
|
226
|
+
|
|
227
|
+
// Query customers modified since last sync
|
|
228
|
+
var lastSync = parameters.LastSyncDate;
|
|
229
|
+
if (lastSync) {
|
|
230
|
+
customers = CustomerMgr.searchProfiles(
|
|
231
|
+
'lastModified >= {0}',
|
|
232
|
+
'lastModified asc',
|
|
233
|
+
new Date(lastSync)
|
|
234
|
+
);
|
|
235
|
+
} else {
|
|
236
|
+
customers = CustomerMgr.searchProfiles('', 'lastModified asc');
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
exports.getTotalCount = function (parameters, stepExecution) {
|
|
241
|
+
return customers.count;
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
exports.read = function (parameters, stepExecution) {
|
|
245
|
+
if (customers.hasNext()) {
|
|
246
|
+
return customers.next();
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
exports.process = function (profile, parameters, stepExecution) {
|
|
251
|
+
return {
|
|
252
|
+
customerId: profile.customerNo,
|
|
253
|
+
email: profile.email,
|
|
254
|
+
firstName: profile.firstName,
|
|
255
|
+
lastName: profile.lastName,
|
|
256
|
+
lastModified: profile.lastModified.toISOString()
|
|
257
|
+
};
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
exports.write = function (items, parameters, stepExecution) {
|
|
261
|
+
var http = new HTTPClient();
|
|
262
|
+
http.setTimeout(30000);
|
|
263
|
+
http.setRequestHeader('Authorization', 'Bearer ' + apiKey);
|
|
264
|
+
http.setRequestHeader('Content-Type', 'application/json');
|
|
265
|
+
|
|
266
|
+
// Convert Java List to array
|
|
267
|
+
var payload = [];
|
|
268
|
+
for (var i = 0; i < items.size(); i++) {
|
|
269
|
+
payload.push(items.get(i));
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
try {
|
|
273
|
+
http.open('POST', apiUrl + '/customers/batch');
|
|
274
|
+
http.send(JSON.stringify({ customers: payload }));
|
|
275
|
+
|
|
276
|
+
if (http.statusCode >= 200 && http.statusCode < 300) {
|
|
277
|
+
log.info('Synced ' + payload.length + ' customers');
|
|
278
|
+
} else {
|
|
279
|
+
log.error('API error: ' + http.statusCode);
|
|
280
|
+
throw new Error('API returned ' + http.statusCode);
|
|
281
|
+
}
|
|
282
|
+
} catch (e) {
|
|
283
|
+
log.error('Sync error: ' + e.message);
|
|
284
|
+
throw e; // Causes step to fail
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
exports.afterStep = function (success, parameters, stepExecution) {
|
|
289
|
+
if (customers) {
|
|
290
|
+
customers.close();
|
|
291
|
+
}
|
|
292
|
+
};
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
## Chunk Lifecycle
|
|
296
|
+
|
|
297
|
+
1. `beforeStep()` - Called once at start
|
|
298
|
+
2. For each chunk:
|
|
299
|
+
- `beforeChunk()` - Before chunk (optional)
|
|
300
|
+
- `read()` - Called repeatedly until returns nothing
|
|
301
|
+
- `process()` - Called for each item from read()
|
|
302
|
+
- `write()` - Called with chunk of processed items
|
|
303
|
+
- `afterChunk()` - After chunk (optional)
|
|
304
|
+
3. `afterStep(success)` - Called once at end
|
|
305
|
+
|
|
306
|
+
## Chunk Size Considerations
|
|
307
|
+
|
|
308
|
+
| Chunk Size | Pros | Cons |
|
|
309
|
+
|------------|------|------|
|
|
310
|
+
| Small (10-50) | More frequent progress updates | Higher overhead |
|
|
311
|
+
| Medium (100-500) | Good balance | Default choice |
|
|
312
|
+
| Large (1000+) | Less overhead | Less granular progress |
|
|
313
|
+
|
|
314
|
+
## Transaction Handling
|
|
315
|
+
|
|
316
|
+
Two approaches:
|
|
317
|
+
|
|
318
|
+
**1. transactional="true" in steptypes.json:**
|
|
319
|
+
```json
|
|
320
|
+
{
|
|
321
|
+
"transactional": "true",
|
|
322
|
+
"chunk-size": 100
|
|
323
|
+
}
|
|
324
|
+
```
|
|
325
|
+
Each chunk wrapped in single transaction. Rollback on error.
|
|
326
|
+
|
|
327
|
+
**2. Manual Transaction.wrap():**
|
|
328
|
+
```javascript
|
|
329
|
+
exports.write = function (items, parameters, stepExecution) {
|
|
330
|
+
for (var i = 0; i < items.size(); i++) {
|
|
331
|
+
var item = items.get(i);
|
|
332
|
+
Transaction.wrap(function () {
|
|
333
|
+
// Per-item transaction
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
};
|
|
337
|
+
```
|
|
338
|
+
More control, item-level error handling.
|
|
339
|
+
|
|
340
|
+
## steptypes.json for Chunk Steps
|
|
341
|
+
|
|
342
|
+
```json
|
|
343
|
+
{
|
|
344
|
+
"step-types": {
|
|
345
|
+
"chunk-script-module-step": [
|
|
346
|
+
{
|
|
347
|
+
"@type-id": "custom.ProductExport",
|
|
348
|
+
"@supports-parallel-execution": "true",
|
|
349
|
+
"@supports-site-context": "true",
|
|
350
|
+
"@supports-organization-context": "false",
|
|
351
|
+
"description": "Export products to CSV",
|
|
352
|
+
"module": "my_cartridge/cartridge/scripts/steps/productExport.js",
|
|
353
|
+
"before-step-function": "beforeStep",
|
|
354
|
+
"total-count-function": "getTotalCount",
|
|
355
|
+
"read-function": "read",
|
|
356
|
+
"process-function": "process",
|
|
357
|
+
"write-function": "write",
|
|
358
|
+
"after-step-function": "afterStep",
|
|
359
|
+
"chunk-size": 100,
|
|
360
|
+
"transactional": "false",
|
|
361
|
+
"timeout-in-seconds": 3600,
|
|
362
|
+
"parameters": {
|
|
363
|
+
"parameter": [
|
|
364
|
+
{
|
|
365
|
+
"@name": "OutputFile",
|
|
366
|
+
"@type": "string",
|
|
367
|
+
"@required": "false",
|
|
368
|
+
"default-value": "/export/products.csv",
|
|
369
|
+
"description": "Output file path"
|
|
370
|
+
}
|
|
371
|
+
]
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
]
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
```
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
# jobs.xml Reference (Job Definitions)
|
|
2
|
+
|
|
3
|
+
`steptypes.json` makes a step *type* available; a **job definition** (`jobs.xml`) is what actually creates a runnable, schedulable job out of one or more steps. This is the missing link between *defining* steps and *running* a job: without a job definition there is no job for `b2c job run` to execute or for Business Manager to schedule.
|
|
4
|
+
|
|
5
|
+
You author `jobs.xml` and import it with the CLI:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
b2c job import ./my-job-archive
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
`jobs.xml` lives at the **root of a site import archive** (alongside `services.xml`, `meta/`, `sites/`, …):
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
my-job-archive/
|
|
15
|
+
└── jobs.xml # <-- archive root
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
After import, the job appears in **Business Manager > Administration > Operations > Jobs** and can be triggered with `b2c job run <job-id>` (see the `b2c-cli:b2c-job` skill).
|
|
19
|
+
|
|
20
|
+
## Namespace & Schema
|
|
21
|
+
|
|
22
|
+
Use the jobs impex namespace exactly. The schema is `jobs.xsd`.
|
|
23
|
+
|
|
24
|
+
```xml
|
|
25
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
26
|
+
<jobs xmlns="http://www.demandware.com/xml/impex/jobs/2015-07-01">
|
|
27
|
+
<!-- one or more <job> elements -->
|
|
28
|
+
</jobs>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Document Structure (element order matters)
|
|
32
|
+
|
|
33
|
+
A `<job>` child elements **must appear in this order** (enforced by the XSD):
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
<job>
|
|
37
|
+
<description>? (0..1)
|
|
38
|
+
<parameters>? (0..1) job-level parameters
|
|
39
|
+
(<flow> | <split>)* (0..n) one or more step flows
|
|
40
|
+
<rules>? (0..1) on-running / on-retry / on-exit notifications
|
|
41
|
+
<triggers> (1..1) REQUIRED — see below
|
|
42
|
+
</job>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
| Element | Required | Notes |
|
|
46
|
+
|---------|----------|-------|
|
|
47
|
+
| `<job job-id="...">` | Yes | `job-id` attribute is required and unique; it is the name you pass to `b2c job run`. |
|
|
48
|
+
| `<description>` | No | Free text (max 4000 chars). |
|
|
49
|
+
| `<parameters>` | No | Job-level parameters; steps can reference them via `job-parameter-ref`. |
|
|
50
|
+
| `<flow>` / `<split>` | No* | Contains the ordered `<step>` elements. A job with no flow does nothing. |
|
|
51
|
+
| `<rules>` | No | Hanging-job / retry / exit email notifications. |
|
|
52
|
+
| **`<triggers>`** | **Yes** | **Required by the schema.** A `jobs.xml` without `<triggers>` fails import validation. Use `<run-once>` for an on-demand/manually-run job. |
|
|
53
|
+
|
|
54
|
+
## Minimal Single-Step Job
|
|
55
|
+
|
|
56
|
+
The smallest valid definition: one flow, one step referencing a custom step type, and the **required `<triggers>`** element. `<run-once>` registers the job for manual/on-demand execution (you still run it with `b2c job run`).
|
|
57
|
+
|
|
58
|
+
```xml
|
|
59
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
60
|
+
<jobs xmlns="http://www.demandware.com/xml/impex/jobs/2015-07-01">
|
|
61
|
+
<job job-id="MyNightlyExport">
|
|
62
|
+
<description>Exports products to a CSV feed</description>
|
|
63
|
+
<flow>
|
|
64
|
+
<context site-id="RefArch"/>
|
|
65
|
+
<step step-id="ExportStep" type="custom.ProductExport">
|
|
66
|
+
<parameters>
|
|
67
|
+
<parameter name="OutputFile">/export/products.csv</parameter>
|
|
68
|
+
<parameter name="OnlineOnly">true</parameter>
|
|
69
|
+
</parameters>
|
|
70
|
+
</step>
|
|
71
|
+
</flow>
|
|
72
|
+
<triggers>
|
|
73
|
+
<run-once enabled="false">
|
|
74
|
+
<date>2025-01-01</date>
|
|
75
|
+
<time>00:00:00.000Z</time>
|
|
76
|
+
</run-once>
|
|
77
|
+
</triggers>
|
|
78
|
+
</job>
|
|
79
|
+
</jobs>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Step Element
|
|
83
|
+
|
|
84
|
+
```xml
|
|
85
|
+
<step step-id="UniqueStepId" type="custom.ProductExport" enforce-restart="false">
|
|
86
|
+
<description>...</description>?
|
|
87
|
+
<parameters>?
|
|
88
|
+
<parameter name="ParamName">value</parameter>
|
|
89
|
+
<parameter name="OtherParam" job-parameter-ref="GlobalParam"/>
|
|
90
|
+
</parameters>
|
|
91
|
+
<rules>?
|
|
92
|
+
<on-exit status="ERROR"><stop-job/></on-exit>
|
|
93
|
+
</rules>
|
|
94
|
+
</step>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
| Attribute / element | Required | Notes |
|
|
98
|
+
|---------------------|----------|-------|
|
|
99
|
+
| `step-id` | Yes | Unique within the flow. |
|
|
100
|
+
| **`type`** | **Yes** | **References the step type to run.** This is the key distinction from `steptypes.json`: in `jobs.xml` you use the attribute **`type`** (e.g. `type="custom.ProductExport"`); the value matches the **`@type-id`** declared in `steptypes.json` for custom steps, or a built-in/system step `type-id` (e.g. `ImportCatalog`, `ExecuteScriptModule`). |
|
|
101
|
+
| `<parameters>/<parameter name="...">` | No | Per-step parameter values. The `name` must match a `@name` declared in the step type's `parameters` in `steptypes.json`. The value is the element text. |
|
|
102
|
+
| `job-parameter-ref` | No | On a `<parameter>`, binds this step parameter to a job-level `<parameter>` instead of a literal value (lets one job parameter feed many steps). |
|
|
103
|
+
| `<rules>/<on-exit status="...">` | No | Per-step flow control: `<stop/>`, `<stop-job/>`, `<stop-flow/>`, or `<continue next-step="..."/>` keyed on the step's exit status code. |
|
|
104
|
+
|
|
105
|
+
> **`type` (jobs.xml) vs `@type-id` (steptypes.json)** — a common stumbling block. `steptypes.json` *declares* a step type with `"@type-id": "custom.ProductExport"`. `jobs.xml` *uses* it with `<step type="custom.ProductExport">`. They must match exactly (custom type-ids start with `custom.`).
|
|
106
|
+
|
|
107
|
+
## Multi-Step Job
|
|
108
|
+
|
|
109
|
+
Steps run in document order within a flow. Use `<context site-id="...">` to scope a site-aware flow; omit it (or use a `<split>`) for organization-scoped steps.
|
|
110
|
+
|
|
111
|
+
```xml
|
|
112
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
113
|
+
<jobs xmlns="http://www.demandware.com/xml/impex/jobs/2015-07-01">
|
|
114
|
+
<job job-id="OrderFulfillmentSync">
|
|
115
|
+
<parameters>
|
|
116
|
+
<parameter name="Site">RefArch</parameter>
|
|
117
|
+
</parameters>
|
|
118
|
+
<flow>
|
|
119
|
+
<context site-id="RefArch"/>
|
|
120
|
+
<step step-id="PullOrders" type="custom.PullOpenOrders">
|
|
121
|
+
<parameters>
|
|
122
|
+
<parameter name="SiteId" job-parameter-ref="Site"/>
|
|
123
|
+
</parameters>
|
|
124
|
+
<rules>
|
|
125
|
+
<on-exit status="ERROR"><stop-job/></on-exit>
|
|
126
|
+
</rules>
|
|
127
|
+
</step>
|
|
128
|
+
<step step-id="ExportToOMS" type="custom.ExportOrdersToOMS">
|
|
129
|
+
<parameters>
|
|
130
|
+
<parameter name="BatchSize">100</parameter>
|
|
131
|
+
</parameters>
|
|
132
|
+
</step>
|
|
133
|
+
</flow>
|
|
134
|
+
<triggers>
|
|
135
|
+
<run-once enabled="false">
|
|
136
|
+
<date>2025-01-01</date>
|
|
137
|
+
<time>00:00:00.000Z</time>
|
|
138
|
+
</run-once>
|
|
139
|
+
</triggers>
|
|
140
|
+
</job>
|
|
141
|
+
</jobs>
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Triggers (required)
|
|
145
|
+
|
|
146
|
+
`<triggers>` is **mandatory** and holds exactly one of `<run-once>` or `<run-recurring>`.
|
|
147
|
+
|
|
148
|
+
### run-once (on-demand / manual)
|
|
149
|
+
|
|
150
|
+
Use for jobs you trigger from the CLI or Business Manager rather than on a schedule. `enabled="false"` keeps the one-time scheduled fire from auto-running; you still run it manually.
|
|
151
|
+
|
|
152
|
+
```xml
|
|
153
|
+
<triggers>
|
|
154
|
+
<run-once enabled="false">
|
|
155
|
+
<date>2025-01-01</date>
|
|
156
|
+
<time>00:00:00.000Z</time>
|
|
157
|
+
</run-once>
|
|
158
|
+
</triggers>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### run-recurring (scheduled)
|
|
162
|
+
|
|
163
|
+
```xml
|
|
164
|
+
<triggers>
|
|
165
|
+
<run-recurring enabled="true">
|
|
166
|
+
<recurrence>
|
|
167
|
+
<date-from>2025-01-01</date-from>
|
|
168
|
+
<start-time>02:00:00.000Z</start-time>
|
|
169
|
+
<interval>1d</interval>
|
|
170
|
+
<day-of-week>
|
|
171
|
+
<weekday>Monday</weekday>
|
|
172
|
+
<weekday>Wednesday</weekday>
|
|
173
|
+
<weekday>Friday</weekday>
|
|
174
|
+
</day-of-week>
|
|
175
|
+
</recurrence>
|
|
176
|
+
</run-recurring>
|
|
177
|
+
</triggers>
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
| `<recurrence>` child | Required | Notes |
|
|
181
|
+
|----------------------|----------|-------|
|
|
182
|
+
| `<date-from>` | Yes | Start date (`YYYY-MM-DD`). |
|
|
183
|
+
| `<date-to>` | No | Optional end date. |
|
|
184
|
+
| `<start-time>` | Yes | Time of day (`HH:MM:SS.SSSZ`). |
|
|
185
|
+
| `<interval>` | No | e.g. `1d`, `30m`, `1h` (max 10 chars). |
|
|
186
|
+
| `<day-of-week>/<weekday>` | No | One or more of `Monday`…`Sunday`. |
|
|
187
|
+
|
|
188
|
+
## Importing & Running
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
# import the archive containing jobs.xml (waits for completion by default)
|
|
192
|
+
b2c job import ./my-job-archive
|
|
193
|
+
|
|
194
|
+
# verify / run the job after import
|
|
195
|
+
b2c job run MyNightlyExport --wait --show-log
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
If the import fails with a schema validation error, the most common causes are a **missing `<triggers>` element**, children out of the required order, or a `<step type="...">` whose value doesn't match a declared `@type-id` (custom step types must be imported via `steptypes.json` in a deployed cartridge first). Use `b2c job import ./my-job-archive --show-log` to see the validation detail.
|
|
199
|
+
|
|
200
|
+
## Common Pitfalls
|
|
201
|
+
|
|
202
|
+
- **Missing `<triggers>`** — the element is required by the XSD; import fails without it. For a manually-run job, use `<run-once enabled="false">`.
|
|
203
|
+
- **Child order** — `description → parameters → flow/split → rules → triggers`. Out-of-order children fail validation.
|
|
204
|
+
- **`type` vs `@type-id`** — `jobs.xml` uses the `type` attribute on `<step>`; it must match the `@type-id` in `steptypes.json` (or a system step type-id).
|
|
205
|
+
- **Custom step not deployed** — the cartridge carrying the step's `steptypes.json` and module must be on the active code version (and on the cartridge path) before the job can resolve the step type.
|
|
206
|
+
- **Wrong context scope** — site-scoped steps need a `<context site-id="...">`; org-scoped steps must not be placed under a site context. This must agree with `@supports-site-context` / `@supports-organization-context` in `steptypes.json`.
|
|
207
|
+
|
|
208
|
+
## Related
|
|
209
|
+
|
|
210
|
+
- [steptypes.json Reference](STEPTYPES-JSON.md) — declaring the step types referenced by `<step type="...">`.
|
|
211
|
+
- `b2c-cli:b2c-job` — running the imported job (`b2c job run`) and importing the archive (`b2c job import`).
|
|
212
|
+
- `b2c-cli:b2c-site-import-export` — site archive structure (`jobs.xml` is a root-level archive file).
|