Skip to content
Development
Command

/sac-planning

Planning operation: publish, copy, lock, workflow, version, dataaction

From plugin
sap-skills
40469 skills31 agents69 commands8 MCP
Install
$ npx -y skills add secondsky/sap-skills --agent claude-code

How it fires

How this command gets triggered: by you, by Claude, or both.

  • Fires itselfClaude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/sac-planning

Context preview

What this command does when you run it.

Planning operation: publish, copy, lock, workflow, version, dataaction

Command definition

sac-planning.md
name: sac-planning
description: Generate SAC planning operation templates and workflows
allowed-tools:
  - Read
argument-hint: "<publish|copy|lock|workflow|version|dataaction>"
arguments:
  - name: operation
    description: "Planning operation: publish, copy, lock, workflow, version, dataaction"
    required: true

Shell Snippet Notes

  • Shell snippets assume Bash on Linux/macOS, WSL2, or Git Bash.
  • Install the command-specific tooling shown near each snippet before running it.
  • Confirm before running commands that delete files, change ownership, deploy, or modify remote systems.

Output Contract

Return planning API guidance, version/data-locking caveats, safe script examples, and pending SAC tenant checks. Default to read-only guidance; do not publish planning data or write files unless the user explicitly confirms the target.

Generate SAC planning operation templates based on the requested operation type.

Available Operations

publish

Publish private version data to public version.

copy

Copy data between versions (private to public, public to private).

lock

Data locking patterns for planning input control.

workflow

Complete planning workflow with status management.

version

Version management (create, get, delete versions).

dataaction

Data action integration with scripts.

---

Operation: publish

/*
 * Publish Private to Public Version
 * Purpose: Submit planning data for approval/consolidation
 * Prerequisites: User has private version with changes
 */

function publishPlanningData() {
    var planning = Table_Planning.getPlanning();

    Application.showBusyIndicator("Publishing planning data...");

    try {
        // Verify private version exists
        var privateVersion = planning.getPrivateVersion();

        if (privateVersion === null) {
            Application.showMessage(
                ApplicationMessageType.Warning,
                "No private version found. Nothing to publish."
            );
            return;
        }

        // Check for unsaved changes (if applicable)
        // planning.hasChanges() - in some versions

        // Publish to public version
        planning.publish();

        Application.showMessage(
            ApplicationMessageType.Success,
            "Planning data published successfully"
        );

        // Refresh view to show updated data
        Table_Planning.getDataSource().refreshData();

    } catch (error) {
        Application.showMessage(
            ApplicationMessageType.Error,
            "Publish failed: " + error.message
        );
        console.error("Publish error:", error);
    } finally {
        Application.hideBusyIndicator();
    }
}

// Call on button click
publishPlanningData();

---

Operation: copy

/*
 * Copy Data Between Versions
 * Purpose: Initialize private version from public, or reverse
 */

// Copy PUBLIC to PRIVATE (initialize working copy)
function copyPublicToPrivate() {
    var planning = Table_Planning.getPlanning();

    Application.showBusyIndicator("Creating working copy...");

    try {
        // Create private version if doesn't exist
        var privateVersion = planning.getPrivateVersion();
        if (privateVersion === null) {
            planning.createPrivateVersion();
        }

        // Copy data from public to private
        planning.copyFromPublicVersion();

        Application.showMessage(
            ApplicationMessageType.Success,
            "Working copy created from public data"
        );

        Table_Planning.getDataSource().refreshData();

    } catch (error) {
        Application.showMessage(
            ApplicationMessageType.Error,
            "Copy failed: " + error.message
        );
    } finally {
        Application.hideBusyIndicator();
    }
}

// Copy PRIVATE to PUBLIC (alternative to publish)
function copyPrivateToPublic() {
    var planning = Table_Planning.getPlanning();

    Application.showBusyIndicator("Copying to public version...");

    try {
        planning.copyToPublicVersion();

        Application.showMessage(
            ApplicationMessageType.Success,
            "Data copied to public version"
        );

        Table_Planning.getDataSource().refreshData();

    } catch (error) {
        Application.showMessage(
            ApplicationMessageType.Error,
            "Copy failed: " + error.message
        );
    } finally {
        Application.hideBusyIndicator();
    }
}

---

Operation: lock

/*
 * Data Locking Pattern
 * Purpose: Control concurrent access to planning data
 */

// Check lock status
function checkLockStatus() {
    var planning = Table_Planning.getPlanning();
    var lockInfo = planning.getLockInfo();

    if (lockInfo.isLocked) {
        if (lockInfo.lockedBy === Application.getUserInfo().id) {
            console.log("Data is locked by current user");
            return "owned";
        } else {
            console.log("Data is locked by: " + lockInfo.lockedBy);
            Application.showMessage(
                ApplicationMessageType.Warning,
                "Data is locked by: " + lockInfo.lockedByName
            );
            return "other";
        }
    }
    return "unlocked";
}

// Acquire lock before editing
function acquireLock() {
    var planning = Table_Planning.getPlanning();

    var status = checkLockStatus();
    if (status === "other") {
        return false; // Cannot acquire, locked by another user
    }

    if (status === "unlocked") {
        try {
            planning.setLock(true);
            Application.showMessage(
                ApplicationMessageType.Info,
                "Data locked for editing"
            );
        } catch (error) {
            Application.showMessage(
                ApplicationMessageType.Error,
                "Failed to acquire lock: " + error.message
            );
            return false;
        }
    }

    return true;
}

// Release lock when don
Read more
Ships withsap-skills

40 SAP development plugins with evidence-tracked verification SAP development plugins for AI coding assistants, with public-source or package-registry verification tracked where available.

Get the whole plugin