data360-code-extension-generate
Develop and deploy Data Cloud Code Extensions using SF CLI plugin. Use this skill when creating custom Python transformations for Data Cloud, deploying code extensions, or testing data transformations. Supports init, run, scan, and deploy operations.
By forcedotcom · 4,789 installs
npx skills add forcedotcom/sf-skills --skill data360-code-extension-generate
Source repository · Upstream listing
data360 code extension generate Skill
Overview
This skill provides a complete workflow for developing, testing, and deploying custom Python code extensions to Salesforce Data Cloud. Code extensions allow you to write Python transformations that read from and write to Data Lake Objects (DLOs) and Data Model Objects (DMOs).
When to Use
User wants to create a new code extension project
User needs to test a code extension locally
User wants to scan code for required permissions
User needs to deploy a code extension to Data Cloud
User is working with Data Cloud transformations
User wants to read/write DLO or DMO data programmatically
Prerequisites Check
Before executing any code extension commands, verify prerequisites:
1. SF CLI with plugin installed
If not installed:
2. Python 3.11
3. Data Cloud Custom Code SDK
If not installed:
4. Docker running (for deploy only)
5. Authenticated org
Skill Workflow
Phase 1: Initialize Project
Create a new code extension project with scaffolding.
Commands:
For script based code extensions (batch transformations):
For function based code extensions (real time):
Required Option:
package dir, p Directory path where the package will be created
What it creates:
Directory Context During Workflow
IMPORTANT: Understanding the directory structure is critical for successful deployment.
Commands and their directory requirements:
Command Run From Path/File Argument
init Parent directory <project name or .
scan Project root ./payload/entrypoint.py
run Project root ./payload/entrypoint.py
deploy Project root package dir ./payload ( REQUIRED )
CRITICAL: The package dir argument in deploy command MUST point to the payload directory, not the project root.
Phase 2: Develop Transformation
Edit payload/entrypoint.py with transformation logic.
Script Example (Batch):
Function Example (Real time):
Common Operations:
client.read dlo('DLO Name dll') Read from DLO
client.read dmo('DMO Name') Read from DMO
client.write to dlo('DLO Name dll', df, 'overwrite') Write to DLO
client.write to dmo('DMO Name', df, 'upsert') Write to DMO
Phase 3: Scan for Permissions
Scan the entrypoint file to detect required permissions and generate config.json.
Command:
What it detects:
Read permissions for DLOs/DMOs
Write permissions for DLOs/DMOs
Python package dependencies
Updates config.json and requirements.txt
Phase 4: Validate DLO Schema (Pre Test Check)
CRITICAL: Before running tests locally, validate that all DLOs used in your code exist and have the expected fields.
Step 4a: Extract DLOs from config.json
After scanning, review the generated config.json to identify all DLOs:
Step 4b: Validate Each DLO Schema
Use the data360 schema get skill to verify DLOs exist and check field names.
For each DLO referenced in your code:
1. Verify DLO exists:
2. Verify field names match — compare fields used in your entrypoint.py against the DLO schema.
3. Check all DLOs:
Validate all DLOs in read permissions
Validate all DLOs in write permissions
Check field names match exactly (case sensitive)
Verify data types are compatible with operations
Step 4c: Validation Checklist
Before proceeding to run, ensure:
[ ] All DLOs in config.json exist in target org
[ ] All field names used in code exist in DLO schemas
[ ] Field data types match your transformation logic
[ ] Primary key fields are correctly identified
[ ] Write target DLOs are created and accessible
Phase 5: Test Locally
After validating DLO schemas, run the code extension locally against your Data Cloud org.
Command:
Options:
target org, o SF CLI org alias (required)
config file, c Custom config file path
If you get errors:
Re validate DLO schemas
Check field names are exact matches
Verify data types are compatible
Review error messages for field/DLO issues
Phase 6: Deploy to Data Cloud
Deploy the code extension to Data Cloud for scheduled or on demand execution.
CRITICAL: You MUST specify package dir ./payload to point to the payload directory created by init.
Command:
Required Options:
target org, o SF CLI org alias
name, n Name for code extension deployment
package dir Path to payload directory ( REQUIRED must be ./payload when running from project root)
package version Version string (default: 0.0.1)
description Description of code extension
Optional Options:
cpu size CPU size: CPU L, CPU XL, CPU 2XL (default), CPU 4XL
function invoke opt Function invoke options (for function type)
network Docker network (default: default)
After deployment:
Navigate to Data Cloud in Salesforce UI
Go to Data Transforms section
Find your deployment by name
Click "Run Now" to execute
Schedule for recurring execution
Error Handling
Common Issues and Solutions
Error Solution
command data code extension not found sf plugins install @salesforce/plugin data code extension
datacustomcode CLI not found pip install salesforce data customcode
Python version mismatch Use pyenv: pyenv install 3.11.0 && pyenv local 3.11.0
Cannot connect to Docker daemon Start Docker Desktop
No org found for alias sf org login web alias <org alias
config.json not found sf data code extension script scan entrypoint ./payload/entrypoint.py
DLO not found Verify DLO exists (use data360 schema get skill), check spelling and dll suffix
Permission denied writing Re run scan, verify target DLO exists and is writable
Deploy fails wrong directory Ensure package dir points to payload/ directory, not project root
Best Practices
Development
1. Always scan before testing — run scan after code changes
2. Test locally first — use run command before deploying
3. Use version control — git commit after each successful test
4. Version your deployments — use semantic versioning (1.0.0, 1.1.0, etc.)
5. Deploy from project root with package dir ./payload
Performance
CPU L : Small datasets (< 1M records)
CPU 2XL : Medium datasets (1M 10M records)
CPU 4XL : Large datasets ( 10M records)
Security
1. No hardcoded credentials — use SF CLI authentication only
2. Validate input data — check for nulls and data types
3. Limit write permissions — only grant necessary DLO/DMO access
Integration with Other Skills
Use with data360 schema get skill (CRITICAL for validation):
The data360 schema get skill is required for validating DLOs before testing code extensions.
Use with Datakit Workflow:
1. Create DLO via code extension
2. Map DLO to DMO using datakit workflow
3. Use DMO in segments and activations
Command Reference
Command Purpose Required Args
script init Create new script project package dir
function init Create new function project package dir
script scan Generate config entrypoint file
script run Test locally entrypoint file, target org
script deploy Deploy to Data Cloud target org, name, package dir, package version, description
Resources
SF CLI Plugin: https://github.com/salesforcecli/plugin data code extension
Python SDK: https://github.com/forcedotcom/datacloud customcode python sdk
Data Cloud Docs: https://help.salesforce.com/s/articleView?id=sf.c360 a intro.htm
Python SDK PyPI: https://pypi.org/project/salesforce data customcode/
Notes
Code extensions run in isolated Python 3.11 environment
Docker is required only for deployment, not for local testing
Use SF CLI authentication only (no separate credential files)
Scan command auto detects permissions from code
Local run uses actual Data Cloud data (not mocked)
Deployments are versioned and can be rolled back in UI