Skip to content
On this page

Changelog

May 2023

Added

  • [cds-dk@6.8.0] cds add file-based-messaging adds configuration for file-based messaging (Node.js).
  • [cds-dk@6.8.0] cds add redis-messaging adds configuration for Redis messaging (Node.js).
  • [cds-dk@6.8.0] cds add enterprise-messaging-shared adds configuration for Event Mesh support with kind = 'enterprise-messaging-shared' (Node.js).
  • [cds-dk@6.8.0] cds import now supports OData V4 EDMX file containing multiple Schemas with single EntityContainer.
  • [cds-dk@6.8.0] cds import now supports importing of AsyncAPI documents.
  • [cds-dk@6.8.0] cds login -m <clientid>[:<key>] now supports X.509 (mTLS) credential-type in XSUAA binding of @sap/cds-mtxs.
  • [vscode-cds@6.8.0] User setting cds.typeGenerator.localInstallationOnly has been added to allow more finely grained control for the user over the resolution of the type generation package
  • [vscode-cds@6.8.0] New command Record Traces for Support Ticket to assist creation of support tickets for CDS editor issues
  • [vscode-cds@6.8.0] CAP notebooks: new cell type CDS Server, which is also executable for CDS background processes.
  • [cds.java@1.34.1] Added support for replacing the $namespace placeholder in queue configuration values.
  • [cds.java@1.34.0] A new starter module cds-starter-k8s has been introduced which bundles useful CAP dependencies for the Kubernetes/Kyma environment.
  • [cds.java@1.34.0] The CDS Maven archetype now supports the kubernetes and k8s values as additional option in the targetPlatform parameter.
  • [cds.java@1.34.0] Introduced hybrid IAS / XSUAA support based on cds-feature-identity. In hybrid mode the server accepts both IAS and XSUAA tokens. No automatic conversion between token types occurs. This mode is enabled, when both an IAS and XSUAA binding are present.
  • [cds.java@1.34.0] Command main methods like Deploy or Subscribe no longer initialize adapters and background tasks like for example the draft GC, event subscriptions or persistent outbox processing.
  • [cds.java@1.34.0] The tenant upgrade triggered through DeploymentService.upgrade now includes the tenant upgrade for multitenant Event Mesh services.
  • [cds.java@1.34.0] The OData V4 adapter now supports open types.
  • [cds.java@1.34.0] Writing tenant-specific audit logs to the AuditLog V2 service no longer requires the tenant subdomain to be known.
  • [cds.java@1.34.0] Kafka service bindings using basic authentication are now supported.
  • [cds@6.8.0] Global cds-dk version is now included in tabular output of cds v -i.
  • [cds@6.8.0] Audit logging support for OAuth2 Plan
  • [cds@6.8.0] Feature flag to limit the max number of requests in a Odata batch request. The max number can be specified with a number in cds.odata.batch_limit.
  • [cds@6.8.0] Custom authentication in enterprise-messaging
  • [cds@6.8.0] Requests with lambda expressions are rejected by remote services of kind odata-v2
  • [cds@6.8.0] cds build ignores invalid entries in undeploy.json
  • [cds@6.8.0] New minorUnit element in sap.common.Currencies for how many fractions the minor unit takes (e.g. 0, or 2). See https://www.npmjs.com/package/@sap/cds-common-content for matching content.
  • [cds@6.8.0] Support for $user.<attr> is null and $user.<attr> is not null in @restrict.where. is null matches null and [], is not null matches arrays with at least one entry as well as != null if no array.
  • [cds@6.8.0] Plugins are now also fetched from devDependencies, unless NODE_ENV === 'production'
  • [cds@6.8.0] Plugins can now provide cds configurations in their package.json.
  • [cds@6.8.0] Support in OData entities with special letters (like ó,â,ü) in names.
  • [cds-mtxs@1.8.0] Token endpoint can now handle UAA binding with X.509 (mTLS) authentication. On CLI side, this requires @sap/cds-dk@>=6.8.0.

Changed

  • [cds-dk@6.8.0] cds init uses latest Maven Java archetype version 1.34.0 for creating Java projects.
  • [vscode-cds@6.8.1] CAP notebooks: improved Java cell example notebook
  • [vscode-cds@6.8.0] Welcome page will be shown based on page's hash code
  • [vscode-cds@6.8.0] CDS type generation will now be enabled by default
  • [vscode-cds@6.8.0] Improved CAP Notebooks Welcome page (better layout, responsive icons, fixed buttons).
  • [vscode-cds@6.8.0] Changing some CDS user settings required a manual restart of the IDE. This is no longer necessary
  • [vscode-cds@6.8.0] Minimum VSCode version is now 1.76.0
  • [cds.java@1.34.0] Removed hybrid IAS / XSUAA support based on cds-feature-xsuaa, which exchanged incoming IAS tokens with XSUAA tokens. This mode is deprecated by XSUAA and will be removed.
  • [cds.java@1.34.0] By default, undefined or empty attributes restrict expressions in where-conditions of instance-based authorization now. For instance, $user.code = code evaluates to false if the user attribute code is not defined or has no value. Note that XSUAA attributes with valueRequired:true (i.e. explicitly allowing unset attribute) might need model adaption such as $user.code = code or $user.code is null' to support unrestricted access.
  • [cds.java@1.34.0] Activated the new faster serializer in OData V4 adapter by default (cds.odatav4.serializer.enabled set to true).
  • [cds@6.8.0] Texts for Country are changed to Country/Region in @sap.common.Countries
  • [cds@6.8.0] Resolved issue where selection strategies of destination options in multitenant applications were not working correctly, resulting in runtime errors. The fix relies on the @sap-cloud-sdk/connectivity npm package to be installed.
  • [cds@6.8.0] Precision of timestamp used in outbox message increased to 100 nanoseconds (YYYY-MM-DD hh:mm:ss.nnnnnnn)
  • [cds@6.8.0] When a draft is locked by another user, the error message now includes the username of that user
  • [cap-js/graphql@0.5.0] Improved consistency of handling results of different types returned by custom handlers in CRUD resolvers:
    • Wrap only objects (i.e. not primitive types or arrays) returned by custom handlers in arrays in create, read, and update resolvers
    • Delete mutations return the length of an array that is returned by a DELETE custom handler or 1 if a single object is returned
  • [cap-js/graphql@0.5.0] Don't generate fields for key elements in update input objects
  • [cap-js/graphql@0.5.0] Update and delete mutations have mandatory filter argument
  • [cap-js/graphql@0.5.0] Allow services that are not instances of cds.ApplicationService. It is expected that the invoker provides the correct set of service providers when directly using the GraphQL protocol adpater API.
  • [cds-mtxs@1.8.0] JobsService: the job status will now remain RUNNING until all tenant tasks have succeeded or failed, instead moving to FAILED as soon as there's the first task failure.

Fixed

  • [cds-dk@6.8.0] cds-ts watch now honors a tsconfig.json in the project
  • [cds-dk@6.8.0] launch script for CAP projects in VS Code fixed
  • [vscode-cds@6.8.1] CAP notebooks: sample notebook Shell now uses a cross platform example
  • [vscode-cds@6.8.1] CAP notebooks: shellscript syntax highlighting for Shell cell
  • [vscode-cds@6.8.1] CAP notebooks: cells CDS, Java and Javascript now show error message if needed executable is not found
  • [vscode-cds@6.8.1] Fix CDS Welcome Page
  • [vscode-cds@6.8.0] Where-used index could be incomplete with latest OData annotation plugin
  • [vscode-cds@6.8.0] Formatting of quoted identifiers enclosed in square brackets
  • [vscode-cds@6.8.0] Extension will no longer crash when using unknown compiler versions, though, compatibility is not guaranteed
  • [cds.java@1.34.1] Fixed a bug in instance-based authorization that caused misinterpretation of expressions with is null or is not null.
  • [cds.java@1.34.0] Fixed a bug, causing the new OData V4 serializer to omit expanded properties in the result, which were not requested by the client.
  • [cds.java@1.34.0] Fixed a bug, causing the persistent outbox to be used for the provider tenant, when the MT compatibility mode was disabled.
  • [cds.java@1.34.0] Fixed a bug, causing ClassCastException when setting cds.errors.extended to true.
  • [cds.java@1.34.0] Fixed a bug, causing warning logs, when activating the CDS actuator endpoint.
  • [cds.java@1.34.0] Fixed a bug, causing NullPointerException when triggering tenant upgrades.
  • [cds4j@1.38.1] Fix Update and Delete with path expression to target entity with aliased key elements
  • [cds@6.8.1] DROP statements for SQLite and PostgreSQL no longer miss a comma at the end
  • [cds@6.8.0] fix exported types of the cds core API
  • [cds@6.8.0] cds build uses the correct path if no project dir is given
  • [cds@6.8.0] Read after write for updates on to-one navigation
  • [cds@6.8.0] Error in $orderBy in combination with @Core.MediaType property
  • [cds@6.8.0] Fixes in lean-draft
  • [cds@6.8.0] Fixed an issue where the combined $search and $expand query and localized data was returning empty results on SAP HANA
  • [cds@6.8.0] Tests using cds.test no longer crash with a segmentation fault if injectGlobals: false is set in the Jest configuration.
  • [cds@6.8.0] Handlers registered with cds.on('shutdown') are now called with an err argument in case the shutdown happened in response to uncaught exceptions or unhandled rejected Promises.
  • [cds@6.8.0] Log output on uncaught exceptions or unhandled rejected Promises now is done via cds.log instead of console.
  • [cds@6.8.0] New config option cds.env.server.force_exit_timeout allows to configure the timeout in ms after which we force-exit the server (default: 1111) if it didn't do so as expected after a prior server.close(). Values false or 0 disable force-exit.
  • [cap-js/graphql@0.5.0] Aligned cds.Request instantiation with other protocols for more consistent usage in custom handlers
  • [cds-mtxs@1.8.0] MTXS Migration only deploys cds.xt.Extensions instead of the full application model.
  • [odata-v2-adapter@1.10.5] Replace deprecated usage of req.run with cds.run
  • [odata-v2-adapter@1.10.5] Update of node-fetch
  • [odata-v2-adapter@1.10.5] Remove soon deprecated req.getUriInfo

April 2023

Added

  • [cds-dk@6.7.2] Added option --skip-verification to command cds migrate. It skips the extension verification to save memory. Requires @sap/cds-mtxs@1.7.3.
  • [cds-compiler@3.9.0] Variables $valid.from and $valid.to have been added to the compiler. They behave the same as $at.from and $at.to.
  • [cds-compiler@3.9.0] to.edm(x):
    • Add --odata-vocabularies to pass a dictionary { <prefix>: { Alias, Namespace, Uri } } into the EDM generation. <prefix> must match the value of Alias. Entries are ignored if they are incomplete, malformed, redefine an official OASIS/SAP vocabulary or match the name of the current service. Annotations of the form @<prefix>.<annotation> are added to the API without evaluation including an edm:Reference. It is in the users responsibility to provide a URI that a client can resolve against a valid vocabulary document.
    • Support annotation @open on entity and structured type level to declare the corresponding entity/complex type to be OpenType=true. If an open structured type is declared closed (with a falsy annotation value), the corresponding EDM type is closed as well and suffixed with _closed (or _open vice versa). No further checks are performed on possibly open foreign or primary key types nor on eventually bucket elements to store the additional data.
  • [cds4j@1.38.0] Support list values (tuples) in comparisons
  • [cds4j@1.38.0] Ignore dynamic properties of @open entities on insert/update
  • [cds4j@1.38.0] Add CQL.copy for CqnElementRef and CqnStructuredTypeRef returning a ref builder
  • [cds4j@1.38.0] Allow to compare list values in predicates, e.g. (amount, currency) = (100, 'EURO')
  • [cds4j@1.38.0] SQLite: use user-defined session_context function for localized/temporal data
  • [ux-cds-odata-language-server-extension@1.9.4] The Show All References option for service elements such as entities, properties, and actions displays now also the references to these elements in annotation values. You can use it before modifying a service element to understand if annotations will be affected by the change and avoid the related errors or easily fix them.
  • [odata-v2-adapter@1.10.1] Bootstrapping via CDS plugin (cds.cov2ap.plugin: true)
  • [odata-v2-adapter@1.10.0] Transition to open source code

Changed

  • [cds-dk@6.7.1] cds init uses latest Maven Java archetype version 1.33.1 for creating Java projects.
  • [cds-dk@6.7.1] Bump @sap/cds to 6.7.1
  • [cds-dk@6.7.1] Bump @sap/cds-mtxs to 1.7.2
  • [cds-compiler@3.9.0] compiler: Parameter references in filters such as assoc[field < :Param] are now allowed.
  • [cds-compiler@3.9.0] In the compiled CSN, sort the non-enumerable $sources property according to the reversed layered extension order.
  • [cds-compiler@3.9.0] Update OData vocabulary 'Common', 'ODM', 'UI'.
  • [cds-compiler@3.9.0] to.cdl: If an identifier contains illegal characters (e.g. newline), we no longer produces invalid CDL, but emit an error instead.
  • [cds4j@1.38.0] Make implementation of RefSegment, ElementRef and StructuredTypeRef immutable
  • [cds4j@1.38.0] Deprecate Modifier:ref methods on mutable copies and introduce new ref methods for immutable refs
  • [cds4j@1.38.0] Deprecate Modifier:match method and introduce new match method that does not copy the ref
  • [cds4j@1.38.0] Deprecate Modifier:inline method and introduce new inline method that does not copy the ref
  • [cds4j@1.38.0] Deprecate Modifier:expand method and introduce new expand method that does not copy the ref
  • [cds4j@1.38.0] Remove deprecated Value:cast methods, instead use Value:type
  • [cds4j@1.38.0] Shortcut evaluate lhs IS NOT NULL to TRUE if lhs is not nullable
  • [cds@6.7.1] Calling a parameterized view without params error now results in the status code 400 with an improved error message.

Fixed

  • [cds-dk@6.7.2] Swagger UI no longer fails with an error Value of 'namespaceAndName' parameter must be in the following format: <namespace>.<name>
  • [cds-dk@6.7.1] Compatibility with @sap/cds versions >= 4.5 and < 6.2: avoid runtime errors with debugging disabled.
  • [cds-compiler@3.9.2] Fix crash in core compiler which occurred when CAP was used in a node environments where an enumerable property was added to Array.prototype.
  • [cds-compiler@3.9.2] to.edm(x):
    • Publicly release @open.
    • No DefaultValue for Edm.NavigationProperty.
  • [cds-compiler@3.9.0] to.edm(x):
    • Fix spec requirement: "Navigation properties of complex types MUST NOT specify a partner".
    • Set default target cardinality for unspecified composition of {} to [0..1].
    • Correct referential constraint calculation for [0..1] backlink associations.
  • [cds-compiler@3.9.0] for.hana/for.odata: Reject final unmanaged assoc path step in ON Condition if preceded with $self.
  • [cds-compiler@3.9.0] to.cdl: Parentheses around expressions containing conditions were sometimes missing.
  • [cds-compiler@3.9.0] to.sql/hdi/hdbcds:
    • Detect and process calculated elements in functions like upper.
    • Better detection of calculated elements in .expand/.inline.
    • Entities with calculated elements sometimes had incorrect types. This happened, for example, if they were marked with @odata.draft.enabled
  • [cds.java@1.33.1] Fixed a bug, causing the upgrade procedures to fail, if MTX Sidecar reported tenant status as NON-EXISTENT for one or more tenants.
  • [cds.java@1.33.1] Fixed a bug, causing the upgrade procedures to succeed, even if MTX Sidecar reported the job status as FAILED, when using MTXS.
  • [cds.java@1.33.1] Fixed a bug, causing OData V2 Edm.Time typed values in URIs represented as durations (e.g. PT10H10M20S) to fail request parsing.
  • [cds4j@1.38.0] Change return type of Modifier:selectAll to List
  • [cds4j@1.37.1] Fix parsing of CQN containing "is not"
  • [cds@6.7.2] Try to destroy nonexistant socket in case of custom streaming implementation
  • [cds@6.7.2] Draft: Missing field IsActiveEntity in target path of error messages during draftActivate
  • [cds@6.7.2] Minor fixes for cds.fiori.lean_draft
  • [cds@6.7.2] Error in media type check when no Content-Type header is found
  • [cds@6.7.1] cds build error CreateListFromArrayLike
  • [cds@6.7.1] Disabling of arbitrary user config in mock auth config using "users": { "*": false }
  • [cds@6.7.1] Various fixes for cds.fiori.lean_draft
  • [cds@6.7.1] User attributes that look like numbers are quoted in SQL clause for @restrict
  • [cds-mtxs@1.7.2] MTXS Migration now handles multiple generated projects correctly.
  • [cds-mtxs@1.7.2] Extensibility Service now contains action add for extension modification.
  • [cds-mtxs@1.7.2] Model Provider Service now offer action getExtResources returning the archive of the uploaded extension.
  • [cds-mtxs@1.7.2] CSV files provided in extensions are now correctly re-deployed again with upgrade.
  • [cds-mtxs@1.7.1] MTXS Migration now behaves more robust with regards to cds build configurations.
  • [cds-mtxs@1.7.1] Re-subscribe now also re-deploys extensions again.
  • [cds-mtxs@1.7.1] Stability improvements for tenant upgrades.
  • [odata-v2-adapter@1.10.4] Fix start of cds.plugin
  • [odata-v2-adapter@1.10.3] Fix access to undefined element during data conversion
  • [odata-v2-adapter@1.10.2] Convert array structures
  • [odata-v2-adapter@1.10.1] Update xml2js dependency to fix security vulnerability
  • [odata-v2-adapter@1.10.0] Bound entity operation result is correctly nested with entity name prefix

March 2023

Added

  • [cds-dk@6.6.1] cds compile --to openapi now adds extension validation keywords x-sap-precision and x-sap-scale for decimal values.
  • [vscode-cds@6.6.0] CAP notebooks: Uri handler to open notebooks coming from Capire in local VS Code workspaces.
  • [vscode-cds@6.6.0] CAP notebooks: All notebook features now have a brief description with examples, available on the CAP Notebooks Welcome page.
  • [vscode-cds@6.6.0] type generation now detects project root
  • [cds.java@1.32.1] New POJO interfaces SaasRegistryUnsubscriptionOptions and SaasRegistrySubscriptionOptions that help to access (un)subscription SaaS Registry payload in type-safe manner, e.g. SaasRegistrySubscriptionOptions options = Struct.access(subscriptionEventContext.getOptions()).as(SaasRegistrySubscriptionOptions.class);.
  • [cds@6.6.1] cds.xt.TENANT_UPDATED event is emitted once a tenant was extended
  • [cds-dk@6.7.0] cds upgrade enables upgrading a tenant subscribed to a multitenant SaaS app to the latest base model.
  • [cds-compiler@3.8.0] compiler:
    • Table aliases for sub-queries are no longer required.
    • A time zone designator can now be used in time literals, e.g. time'16:41:01+01:30'or time'16:41:01Z'.
  • [cds-compiler@3.8.0] Calculated elements ("on-read") are now enabled per default. When used in views, they are replaced by their value, for example:
    cds
    entity E { one: Integer; two = one + 1; };
    entity P as projection on E { two };
    // P is the same as:
    entity P as projection on E { one + 1 as two };
    entity E { one: Integer; two = one + 1; };
    entity P as projection on E { two };
    // P is the same as:
    entity P as projection on E { one + 1 as two };
    This allows to define calculations centrally at the entity, which can be used by other views.
  • [cds-compiler@3.8.0] In CDL, a ternary operator was added as a shortcut for CASE expressions: a ? b : c is a shortcut for CASE WHEN a THEN b ELSE c END. There is no CSN representation. The ternary operator is rendered as a CASE expression in CSN.
  • [cds-compiler@3.8.0] In CDL and CSN, not null can now also be used in type definitions.
  • [cds-compiler@3.8.0] In CDL (and CSN as before), elements can be defined without specifying a type.
  • [cds.java@1.33.0] The TenantProviderService now provides, as part of the TenantInfo class, the id of the database on which a specific tenant has been onboarded (e.g. tenantInfo.get("database_id");). If the information is not available, the call will return null.
  • [cds.java@1.33.0] Audit Log integration now supports writing entries on behalf of a named user when the CAP application is using IAS instead of XSUAA.
  • [cds.java@1.33.0] Two new main methods com.sap.cds.framework.spring.utils.Subscribe and com.sap.cds.framework.spring.utils.Unsubscribe allow triggering subscriptions or unsubscriptions as tasks.
  • [cds@6.7.0] Config cds.ql.quirks_mode as a compatibility flag to still support behaviours which are undocumented, or even against the specifications, for example CQN:
    js
    let q = INSERT.into('Books')
    //> According to CQN spec should return:
    {SELECT:{from:{ref:['Books']}}}
    //> But today returns:
    {SELECT:{from:'Books'}}
    let q = INSERT.into('Books')
    //> According to CQN spec should return:
    {SELECT:{from:{ref:['Books']}}}
    //> But today returns:
    {SELECT:{from:'Books'}}
    The default in cds6 is true → to be changed to false with cds7.
  • [cds@6.7.0] cds build now checks extension point restrictions defined by the SaaS app provider. cds build fails if any restrictions are violated.
  • [cds@6.7.0] Typings for cds.spawn()
  • [cds@6.7.0] Typings for entity.drafts
  • [cds@6.7.0] Typings for winston logger
  • [cds@6.7.0] Typings for service.on, service.before, and service.after for actions and CRUD events
  • [cds@6.7.0] CLI command cds env now allows property paths with / instead of ., which allows usages like that:
sh
cds env requires/cds.xt.ModelProviderService
cds env requires/cds.xt.ModelProviderService
  • [cds@6.7.0] cds.env now allows to statically set/add profiles via cds.profile and cds.profiles in package.json.
  • [cds@6.7.0] cds.env now also supports using profiles in definitions of presets, i.e., in cds.requires.kinds.
  • [cds@6.7.0] cds deploy now prints a warning when using Cloud Foundry client version less than 8.
  • [cds@6.7.0] req.subject to conveniently operate on the subjects targeted by the request. Example usage: SELECT.one.from(req.subject) //> returns single SELECT.from(req.subject) //> returns array UPDATE(req.subject) //> updates one or many DELETE(req.subject) //> deletes one or many
  • [cds@6.7.0] cds-serve as a future replacement for cds serve in npm scripts. Applications can adopt this now to ease the transition to the next major version.
  • [cap-js/graphql@0.4.0] Supporting new cds-plugin technique for zero configuration
  • [cap-js/graphql@0.4.0] Support for filtering by null values
  • [cap-js/graphql@0.4.0] Allow multiple filters on the same field, with the same operator, that are logically joined by AND. For example, filtering for all books with titles that contain both strings, "Wuthering" and "Heights":
    graphql
    {
      AdminService {
        Books(filter: { title: { contains: ["Wuthering", "Heights"] } }) {
          nodes {
            title
          }
        }
      }
    }
    {
      AdminService {
        Books(filter: { title: { contains: ["Wuthering", "Heights"] } }) {
          nodes {
            title
          }
        }
      }
    }

Changed

  • [vscode-cds@6.6.0] extension now uses vscode-languageclient 8.x
    • API consumers may need to adapt access. See changes. Especially onReady is no longer needed and was removed.
  • [vscode-cds@6.6.0] minimum VSCode version is now 1.74.0
  • [vscode-cds@6.6.0] updated capire CDL docs - used in code completion details
  • [cds.java@1.32.1] Support for OData V4 PATCH requests with deltas on entity collections has to be enabled via @Capabilities.UpdateRestrictions.DeltaUpdateSupported:true.
  • [cds.java@1.32.1] Adapted DeploymentService.dependencies() and DependenciesEventContext to return and use List<Map<String, Object>> instead of List<String> for dependencies. Use helper class SaasRegistryDependency to report dependencies to SaaS Registry.
  • [cds-dk@6.7.0] cds env --for is now used to specify profiles; before it specified project paths, but never worked correctly.
  • [cds-dk@6.7.0] cds add data now uses comma as CSV separator by default instead of semicolon. This allows using GitHub tabular display.
  • [cds-dk@6.7.0] cds add approuter doesn't create entries for authenticationMethod and authenticationType any more, but uses the equivalent @sap/approuter defaults.
  • [cds-dk@6.7.0] cds add multitenancy will now create a sidecar MTX project for Node.js as well.
  • [cds-dk@6.7.0] cds subscribe and cds unsubscribe no longer require a username in case @sap/cds-mtxs is configured with dummy auth.
  • [cds-dk@6.7.0] cds subscribe and cds unsubscribe now rely on @sap/cds-mtxs (version 1.7.0 or higher).
  • [cds-compiler@3.8.0] API: We now report an error for most backends, if the input CSN has meta.flavor == 'xtended', because only client/inferred CSN is supported.
  • [cds-compiler@3.8.0] Update OData vocabularies 'PersonalData', 'UI'
  • [cds-compiler@3.8.0] for.odata: Shortcut annotations @label, @title, @description, @readonly are no longer removed from the OData processed CSN.
  • [cds-compiler@3.8.0] to.cdl:
    • Annotation arrays are split into multiple lines, if a single line would be too long.
    • Nested SELECTs are put into separate lines to make them more readable.
    • (Annotation) paths are quoted less often.
  • [cds-compiler@3.8.0] to.sql: The list of reserved SAP HANA identifiers was updated (for smart quoting).
  • [cds.java@1.33.0] If execution of a RequestContext is dispatched to a different thread, the correlation id of the parent thread is propagated to the new thread even if the receiving thread already has a correlation id set in its Mapped Diagnostic Context (MDC). The original correlation id will be restored once the execution of the RequestContext is completed. Previously, this led to an ErrorStatusException.
  • [cds.java@1.33.0] The implicit sorting feature does not add any sort specifications to the statement anymore, if only constant literals are on the select list.
  • [cds.java@1.33.0] The DeploymentService API no longer validates the subscription and deployment scope. The scopes are now only validated on incoming HTTP requests (e.g. SaaS Registry subscription), that trigger the DeploymentService API internally. This enables using the DeploymentService API without wrapping the call in a privileged user RequestContext. In case the MtSubscriptionService compatibility mode is used, the scopes are still enforced when using the API.
  • [cds.java@1.33.0] Moved properties cds.dataSource.csv* into a new cds.dataSource.csv.* section. The previous properties are still supported for backwards compatibility.
  • [cds.java@1.33.0] Replaced cds.multiTenancy.healthcheck.intervalMillis with a Duration-based property cds.multiTenancy.healthcheck.interval. The previous property is still supported for backwards compatibility.
  • [cds.java@1.33.0] Removed the Instance Manager support from the codebase, as the service is deprovisioned.
  • [cds4j@1.37.0] Replace IsActiveEntity on active entities with TRUE in WHERE, ORDER BY and source ref
  • [cds4j@1.37.0] Reflection API: Improve warning on unsupported view definitions
  • [cds@6.7.0] cds.log().trace() now logs stack traces in DEBUG level, before that was on TRACE/SILLY level only
  • [cds@6.7.0] Plain SQL queries now have req.event === undefined, formerly this had non-deterministic values.
  • [cds@6.7.0] Plain SQL queries don't allow to register custom handlers, other than for event '*'.
  • [cds@6.7.0] Plain SQL queries are only supported on database services, not on application services.
  • [cds@6.7.0] CQN representation of columns=* is not allowed anymore, instead columns=['*'] should be used. This also applies to expand.
  • [cds@6.7.0] Only draft roots can be created via direct, non-navigation OData POST requests.
  • [cds@6.7.0] Flag cds.features.fiori_preview changed to cds.fiori.preview. The old flag still works as well.
  • [cds@6.7.0] Flag cds.features.fiori_routes changed to cds.fiori.routes. The old flag still works as well.
  • [cds-mtxs@1.7.0] Filter duplicate linter messages based on new LinterMessage API.
  • [cds-mtxs@1.7.0] cds-mtx script now logs reasons for missing MTXS environment.
  • [cds-mtxs@1.7.0] DeploymentService plugin handlers are now registered on serving:cds.xt.DeploymentService.
  • [cap-js/graphql@0.4.0] Improved handling of null and undefined values in query arguments
  • [cap-js/graphql@0.4.0] Empty filter lists resolve to false and empty filter objects resolve to true

Fixed

  • [cds-dk@6.6.1] cds add helm fixed html5 cloud service is now read properly.
  • [cds-dk@6.6.1] cds import now flattens the @Capabilities annotation in the CSN for OData V4 files.
  • [cds-dk@6.6.1] cds import for OData V4 files now captures the EnumTypes information in the CSN according to UnderlyingType.
  • [cds-dk@6.6.1] cds import now captures the @Common.Text annotation value properly in the CSN for OData V4 files.
  • [cds-dk@6.6.1] cds init --add java now uses local Java version when creating new Java project.
  • [cds-dk@6.6.1] cds watch terminates properly in case livereload websocket clients are connected
  • [cds-dk@6.6.1] cds watch's livereload feature works again on Node.js >= 17, where local IPv6 addresses are the default (::1 instead of 127.0.0.1)
  • [vscode-cds@6.6.0] highlighting of the last of a number of element names in a projection
  • [vscode-cds@6.6.0] formatting of query from A:B: removed colon padding
  • [vscode-cds@6.6.0] type generation stopped working after failure until next LSP restart
  • [cds.java@1.32.1] Fixed a bug causing system query option $skip to be applied on all pages returned when server-driven pagination is used and the configuration option cds.query.limit.reliable-paging.enabled is set to true. Now the query option $skip is applied only on the first page of the results.
  • [cds.java@1.32.1] Fixed a bug causing a NullPointerException to be thrown when the Deploy method is executed when an application is deployed and there are no tenants available. The database upgrade will be skipped with an info message.
  • [cds@6.6.1] TypeError when using the query API with an unknown target in x4 flavor
  • [cds@6.6.1] The setting for cds.requires['cds.xt.DeploymentService'].lazyT0 is now recognized in the VS Code schema validation.
  • [cds@6.6.1] The HDI deployment stdout logs are now only visible for DEBUG level if triggered via cds-mtxs. They are also streamed to logs/<tenant>.log in case you need the full deployment output, even without DEBUG enabled.
  • [cds@6.6.1] .forUpdate when used for etags
  • [cds@6.6.1] Prevent TypeError if an existing draft does not have admin data
  • [cds@6.6.1] Outbound-streaming error handling
  • [cds-mtxs@1.6.3] t0 model DDL files do not end up in application build results any more.
  • [cds-mtxs@1.6.3] cds.xt.SaasProvisioningService: fixed an error for programmatic usage when sending the callback.
  • [cds-mtxs@1.6.3] cds-mtx commands now properly exit with code != 1 when receiving an error from the DeploymentService.
  • [cds-mtxs@1.6.2] Robustness of MTX Migration has been improved.
  • [cds-mtxs@1.6.1] The lazily onboarded t0 will now implicitly be created with the same onboarding parameters (e.g. database ID) as the first onboarded tenant.
  • [odata-v2-adapter@1.9.20] Cache invalidation for Streamlined MTX (extensibility enabled) with CDS 6.6.1
  • [odata-v2-adapter@1.9.20] Use named parameters for mtxs actions to protect against incompatible changes
  • [odata-v2-adapter@1.9.20] Allow status code 304 (not modified) when reading OData V4 metadata (as success)
  • [cds-dk@6.7.0] cds watch's livereload feature may now use a local IPv6 address (::1) instead of always localhost. This is usually the case on Node.js 17 or higher.
  • [cds-dk@6.7.0] In all but cds compile errors where not handled correctly, especially compiler errors not displayed in human readable format.
  • [cds-dk@6.7.0] cds init creates project sample files correctly.
  • [cds-dk@6.7.0] CLI commands w/ unknown arguments (cds --foo) clearly fail again with a proper error message
  • [cds-dk@6.7.0] Reduce console output in case of multitenancy-related command failures.
  • [cds-dk@6.6.2] Bump sqlite3 to 5.1.6
  • [cds-dk@6.6.2] Bump @sap/cds to 6.2.2
  • [cds-dk@6.6.2] cds init creates project sample files correctly.
  • [cds-compiler@3.8.2] parser: Identifiers that are keywords were not allowed in annotation values inside arrays
  • [cds-compiler@3.8.2] compiler: Compatibility against cds-lsp was restored.
  • [cds-compiler@3.8.2] to.sql/hdbcds/hdi/edm(x): Fix a crash for sub-queries inside nested expressions of on-conditions of JOINs.
  • [cds-compiler@3.8.0] The CSN parser now accepts bare lists in columns[], similar to the CDL parser.
  • [cds-compiler@3.8.0] to.cdl:
    • Delimited identifiers in filters are now surrounded by spaces if necessary, to avoid ]] being interpreted as an escaped bracket.
  • [cds-compiler@3.8.0] to.edm(x):
    • Remove empty Edm.EntityContainer again. Removal of an empty entity container has been revoked with version 3.5.0 which was wrong. An empty container must not be rendered as it is not spec compliant.
    • Correctly resolve chained enum symbols.
    • Fix a program abort during structured rendering in combination with --odata-foreign-keys and foreign keys in structured types.
    • Correctly render paths to nested foreign keys as primary key in structured mode with --odata-foreign-keys.
  • [cds-compiler@3.8.0] to.hdi/to.sql/to.edm(x):
    • Reject unmanaged associations as ON-condition path end points.
    • Fix bug in message rendering for tuple expansion.
    • Correctly detect invalid @sql.append/prepend in projections.
  • [cds-compiler@3.8.0] to.hdi/to.sql: The list of SAP HANA keywords was updated to the latest version.
  • [cds.java@1.33.0] Fixed a bug, causing exceptions while performing Event Mesh initialization during initial onboarding of a new tenant.
  • [cds.java@1.33.0] Fixed a bug, causing @assert.target to fail with lock exceptions when used on an association to a draft-enabled entity.
  • [cds.java@1.33.0] Fixed a bug, causing failed subscriptions, because no application URL was provided to SaaS Registry.
  • [cds@6.7.0] Specifying a key in SELECT.from(...) is now typed to produce a single result, instead of an array of results
  • [cds@6.7.0] Proper handling of IsActiveEntity in error paths
  • [cds@6.7.0] For cloudevents using AMQP, the type is set to application/cloudevents+json
  • [cds@6.7.0] Use message property in typings.
  • [cds@6.7.0] Typings for cds.on('bootstrap', app => {app.use(...)
  • [cds@6.7.0] Return types for User and delete in typescript
  • [cds@6.7.0] Typings for connect options
  • [cds@6.7.0] Typings for req.error
  • [cds@6.7.0] Deployment in sidecar
  • [cds@6.7.0] Error with restricting an entity and request it with $apply in combination with aggregate
  • [cds@6.7.0] Combined usage of $skiptoken and $skip
  • [cds@6.7.0] Error package.json file is missing in mtx extension builds
  • [cds@6.7.0] CLI commands w/ unknown arguments (cds --foo) clearly fail again with a proper error message
  • [cds@6.6.2] Exception during cds deploy without mtx
  • [cds@6.6.2] Service name specified with cds deploy --to hana:serviceName takes precedence over environment variables.
  • [cds-mtxs@1.7.0] HANA deployment now correctly evaluates the sql mapping configuration (e. g. cds.data.sql_mappging.quoted)
  • [cap-js/graphql@0.4.1] cds-plugin.js was missing in files property of package.json
  • [cap-js/graphql@0.4.0] Handling of GraphQL queries that are sent via GET requests using the query URL parameter if GraphiQL is enabled
  • [odata-v2-adapter@1.9.21] Proxy is open source at https://github.com/cap-js-community/odata-v2-adapter
  • [odata-v2-adapter@1.9.21] The new proxy library is fully compatible and can be used as drop-in replacement
  • [odata-v2-adapter@1.9.21] This library is now deprecated and will no longer receive

Removed

  • [cds-compiler@3.8.0] for.odata: Undocumented shortcut annotation @important has been removed.

February 2023

Added

  • [cds-dk@6.6.0] cds compile added a new target format asyncapi to convert CDS models to AsyncAPI documents.
  • [cds-dk@6.6.0] cds pull now hints at base-model name for using statement.
  • [vscode-cds@6.5.1] The special up_ element is now supported in navigation
  • [cds-compiler@3.7.0] Several annotate statement can append/prepend values to the same array-valued annotation without an anno-duplicate error, even if there is no using from dependency between the involved sources
  • [cds-compiler@3.7.0] SQL methods such as point.ST_X() can be used in views.
  • [cds-compiler@3.7.0] The SQL new keyword can be used for ST_* types such as new ST_POINT('Point(0.5 0.5)') )
  • [cds.java@1.32.0] Introduced a new API for managing subscriptions, unsubscriptions and tenant upgrades. It is leaner and it is easier to integrate custom handlers, as the API doesn't distinguish between synchronous and asynchronous operations any more.
  • [cds.java@1.32.0] The cds actuator endpoint now includes datasource pool statistics.
  • [cds.java@1.32.0] The CAP Java Maven archetype allows to choose the target JDK version with the new parameter jdkVersion. The default version is 17, supported values are 11 and 17.
  • [cds.java@1.32.0] The new OData V4 serializer now supports a new mode in which it buffers the response before streaming it to the client. This can be enabled in case serialization errors after streaming to the client has already started must be avoided. To enable it set cds.odataV4.serializer.buffered to true.
  • [cds.java@1.32.0] OData V4 adapter now supports PATCH requests with deltas on entity collections (Beta)
  • [cds4j@1.36.0] Deduplicate inline defined simple types in CDS models
  • [cds4j@1.36.0] CQL.refSegment(id, filter) to construct segments with filters
  • [cds@6.6.0] Improved error handling for cds build if the SaaS base model is missing in an extension project.
  • [cds@6.6.0] Support for reliable paging using $skiptoken. Can be activated via cds.query.limit.reliablePaging = true
  • [cds-mtxs@1.6.0] t0 onboarding can now happen lazily before the first subscription by setting cds.requires.['cds.xt.DeploymentService'].lazyT0.
  • [cds-mtxs@1.6.0] E-Tag handling for the getCsn API in sidecar scenarios has been introduced.
  • [cds-mtxs@1.5.1] Jobs are now cleaned up in the database after configurable cutoff times. The following options are possible:
    • jobCleanupInterval: Frequency in milliseconds for cleaning up finished or failed jobs. Default is 1 day.
    • jobCleanupAge: Time in milliseconds for the minimum age of the failed or finished jobs to delete. Default is 1 day.
    • jobCleanupIntervalStale: Frequency in milliseconds for cleaning up queued or running jobs. Default is 7 days.
    • jobCleanupAgeStale: Time in milliseconds for the minimum age of the queued or running jobs to delete. Default is 7 days.
  • [cds-mtxs@1.5.1] MTXS migration script now allows to cleanup @sap/mtx metadata containers.

Changed

  • [cds-dk@6.6.0] cds env now allows inspecting entries with optional get command. E.g. cds env requires.db.
  • [cds-dk@6.6.0] cds add multitenancy now uses async SaaS Provisioning Service onboarding by default.
  • [cds-dk@6.6.0] cds add multitenancy for Java will now add sqlite3 to devDependencies in the sidecar package.json.
  • [cds-dk@6.6.0] cds add extensibility now works for Java projects out-of-the-box.
  • [cds-dk@6.6.0] cds import now captures the Edm Primitive types without CDS mapping with annotation @odata.Type and marks the type as cds.String.
  • [cds-dk@6.6.0] cds add helm connectivity service instance is no longer created.
  • [cds-dk@6.6.0] cds init uses latest Maven Java archetype version 1.32.0 for creating Java projects.
  • [cds-dk@6.5.2] New versions of @sap/cds-mtxs and @sap/cds-compiler
  • [cds-dk@6.5.2] cds init uses latest Maven Java archetype version 1.31.1 for creating Java projects.
  • [cds-dk@6.5.1] cds init uses latest Maven Java archetype version 1.31.0 for creating Java projects.
  • [eslint-plugin-cds@2.6.3] Filter rule reports using inferred models on $location.
  • [eslint-plugin-cds@2.6.2] Fixed rule reports using inferred models to always receive valid file $locations.
  • [vscode-cds@6.5.1] mixin is now mapped to LSP.SymbolKind.Operator (was default String)
  • [vscode-cds@6.5.1] a commit hash of the last commit is now included in release under dist/state
  • [vscode-cds@6.5.1] target platform back to es2020
  • [cds-compiler@3.7.0] Update OData vocabularies 'Common', 'Core', 'Measures', 'PDF', 'UI'.
  • [cds-compiler@3.7.0] to.edm(x): Empty complex types are no longer warned about as they are allowed.
  • [cds.java@1.32.0] The old MtSubscriptionService API has been deprecated in favour of the new DeploymentService API. Event handlers on the MtSubscriptionService API are continued to be triggered in a compatibility mode (enabled by default). Migration to the new API is encouraged.
  • [cds.java@1.32.0] The HTTP-based deploy endpoints are deprecated and not supported with the new DeploymentService API. In case of enabled compatibility mode the HTTP-based deploy endpoints are still available. Migration to the Java main-task based deployment is encouraged.
  • [cds.java@1.32.0] Programmatic setting of the App UI URL has been deprecated. In case of enabled compatibility mode it is still possible through the old MtSubscriptionService-based APIs. Consider migrating to the property-based setting of the application URL.
  • [cds4j@1.36.0] Annotations on elements with inline-defined simple type are not repeated on the type
  • [cds4j@1.36.0] Deprecate setters RefSegment:id and RefSegment:filter, instead use CQL.refSegment(id, filter)
  • [cds4j@1.36.0] Optimized to-many expands are now also executed by path (join/subquery) if only a single root entity is selected
  • [cds@6.6.0] cds.serve(ServiceName) (and cds serve -s ServiceName) now exactly serve services with the given names. Previously, all services that ended with the given name were served as well, e.g. MyServiceName and ServiceName, which might be problematic for applications that bootstrap services one by one.
  • [cds@6.6.0] Optimize @cds.persistence.journal filtering for last-dev CSN file.
  • [cap-js/graphql@0.3.0] Replaced deprecated GraphQL HTTP server express-graphql with graphql-http
  • [cap-js/graphql@0.3.0] Serve GraphiQL 2 via included HTML instead of relying on the server framework (express-graphql included GraphiQL 1)
  • [cap-js/graphql@0.3.0] Bump graphql version to 16
  • [cap-js/graphql@0.3.0] Execute query resolvers in parallel and mutation resolvers serially
  • [cds-mtxs@1.5.1] /-/cds/saas-provisioning/tenant: consumers using the mtx_status_callback don't need a SaaS registry binding to the application any more.

Fixed

  • [cds-dk@6.6.0] cds unsubscribe --from flag now recognized
  • [cds-dk@6.6.0] cds import now adds cds.Boolean as dummy return type if ReturnType for FunctionImport is missing in the OData V2 edmx.
  • [cds-dk@6.6.0] cds import resolves the $Cast construct in the CSN for OData V4 files.
  • [cds-dk@6.6.0] cds lint now reports like ESLint in case of missing plugin @sap/eslint-plugin-cds
  • [cds-dk@6.5.2] cds migrate no longer fails because of authorization error
  • [cds-dk@6.5.1] cds deploy no longer fails to write to a package.json file that has no cds section
  • [vscode-cds@6.5.1] Closing a CDS file led to 'forgetting' the content in the index. This resulted in:
    • workspace/symbols not showing all definitions
    • error messages of symbols not found
    • navigation broken for 'closed' definitions
  • [vscode-cds@6.5.1] formatting and highlighting of nested element and enum extensions
  • [vscode-cds@6.5.1] code completion for keywords and identifiers may have used wrong compiler messages, thus not working as expected
  • [cds-compiler@3.7.2] CSN parser: Structured annotations containing = were accidentally interpreted as expressions, even though the corresponding beta flag was not set.
  • [cds-compiler@3.7.0] parse.cql and parse.expr no longer ignore type arguments such as cast(field as String(12)). One argument is interpreted as length and two are interpreted as precision and scale, similar to how custom types and their arguments are interpreted.
  • [cds-compiler@3.7.0] Previously, the compiler could not always find a unique redirection target if there were one direct projection on the model target and two or more projections on that projection.
  • [cds-compiler@3.7.0] The performance of compiler-checks for deeply nested expressions/queries has been improved
  • [cds-compiler@3.7.0] Fix various bugs in Association to Join translation:
    • Recursive $self dereferencing
    • Correct resolution of table alias in non-bijective $self backlink associations in combination with explicit redirection.
  • [cds-compiler@3.7.0] to.edm(x): Process value help list convenience annotations on unbound action parameters.
  • [cds-compiler@3.6.2] to.hdi(.migration): Don't render -- generated by cds-compiler version comment at the top of the HDI-based artifacts, as this caused HDI to detect the file as changed and redeploy, causing way longer deployment times. Old behavior can be enabled with option generatedByComment: true.
  • [cds-compiler@3.6.2] to.sql/hdi/hdbcds: Correctly handle variables like $user in exists filters.
  • [cds.java@1.32.0] Fixed a bug causing uncommitted transactions in case different PersistenceServices were used in an @Transactional-annotated method, outside of any ChangeSetContext. This scenario is currently not supported and now causes an exception to be thrown.
  • [cds.java@1.32.0] Fixed a bug causing incorrectly handled URIs in case a combined service and entity path (e.g. /v1/FooEntity) was a substring of a service path (e.g. /v1/Foo).
  • [cds.java@1.32.0] Bumped version of the jacaco-maven-plugin in the integration-tests module of a newly created CAP Java project to a version that is compatible with JDK 17.
  • [cds.java@1.31.1] OData V4 responses with entities containing stream properties, now indicate if the stream property is set by providing the property@odata.mediaContentType annotation.
  • [cds4j@1.36.0] Virtual elements of the entity annotated with @cds.search or @Search.defaultSearchElement are no longer searched
  • [cds4j@1.35.1] Fix equals and hashCode of CdsData and Row to be equal to Map:equals / Map:hashCode
  • [cds4j@1.35.1] Fix orderBy in optimized to-one-to-many expands
  • [cds4j@1.35.1] Connect multiple or and and predicates with shallower tree/call stack
  • [cds4j@1.35.1] Prevent unique constraint violations on concurrent deep upserts with full-set payload
  • [cds4j@1.35.1] null values are treated as CqnBoolLiteral.TRUE in Conjunction, Disjunction and Negation.
  • [cds@6.6.0] cds deploy --to hana no longer calls cds bind when VCAP_SERVICES is provided, e.g via default-env.json.
  • [cds@6.6.0] $search on an entity without String elements
  • [cds@6.6.0] Only elements from type cds.String are searchable when combining $apply and $search
  • [cds@6.6.0] Error message for missing database connection in draft case
  • [cds@6.6.0] Extensibility with in-memory Sqlite
  • [cds@6.6.0] OData adapter error messages
  • [cds@6.6.0] Columns in navigation path are now added to the SELECT.columns in new parser
  • [cds@6.6.0] Application service calls on draft enabled entities using aliases
  • [cds@6.6.0] Custom mtxs build tasks now use the correct default src folder value.
  • [cds@6.6.0] cds build adds a .hdiconfig file when creating HANA migration tables if none is existing.
  • [cds@6.6.0] UPSERTs using reserved keywords
  • [cds@6.6.0] Fix outbound-streaming error handling
  • [cds@6.6.0] Rollback transaction if inbound streaming fails
  • [cds@6.6.0] Custom database initialization in db/init.js now skips the t0 tenant for multitenant apps.
  • [cds@6.6.0] Concurrent etag calculation for UPDATE and DELETE
  • [cds@6.6.0] Typings for cds.delete()
  • [cds@6.6.0] CQN for not operator with OData functions
  • [cds@6.6.0] Expand on composition of aspect for draft enabled entities
  • [cds@6.6.0] Better error messages are provided for errors with HTTP status code 400, 500 and 501
  • [cap-js/graphql@0.3.1] Add app folder to files property of package.json to be included for publishing to npm
  • [cds-mtxs@1.6.0] Fixed input validation for feature toggles containing _ or -.
  • [cds-mtxs@1.5.1] cds migrate does not crash any more when no options are supplied.
  • [cds-mtxs@1.5.1] cds-mtx-migrate command now terminates immediately when the migration is finished.
  • [cds-mtxs@1.5.1] Parameter --dry for cds migration now also skips the creation of the t0tenant.
  • [cds-mtxs@1.5.1] ModelProviderService: Non-repeated dots are now allowed in feature toggles, e.g. foo.bar.baz is a valid feature toggle name.
  • [odata-v2-adapter@1.9.19] Provide subdomain information to logs
  • [odata-v2-adapter@1.9.19] Use correct correlation-id for logging (setup CDS context correctly)
  • [odata-v2-adapter@1.9.19] React to incompatible change of mtxs getEdmx, to provide (internal) model parameter
  • [odata-v2-adapter@1.9.19] Enhance example app to show usage of bound/unbound OData V2 actions in SAP Fiori UI via annotation

January 2023

Added

  • [cds-dk@6.5.0] cds run/serve/migrate --resolve-bindings now pulls required service credentials if bound via cds bind. (beta)
  • [cds-dk@6.5.0] cds add helm now supports multitenancy.
  • [cds-dk@6.5.0] cds bind now supports binding of user-provided service instances from SAP BTP's Cloud Foundry.
  • [cds-compiler@3.6.0] API: There are new API functions for to.cdl: smartId, smartFunctionId and delimitedId.
  • [cds-compiler@3.6.0] CDL parser: when defining a parameter for entities, actions or functions, you can use a regular identifier for its name even if that is a reserved name like in.
  • [cds-compiler@3.6.0] The first parameter of a bound action or function can be typed with $self or many $self even if no type named $self exists.
  • [cds-compiler@3.6.0] If an aspect sap.common.TextsAspect exists in the sap.common context, it will be included in all .texts entities. This allows to extend .texts entities via extending the aspect. Example:
    cds
    entity E {
      key id : Integer;
      content: localized String;
    }
    extend sap.common.TextsAspect with {
      elem: String;
    };
    // from @sap/cds common.cds
    aspect sap.common.TextsAspect {
      key locale: String;
    }
    entity E {
      key id : Integer;
      content: localized String;
    }
    extend sap.common.TextsAspect with {
      elem: String;
    };
    // from @sap/cds common.cds
    aspect sap.common.TextsAspect {
      key locale: String;
    }
  • [cds-compiler@3.6.0] to.edm(x): Support explicit binding parameter <id>: [many] $self for OData V4 only. The explicit binding parameter is rendered as any other parameter and $self is replaced with the binding type but only if no $self definition exists in the model. This gives full control over the binding parameter including name, nullability, default value and annotations. The explicit binding parameter is ignored for OData V2 and has precedence over @cds.odata.bindingparameter.
  • [cds@6.5.0] New aspect sap.common.TextsAspect in common.cds
  • [cds@6.5.0] New syntax for collection bound entities
  • [cds-mtxs@1.5.0] The built-in Service Manager client now caches binding information in-memory.
  • [cds-mtxs@1.5.0] The optimise_file_upload HDI deployment option is now supported.
  • [cds-mtxs@1.5.0] MTX migration script now allows to split extensions based on extension file names using regular expressions.
  • [cds-mtxs@1.5.0] Now, provisioning supports SaaS applications using extensibility in combination with migration tables. Before, provisioning failed with a HDI deployment error. Note: Extending migration table artifacts is not supported.
  • [vscode-cds@6.5.0] Experimental user setting cds.typeGenerator.enabled to trigger a globally installed cds type generator when saving a model file.
  • [cds4j@1.35.0] New Update.entry(Map<String, ?> entry) method to improve the API for single updates with key values in update data.
  • [cds4j@1.35.0] Added generation of builder interfaces for CDS defined events.
  • [cds4j@1.35.0] New syntax defining the binding parameter for bound functions and actions is supported.
  • [cds4j@1.35.0] Added top and skip methods to Modifier to modify pagination settings
  • [cds4j@1.35.0] New interfaces CdsBoundAction and CdsBoundFunction represent bound functions and actions of an entity.

Changed

  • [cds-mtxs@1.4.4] cds.xt.DeploymentService configuration has been flattened. Instead of
    js
    "hdi": {
      "create": {
        "provisioning_parameters": {
          "database_id": "<ID>"
        },
        "binding_parameters": {
          "key": "value"
        }
      }
    }
    "hdi": {
      "create": {
        "provisioning_parameters": {
          "database_id": "<ID>"
        },
        "binding_parameters": {
          "key": "value"
        }
      }
    }
    you can now also write
    js
    "hdi": {
      "create": {
        "database_id": "<ID>"
      },
      "bind": {
        "key": "value"
      }
    }
    "hdi": {
      "create": {
        "database_id": "<ID>"
      },
      "bind": {
        "key": "value"
      }
    }
    The old configuration is still supported, but you're advised to migrate to the new configuration for improved readability.
  • [cds-mtxs@1.4.4] /-/cds/jobs/pollJob now also returns a tenants field, so tenant-specific tasks don't have to be polled individually. An example response format looks like this:
    js
    {
      "status": "FAILED",
      "op": "upgrade",
      "tenants": {
          "non-existing-tenant": {
             "status": "FAILED",
             "error": "Tenant 'non-existing-tenant' does not exist"
          },
          "existing-tenant": {
             "status": "FINISHED"
          }
       }
    }
    {
      "status": "FAILED",
      "op": "upgrade",
      "tenants": {
          "non-existing-tenant": {
             "status": "FAILED",
             "error": "Tenant 'non-existing-tenant' does not exist"
          },
          "existing-tenant": {
             "status": "FINISHED"
          }
       }
    }
  • [cds-dk@6.5.0] cds push now runs a build of the extension project to update the pushed extension archive (unless custom archive given).
  • [cds-dk@6.5.0] cds init and cds bind no longer use a spinner when performing long running operations.
  • [eslint-plugin-cds@2.6.1] Fixed rule name in ESLint config:all to @sap/cds/start-elements-lowercase.
  • [eslint-plugin-cds@2.6.1] Allow expensive rules to be reported when running from ESLint Cli.
  • [eslint-plugin-cds@2.6.1] In auth-valid-restrict-grant, only suggest closely related user roles.
  • [eslint-plugin-cds@2.6.1] In auth-valid-restrict-to, only suggest * if other entries apart from * exist.
  • [cds-compiler@3.6.0] Many messages concerning the CDL and CSN syntax are improved: affects message ids (syntax-…), message texts and the error locations.
  • [cds-compiler@3.6.0] Duplicate doc-comments are now errors, similar to duplicate annotations.
  • [cds-compiler@3.6.0] Update OData vocabularies 'Aggregation', 'Analytics', 'Capabilities','Common', 'ODM', 'Offline', 'PDF', 'Session', 'UI'.
  • [cds.java@1.30.2] The personal data annotation @PersonalData.EntitySemantics: 'Other' now has the same effect on entities like @PersonalData.EntitySemantics: 'DataSubjectDetails.
  • [cds.java@1.30.2] Renamed the annotation @kafka.channel to @kafka.topic.
  • [cds@6.5.0] Successive calls to SELECT.where() wraps existing clause in brackets if it contains or. E.g.
    js
    SELECT.from `X` .where `x` .or `y` .where `z`
    //> SELECT from X where (x or y) and z`
    SELECT.from `X` .where `x` .or `y` .where `z`
    //> SELECT from X where (x or y) and z`
  • [cds@6.5.0] cds build for SAP HANA now adds an engines.node version to the generated db/package.json. This will help in the future when runtime environments change their default to some version higher than the one supported by @sap/hdi-deploy.
  • [cds@6.5.0] cds build checks the consistency of built-in models for java projects. An error is logged if some model files could not successfully be resolved indicating that a required npm module might be missing.
  • [cds@6.5.0] Status code of draft actions are set in respective handler instead of protocol adapter
  • [cds@6.5.0] cds deploy --dry no longer loads the sqlite3 module by mistake. This fixes a regression when building Java projects. As a side effect a file with the name undefined was created in the project root folder.
  • [cds@6.5.0] Internal representation of pseudo roles internal-user and system-user
  • [vscode-cds@6.5.0] CAP notebooks: code cells (terminal and shell) have now their own working directory
  • [vscode-cds@6.5.0] minimum VSCode version is now 1.73.0
  • [cds4j@1.35.0] In SQL statements generated by the runtime CDS identifiers are now always in db-specific casing and delimited.
  • [cds4j@1.35.0] Moved generation of CDS_NAME constant to builder interfaces of CDS events.
  • [cds4j@1.35.0] Annotate generated accessor and builder interfaces with @Generated from the package javax.annotation.processing only if compiled with Java > 8.
  • [cds4j@1.35.0] Deprecate interface CqnModifier, instead use Modifier
  • [cap-js/graphql@0.2.0] Register aliasFieldResolver during schema generation instead of passing it to the GraphQL server
  • [cap-js/graphql@0.2.0] The filters contains, startswith, and endswith now generate CQN function calls instead of generating like expressions directly

Fixed

  • [cds-compiler@3.5.4] Allow window functions also with a deprecated flag being set.
  • [cds-compiler@3.5.4] to.edm(x): Fix program abort due to malformed error location in EDM annotation preprocessing.
  • [cds-compiler@3.5.4] to.sql/hdi/hdbcds: The option pre2134ReferentialConstraintNames can be used to omit the referential constraint identifier prefix "c__".
  • [cds-mtxs@1.4.4] cds.xt.SaasProvisioningService: * is not allowed as a tenant name any more.
  • [cds-mtxs@1.4.4] Namespace check for new entities in extensions now also covers new root entities.
  • [cds-mtxs@1.4.4] Asynchronous operations now correctly send the callbacks defined via status_callback or mtx_status_callback.
  • [odata-v2-adapter@1.9.17] Fix special replacement pattern in $filter conversion
  • [cds-dk@6.5.0] cds import now generates flattened value for @Common.FieldControl annotation in the CSN for OData V4 files.
  • [cds-dk@6.5.0] cds import now treats the CollectionKind property attribute in OData V2 similar to Collection(<data_type>) in OData V4.
  • [cds-compiler@3.6.0] If an entity with parameters is auto-exposed, the generated projection now has the same formal parameters and its query forwards these parameters to the origin entity.
  • [cds-compiler@3.6.0] to.hdbcds: Aliases for foreign keys were not quoted if necessary.
  • [cds-compiler@3.6.0] to.cdl:
    • Aliases for expand and foreign keys were not quoted if necessary.
    • Query functions that are CDL keywords were not properly quoted.
    • CSN doc properties containing */ resulted in invalid CDL. To avoid compilation issues, */ is escaped as *\/.
  • [cds-compiler@3.6.0] to.edm(x): Respect record type hint $Type in EDM JSON as a fully qualified @type URI property.
  • [cds-compiler@2.15.10] If an entity with parameters is auto-exposed, the generated projection now has the same formal parameters and its query forwards these parameters to the origin entity.
  • [cds-compiler@2.15.10] to.edm(x): Respect record type hint $Type in EDM JSON as a fully qualified @type URI property.
  • [cds.java@1.30.2] Fixed a bug in the cds-maven-plugin which caused the goal generate to fail when triggered in IDEs.
  • [cds.java@1.30.2] Fixed a bug which caused events to be silently dropped by the logical layer if qualified names of CDS-defined events didn't match, even when using @topic.
  • [cds4j@1.34.1] Move CDS_NAME constant to generated builder interfaces of CDS events
  • [cds4j@1.34.1] Fixed hashCode of Row
  • [cds4j@1.34.1] Fixed structure of empty results for queries w/ toOne expands that only have nested toMany expands
  • [cds4j@1.34.1] Don't allow to connect a conjunction/disjunction to itself (fixed stack overflow)
  • [cds4j@1.34.1] Fixed search on entities w/ virtual String elements
  • [cds@6.5.0] Resolve i18n folders from the root directory
  • [cds@6.5.0] Types for cds.test
  • [cds@6.5.0] Types for srv.send
  • [cds@6.5.0] Optimized Search: Search queries for localized entities will now use default values, if no localized data is found in the corresponding localized tables on SAP HANA. Corrected aliasing by search queries with navigation.
  • [cds@6.5.0] Resolution of type of references during minify in bootstrap
  • [cds@6.5.0] Generation of odata-v2 URL in case of select=* in urlify()
  • [cds@6.5.0] Build resets changed cds.env and cds.root when finished
  • [cds@6.5.0] Expand error when using infix filters
  • [cds@6.5.0] CDS configuration schema validation for @sap/cds-mtxs
  • [cds@6.5.0] Typings for QL API
  • [cds@6.5.0] Return types of asynchronous service API
  • [cds-mtxs@1.5.0] MTX migration script now detects enabled multitenancy also for a sidecar project setup.
  • [cds-mtxs@1.5.0] Improved robustness for MTX migration script, e. g. with inconsistent old metadata tenants.
  • [odata-v2-adapter@1.9.18] Unicode encode messages header
  • [cds-dk@6.5.0] cds import now generates flattened value for @Common.FieldControl annotation in the CSN for OData V4 files.
  • [cds-dk@6.5.0] cds import now treates CollectionKind property attribute in OData V2 similar to Collection(<data_type>) in OData V4.
  • [vscode-cds@6.5.0] workspace/symbols request didn't include definitions of a file after it was closed.
  • [cds4j@1.35.0] temporal data: truncate validFrom and validTo to precision supported by DB
  • [cap-js/graphql@0.2.0] Schema generation crash that occurred if an entity property is named localized
  • [cap-js/graphql@0.2.0] The field totalCount could not be queried on its own

Removed

  • [vscode-cds@6.5.0] @cds.doc annotation, which was marked as deprecated for a long time, is no longer considered in requests like document/hover. Use doc comments (/** ... */) instead. The quick fix to migrate from @cds.doc to doc comments is still in place, but is likely to be removed in near future.