# SAP Analytics Cloud - Analytics Designer API Reference for Planning **Source**: [https://help.sap.com/doc/958d4c11261f42e992e8d01a4c0dde25/2025.23/en-US/index.html](https://help.sap.com/doc/958d4c11261f42e992e8d01a4c0dde25/2025.23/en-US/index.html) **Version**: 2025.23 **Last Updated**: 2025-11-22 --- ## Table of Contents 1. [Application Class](#application-class) 2. [DataSource API](#datasource-api) 3. [Planning API (getPlanning)](#planning-api) 4. [PlanningModel API](#planningmodel-api) 5. [Data Actions API](#data-actions-api) 6. [Multi Actions API](#multi-actions-api) 7. [Calendar Integration API](#calendar-integration-api) 8. [BPC Planning Sequence API](#bpc-planning-sequence-api) 9. [Widget APIs](#widget-apis) 10. [Advanced Analytics APIs](#advanced-analytics-apis) 11. [Export APIs](#export-apis) 12. [Utility Classes](#utility-classes) 13. [Data Types and Structures](#data-types-and-structures) 14. [Enumerations](#enumerations) --- ## Application Class The Application object provides access to global application functionality. ### Properties & Methods | Method | Description | Return Type | |--------|-------------|-------------| | `getInfo()` | Get application information | ApplicationInfo | | `getMode()` | Get current mode (View, Present, Embed) | ApplicationMode | | `getTheme()` | Get current theme | Theme | | `setTheme(theme)` | Set application theme | void | | `getWidgets()` | Get all widgets in application | Widget[] | | `getUserInfo()` | Get current user information | UserInfo | | `getTeamsInfo()` | Get user's team information | TeamInfo[] | | `getRolesInfo()` | Get user's role information | RoleInfo[] | | `showBusyIndicator()` | Show loading indicator | void | | `hideBusyIndicator()` | Hide loading indicator | void | | `setAutomaticBusyIndicatorEnabled(enabled)` | Auto busy indicator | void | | `refreshData()` | Refresh all data sources | void | | `showMessage(text, type)` | Show toast message | void | | `sendNotification(options)` | Send notification to users | void | | `postMessage(message)` | Post message for embedding | void | | `setCssClass(className)` | Set CSS class on application | void | | `setCommentModeEnabled(enabled)` | Enable/disable comment mode | void | ### Event Handlers | Event | Trigger Condition | |-------|-------------------| | `onInitialization` | Application loads | | `onResize` | Browser window resizes | | `onOrientationChange` | Device orientation changes | | `onTimeout` | Session timeout warning | | `onBeforeExecute` | Before data action executes | | `onPostMessageReceived` | Message received from parent frame | | `onShake` | Device shake detected (mobile) | ### NotificationOptions Object ```javascript { title: string, content: string, receivers: string[], // User IDs isSendEmail: boolean, isSendMobileNotification: boolean, parameters: object } ``` ### Example: Application Initialization ```javascript // onInitialization event Application.showBusyIndicator(); // Get user and team info var userInfo = Application.getUserInfo(); var teams = Application.getTeamsInfo(); console.log("User: " + userInfo.displayName); console.log("Teams: " + teams.length); // Initialize default filters var currentYear = new Date().getFullYear().toString(); Table_1.getDataSource().setDimensionFilter("Year", currentYear); Application.hideBusyIndicator(); ``` --- ## DataSource API Access data source functionality for querying and filtering. ### Core Methods | Method | Description | Parameters | |--------|-------------|------------| | `getDimensions()` | Get all dimensions | none | | `getHierarchies(dimId)` | Get dimension hierarchies | dimId: string | | `getMeasures()` | Get all measures | none | | `getMembers(dimId, options)` | Get dimension members | dimId: string, options: MemberOptions | | `getMember(dimId, memberId)` | Get single member | dimId: string, memberId: string | | `getData()` | Get data from source | none | | `getResultSet()` | Get result set | none | | `getDataSelections()` | Get current data selections | none | | `isResultEmpty()` | Check if result is empty | none | | `setDimensionFilter(dimId, filter)` | Set filter on dimension | dimId: string, filter: string/MemberInfo[] | | `removeDimensionFilter(dimId)` | Remove dimension filter | dimId: string | | `getDimensionFilters(dimId)` | Get active filters | dimId: string | | `setVariableValue(varId, value)` | Set variable value | varId: string, value: string | | `getVariables()` | Get all variables | none | | `getVariableValues(varId)` | Get variable values | varId: string | | `removeVariableValue(varId)` | Remove variable value | varId: string | | `setHierarchy(dimId, hierarchyId)` | Set dimension hierarchy | dimId: string, hierarchyId: string | | `getHierarchyLevel(dimId)` | Get current hierarchy level | dimId: string | | `expandNode(node)` | Expand hierarchy node | node: MemberInfo | | `collapseNode(node)` | Collapse hierarchy node | node: MemberInfo | | `refreshData()` | Refresh data source | none | | `setRefreshPaused(paused)` | Pause/resume auto refresh | paused: boolean | | `getRefreshPaused()` | Check if refresh paused | none | ### MemberOptions Object ```javascript { limit: number, // Max members to return offset: number, // Skip first N members accessMode: MemberAccessMode, // MasterData, BookedValues search: string, // Search string hierarchyId: string // Specific hierarchy } ``` ### Filter Syntax (MDX) ```javascript // Single member "[Version].[parentId].&[public.Actual]" // Multiple members using array var members = ["2024", "2025"]; Table_1.getDataSource().setDimensionFilter("Year", members); // Using MemberInfo objects var memberInfos = [ {id: "2024", description: "Year 2024"}, {id: "2025", description: "Year 2025"} ]; Table_1.getDataSource().setDimensionFilter("Year", memberInfos); ``` --- ## Planning API Access planning functionality on tables via `getPlanning()`. ### Methods | Method | Description | Return Type | |--------|-------------|-------------| | `isEnabled()` | Check if planning enabled | boolean | | `setEnabled(enabled)` | Enable/disable planning at runtime | void | | `getPublicVersions()` | Get all public versions | PlanningPublicVersion[] | | `getPublicVersion(versionId)` | Get specific public version | PlanningPublicVersion | | `getPrivateVersion()` | Get current private version | PlanningPrivateVersion | | `getPrivateVersions()` | Get all user's private versions | PlanningPrivateVersion[] | | `getPlanningAreaInfo()` | Get planning area information | PlanningAreaInfo | | `setUserInput(selection, value)` | Set cell value (max 17 chars, use "*" prefix for scaling) | boolean | | `submitData()` | Submit pending changes | boolean | | `getDataLocking()` | Get data locking object | DataLocking | ### setUserInput Value Formatting | Format | Example | Description | |--------|---------|-------------| | Raw value | `"1234.567"` | Direct value using user formatting | | Scale factor | `"*0.5"` | Multiply existing value by 0.5 | | Scale factor | `"*2"` | Double the existing value | **Constraints**: Max 17 characters; scaled values max 7 digits. ### PlanningPublicVersion Object | Property/Method | Description | |----------------|-------------| | `id` | Version identifier | | `description` | Version description | | `getId()` | Get internal ID (for getData() calls) | | `getDisplayId()` | Get display ID (for UI dropdowns/texts) | | `isDirty()` | Check for unsaved changes | | `startEditMode()` | Start editing (creates private copy) | | `revert()` | Revert unpublished changes (returns boolean) | | `publish()` | Publish changes to public (returns boolean) | | `deleteVersion()` | Delete version (returns boolean, all except 'Actual') | | `copy(name, option, category?)` | Create private copy of version | ### PlanningPrivateVersion Object | Property/Method | Description | |----------------|-------------| | `id` | Version identifier | | `description` | Version description | | `getId()` | Get internal ID | | `getDisplayId()` | Get display ID | | `getOwnerID()` | Get user ID of version creator | | `isDirty()` | Check for unsaved changes | | `publish()` | Publish to source public version (returns boolean) | | `publishAs(newName, category)` | Publish as new public version (returns boolean) | | `revert()` | Discard private version (returns boolean) | ### Version Copy Method ```javascript copy(newVersionName: string, planningCopyOption: PlanningCopyOption, versionCategory?: PlanningCategory): boolean ``` ### PlanningCopyOptions Enumeration | Value | Description | |-------|-------------| | `PlanningCopyOptions.NoData` | Create new empty version | | `PlanningCopyOptions.AllData` | Copy all data from source | | `PlanningCopyOptions.PlanningArea` | Copy only planning area data | ### PlanningCategory Enumeration | Value | Description | |-------|-------------| | `PlanningCategory.Actual` | Historical/actual data (auto-created) | | `PlanningCategory.Planning` | General planning version | | `PlanningCategory.Budget` | Budget version | | `PlanningCategory.Forecast` | Forecast version | | `PlanningCategory.RollingForecast` | Rolling forecast version | ### DataLocking Object | Method | Description | |--------|-------------| | `getState(selection)` | Get lock state for cells (returns DataLockingState or undefined) | | `setState(selection, state)` | Set lock state on public versions only (returns boolean) | | `getOwners(selection)` | Get lock owners | **getState() Returns undefined when**: - Selection is invalid - Cell referenced by selection isn't found - Cell is in unknown state - Cell was created using "Add Calculation" at runtime **setState() Restrictions**: - Cannot set on private versions - Cannot set `DataLockingState.Mixed` - Multiple selections: applies to first selection only ### DataLockingState Enumeration | Value | Description | |-------|-------------| | `DataLockingState.Open` | Data can be edited by anyone | | `DataLockingState.Restricted` | Only owner can edit | | `DataLockingState.Locked` | No edits allowed | | `DataLockingState.Mixed` | Mixed states in selection (read-only, cannot set) | ### Example: Version Management ```javascript // Get all public versions var versions = Table_1.getPlanning().getPublicVersions(); for (var i = 0; i < versions.length; i++) { console.log(versions[i].id + ": " + versions[i].description); } // Start edit mode on public version var budget = Table_1.getPlanning().getPublicVersion("Budget_2025"); budget.startEditMode(); // Work with private version var privateVer = Table_1.getPlanning().getPrivateVersion(); if (privateVer && privateVer.isDirty()) { privateVer.publish(); Application.showMessage("Changes published successfully"); } ``` ### Example: Data Entry with Lock Check ```javascript // Get current selection var selection = Table_1.getSelections()[0]; // Check if locked var dataLocking = Table_1.getPlanning().getDataLocking(); var lockState = dataLocking.getState(selection); if (lockState === DataLockingState.Open) { // Set value (use "*" prefix for factor multiplication) Table_1.getPlanning().setUserInput(selection, "1000"); Table_1.getPlanning().submitData(); } else if (lockState === DataLockingState.Mixed) { Application.showMessage("Selection contains mixed lock states"); } else { Application.showMessage("Data is locked or restricted"); } ``` --- ## PlanningModel API Access planning model for master data operations. ### Methods | Method | Description | Parameters | |--------|-------------|------------| | `getMembers(dimId, options)` | Get dimension members | dimId: string, options: object | | `getMember(dimId, memberId)` | Get single member | dimId: string, memberId: string | | `createMembers(dimId, members)` | Create new members | dimId: string, members: MemberData[] | | `updateMembers(dimId, members)` | Update existing members | dimId: string, members: MemberData[] | | `deleteMembers(dimId, memberIds)` | Delete members | dimId: string, memberIds: string[] | ### PlanningModelMember Object ```javascript { id: string, // Member ID (required) description: string, // Display text parentId: string, // Parent in hierarchy hierarchies: object, // Hierarchy assignments properties: object, // Custom properties responsible: string[], // Responsible users readers: string[], // Read access users writers: string[], // Write access users dataLockingOwners: string[] // Data locking owners } ``` ### getMembers() Options ```javascript var members = PlanningModel_1.getMembers("LOCATION", { offset: "4", // 0-indexed (4 = 5th member) limit: "8" // Return 8 members }); ``` ### Important Notes for Members on the Fly **Dimension Type Restriction**: Members can only be added to dimensions of type **"Generic"**. NOT supported for: - Account - Version - Time - Organization **Refresh Required**: After creating/updating/deleting members, call refresh for changes to appear in widgets: ```javascript DataSource.refreshData(); // or Application.refreshData(); ``` **Large Models**: After adding members to very large models (millions of members), repeat refresh after a short delay as operations run asynchronously. **Custom Property Naming**: Use a prefix for custom properties to avoid conflicts (e.g., `"CUSTOM_Region"`). **Property Access Rights**: | Property | Required Right/Access | |----------|----------------------| | `dataLockingOwner` | Data Locking Ownership | | `responsible` | Responsible | | `readers` | Data Access Control | | `writers` | Data Access Control | ### Example: Master Data Management ```javascript // Get all cost centers with properties var costCenters = PlanningModel_1.getMembers("CostCenter", { limit: 5000 }); // Create new cost center with security PlanningModel_1.createMembers("CostCenter", [{ id: "CC_NEW_001", description: "New Cost Center", parentId: "CC_PARENT", properties: { "CUSTOM_Status": "Active", "CUSTOM_Region": "EMEA" }, responsible: ["USER1"], writers: ["USER1", "USER2"], dataLockingOwners: [{ id: "USER1", type: UserType.User }] }]); // Refresh to see new member Application.refreshData(); ``` ### UserType Enumeration | Value | Description | |-------|-------------| | `UserType.User` | Individual user | --- ## Data Actions API Execute data actions programmatically. ### Methods | Method | Description | |--------|-------------| | `execute()` | Execute synchronously | | `executeInBackground()` | Execute asynchronously | | `setParameterValue(paramId, value)` | Set parameter value | | `getParameterValue(paramId)` | Get parameter value | | `isAllMembersSelected(paramId)` | Check if all members selected | | `setAllMembersSelected(paramId, selected)` | Select/deselect all members | ### Events | Event | Description | |-------|-------------| | `onExecutionStatusUpdate` | Status changed during execution | | `onExecutionComplete` | Execution finished | ### DataActionTrigger Widget Events | Event | Description | |-------|-------------| | `onBeforeExecute` | Called when user clicks trigger. Return `true` to execute, `false` to cancel | ```javascript // DataActionTrigger onBeforeExecute event onBeforeExecute(): boolean { // Check data locks before execution var selection = Table_1.getSelections()[0]; var lockState = Table_1.getPlanning().getDataLocking().getState(selection); if (lockState === DataLockingState.Locked) { Application.showMessage("Cannot execute - data is locked"); return false; // Cancel execution } return true; // Allow execution } ``` --- ## Multi Actions API Execute multi actions for orchestrated operations. ### Methods | Method | Description | |--------|-------------| | `execute()` | Execute multi action | | `executeInBackground()` | Execute asynchronously | | `setParameterValue(paramId, value)` | Set cross-step parameter | | `getParameterValue(paramId)` | Get parameter value | | `isAllMembersSelected(paramId)` | Check if all members selected | | `setAllMembersSelected(paramId, selected)` | Select/deselect all members | --- ## Calendar Integration API Manage planning calendar tasks and processes programmatically. ### CalendarIntegration Main entry point for calendar operations. | Method | Description | |--------|-------------| | `getProcess(processId)` | Get calendar process | | `getTask(taskId)` | Get calendar task | | `createGeneralTask(config)` | Create general task | | `createReviewTask(config)` | Create review task | | `createCompositeTask(config)` | Create composite task | ### CalendarProcess | Method | Description | |--------|-------------| | `getId()` | Get process ID | | `getName()` | Get process name | | `getDescription()` | Get process description | | `getStatus()` | Get process status | | `getTasks()` | Get all tasks in process | | `activate()` | Activate process | | `complete()` | Mark process complete | ### CalendarEvent (Base for Tasks) | Method | Description | |--------|-------------| | `getId()` | Get event ID | | `getDescription()` | Get description | | `getStatus()` | Get current status | | `setProgress(progress)` | Set completion progress | | `getProgress()` | Get completion progress | | `getAssignees()` | Get assigned users | | `getDueDate()` | Get due date | ### CalendarCompositeTask Supports multi-reviewer approval workflows. | Method | Description | |--------|-------------| | `getReviewers()` | Get all reviewers | | `addReviewer(userId)` | Add reviewer | | `removeReviewer(userId)` | Remove reviewer | | `submit()` | Submit for review | | `approve()` | Approve task | | `reject(comment)` | Reject with comment | ### CalendarReviewTask | Method | Description | |--------|-------------| | `approve()` | Approve submission | | `reject(comment)` | Reject with comment | | `getReviewStatus()` | Get review status | --- ## BPC Planning Sequence API Integrate with SAP BPC planning sequences. ### BpcPlanningSequence | Method | Description | |--------|-------------| | `execute()` | Execute planning sequence | | `openPromptDialog()` | Open variable prompt dialog | | `getBpcPlanningSequenceDataSource()` | Get associated data source | | `setParameterValue(paramId, value)` | Set parameter value | | `getParameterValue(paramId)` | Get parameter value | ### BpcPlanningSequence Events | Event | Description | |-------|-------------| | `onBeforeExecute` | Called when user clicks trigger. Return `true` to execute, `false` to cancel | ```javascript // onBeforeExecute event handler onBeforeExecute(): boolean { // Validate before execution if (!isUserAuthorized()) { Application.showMessage("Not authorized"); return false; // Cancel execution } return true; // Allow execution } ``` --- ## Widget APIs ### Table Widget | Method | Description | |--------|-------------| | `getPlanning()` | Get planning object | | `getDataSource()` | Get data source | | `getSelections()` | Get selected cells | | `addDimensionToRows(dimId)` | Add dimension to rows | | `addDimensionToColumns(dimId)` | Add dimension to columns | | `removeDimension(dimId)` | Remove dimension | | `setVisible(visible)` | Show/hide table | | `setCompactDisplayEnabled(enabled)` | Enable compact display | | `setZeroSuppressionEnabled(enabled)` | Enable zero suppression | | `getNumberFormat()` | Get number format settings | | `rankBy(measure, order, count)` | Apply ranking | | `sortByValue(measure, order)` | Sort by measure | | `sortByMember(dimId, order)` | Sort by member | | `openNavigationPanel()` | Open navigation panel | | `closeNavigationPanel()` | Close navigation panel | | `getActiveDimensionProperties()` | Get active dimension properties | ### Chart Widget | Method | Description | |--------|-------------| | `getDataSource()` | Get data source | | `addDimension(dimId)` | Add dimension | | `removeDimension(dimId)` | Remove dimension | | `addMeasure(measureId)` | Add measure | | `removeMeasure(measureId)` | Remove measure | | `addMember(dimId, memberId)` | Add member to dimension | | `removeMember(dimId, memberId)` | Remove member | | `setVisible(visible)` | Show/hide chart | | `getNumberFormat()` | Get number format | | `setAxisScale(axis, scale)` | Set axis scale | | `getEffectiveAxisScale(axis)` | Get effective axis scale | | `getForecast()` | Get forecast data | | `getDataChangeInsights()` | Get variance insights | | `setQuickActionsVisibility(visible)` | Show/hide quick actions | | `setContextMenuVisible(visible)` | Show/hide context menu | | `openInNewStory()` | Open in new story | ### GeoMap Widget | Method | Description | |--------|-------------| | `getLayer(layerId)` | Get map layer | | `setContextMenuVisible(visible)` | Show/hide context menu | | `setQuickActionsVisibility(visible)` | Show/hide quick actions | | `openInNewStory()` | Open in new story | ### Input Controls **Dropdown**: | Method | Description | |--------|-------------| | `getSelectedKey()` | Get selected value | | `setSelectedKey(key)` | Set selected value | | `getSelectedText()` | Get selected text | | `addItem(key, text)` | Add item | | `removeItem(key)` | Remove item | | `removeAllItems()` | Clear all items | **ListBox** (Multi-select): | Method | Description | |--------|-------------| | `getSelectedKeys()` | Get selected values | | `setSelectedKeys(keys)` | Set selected values | | `getSelectedTexts()` | Get selected texts | **CheckboxGroup**: | Method | Description | |--------|-------------| | `getSelectedKeys()` | Get checked items | | `setSelectedKeys(keys)` | Set checked items | **RadioButtonGroup**: | Method | Description | |--------|-------------| | `getSelectedKey()` | Get selected option | | `setSelectedKey(key)` | Set selected option | **Slider/RangeSlider**: | Method | Description | |--------|-------------| | `getValue()` / `getRange()` | Get current value | | `setValue(val)` / `setRange(range)` | Set value | **Switch**: | Method | Description | |--------|-------------| | `isOn()` | Check if switch is on | | `setOn(on)` | Set switch state | ### Container Widgets **Panel/FlowPanel**: | Method | Description | |--------|-------------| | `showBusyIndicator()` | Show busy indicator | | `hideBusyIndicator()` | Hide busy indicator | | `moveWidget(widget, position)` | Move widget | **PageBook**: | Method | Description | |--------|-------------| | `getPage(pageId)` | Get specific page | | `setSelectedKey(pageId)` | Switch to page | | `getSelectedKey()` | Get current page | **TabStrip**: | Method | Description | |--------|-------------| | `getTab(tabId)` | Get specific tab | | `setSelectedKey(tabId)` | Switch to tab | | `getSelectedKey()` | Get current tab | **Popup**: | Method | Description | |--------|-------------| | `open()` | Open popup | | `close()` | Close popup | | `setTitle(title)` | Set popup title | --- ## Advanced Analytics APIs ### DataChangeInsights Change detection and trend analysis. | Method | Description | |--------|-------------| | `compareApplicationStateWithSnapshot(date)` | Compare current with snapshot | | `compareSnapshots(date1, date2)` | Compare two snapshots | | `saveSnapshot()` | Save current state as snapshot | | `listRecentSnapshotDates()` | List available snapshots | | `openSubscriptionDialog()` | Open subscription dialog | | `isRunBySnapshotGeneration()` | Check if run by snapshot | ### SearchToInsight Natural language analytics. | Method | Description | |--------|-------------| | `openDialog()` | Open search dialog | | `closeDialog()` | Close search dialog | | `applySearchToChart(query, chart)` | Apply search to chart | **SearchToInsightMode**: `Simple`, `Advanced` ### SmartDiscovery Automated insight generation. | Method | Description | |--------|-------------| | `setDimensionSettings(settings)` | Configure dimensions | | `setMeasureSettings(settings)` | Configure measures | | `setFilterSettings(settings)` | Configure filters | | `setPanelVisible(visible)` | Show/hide panel | ### Bookmarks **BookmarkSet**: | Method | Description | |--------|-------------| | `save(name)` | Save new bookmark | | `apply(bookmarkId)` | Apply bookmark | | `getAll()` | Get all bookmarks | | `deleteBookmark(bookmarkId)` | Delete bookmark | | `getAppliedBookmark()` | Get currently applied | | `isSameAsApplicationState(bookmarkId)` | Compare with current | --- ## Export APIs ### ExportPdf | Method | Description | |--------|-------------| | `setFileName(name)` | Set output file name | | `setPageSize(size)` | Set page size (A4, A3, Letter, etc.) | | `setPageOrientation(orientation)` | Portrait or Landscape | | `setHeaderText(text)` | Set header text | | `setFooterText(text)` | Set footer text | | `exportReport()` | Export as PDF | | `exportView()` | Export current view | ### ExportExcel | Method | Description | |--------|-------------| | `setFileName(name)` | Set output file name | | `isExportFormattedValues()` | Check if exporting formatted | | `setIndentedHierarchy(enabled)` | Enable indented hierarchy | | `exportReport()` | Export as Excel | ### ExportCsv | Method | Description | |--------|-------------| | `setFileName(name)` | Set output file name | | `setScope(scope)` | Set export scope | | `isHierarchyLevelsInIndividualCells()` | Check hierarchy export | | `exportReport()` | Export as CSV | ### ExportPptx | Method | Description | |--------|-------------| | `setFileName(name)` | Set output file name | | `setPageRange(range)` | Set pages to export | | `isAppendixVisible()` | Check appendix setting | | `exportView()` | Export as PowerPoint | --- ## Utility Classes ### ConvertUtils | Method | Description | |--------|-------------| | `stringToInteger(str)` | Convert string to integer | | `stringToNumber(str)` | Convert string to float | | `numberToString(num)` | Convert number to string | ### ArrayUtils | Method | Description | |--------|-------------| | `create(type, size)` | Create typed array | ### StringUtils | Method | Description | |--------|-------------| | `replaceAll(str, search, replace)` | Replace all occurrences | ### NavigationUtils | Method | Description | |--------|-------------| | `openStory(storyId)` | Open another story | | `createStoryUrl(storyId)` | Create story URL | | `openApplication(appId)` | Open another application | | `createApplicationUrl(appId)` | Create application URL | | `openDataAnalyzer(config)` | Open Data Analyzer | | `openUrl(url)` | Open external URL | ### DateFormat ```javascript // Format date var formatted = DateFormat.format(new Date(), "yyyy-MM-dd"); ``` ### NumberFormat | Property | Values | |----------|--------| | `scaleUnit` | Thousand, Million, Billion, AutoFormatted, Unformatted | | `scaleFormat` | Short, Long, Default | | `signDisplay` | Default, MinusAsPrefix, MinusAsParentheses, PlusMinusAsPrefix | ### TimeRange | Method | Description | |--------|-------------| | `create(start, end, granularity)` | Create time range | | `createMonthRange(year, month)` | Create month range | | `createWeekRange(year, week)` | Create week range | | `createYearRange(year)` | Create year range | **Granularity**: Day, Month, Year, Hour, Minute, Second, Quarter, HalfYear, Millisecond --- ## Data Types and Structures ### DimensionInfo ```javascript { id: string, description: string, modelId: string } ``` ### MemberInfo ```javascript { id: string, displayId: string, description: string, dimensionId: string, properties: object } ``` ### ResultMemberInfo ```javascript { id: string, parentId: string, description: string, properties: object } ``` ### DataCell ```javascript { rawValue: number, formattedValue: string } ``` ### Filter Values **SingleFilterValue**: ```javascript { value: string, description: string, exclude: boolean } ``` **MultipleFilterValue**: ```javascript { values: string[], descriptions: string[], exclude: boolean } ``` **RangeFilterValue**: ```javascript { from: any, to: any, greater: boolean, greaterOrEqual: boolean, less: boolean, lessOrEqual: boolean } ``` --- ## Enumerations ### ApplicationMode `View`, `Present`, `Embed` ### ApplicationMessageType `Info`, `Success`, `Warning`, `Error` ### MemberAccessMode `MasterData`, `BookedValues` ### DataLockingState `Open`, `Restricted`, `Locked`, `Mixed` ### SortOrder `Ascending`, `Descending`, `Default` ### RankOrder `Top`, `Bottom` ### ForecastType `Auto`, `None`, `TripleExponentialSmoothing` ### ExportScope `PointOfView`, `All` ### PageOrientation `Portrait`, `Landscape` ### PageSize `A4`, `A3`, `A5`, `Letter`, `Legal`, `Auto` ### MemberDisplayMode `DisplayId`, `Description`, `DisplayIdAndDescription` ### Direction `Horizontal`, `Vertical` ### DeviceOrientation `Angle0`, `Angle90Clockwise`, `Angle180`, `Angle90Counterclockwise` ### LayoutUnit `Pixel`, `Percent`, `Grid`, `Auto` --- ## Quick Reference Cheat Sheet ```javascript // === APPLICATION === Application.showBusyIndicator(); Application.hideBusyIndicator(); Application.showMessage("text", ApplicationMessageType.Success); Application.getUserInfo(); Application.getTeamsInfo(); Application.sendNotification({title: "Alert", receivers: ["USER1"]}); // === DATA SOURCE === Table_1.getDataSource().getDimensions(); Table_1.getDataSource().getHierarchies("CostCenter"); Table_1.getDataSource().getMembers("Dim", {accessMode: MemberAccessMode.BookedValues}); Table_1.getDataSource().setDimensionFilter("Dim", "value"); Table_1.getDataSource().removeDimensionFilter("Dim"); Table_1.getDataSource().setRefreshPaused(true); // === PLANNING === Table_1.getPlanning().isEnabled(); Table_1.getPlanning().getPublicVersions(); Table_1.getPlanning().getPrivateVersion(); Table_1.getPlanning().getPlanningAreaInfo(); Table_1.getPlanning().setUserInput(selection, "value"); Table_1.getPlanning().submitData(); // === VERSION MANAGEMENT === var publicVer = Table_1.getPlanning().getPublicVersion("Budget"); publicVer.startEditMode(); publicVer.isDirty(); publicVer.publish(); var privateVer = Table_1.getPlanning().getPrivateVersion(); privateVer.publish(); privateVer.publishAs("Budget_v2", "Revised Budget"); // === DATA LOCKING === var dataLocking = Table_1.getPlanning().getDataLocking(); var state = dataLocking.getState(selection); // States: Open, Restricted, Locked, Mixed dataLocking.setState(selection, DataLockingState.Locked); // === PLANNING MODEL === PlanningModel_1.getMembers("Dim"); PlanningModel_1.createMembers("Dim", [{id: "X", description: "Y"}]); PlanningModel_1.updateMembers("Dim", [{id: "X", description: "Z"}]); PlanningModel_1.deleteMembers("Dim", ["X"]); // === DATA ACTIONS === DataAction_1.setParameterValue("Param", "Value"); DataAction_1.execute(); DataAction_1.executeInBackground(); // === MULTI ACTIONS === MultiAction_1.setParameterValue("Param", "Value"); MultiAction_1.execute(); // === EXPORTS === ExportPdf.setFileName("report"); ExportPdf.setPageOrientation(PageOrientation.Landscape); ExportPdf.exportReport(); // === CONVERSIONS === ConvertUtils.stringToInteger("123"); ConvertUtils.numberToString(123); ``` --- **Documentation Links**: - Full API Reference (2025.23): [https://help.sap.com/doc/958d4c11261f42e992e8d01a4c0dde25/2025.23/en-US/index.html](https://help.sap.com/doc/958d4c11261f42e992e8d01a4c0dde25/2025.23/en-US/index.html) - SAP Analytics Cloud Help: [https://help.sap.com/docs/SAP_ANALYTICS_CLOUD](https://help.sap.com/docs/SAP_ANALYTICS_CLOUD) - SAP Community: [https://community.sap.com/topics/sap-analytics-cloud](https://community.sap.com/topics/sap-analytics-cloud)