Files
gh-secondsky-sap-skills-ski…/references/development-environment.md
2025-11-30 08:55:22 +08:00

6.1 KiB

SAP HANA CLI - Development Environment Reference

Source: https://github.com/SAP-samples/hana-developer-cli-tool-example

Configuration for development environments, testing, and multi-database support.


DevContainer Setup

The repository includes VS Code DevContainer configuration for consistent development environments.

Container Base

# Base image: Node.js 22 on Debian Buster
FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:0-22-buster

System Packages Installed

# Cloud Foundry CLI
apt-get install cf8-cli

# Utilities
apt-get install git jq

Global npm Packages

npm install -g @ui5/cli
npm install -g @sap/cds-dk
npm install -g yo
npm install -g @sap/generator-hdb-project
npm install -g @sap/generator-fiori
npm install -g typescript

VS Code Extensions (21 total)

Category Extensions
SAP Tools CDS Language Support, Fiori Tools, SAP UX Pack, HANA Driver, XML Toolkit
Development ESLint, Beautify, IntelliCode, REST Client
Productivity GitLens, Bracket Pair Colorizer, Path IntelliSense
Other Yeoman UI, Version Lens, VS Code Icons

Port Forwarding

"forwardPorts": [4004, 3010]
  • 4004: CAP default server port
  • 3010: hana-cli UI default port

Post-Creation Setup

bash -i install-btp.sh

Installs BTP CLI from SAP GitHub repository.


Multi-Database Support

The hana-cli supports multiple database backends through abstraction.

Database Adapters

File Database Purpose
hanaCDS.js SAP HANA CDS-based connection via CAP
hanaDirect.js SAP HANA Direct connection via hdb
postgres.js PostgreSQL PostgreSQL backend
sqlite.js SQLite SQLite backend

Backend Selection

Database backend is selected based on:

  1. Connection configuration
  2. CDS profile settings
  3. Command-specific requirements

Database-Specific Commands

Command Purpose
tablesPG List tables (PostgreSQL)
tablesSQLite List tables (SQLite)
tables List tables (HANA default)

XS API Support (On-Premise)

For on-premise XSA environments, additional utilities are available.

XS Configuration Functions

Function Purpose
getCFConfig() Read ~/.xsconfig
getCFOrg() Get target organization
getCFSpace() Get target space
getCFTarget() Get API endpoint

XS Service Discovery

Function Purpose
getServices() List all services
getServiceGUID(service) Get service GUID
getServicePlans(guid) Get service plans
getHANAInstances() List HANA instances
getHDIInstances() List HDI instances

SQL Injection Prevention

The tool includes built-in SQL injection protection.

Validation Functions

Function Purpose
isAcceptableParameter(value, maxToken) Validate SQL parameter
isAcceptableQuotedParameter(value) Validate quoted strings
escapeDoubleQuotes(value) Escape " characters
escapeSingleQuotes(value) Escape ' characters

Security Features

  • Comment detection (-- and /* */)
  • Quote nesting tracking
  • Token counting
  • Separator boundary enforcement

Testing Configuration

Test Framework

  • Framework: Mocha
  • Reporter: Mochawesome (HTML reports)
  • Timeout: 10 seconds
  • Parallel: Enabled

Configuration (.mocharc.json)

{
  "timeout": "10s",
  "parallel": true,
  "reporter": "mochawesome",
  "require": ["./tests/helper.js", "mochawesome/register"]
}

Test Files

Test Purpose
SystemInfo.Test.js System info commands
btpInfo.Test.js BTP info commands
btpSubs.Test.js BTP subscriptions
callProcedure.Test.js Procedure execution
status.Test.js Connection status
version.Test.js Version info

Fiori LaunchPad Configuration

Tile Groups

List Objects (9 tiles):

  • Containers, Data Types, Functions, Indexes
  • Schemas, Tables, Table Inspection
  • Views, View Inspection

Admin (3 tiles):

  • Features, Feature Usage, SQL Query

CF/XS (5 tiles):

  • HDI, SBSS, Schema, SecureStore, UPS instances

Applications

App Path Purpose
systemInfo /systemInfo System dashboard
readMe /readMe Documentation
changeLog /changeLog Version history
massConvert /massConvert Batch conversion

Version Checking

Node.js Version Validation

// Reads engines.node from package.json
// Current requirement: ≥20.19.0

Update Notifications

The CLI includes update notification via update-notifier package.


UI5 Configuration

ui5.yaml Settings

specVersion: "1.0"
type: application
metadata:
  name: test1

server:
  customMiddleware:
    - name: fiori-tools-proxy
      configuration:
        backend:
          - path: /sap/opu/odata
            url: [http://localhost](http://localhost)
        ui5:
          path:
            - /resources
            - /test-resources
          url: [https://ui5.sap.com](https://ui5.sap.com)

Theme Support

  • Light: sap_horizon
  • Dark: sap_horizon_dark
  • Legacy: sap_fiori_3_dark

Building from Source

Prerequisites

# Node.js 20.19.0 or higher
node --version

# Remove SAP registry if set
npm config delete @sap:registry

Installation

# Clone repository
git clone [https://github.com/SAP-samples/hana-developer-cli-tool-example](https://github.com/SAP-samples/hana-developer-cli-tool-example)

# Install dependencies
cd hana-developer-cli-tool-example
npm install

# Link globally
npm link

Using DevContainer

  1. Open in VS Code with Remote-Containers extension
  2. Select "Reopen in Container"
  3. Wait for container build
  4. Run npm install && npm link

*Reference: https://github.com/SAP-samples/hana-developer-cli-tool-example*