Files
gh-secondsky-sap-skills-ski…/references/api-application.md
2025-11-30 08:55:33 +08:00

12 KiB

Application API Reference

Complete reference for the Application object and utility APIs in SAP Analytics Cloud scripting.

Source: Analytics Designer API Reference 2025.14


Table of Contents

  1. Application Object
  2. User Feedback
  3. Application Information
  4. Navigation
  5. Export Functions
  6. Theme and Styling
  7. Application Events
  8. Utility APIs
  9. Enumerations

Application Object

The global Application object provides access to application-level functionality.

// Always available - no need to get reference
Application.showBusyIndicator();

User Feedback

showBusyIndicator()

Shows loading indicator overlay.

Application.showBusyIndicator();

// Perform long operation
await someAsyncOperation();

Application.hideBusyIndicator();

hideBusyIndicator()

Hides loading indicator.

Application.hideBusyIndicator();

showMessage(type, message)

Displays message to user.

Parameters:

Parameter Type Description
type ApplicationMessageType Message type
message string Message text
// Info message
Application.showMessage(ApplicationMessageType.Info, "Operation completed");

// Success message
Application.showMessage(ApplicationMessageType.Success, "Data saved");

// Warning message
Application.showMessage(ApplicationMessageType.Warning, "Unsaved changes");

// Error message
Application.showMessage(ApplicationMessageType.Error, "Operation failed");

Confirm Dialog Pattern

// Use popup/dialog for confirmations
// Create Popup_Confirm with Yes/No buttons

Button_Delete.onClick = function() {
    Popup_Confirm.open();
};

Button_Yes.onClick = function() {
    // Perform action
    performDelete();
    Popup_Confirm.close();
};

Button_No.onClick = function() {
    Popup_Confirm.close();
};

Application Information

getInfo()

Returns application metadata.

var info = Application.getInfo();
// Returns: ApplicationInfo object
// - id: string
// - name: string
// - description: string

getUserInfo()

Returns current user information.

var user = Application.getUserInfo();
// Returns: UserInfo object
// - id: string
// - displayName: string
// - email: string

Example:

var user = Application.getUserInfo();
Text_Welcome.setText("Welcome, " + user.displayName);

getRolesInfo()

Returns user roles.

var roles = Application.getRolesInfo();

getMode()

Returns current application mode.

var mode = Application.getMode();
// Returns: ApplicationMode enum value
// - ApplicationMode.View
// - ApplicationMode.Present
// - ApplicationMode.Embed

Example: Conditional Display:

if (Application.getMode() === ApplicationMode.Present) {
    Button_Edit.setVisible(false);
}

Navigation

NavigationUtils

Navigate to other applications or stories.

openApplication(appId, options)

Opens another analytic application.

NavigationUtils.openApplication("APP_ID", {
    mode: ApplicationMode.View,
    newWindow: true
});

openStory(storyId, options)

Opens a story.

NavigationUtils.openStory("STORY_ID", {
    newWindow: false
});

createApplicationUrl(appId, parameters)

Creates URL for an application with parameters.

var url = NavigationUtils.createApplicationUrl("APP_ID", {
    p_year: "2024",
    p_region: "EMEA"
});
// Returns: URL string with encoded parameters

Page Navigation (Within Application)

// Get active page
var page = Application.getActivePage();

// Set active page
Application.setActivePage("Page_Detail");

Tab Navigation

// Switch tab
TabStrip_1.setSelectedTab("Tab_Chart");

Export Functions

Export PDF

Application.export(ExportType.PDF, {
    scope: ExportScope.All,
    header: "Sales Report",
    footer: "Confidential - Page {page}",
    orientation: "landscape",
    paperSize: "A4"
});

Export Excel

Application.export(ExportType.Excel, {
    scope: ExportScope.All,
    includeHierarchy: true,
    fileName: "SalesData"
});

Export CSV (Widget Level)

Table_1.export(ExportType.CSV, {
    fileName: "TableExport"
});

Export PowerPoint

Application.export(ExportType.PowerPoint, {
    scope: ExportScope.All,
    header: "Quarterly Review"
});

Theme and Styling

getTheme()

Returns current theme.

var theme = Application.getTheme();
// Returns: "sap_fiori_3" | "sap_fiori_3_dark" | etc.

setTheme(themeId)

Sets application theme.

Application.setTheme("sap_fiori_3_dark");

getCssClass()

Returns application CSS class.

var cssClass = Application.getCssClass();

setCssClass(className)

Sets application CSS class.

Application.setCssClass("myCustomTheme");

Application Events

onInitialization

Fires once when application loads.

Application.onInitialization = function() {
    // Initialize application state
    // BEST PRACTICE: Keep this empty for performance
};

Best Practice: Avoid heavy operations. Use:

  • URL parameters for initial values
  • Static widget filters
  • Background loading for hidden widgets

onResize

Fires when application is resized.

Application.onResize = function(width, height) {
    console.log("New size:", width, height);

    // Adjust layout
    if (width < 768) {
        Chart_1.setVisible(false);
        Table_1.setVisible(true);
    } else {
        Chart_1.setVisible(true);
        Table_1.setVisible(true);
    }
};

onOrientationChange

Fires on mobile when orientation changes.

Application.onOrientationChange = function(orientation) {
    console.log("Orientation:", orientation);
    // "portrait" | "landscape"
};

Utility APIs

ConvertUtils

Type conversion utilities.

// String to Integer
var num = ConvertUtils.stringToInteger("42");
// Returns: 42

// Number to String
var str = ConvertUtils.numberToString(42);
// Returns: "42"

// String to Number (with decimals)
var decimal = ConvertUtils.stringToNumber("42.5");
// Returns: 42.5

NumberFormat

Number formatting options.

var format = {
    decimalPlaces: 2,
    scalingFactor: 1000,      // Display in thousands
    showSign: true,
    groupingSeparator: ","
};

DateFormat

Date formatting utilities.

// Format date
var formatted = DateFormat.format(dateValue, "yyyy-MM-dd");
// Returns: "2024-01-15"

// Parse date
var parsed = DateFormat.parse("2024-01-15", "yyyy-MM-dd");

StringUtils

String manipulation.

// Available utilities for string operations
var trimmed = myString.trim();
var upper = myString.toUpperCase();
var lower = myString.toLowerCase();

ArrayUtils

Array operations.

// Standard JavaScript array methods
var arr = [1, 2, 3, 4, 5];

// Filter
var filtered = arr.filter(function(item) {
    return item > 2;
});

// Map
var doubled = arr.map(function(item) {
    return item * 2;
});

// Find
var found = arr.find(function(item) {
    return item === 3;
});

Enumerations

ApplicationMessageType

ApplicationMessageType.Info      // Informational
ApplicationMessageType.Success   // Success/confirmation
ApplicationMessageType.Warning   // Warning
ApplicationMessageType.Error     // Error

ApplicationMode

ApplicationMode.View      // Normal view mode
ApplicationMode.Present   // Presentation mode
ApplicationMode.Embed     // Embedded in another app

ExportType

ExportType.PDF            // PDF export
ExportType.Excel          // Excel export
ExportType.CSV            // CSV export
ExportType.PowerPoint     // PowerPoint export

ExportScope

ExportScope.All           // All content
ExportScope.PointOfView   // Current point of view only

Debugging Helpers

console.log()

Print debug information.

console.log("Debug message");
console.log("Variable:", myVariable);
console.log("Object:", JSON.stringify(myObject));

Access Console:

  1. Run application
  2. Press F12 (Developer Tools)
  3. Go to Console tab
  4. Look in "sandbox.worker.main.*.js"

Debug Mode

Enable enhanced debugging:

// Add to URL
// ?debug=true

// Or at end of existing URL
// ;debug=true

debugger Statement

Pause execution for step-through debugging.

debugger;  // Execution pauses here
var value = someCalculation();

Performance Logging

// Add URL parameter
// ?APP_PERFORMANCE_LOGGING=true

// In console
window.sap.raptr.getEntriesByMarker("(Application)")
    .filter(e => e.entryType === 'measure')
    .sort((a,b) => (a.startTime + a.duration) - (b.startTime + b.duration));

Complete Examples

Example 1: User-Aware Application

Application.onInitialization = function() {
    // Get user info
    var user = Application.getUserInfo();
    Text_Welcome.setText("Welcome, " + user.displayName);

    // Check roles
    var roles = Application.getRolesInfo();
    var isAdmin = roles.some(function(role) {
        return role.id === "ADMIN";
    });

    // Show admin controls if authorized
    Panel_AdminControls.setVisible(isAdmin);
};

Example 2: Responsive Layout

Application.onResize = function(width, height) {
    // Mobile layout (< 768px)
    if (width < 768) {
        Chart_1.setVisible(false);
        Table_1.setVisible(true);
        Button_ToggleView.setVisible(true);
    }
    // Tablet layout (768-1024px)
    else if (width < 1024) {
        Chart_1.setVisible(true);
        Table_1.setVisible(false);
        Button_ToggleView.setVisible(true);
    }
    // Desktop layout (>= 1024px)
    else {
        Chart_1.setVisible(true);
        Table_1.setVisible(true);
        Button_ToggleView.setVisible(false);
    }
};

Example 3: Export Report

Button_ExportPDF.onClick = function() {
    var year = Dropdown_Year.getSelectedKey();
    var region = Dropdown_Region.getSelectedKey();

    Application.export(ExportType.PDF, {
        scope: ExportScope.All,
        header: "Sales Report - " + year + " - " + region,
        footer: "Generated on " + new Date().toLocaleDateString() + " | Page {page}",
        orientation: "landscape",
        paperSize: "A4"
    });
};

Button_ExportExcel.onClick = function() {
    Table_1.export(ExportType.Excel, {
        fileName: "SalesData_" + new Date().toISOString().split('T')[0]
    });
};

Example 4: Navigation with Parameters

// Navigate to detail application
Button_ViewDetails.onClick = function() {
    var selections = Table_1.getSelections();
    if (selections.length > 0) {
        var productId = selections[0]["Product"];
        var year = Dropdown_Year.getSelectedKey();

        NavigationUtils.openApplication("PRODUCT_DETAIL_APP", {
            mode: ApplicationMode.View,
            newWindow: true,
            parameters: {
                p_product: productId,
                p_year: year
            }
        });
    } else {
        Application.showMessage(
            ApplicationMessageType.Warning,
            "Please select a product first"
        );
    }
};

Official Reference: https://help.sap.com/doc/958d4c11261f42e992e8d01a4c0dde25/release/en-US/index.html