Initial commit
This commit is contained in:
184
SKILL.md
Normal file
184
SKILL.md
Normal file
@@ -0,0 +1,184 @@
|
||||
---
|
||||
name: sap-sac-scripting
|
||||
description: |
|
||||
Comprehensive SAC scripting skill for Analytics Designer and Optimized Story Experience. Use when building analytic applications, planning models, or enhanced stories. Covers DataSource API, Chart/Table manipulation, Planning operations, Calendar integration, Bookmarks, Timer API, Container widgets, Layout API, R Visualizations, Custom Widgets, Navigation, variables, event handlers, debugging, performance optimization, and 2025.23 features: comments APIs, Search to Insight, smart grouping, time-series forecast, geo map quick menus, Explorer/Smart Insights, composites scripting. Includes 40 code templates.
|
||||
license: GPL-3.0
|
||||
metadata:
|
||||
version: 1.7.0
|
||||
last_verified: 2025-11-27
|
||||
sac_version: "2025.23"
|
||||
api_reference_version: "2025.14"
|
||||
documentation_source: [https://help.sap.com/docs/SAP_ANALYTICS_CLOUD](https://help.sap.com/docs/SAP_ANALYTICS_CLOUD)
|
||||
reference_files: 52
|
||||
template_patterns: 40
|
||||
status: production
|
||||
---
|
||||
|
||||
# SAP Analytics Cloud Scripting
|
||||
|
||||
Comprehensive skill for scripting in SAP Analytics Cloud (SAC) Analytics Designer and Optimized Story Experience.
|
||||
|
||||
## What's New in SAC 2025.23
|
||||
|
||||
Time series forecast API, Search to Insight, comments APIs, smart grouping, Explorer & Smart Insights, geo map enhancements, and composite scripting support. See `references/whats-new-2025.23.md` for complete details.
|
||||
|
||||
## When to Use This Skill
|
||||
|
||||
Use this skill when working on tasks involving:
|
||||
|
||||
- **Analytics Designer Development**: Creating interactive dashboards, planning applications, event handlers
|
||||
- **Optimized Story Experience**: Enhancing stories with scripting capabilities
|
||||
- **Data Operations**: Filtering, data access, hierarchies, data actions
|
||||
- **Planning Operations**: Version management, data locking, workflows
|
||||
- **UI/UX Enhancements**: Popups, navigation, responsive design
|
||||
- **Advanced Features**: Calendar integration, bookmarks, R visualizations
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Script Editor Access
|
||||
- **Analytics Designer**: Edit mode → Select widget → Scripts tab
|
||||
- **Optimized Story Experience**: Advanced Mode → Select widget → Add script
|
||||
|
||||
### Basic Script Structure
|
||||
```javascript
|
||||
// Event handler example
|
||||
var selections = Chart_1.getSelections();
|
||||
if (selections.length > 0) {
|
||||
Table_1.getDataSource().setDimensionFilter("Location", selections[0]["Location"]);
|
||||
}
|
||||
```
|
||||
|
||||
## Core APIs
|
||||
|
||||
### DataSource API
|
||||
- **Reference**: `Chart_1.getDataSource()` or `Table_1.getDataSource()`
|
||||
- **Key Methods**: `getMembers()`, `getData()`, `setDimensionFilter()`, `refreshData()`
|
||||
- **Performance**: Use `getResultSet()` (no backend) instead of `getMembers()` (hits backend)
|
||||
|
||||
### Planning API
|
||||
- **Access**: `Table_1.getPlanning()`
|
||||
- **Operations**: Version management (`getPublicVersion()`, `publish()`, `copy()`)
|
||||
- **Data Locking**: Check/modify lock states
|
||||
|
||||
### Widget APIs
|
||||
- **Charts**: `addDimension()`, `addMeasure()`, `getSelections()`
|
||||
- **Tables**: `addDimensionToRows()`, `setZeroSuppressionEnabled()`
|
||||
- **Containers**: Panel, TabStrip, PageBook for layout management
|
||||
|
||||
### Application Object
|
||||
- **Utilities**: `showBusyIndicator()`, `showMessage()`
|
||||
- **Info**: `getInfo()`, `getUserInfo()`, `getTheme()`
|
||||
|
||||
## Common Patterns
|
||||
|
||||
### Filter Based on Selection
|
||||
```javascript
|
||||
var selections = Chart_1.getSelections();
|
||||
if (selections.length > 0) {
|
||||
Table_1.getDataSource().setDimensionFilter("Location", selections[0]["Location"]);
|
||||
}
|
||||
```
|
||||
|
||||
### Pause/Resume Refresh (Performance)
|
||||
```javascript
|
||||
ds.setRefreshPaused(true);
|
||||
// Apply multiple operations
|
||||
ds.setRefreshPaused(false); // Single backend call
|
||||
```
|
||||
|
||||
### Get Booked Values Only
|
||||
```javascript
|
||||
var members = ds.getMembers("Dimension", {accessMode: MemberAccessMode.BookedValues});
|
||||
```
|
||||
|
||||
## Debugging
|
||||
|
||||
### Console Logging
|
||||
```javascript
|
||||
console.log("Debug info:", myVariable);
|
||||
console.log("Selections:", Chart_1.getSelections());
|
||||
```
|
||||
|
||||
### Browser Tools
|
||||
- Open with F12 → Console tab
|
||||
- Filter by "Info" type
|
||||
- Look for "sandbox.worker.main.*.js"
|
||||
|
||||
### Performance Logging
|
||||
Add URL parameter: `?APP_PERFORMANCE_LOGGING=true`
|
||||
|
||||
## Performance Best Practices
|
||||
|
||||
1. **Minimize Backend Trips**: Use `getResultSet()` over `getMembers()`
|
||||
2. **Batch Operations**: Pause refresh, apply changes, resume
|
||||
3. **Cache References**: Store `getDataSource()` in variables
|
||||
4. **Empty onInitialization**: Avoid heavy startup operations
|
||||
|
||||
## Developer Best Practices
|
||||
|
||||
### Naming Conventions
|
||||
- Charts: `chartB_revenue` (Bar), `chartL_sales` (Line)
|
||||
- Tables: `tbl_transactions`
|
||||
- Panels: `pnl_header`
|
||||
- Buttons: `btn_export_pdf`
|
||||
|
||||
### Script Annotation
|
||||
```javascript
|
||||
/*
|
||||
* Script: onSelect - chartB_revenue_by_region
|
||||
* Purpose: Filter detail table when user selects a region
|
||||
*/
|
||||
```
|
||||
|
||||
## Events
|
||||
|
||||
### Application Events
|
||||
- `onInitialization`: Runs once on load (keep empty!)
|
||||
- `onResize`: Application resize
|
||||
- `onOrientationChange`: Mobile orientation change
|
||||
|
||||
### Widget Events
|
||||
- `onSelect`: Data point selection (Chart/Table)
|
||||
- `onResultChanged`: Data changes
|
||||
- `onClick`: Button click
|
||||
|
||||
## Planning Story Architecture
|
||||
|
||||
### Multi-Story Pattern
|
||||
```
|
||||
Planning_Application/
|
||||
├── 00_Entry_Point.story
|
||||
├── 01_Configuration.story
|
||||
├── 02_Plan_FTE.story
|
||||
├── 03_Plan_Costs.story
|
||||
└── 04_Reports.story
|
||||
```
|
||||
|
||||
### Navigation Script
|
||||
```javascript
|
||||
var urlParameters = ArrayUtils.create(Type.UrlParameter);
|
||||
urlParameters.push(UrlParameter.create("page", "0"));
|
||||
NavigationUtils.openStory(storyId, "", urlParameters, false);
|
||||
```
|
||||
|
||||
## Bundled Resources
|
||||
|
||||
**Reference Files** (52 files):
|
||||
- Core APIs: `references/api-datasource.md`, `references/api-widgets.md`
|
||||
- Advanced: `references/api-calendar-bookmarks.md`, `references/api-advanced-widgets.md`
|
||||
- Best Practices: `references/best-practices-developer.md`
|
||||
- Language: `references/scripting-language-fundamentals.md`
|
||||
|
||||
**Templates** (40 patterns):
|
||||
- `templates/common-patterns.js`: 40 scripting patterns
|
||||
- `templates/planning-operations.js`: Planning-specific patterns
|
||||
|
||||
## Official Documentation
|
||||
|
||||
- **Analytics Designer API**: [Analytics Designer API](https://help.sap.com/doc/958d4c11261f42e992e8d01a4c0dde25/latest/en-US/)
|
||||
- **Optimized Story Experience API**: [Optimized Story Experience API](https://help.sap.com/doc/1639cb9ccaa54b2592224df577abe822/latest/en-US/)
|
||||
- **SAC Scripting Docs**: [SAC Scripting Docs](https://help.sap.com/docs/SAP_ANALYTICS_CLOUD)
|
||||
|
||||
---
|
||||
|
||||
**Version**: 1.7.0 | **Last Verified**: 2025-11-27 | **SAC Version**: 2025.23
|
||||
Reference in New Issue
Block a user