mcpField
D
data360-code-extension-generate

data360-code-extension-generate

github.com/forcedotcom数据与数据库1.1k5.0k 次安装1 天前更新
代码仓库

关于 data360-code-extension-generate

该技能指导开发、测试和部署 Salesforce Data Cloud 的自定义 Python 代码扩展,适用于构建批处理或实时数据转换的开发者。它涵盖权限扫描、模式校验和本地运行流程。

主要功能

  1. 01脚手架创建脚本或函数项目
  2. 02读写 DLO 和 DMO 数据
  3. 03扫描权限并生成配置
  4. 04部署前校验 DLO 模式
  5. 05在目标组织中本地测试
  6. 06部署代码扩展到 Data Cloud

适用场景

  1. 01创建批处理或实时转换项目
  2. 02检查代码所需的数据访问权限
  3. 03运行转换前核对 DLO 字段
  4. 04将扩展部署到 Data Cloud

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/forcedotcom/sf-skills --skill data360-code-extension-generate

安装后在 Claude Code 中输入/data360-code-extension-generate确认已加载。

附带文件references/quick-reference.mdreferences/README.md

详细介绍

data360-code-extension-generate 技能

概述

此技能提供了一个完整的工作流,用于开发、测试和部署自定义 Python 代码扩展到 Salesforce Data Cloud。代码扩展可让你编写 Python 转换逻辑,以便从数据湖对象(DLO)和数据模型对象(DMO)读取数据并写入数据。

适用场景

  • 用户想要创建新的代码扩展项目
  • 用户需要在本地测试代码扩展
  • 用户想要扫描代码,检查所需权限
  • 用户需要将代码扩展部署到 Data Cloud
  • 用户正在使用 Data Cloud 转换
  • 用户想要通过编程方式读取或写入 DLO 或 DMO 数据

前置条件检查

执行任何代码扩展命令之前,请验证前置条件:

  1. 已安装插件的 SF CLI

    sf plugins --core | grep data-code-extension
    

    如果尚未安装:

    sf plugins install @salesforce/plugin-data-code-extension
    
  2. Python 3.11

    python --version  # Should show 3.11.x
    
  3. Data Cloud Custom Code SDK

    pip list | grep salesforce-data-customcode
    

    如果尚未安装:

    pip install salesforce-data-customcode
    
  4. Docker 正在运行(仅部署时需要)

    docker ps
    
  5. 已通过身份验证的组织

    sf org display --target-org <org_alias> --json
    

技能工作流

阶段 1:初始化项目

使用脚手架创建新的代码扩展项目。

命令:

对于基于脚本的代码扩展(批处理转换):

sf data-code-extension script init --package-dir <directory>

对于基于函数的代码扩展(实时转换):

sf data-code-extension function init --package-dir <directory>

必需选项:

  • --package-dir, -p - 用于创建包的目录路径

创建内容:

my-transform/              # Project root
├── payload/               # CRITICAL: This is what --package-dir must point to for deploy
│   ├── entrypoint.py      # Main transformation code
│   └── config.json        # Code extension configuration
├── requirements.txt       # Python dependencies
└── README.md

工作流中的目录上下文

**重要:**了解目录结构对成功部署至关重要。

命令及其目录要求:

命令运行目录路径/文件参数
init父目录<project-name> 或 .
scan项目根目录./payload/entrypoint.py
run项目根目录./payload/entrypoint.py
deploy项目根目录--package-dir ./payload(必需)

关键:deploy 命令中的 --package-dir 参数必须指向 payload 目录,而不是项目根目录。

阶段 2:开发转换逻辑

编辑 payload/entrypoint.py,添加转换逻辑。

脚本示例(批处理):

from datacustomcode import Client

client = Client()

# Read from DLO
df = client.read_dlo('Employee__dll')

# Transform data (uppercase position field)
df['position_upper'] = df['position'].str.upper()

# Write to output DLO
client.write_to_dlo('Employee_Upper__dll', df, 'overwrite')

函数示例(实时):

from datacustomcode import FunctionClient

def transform(event, context):
    client = FunctionClient(context)
    input_data = event['data']
    output = {
        'name': input_data['name'].upper(),
        'status': 'processed'
    }
    return output

常见操作:

  • client.read_dlo('DLO_Name__dll') - 从 DLO 读取
  • client.read_dmo('DMO_Name') - 从 DMO 读取
  • client.write_to_dlo('DLO_Name__dll', df, 'overwrite') - 写入 DLO
  • client.write_to_dmo('DMO_Name', df, 'upsert') - 写入 DMO
阶段 3:扫描权限

扫描入口文件以检测所需权限并生成 config.json。

命令:

sf data-code-extension script scan --entrypoint ./payload/entrypoint.py

检测内容:

  • 对 DLO/DMO 的读取权限
  • 对 DLO/DMO 的写入权限
  • Python 包依赖
  • 更新 config.json 和 requirements.txt
阶段 4:验证 DLO 架构(测试前检查)

关键:在本地运行测试之前,请验证代码中使用的所有 DLO 均存在,且包含预期字段。

步骤 4a:从 config.json 中提取 DLO

扫描后,请查看生成的 config.json,确定所有 DLO:

cat payload/config.json
步骤 4b:验证每个 DLO 的架构

使用 data360-schema-get 技能验证 DLO 是否存在并检查字段名。

对于代码中引用的每个 DLO:

  1. 验证 DLO 是否存在:

    python3 scripts/get_dlo_schema.py <org_alias> <dlo_name>
    
  2. 验证字段名是否匹配 — 将 entrypoint.py 中使用的字段与 DLO 架构进行比较。

  3. 检查所有 DLO:

    • 验证 read 权限中的所有 DLO
    • 验证 write 权限中的所有 DLO
    • 确认字段名完全匹配(区分大小写)
    • 确认数据类型与操作兼容
步骤 4c:验证清单

继续运行之前,请确保:

  • config.json 中的所有 DLO 都存在于目标组织中
  • 代码中使用的所有字段名都存在于 DLO 架构中
  • 字段数据类型与转换逻辑匹配
  • 已正确识别主键字段
  • 写入目标 DLO 已创建且可访问
阶段 5:本地测试

验证 DLO 架构后,在本地针对你的 Data Cloud 组织运行代码扩展。

命令:

sf data-code-extension script run --entrypoint <entrypoint_file> --target-org <org_alias> [options]

选项:

  • --target-org, -o - SF CLI 组织别名(必填)
  • --config-file, -c - 自定义配置文件路径

如果遇到错误:

  • 重新验证 DLO 架构
  • 检查字段名称是否完全匹配
  • 验证数据类型是否兼容
  • 查看错误消息,排查字段/DLO 问题
阶段 6:部署到 Data Cloud

将代码扩展部署到 Data Cloud,以便按计划或按需执行。

重要:必须指定 --package-dir ./payload,以指向通过 init 创建的 payload 目录。

命令:

sf data-code-extension script deploy --target-org <org_alias> --name <name> --package-dir ./payload --package-version <version> --description <description> [options]

必填选项:

  • --target-org, -o - SF CLI 组织别名
  • --name, -n - 代码扩展部署的名称
  • --package-dir - payload 目录的路径(必填 - 从项目根目录运行时必须为 ./payload)
  • --package-version - 版本字符串(默认值:0.0.1)
  • --description - 代码扩展的描述

可选选项:

  • --cpu-size - CPU 规格:CPU_L、CPU_XL、CPU_2XL(默认值)、CPU_4XL
  • --function-invoke-opt - 函数调用选项(适用于 function 类型)
  • --network - Docker 网络(默认值:default)

部署后:

  • 在 Salesforce UI 中打开 Data Cloud
  • 进入 Data Transforms 部分
  • 按名称找到你的部署
  • 点击“立即运行”以执行
  • 设置计划任务以定期执行

错误处理

常见问题和解决方案
错误解决方案
command data-code-extension not foundsf plugins install @salesforce/plugin-data-code-extension
datacustomcode CLI not foundpip install salesforce-data-customcode
Python version mismatch使用 pyenv:pyenv install 3.11.0 && pyenv local 3.11.0
Cannot connect to Docker daemon启动 Docker Desktop
No org found for aliassf org login web --alias <org_alias>
config.json not foundsf data-code-extension script scan --entrypoint ./payload/entrypoint.py
DLO not found验证 DLO 是否存在(使用 data360-schema-get 技能),检查拼写和 __dll 后缀
Permission denied writing重新运行 scan,验证目标 DLO 是否存在且可写入
Deploy fails - wrong directory确保 --package-dir 指向 payload/ 目录,而非项目根目录

最佳实践

开发
  1. 测试前始终先扫描——代码更改后运行 scan
  2. 先在本地测试——部署前使用 run 命令
  3. 使用版本控制——每次测试成功后执行 git commit
  4. 为部署设置版本号——使用语义化版本(1.0.0、1.1.0 等)
  5. 从项目根目录使用 --package-dir ./payload 进行部署
性能
  • CPU_L:小型数据集(< 1M 条记录)
  • CPU_2XL:中型数据集(1M-10M 条记录)
  • CPU_4XL:大型数据集(> 10M 条记录)
安全
  1. 不要硬编码凭据——仅使用 SF CLI 身份验证
  2. 验证输入数据——检查空值和数据类型
  3. 限制写入权限——仅授予必要的 DLO/DMO 访问权限

与其他技能集成

与 data360-schema-get 技能配合使用(验证时至关重要):

在测试代码扩展前,必须使用 data360-schema-get 技能验证 DLO。

与 Datakit 工作流配合使用:

  1. 通过代码扩展创建 DLO
  2. 使用 datakit 工作流将 DLO 映射到 DMO
  3. 在细分和激活中使用 DMO

命令参考

命令用途必填参数
script init创建新的脚本项目--package-dir
function init创建新的函数项目--package-dir
script scan生成配置入口点文件
script run在本地测试入口点文件、--target-org
script deploy部署到 Data Cloud--target-org、--name、--package-dir、--package-version、--description

资源

备注

  • 代码扩展在隔离的 Python 3.11 环境中运行
  • Docker 仅在部署时需要,本地测试不需要
  • 仅使用 SF CLI 身份验证(无需单独的凭据文件)
  • Scan 命令会从代码中自动检测权限
  • 本地运行使用实际的 Data Cloud 数据(而非模拟数据)
  • 部署会进行版本管理,并且可以在 UI 中回滚

评论

支持 Markdown