sap-sac-scripting

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

SAP Analytics Cloud Scripting

SAP Analytics Cloud(SAC)脚本开发

Comprehensive skill for scripting in SAP Analytics Cloud (SAC) Analytics Designer and Optimized Story Experience.
适用于SAP Analytics Cloud(SAC)Analytics Designer和Optimized Story Experience的全面脚本开发技能。

Getting Started

快速入门

When the user invokes this skill with no specific task (e.g. "help with SAC scripting", "use SAC scripting skill", or no follow-up question), respond with this structured orientation:
Welcome! I can help you with SAP Analytics Cloud scripting.
First, which environment are you working in?
  1. Analytics Designer — application-based scripting, full API
  2. Optimized Story Experience — story-based scripting, OSE API (v2025.14)
Then, what do you need help with?
  • Write a new script (filter, planning, navigation, export...)
  • Debug an existing script
  • Optimize performance
  • Find the right API method
  • Planning operations (version management, data locking...)
当用户未指定具体任务(例如“协助进行SAC脚本开发”、“使用SAC脚本开发技能”或无后续问题)调用本技能时,请以以下结构化引导内容回应:
欢迎!我可以协助您进行SAP Analytics Cloud(SAC)脚本开发相关工作。
首先,您正在哪个环境中工作?
  1. Analytics Designer — 基于应用的脚本开发,完整API支持
  2. Optimized Story Experience — 基于故事的脚本开发,OSE API(v2025.14)
其次,您需要哪些帮助?
  • 编写新脚本(过滤、规划、导航、导出等)
  • 调试现有脚本
  • 优化性能
  • 查找合适的API方法
  • 规划操作(版本管理、数据锁定等)

Plugin Components

插件组件

This plugin provides specialized tools for SAC development:
Agents (use via Task tool):
  • sac-script-debugger
    - Debug script errors, trace issues
  • sac-performance-optimizer
    - Analyze and fix performance bottlenecks
  • sac-planning-assistant
    - Guide planning operations and version management
  • sac-api-helper
    - Find correct APIs and provide code examples
Commands (use via /command):
  • /sac-script-template
    - Generate script templates (filter, planning, export, etc.)
  • /sac-debug
    - Interactive debugging guidance
  • /sac-optimize
    - Performance analysis and recommendations
  • /sac-planning
    - Planning operation templates
Hooks:
  • Automatic validation on SAC script writes for common issues
本插件为SAC开发提供了专用工具:
Agents(通过任务工具使用):
  • sac-script-debugger
    - 调试脚本错误,追踪问题
  • sac-performance-optimizer
    - 分析并修复性能瓶颈
  • sac-planning-assistant
    - 指导规划操作和版本管理
  • sac-api-helper
    - 查找正确的API并提供代码示例
Commands(通过/command使用):
  • /sac-script-template
    - 生成脚本模板(过滤、规划、导出等)
  • /sac-debug
    - 交互式调试指导
  • /sac-optimize
    - 性能分析与建议
  • /sac-planning
    - 规划操作模板
Hooks
  • 自动验证SAC脚本编写中的常见问题

MCP Setup

MCP 设置

This plugin ships with a
.mcp.json
that connects to the community
sap_analytics_cloud_mcp
server, exposing 90 SAC REST API tools across 11 service areas (Content, Data Export, Data Import, Multi Actions, Calendar, Content Transport, User Management, Monitoring, Schedule & Publication, Translation, Smart Query).
Before using MCP tools, check if the server is already installed:
  • Look for
    .claude/sac-mcp.local.md
    in the project
  • Or check if
    SAC_MCP_PATH
    is set in the environment
If not installed, ask the user once: "Would you like help setting up the SAC MCP server?"
If yes, guide them through:
  1. Clone and build:
    bash
    git clone https://github.com/secondsky/sap_analytics_cloud_mcp
    cd sap_analytics_cloud_mcp && npm install && npm run build
  2. Configure environment variables:
    • SAC_MCP_PATH
      — absolute path to the cloned repo (e.g.
      /home/user/sap_analytics_cloud_mcp
      )
    • SAC_BASE_URL
      — SAC tenant root URL (e.g.
      https://mytenant.eu10.hanacloudservices.cloud.sap
      )
    • SAC_TOKEN_URL
      — OAuth token endpoint
    • SAC_CLIENT_ID
      /
      SAC_CLIENT_SECRET
      — from SAC OAuth client configuration
  3. After successful install, write
    .claude/sac-mcp.local.md
    (gitignored) with:
    markdown
    # SAC MCP Installation Record
    - Installed: [date]
    - Path: [absolute path to build/index.js]
    - Env vars configured: SAC_MCP_PATH, SAC_BASE_URL, SAC_TOKEN_URL, SAC_CLIENT_ID, SAC_CLIENT_SECRET
This prevents re-prompting in future sessions.
本插件附带一个
.mcp.json
文件,可连接到社区
sap_analytics_cloud_mcp
服务器,在11个服务领域(内容、数据导出、数据导入、多操作、日历、内容传输、用户管理、监控、调度与发布、翻译、智能查询)提供90个SAC REST API工具。
使用MCP工具前,请检查服务器是否已安装:
  • 查看项目中是否存在
    .claude/sac-mcp.local.md
    文件
  • 或检查环境变量中是否已设置
    SAC_MCP_PATH
如果未安装,请向用户询问一次:“是否需要协助设置SAC MCP服务器?”
如果用户同意,请引导他们完成以下步骤:
  1. 克隆并构建:
    bash
    git clone https://github.com/secondsky/sap_analytics_cloud_mcp
    cd sap_analytics_cloud_mcp && npm install && npm run build
  2. 配置环境变量:
    • SAC_MCP_PATH
      — 克隆仓库的绝对路径(例如
      /home/user/sap_analytics_cloud_mcp
    • SAC_BASE_URL
      — SAC租户根URL(例如
      https://mytenant.eu10.hanacloudservices.cloud.sap
    • SAC_TOKEN_URL
      — OAuth令牌端点
    • SAC_CLIENT_ID
      /
      SAC_CLIENT_SECRET
      — 来自SAC OAuth客户端配置
  3. 安装成功后,创建
    .claude/sac-mcp.local.md
    文件(已加入git忽略),内容如下:
    markdown
    # SAC MCP 安装记录
    - 安装日期: [日期]
    - 路径: [build/index.js的绝对路径]
    - 已配置的环境变量: SAC_MCP_PATH, SAC_BASE_URL, SAC_TOKEN_URL, SAC_CLIENT_ID, SAC_CLIENT_SECRET
这样可避免在后续会话中重复提示安装。

What's New in Q1 2026 (2026.2)

2026年第一季度(2026.2版本)新增功能

Key scripting enhancements in the latest SAC release:
  • Chart Variance APIs - Script control over chart variance display
  • Compass for Seamless Planning - Enhanced planning integration
  • Data Actions Enhancements - Automatic dimension mapping, input control binding
  • Time Series Forecast API - Programmatic forecasting control
  • Comments APIs - Widget and cell comment management
See
references/whats-new-q1-2026.md
for complete details.
最新SAC版本中的关键脚本增强功能:
  • Chart Variance APIs - 脚本控制图表差异显示
  • Compass for Seamless Planning - 增强的规划集成
  • Data Actions Enhancements - 自动维度映射、输入控件绑定
  • Time Series Forecast API - 程序化预测控制
  • Comments APIs - 组件和单元格评论管理
完整详情请查看
references/whats-new-q1-2026.md

Environment Detection

环境检测

Before writing or analyzing any script, identify which SAC environment the user is working in.
Detection signals:
SignalEnvironment
Mentions
.story
, "Optimized Story", OSE,
Story.
,
Application.getActivePage()
OSE
Mentions Analytics Designer,
AnalyticApplication
,
Designer
,
.application
Analytics Designer
Says "SAC script" / "my script" without further contextUnclear
When environment is unclear, ask ONE concise question before proceeding:
"Are you scripting in Analytics Designer or Optimized Story Experience? This determines which API reference I use."
Do not ask again after the user answers.
After confirmation, use the correct references:
  • OSE
    references/ose-api-*.md
    (8 files, Q1 2026, v2025.14)
  • Analytics Designer
    references/api-*.md
    (existing files)
在编写或分析任何脚本之前,请先确定用户正在使用的SAC环境。
检测信号:
信号环境
提及
.story
、“Optimized Story”、OSE、
Story.
Application.getActivePage()
OSE
提及Analytics Designer、
AnalyticApplication
Designer
.application
Analytics Designer
仅提及“SAC script” / “my script”无更多上下文不明确
当环境不明确时,在继续之前请询问一个简洁的问题:
“您是在Analytics Designer还是Optimized Story Experience中进行脚本开发?这将决定我使用哪个API参考文档。”
用户回答后请勿再次询问。
确认环境后,使用对应的参考文档:
  • OSE
    references/ose-api-*.md
    (8个文件,2026年第一季度,v2025.14)
  • Analytics Designer
    references/api-*.md
    (现有文件)

Quick Start

快速开始

Script Editor Access

脚本编辑器访问

  • Analytics Designer: Edit mode → Select widget → Scripts tab
  • Optimized Story Experience: Advanced Mode → Select widget → Add script
  • Analytics Designer:编辑模式 → 选择组件 → 脚本标签页
  • Optimized Story Experience:高级模式 → 选择组件 → 添加脚本

Basic Script Structure

基础脚本结构

javascript
// Event handler example (onSelect on Chart_1)
var selections = Chart_1.getSelections();
if (selections.length > 0) {
    var selectedValue = selections[0]["Location"];
    Table_1.getDataSource().setDimensionFilter("Location", selectedValue);
}
javascript
// 事件处理程序示例(Chart_1的onSelect事件)
var selections = Chart_1.getSelections();
if (selections.length > 0) {
    var selectedValue = selections[0]["Location"];
    Table_1.getDataSource().setDimensionFilter("Location", selectedValue);
}

Core APIs

核心API

DataSource API

DataSource API

Access via
Widget.getDataSource()
. Key methods:
  • getMembers(dim, {accessMode: MemberAccessMode.BookedValues})
    - Get dimension members efficiently
  • getResultSet()
    - Cached data access (preferred over getData())
  • setDimensionFilter(dim, value)
    - Apply filters
  • setRefreshPaused(true/false)
    - Batch multiple operations
通过
Widget.getDataSource()
访问。关键方法:
  • getMembers(dim, {accessMode: MemberAccessMode.BookedValues})
    - 高效获取维度成员
  • getResultSet()
    - 缓存数据访问(优先于getData())
  • setDimensionFilter(dim, value)
    - 应用过滤器
  • setRefreshPaused(true/false)
    - 批量处理多个操作

Planning API

Planning API

Access via
Table.getPlanning()
. Key operations:
  • getPublicVersion()
    /
    getPrivateVersion()
    - Version access
  • publish()
    - Submit private to public
  • copyFromPublicVersion()
    /
    copyToPublicVersion()
    - Data copy
  • setLock(true/false)
    - Data locking
通过
Table.getPlanning()
访问。关键操作:
  • getPublicVersion()
    /
    getPrivateVersion()
    - 版本访问
  • publish()
    - 将私有版本提交为公共版本
  • copyFromPublicVersion()
    /
    copyToPublicVersion()
    - 数据复制
  • setLock(true/false)
    - 数据锁定

Widget APIs

Widget APIs

  • Charts:
    addMeasure()
    ,
    addDimension()
    ,
    getSelections()
  • Tables:
    addDimensionToRows()
    ,
    setZeroSuppressionEnabled()
  • Containers: Panel, TabStrip, PageBook for layout
  • 图表
    addMeasure()
    addDimension()
    getSelections()
  • 表格
    addDimensionToRows()
    setZeroSuppressionEnabled()
  • 容器:Panel、TabStrip、PageBook用于布局

Application Object

Application对象

Global utilities:
  • Application.showBusyIndicator()
    /
    hideBusyIndicator()
  • Application.showMessage(type, text)
  • Application.getUserInfo()
    /
    getInfo()
全局工具:
  • Application.showBusyIndicator()
    /
    hideBusyIndicator()
  • Application.showMessage(type, text)
  • Application.getUserInfo()
    /
    getInfo()

Performance Best Practices

性能最佳实践

  1. Minimize Backend Calls
    javascript
    // Use getResultSet() (cached) instead of getMembers() (backend)
    var data = ds.getResultSet();
  2. Batch Filter Operations
    javascript
    ds.setRefreshPaused(true);
    ds.setDimensionFilter("Dim1", value1);
    ds.setDimensionFilter("Dim2", value2);
    ds.setRefreshPaused(false); // Single refresh
  3. Keep onInitialization Empty Defer heavy operations to lazy loading or first interaction.
  4. Use BookedValues for Members
    javascript
    var members = ds.getMembers("Dim", {accessMode: MemberAccessMode.BookedValues});
  1. 减少后端调用
    javascript
    // 使用getResultSet()(缓存)替代getMembers()(后端调用)
    var data = ds.getResultSet();
  2. 批量过滤操作
    javascript
    ds.setRefreshPaused(true);
    ds.setDimensionFilter("Dim1", value1);
    ds.setDimensionFilter("Dim2", value2);
    ds.setRefreshPaused(false); // 单次刷新
  3. 保持onInitialization为空 将繁重操作延迟到懒加载或首次交互时执行。
  4. 使用BookedValues获取成员
    javascript
    var members = ds.getMembers("Dim", {accessMode: MemberAccessMode.BookedValues});

Debugging

调试

Console Logging

控制台日志

javascript
console.log("Debug:", myVariable);
console.log("Selections:", JSON.stringify(Chart_1.getSelections()));
javascript
console.log("Debug:", myVariable);
console.log("Selections:", JSON.stringify(Chart_1.getSelections()));

Browser DevTools

浏览器开发者工具

  1. Press F12 → Console tab
  2. Filter by "Info" type
  3. Add
    ?APP_PERFORMANCE_LOGGING=true
    to URL for timing
  1. 按F12 → 控制台标签页
  2. 按“Info”类型过滤
  3. 在URL中添加
    ?APP_PERFORMANCE_LOGGING=true
    以查看计时信息

Bundled Resources

捆绑资源

Reference Files (63 files):
  • Core APIs:
    references/api-datasource.md
    ,
    references/api-widgets.md
    ,
    references/api-planning.md
  • Advanced:
    references/api-calendar-bookmarks.md
    ,
    references/api-advanced-widgets.md
  • Best Practices:
    references/best-practices-developer.md
    ,
    references/best-practices-planning-stories.md
  • Language:
    references/scripting-language-fundamentals.md
  • Q1 2026:
    references/whats-new-q1-2026.md
    ,
    references/chart-variance-apis.md
  • OSE API (Q1 2026, v2025.14) — complete method/parameter/return documentation:
    • references/ose-api-application-core.md
      — Application, PageBook, Panel, Popup, Widget (15 classes)
    • references/ose-api-widgets.md
      — Button, Dropdown, InputField, Slider, Switch, Text, TextArea (15 classes)
    • references/ose-api-datasource.md
      — DataSource, DataAction, DataBinding, DataLocking, DataChangeInsights (39 classes)
    • references/ose-api-chart-viz.md
      — Chart, Table, GeoMap, RVisualization, ValueDriverTree (20 classes)
    • references/ose-api-planning-calendar.md
      — Planning, PlanningModel, all Calendar classes (54 classes)
    • references/ose-api-filtering-selection.md
      — FilterLine, FilterValue, Selection (11 classes)
    • references/ose-api-utilities.md
      — BookmarkSet, MemberInfo, DimensionInfo, Timer, NavigationUtils (37 classes)
    • references/ose-api-types-enums.md
      — All enum types: Feed, Layout, NumberFormat, VariableValue (70 classes)
Templates (56 patterns):
  • templates/common-patterns.js
    - 40 general scripting patterns
  • templates/planning-operations.js
    - 16 planning-specific patterns
参考文件(63个文件):
  • 核心API:
    references/api-datasource.md
    references/api-widgets.md
    references/api-planning.md
  • 高级:
    references/api-calendar-bookmarks.md
    references/api-advanced-widgets.md
  • 最佳实践:
    references/best-practices-developer.md
    references/best-practices-planning-stories.md
  • 语言:
    references/scripting-language-fundamentals.md
  • 2026年第一季度:
    references/whats-new-q1-2026.md
    references/chart-variance-apis.md
  • OSE API(2026年第一季度,v2025.14) — 完整的方法/参数/返回值文档:
    • references/ose-api-application-core.md
      — Application、PageBook、Panel、Popup、Widget(15个类)
    • references/ose-api-widgets.md
      — Button、Dropdown、InputField、Slider、Switch、Text、TextArea(15个类)
    • references/ose-api-datasource.md
      — DataSource、DataAction、DataBinding、DataLocking、DataChangeInsights(39个类)
    • references/ose-api-chart-viz.md
      — Chart、Table、GeoMap、RVisualization、ValueDriverTree(20个类)
    • references/ose-api-planning-calendar.md
      — Planning、PlanningModel及所有Calendar类(54个类)
    • references/ose-api-filtering-selection.md
      — FilterLine、FilterValue、Selection(11个类)
    • references/ose-api-utilities.md
      — BookmarkSet、MemberInfo、DimensionInfo、Timer、NavigationUtils(37个类)
    • references/ose-api-types-enums.md
      — 所有枚举类型:Feed、Layout、NumberFormat、VariableValue(70个类)
模板(56个模式):
  • templates/common-patterns.js
    - 40个通用脚本模式
  • templates/planning-operations.js
    - 16个规划专用模式

Official Documentation

官方文档


版本: 3.0.1 | 最后验证日期: 2026-03-07 | SAC版本: 2026年第一季度(2026.2) | API版本: 2025.14