From 07df41b364904477fa6ea97ed235000fdaf35c68 Mon Sep 17 00:00:00 2001 From: Ralf Handl Date: Wed, 23 Feb 2022 19:14:11 +0100 Subject: [PATCH 01/24] Initial content (#171) --- vocabularies/DataIntegration.json | 8 ++++++++ vocabularies/DataIntegration.md | 17 +++++++++-------- vocabularies/DataIntegration.xml | 16 ++++++++++++++++ 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/vocabularies/DataIntegration.json b/vocabularies/DataIntegration.json index 0302b335..f57ea539 100644 --- a/vocabularies/DataIntegration.json +++ b/vocabularies/DataIntegration.json @@ -49,6 +49,14 @@ "@DataIntegration.OriginalDataType": "CHAR(000010)" } }, + "OriginalName": { + "$Kind": "Term", + "@Core.Description": "Original name of the annotated model element in its source model", + "@Core.LongDescription": "The provider of an OData service maps its local names to Edm identifiers, which may require removing or replacing characters that are not allowed.", + "@Core.Example": { + "@DataIntegration.OriginalName": "what::is-in.a/name?" + } + }, "ConversionExit": { "$Kind": "Term", "$Nullable": true, diff --git a/vocabularies/DataIntegration.md b/vocabularies/DataIntegration.md index aafda45f..b3f2bf85 100644 --- a/vocabularies/DataIntegration.md +++ b/vocabularies/DataIntegration.md @@ -9,16 +9,17 @@ Terms for Data Integration Term|Type|Description :---|:---|:---------- [Extractable](./DataIntegration.xml#L32:~:text=Defines if entity set is extractable -[OriginalDataType](./DataIntegration.xml#L35:~:text=Original data type of the annotated property in its source system ([Example](./DataIntegration.xml#L38))
The provider of an OData service maps its local type definitions to Edm types. Sometimes, specific type information is lost. This additional annotation gives the consumer hints about the type original type definition. -[ConversionExit](./DataIntegration.xml#L44:~:text=Identifier that describes the special output conversion of the annotated property in the source system ([Example](./DataIntegration.xml#L47))
The provider of an OData service maps its local type definitions to Edm types. Sometimes, specific type information is lost. This additional annotation gives the consumer hints about the type original type definition. -[SourceSystem](./DataIntegration.xml#L53:~:text=Identifier that classifies the type of the source system
The original type name used in annotation OriginalDataType depend are specific to different source system. Sourc system type ABAP uses other type names as source system type HANA. -[DeltaMethod](./DataIntegration.xml#L68:~:text=Defines which delta method the entity set supports. Only evaluated if Capabilities.ChangeTracking/Supported is true +[OriginalDataType](./DataIntegration.xml#L36:~:text=Original data type of the annotated property in its source system ([Example](./DataIntegration.xml#L39))
The provider of an OData service maps its local type definitions to Edm types. Sometimes, specific type information is lost. This additional annotation gives the consumer hints about the type original type definition. +[OriginalName](./DataIntegration.xml#L46:~:text=Original name of the annotated model element in its source model ([Example](./DataIntegration.xml#L49))
The provider of an OData service maps its local names to Edm identifiers, which may require removing or replacing characters that are not allowed. +[ConversionExit](./DataIntegration.xml#L56:~:text=Identifier that describes the special output conversion of the annotated property in the source system ([Example](./DataIntegration.xml#L59))
The provider of an OData service maps its local type definitions to Edm types. Sometimes, specific type information is lost. This additional annotation gives the consumer hints about the type original type definition. +[SourceSystem](./DataIntegration.xml#L66:~:text=Identifier that classifies the type of the source system
The original type name used in annotation OriginalDataType depend are specific to different source system. Sourc system type ABAP uses other type names as source system type HANA. +[DeltaMethod](./DataIntegration.xml#L83:~:text=Defines which delta method the entity set supports. Only evaluated if Capabilities.ChangeTracking/Supported is true -## [DeltaMethodType](./DataIntegration.xml#L57:~:text=[DeltaMethodType](./DataIntegration.xml#L71:~:text= + @@ -41,6 +42,17 @@ + + + + + + + + + + + @@ -50,10 +62,12 @@ + + @@ -65,9 +79,11 @@ + + From 047715a00dbabe533d85f4efd56eb0a0b067373b Mon Sep 17 00:00:00 2001 From: Ralf Handl Date: Fri, 11 Mar 2022 10:15:52 +0100 Subject: [PATCH 02/24] Common.FieldControl applies to entity types (#172) * FieldControl applies to entity types --- vocabularies/Common.json | 10 ++++++---- vocabularies/Common.md | 4 ++-- vocabularies/Common.xml | 8 ++++---- vocabularies/UI.json | 5 +++-- vocabularies/UI.md | 2 +- vocabularies/UI.xml | 4 ++-- 6 files changed, 18 insertions(+), 15 deletions(-) diff --git a/vocabularies/Common.json b/vocabularies/Common.json index 27c4ec9d..eefd2080 100644 --- a/vocabularies/Common.json +++ b/vocabularies/Common.json @@ -422,9 +422,10 @@ "$DefaultValue": "Optional", "$AppliesTo": [ "Property", - "Record" + "Record", + "EntityType" ], - "@Core.Description": "Control state of a property", + "@Core.Description": "Control state of a property, or the media stream of a media entity", "@Core.LongDescription": "This term can be used for static field control, providing an enumeration member value in $metadata, as well as dynamically, providing a `Path` expression.\n\nIn the dynamic case the property referenced by the `Path` expression MUST be of type `Edm.Byte` to accommodate OData V2 services as well as V4 infrastructures that don't support enumeration types.", "@Common.IsInstanceAnnotation": true }, @@ -1573,14 +1574,15 @@ "mediaUploadLink": { "$Kind": "Term", "$AppliesTo": [ - "Property" + "Property", + "EntityType" ], "@Common.Experimental": true, "@Common.IsInstanceAnnotation": true, "@Core.RequiresType": "Edm.Stream", "@Core.IsURL": true, "@Core.Description": "URL for uploading new media content to a Document Management Service", - "@Core.LongDescription": "In contrast to the `@odata.mediaEditLink` this URL allows to upload new media content without directly changing a stream property.\nThe upload request typically uses HTTP POST with `Content-Type: multipart/form-data` following RFC 7578.\nThe upload request must contain one multipart representing the content of the file. The `name` parameter in the `Content-Disposition` header (as described in RFC 7578) is irrelevant, but the `filename` parameter is expected.\nIf the request succeeds the response will contain a JSON body of `Content-Type: application/json` with a JSON property `readLink`. The newly uploaded media resource can be linked to the stream property by changing the `@odata.mediaReadLink` to the value of this `readLink` in a subsequent PATCH request to the OData entity." + "@Core.LongDescription": "In contrast to the `@odata.mediaEditLink` this URL allows to upload new media content without directly changing a stream property or media resource.\nThe upload request typically uses HTTP POST with `Content-Type: multipart/form-data` following RFC 7578.\nThe upload request must contain one multipart representing the content of the file. The `name` parameter in the `Content-Disposition` header (as described in RFC 7578) is irrelevant, but the `filename` parameter is expected.\nIf the request succeeds the response will contain a JSON body of `Content-Type: application/json` with a JSON property `readLink`. The newly uploaded media resource can be linked to the stream property by changing the `@odata.mediaReadLink` to the value of this `readLink` in a subsequent PATCH request to the OData entity." }, "PrimitivePropertyPath": { "$Kind": "Term", diff --git a/vocabularies/Common.md b/vocabularies/Common.md index dbaabdd0..7a3355ef 100644 --- a/vocabularies/Common.md +++ b/vocabularies/Common.md @@ -39,7 +39,7 @@ Term|Type|Description [SemanticObjectUnavailableActions](./Common.xml#L282:~:text=List of actions that are not available in the current state of the instance of the Semantic Object [IsInstanceAnnotation](./Common.xml#L286:~:text=Term can also be used as instance annotation; AppliesTo of this term specifies where it can be applied [FilterExpressionRestrictions](./Common.xml#L316:~:text=Use term Capabilities.FilterRestrictions instead -[FieldControl](./Common.xml#L359:~:text=Control state of a property
This term can be used for static field control, providing an enumeration member value in $metadata, as well as dynamically, providing a `Path` expression.
In the dynamic case the property referenced by the `Path` expression MUST be of type `Edm.Byte` to accommodate OData V2 services as well as V4 infrastructures that don't support enumeration types. +[FieldControl](./Common.xml#L359:~:text=Control state of a property, or the media stream of a media entity
This term can be used for static field control, providing an enumeration member value in $metadata, as well as dynamically, providing a `Path` expression.
In the dynamic case the property referenced by the `Path` expression MUST be of type `Edm.Byte` to accommodate OData V2 services as well as V4 infrastructures that don't support enumeration types. [ExceptionCategory](./Common.xml#L392:~:text=A machine-readable exception category [Application](./Common.xml#L397:~:text=... [Timestamp](./Common.xml#L417:~:text=... @@ -106,7 +106,7 @@ Term|Type|Description [ChangedBy](./Common.xml#L1350:~:text=Last editor [OriginalProtocolVersion](./Common.xml#L1362:~:text=Original protocol version of a converted (V4) CSDL document, allowed values `2.0` and `3.0` [ApplyMultiUnitBehaviorForSortingAndFiltering](./Common.xml#L1367:~:text=Sorting and filtering of amounts in multiple currencies needs special consideration
TODO: add link to UX documentation on https://experience.sap.com/fiori-design/ -[mediaUploadLink](./Common.xml#L1373:~:text=URL for uploading new media content to a Document Management Service
In contrast to the `@odata.mediaEditLink` this URL allows to upload new media content without directly changing a stream property. The upload request typically uses HTTP POST with `Content-Type: multipart/form-data` following RFC 7578. The upload request must contain one multipart representing the content of the file. The `name` parameter in the `Content-Disposition` header (as described in RFC 7578) is irrelevant, but the `filename` parameter is expected. If the request succeeds the response will contain a JSON body of `Content-Type: application/json` with a JSON property `readLink`. The newly uploaded media resource can be linked to the stream property by changing the `@odata.mediaReadLink` to the value of this `readLink` in a subsequent PATCH request to the OData entity. +[mediaUploadLink](./Common.xml#L1373:~:text=URL for uploading new media content to a Document Management Service
In contrast to the `@odata.mediaEditLink` this URL allows to upload new media content without directly changing a stream property or media resource. The upload request typically uses HTTP POST with `Content-Type: multipart/form-data` following RFC 7578. The upload request must contain one multipart representing the content of the file. The `name` parameter in the `Content-Disposition` header (as described in RFC 7578) is irrelevant, but the `filename` parameter is expected. If the request succeeds the response will contain a JSON body of `Content-Type: application/json` with a JSON property `readLink`. The newly uploaded media resource can be linked to the stream property by changing the `@odata.mediaReadLink` to the value of this `readLink` in a subsequent PATCH request to the OData entity. [PrimitivePropertyPath](./Common.xml#L1388:~:text=A term or term property with this tag whose type is (a collection of) `Edm.PropertyPath` MUST resolve to a primitive structural property [WebSocketBaseURL](./Common.xml#L1393:~:text=Base URL for WebSocket connections diff --git a/vocabularies/Common.xml b/vocabularies/Common.xml index 8386e940..da629327 100644 --- a/vocabularies/Common.xml +++ b/vocabularies/Common.xml @@ -356,8 +356,8 @@ - - + + @@ -1370,14 +1370,14 @@ Upon modification field control logic is invoked so that meta-information like h - + - In contrast to the `@odata.mediaEditLink` this URL allows to upload new media content without directly changing a stream property. + In contrast to the `@odata.mediaEditLink` this URL allows to upload new media content without directly changing a stream property or media resource. The upload request typically uses HTTP POST with `Content-Type: multipart/form-data` following RFC 7578. The upload request must contain one multipart representing the content of the file. The `name` parameter in the `Content-Disposition` header (as described in RFC 7578) is irrelevant, but the `filename` parameter is expected. If the request succeeds the response will contain a JSON body of `Content-Type: application/json` with a JSON property `readLink`. The newly uploaded media resource can be linked to the stream property by changing the `@odata.mediaReadLink` to the value of this `readLink` in a subsequent PATCH request to the OData entity. diff --git a/vocabularies/UI.json b/vocabularies/UI.json index 5e841ede..a4171818 100644 --- a/vocabularies/UI.json +++ b/vocabularies/UI.json @@ -1541,10 +1541,11 @@ "$Type": "Core.Tag", "$DefaultValue": true, "$AppliesTo": [ - "Property" + "Property", + "EntityType" ], "@Common.Experimental": true, - "@Core.Description": "Properties annotated with this term MUST be a stream property annotated with a MIME type image", + "@Core.Description": "Properties annotated with this term MUST be a stream property annotated with a MIME type image. Entity types annotated with this term MUST be a media entity type annotated with a MIME type image.", "@Core.RequiresType": "Edm.Stream", "@Validation.ApplicableTerms": [ "Common.IsNaturalPerson" diff --git a/vocabularies/UI.md b/vocabularies/UI.md index b374373a..253aacee 100644 --- a/vocabularies/UI.md +++ b/vocabularies/UI.md @@ -51,7 +51,7 @@ Term|Type|Description [Map](./UI.xml#L1322:~:text=Target MUST reference a UI.GeoLocation, Communication.Address or a collection of these [Gallery](./UI.xml#L1326:~:text=Target MUST reference a UI.MediaResource [IsImageURL](./UI.xml#L1331:~:text=Properties and terms annotated with this term MUST contain a valid URL referencing an resource with a MIME type image
Can be annotated with:
- [IsNaturalPerson](Common.md#IsNaturalPerson) -[IsImage](./UI.xml#L1341:~:text=Properties annotated with this term MUST be a stream property annotated with a MIME type image
Can be annotated with:
- [IsNaturalPerson](Common.md#IsNaturalPerson) +[IsImage](./UI.xml#L1341:~:text=Properties annotated with this term MUST be a stream property annotated with a MIME type image. Entity types annotated with this term MUST be a media entity type annotated with a MIME type image.
Can be annotated with:
- [IsNaturalPerson](Common.md#IsNaturalPerson) [MultiLineText](./UI.xml#L1352:~:text=Properties annotated with this annotation should be rendered as multi-line text (e.g. text area) [Placeholder](./UI.xml#L1357:~:text=A short, human-readable text that gives a hint or an example to help the user with data entry [TextArrangement](./UI.xml#L1363:~:text=Describes the arrangement of a code or ID value and its text
If used for a single property the Common.Text annotation is annotated diff --git a/vocabularies/UI.xml b/vocabularies/UI.xml index d26c4ca6..5ca0094e 100644 --- a/vocabularies/UI.xml +++ b/vocabularies/UI.xml @@ -1338,9 +1338,9 @@ The trend is
- + - + From b926063edadacb8b69a48b87bb7ef42795d20406 Mon Sep 17 00:00:00 2001 From: Bernhard <84450242+bernhardgr42@users.noreply.github.com> Date: Fri, 11 Mar 2022 13:29:23 +0100 Subject: [PATCH 03/24] Changing type of Margin, Border, FitToPage, FontSize, & FontName (#170) * Revert "Revert "Describe annotations, delete URIType, add FontName, Border, and Margin (#159)" (#163)" This reverts commit 853ab7cccffbc4ba103bc8d2d65577e589cb925f. * Update PDF.xml Margin, Border, FitToPage, FontSize, & FontName are new features of the PDF_API. The annotation shows you if this option is available from the server. => Changing the types to boolean. We have no default FontName, FonstSize and so on. Only the pdf API knows this. If the pdf API add this default knowledge, it could be (for an older FES), that this information is not available. Then we would have to set NULL for these default FontName, FontSize, etc. setting. Therefore, I would not add this here. * Update PDF.md * Update PDF.json * Update PDF.Features-examples.xml * Update PDF.Features-examples.json * Remove: * Remove: Remove "a the" from the description. Co-authored-by: Ralf Handl --- README.md | 1 + examples/PDF.Features-examples.json | 46 +++++++++++ examples/PDF.Features-examples.xml | 39 +++++++++ vocabularies/PDF.json | 123 ++++++++++++++++++++++++++++ vocabularies/PDF.md | 31 +++++++ vocabularies/PDF.xml | 96 ++++++++++++++++++++++ 6 files changed, 336 insertions(+) create mode 100644 examples/PDF.Features-examples.json create mode 100644 examples/PDF.Features-examples.xml create mode 100644 vocabularies/PDF.json create mode 100644 vocabularies/PDF.md create mode 100644 vocabularies/PDF.xml diff --git a/README.md b/README.md index 8fc49525..4c8bbd15 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ This repository defines the following SAP vocabularies: - [Hierarchy: Hierarchies](vocabularies/Hierarchy.md) - _experimental_ - [HTML5: Rendering directives for UI5](vocabularies/HTML5.md) - [ODM: One Domain Model](vocabularies/ODM.md) - _experimental_ +- [PDF: PDF response format](vocabularies/PDF.md) - _experimental_ - [PersonalData: Personal data / GDPR](vocabularies/PersonalData.md) - [Session: Sticky Sessions](vocabularies/Session.md) - [UI: Representing data in user interfaces](vocabularies/UI.md) diff --git a/examples/PDF.Features-examples.json b/examples/PDF.Features-examples.json new file mode 100644 index 00000000..83e3b268 --- /dev/null +++ b/examples/PDF.Features-examples.json @@ -0,0 +1,46 @@ +{ + "$Version": "4.0", + "$Reference": { + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { + "$Include": [ + { + "$Namespace": "Org.OData.Core.V1", + "$Alias": "Core" + } + ] + }, + "https://sap.github.io/odata-vocabularies/vocabularies/PDF.json": { + "$Include": [ + { + "$Namespace": "com.sap.vocabularies.PDF.v1", + "$Alias": "PDF" + } + ] + } + }, + "PDF.examples": { + "Container": { + "$Kind": "EntityContainer", + "@Core.Description": "Imagine some entity sets here" + }, + "$Annotations": { + "PDF.examples/Container": { + "@PDF.Features": { + "DocumentDescriptionReference": "../../../../default/iwbep/common/0001/$metadata", + "DocumentDescriptionCollection": "MyDocumentDescriptions", + "ArchiveFormat": true, + "Signature": true, + "CoverPage": true, + "FontSize": true, + "FontName": true, + "Margin": true, + "Border": true, + "FitToPage": false, + "ResultSizeDefault": 5000, + "ResultSizeMaximum": 50000 + } + } + } + }, + "$EntityContainer": "PDF.examples.Container" +} diff --git a/examples/PDF.Features-examples.xml b/examples/PDF.Features-examples.xml new file mode 100644 index 00000000..7da451e2 --- /dev/null +++ b/examples/PDF.Features-examples.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vocabularies/PDF.json b/vocabularies/PDF.json new file mode 100644 index 00000000..237107e9 --- /dev/null +++ b/vocabularies/PDF.json @@ -0,0 +1,123 @@ +{ + "$Version": "4.0", + "$Reference": { + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { + "$Include": [ + { + "$Namespace": "Org.OData.Core.V1", + "$Alias": "Core" + } + ] + }, + "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { + "$Include": [ + { + "$Namespace": "com.sap.vocabularies.Common.v1", + "$Alias": "Common" + } + ] + } + }, + "com.sap.vocabularies.PDF.v1": { + "$Alias": "PDF", + "@Common.Experimental": true, + "@Core.Description": "Terms for PDF response format", + "@Core.LongDescription": "The PDF vocabulary provides information about the PDF format of a response", + "@Core.Description#Published": "2021-10-27 © Copyright 2021 SAP SE. All rights reserved", + "@Core.Links": [ + { + "rel": "alternate", + "href": "https://sap.github.io/odata-vocabularies/vocabularies/PDF.xml" + }, + { + "rel": "latest-version", + "href": "https://sap.github.io/odata-vocabularies/vocabularies/PDF.json" + }, + { + "rel": "describedby", + "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/PDF.md" + } + ], + "Features": { + "$Kind": "Term", + "$Type": "PDF.FeaturesType", + "$AppliesTo": [ + "EntityContainer" + ], + "@Common.Experimental": true, + "@Core.Description": "Features for the PDF" + }, + "FeaturesType": { + "$Kind": "ComplexType", + "@Common.Experimental": true, + "DocumentDescriptionReference": { + "@Core.IsURL": true, + "@Core.Description": "Reference of the Service for the DocumentDescription" + }, + "DocumentDescriptionCollection": { + "@Core.Description": "Name of entity set containing the DocumentDescription" + }, + "ArchiveFormat": { + "$Type": "Edm.Boolean", + "$Nullable": true, + "$DefaultValue": false, + "@Core.Description": "PDFA conformant format" + }, + "Signature": { + "$Type": "Edm.Boolean", + "$Nullable": true, + "$DefaultValue": false, + "@Core.Description": "Signing the document" + }, + "CoverPage": { + "$Type": "Edm.Boolean", + "$Nullable": true, + "$DefaultValue": false, + "@Core.Description": "Cover Page" + }, + "FontName": { + "$Type": "Edm.Boolean", + "$Nullable": true, + "$DefaultValue": false, + "@Core.Description": "Font name" + }, + "FontSize": { + "$Type": "Edm.Boolean", + "$Nullable": true, + "$DefaultValue": false, + "@Core.Description": "Font size" + }, + "Margin": { + "$Type": "Edm.Boolean", + "$Nullable": true, + "$DefaultValue": false, + "@Core.Description": "Margin size" + }, + "Border": { + "$Type": "Edm.Boolean", + "$Nullable": true, + "$DefaultValue": false, + "@Core.Description": "Border size of the table" + }, + "FitToPage": { + "$Type": "Edm.Boolean", + "$Nullable": true, + "$DefaultValue": false, + "@Core.Description": "Fit to page", + "@Core.LongDescription": "If this option is selected, the font size is automatically selected in such a way that all columns of a table fit on one page. Other layout options like margin, border and composite cell spacing are adapted accordingly, with respect to the chose scaling factor." + }, + "ResultSizeDefault": { + "$Type": "Edm.Int32", + "$Nullable": true, + "@Core.Description": "Default result size", + "@Core.LongDescription": " Default result size for PDF documents. Used if $top has not been provided." + }, + "ResultSizeMaximum": { + "$Type": "Edm.Int32", + "$Nullable": true, + "@Core.Description": "Maximum result size", + "@Core.LongDescription": "Max result size for PDF documents. Used if $top has been provided and $top > ResultSizeMaximum" + } + } + } +} diff --git a/vocabularies/PDF.md b/vocabularies/PDF.md new file mode 100644 index 00000000..f4520660 --- /dev/null +++ b/vocabularies/PDF.md @@ -0,0 +1,31 @@ +# PDF Vocabulary +**Namespace: [com.sap.vocabularies.PDF.v1](PDF.xml)** + +Terms for PDF response format + +The PDF vocabulary provides information about the PDF format of a response + + +## Terms + +Term|Type|Description +:---|:---|:---------- +[Features](./PDF.xml#L39:~:text=Features for the PDF + +## [FeaturesType](./PDF.xml#L44:~:text=If this option is selected, the font size is automatically selected in such a way that all columns of a table fit on one page. Other layout options like margin, border and composite cell spacing are adapted accordingly, with respect to the chose scaling factor. +[ResultSizeDefault](./PDF.xml#L80:~:text=Default result size for PDF documents. Used if a the $top has not been provided. +[ResultSizeMaximum](./PDF.xml#L86:~:text=Max result size for PDF documents. Used if $top has been provided and $top > ResultSizeMaximum diff --git a/vocabularies/PDF.xml b/vocabularies/PDF.xml new file mode 100644 index 00000000..f6701b2b --- /dev/null +++ b/vocabularies/PDF.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + Terms for PDF response format + + + The PDF vocabulary provides information about the PDF format of a response + + + 2021-10-27 © Copyright 2021 SAP SE. All rights reserved + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + If this option is selected, the font size is automatically selected in such a way that all columns of a table fit on one page. Other layout options like margin, border and composite cell spacing are adapted accordingly, with respect to the chose scaling factor. + + + + + + Default result size for PDF documents. Used if $top has not been provided. + + + + + + Max result size for PDF documents. Used if $top has been provided and $top > ResultSizeMaximum + + + + + + + From 5e2ff7cbfd3f5804549c3894feb8631f819af818 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Mar 2022 09:58:00 +0200 Subject: [PATCH 04/24] Bump minimist from 1.2.5 to 1.2.6 (#174) * Bump minimist from 1.2.5 to 1.2.6 Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6. - [Release notes](https://github.com/substack/minimist/releases) - [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6) --- updated-dependencies: - dependency-name: minimist dependency-type: indirect ... Signed-off-by: dependabot[bot] * Updated dependencies, refreshed Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Ralf Handl --- examples/PDF.Features-examples.json | 10 +- package-lock.json | 199 ++++++++++++---------------- package.json | 4 +- vocabularies/PDF.json | 4 +- vocabularies/PDF.md | 18 +-- 5 files changed, 101 insertions(+), 134 deletions(-) diff --git a/examples/PDF.Features-examples.json b/examples/PDF.Features-examples.json index 83e3b268..8fff9c9d 100644 --- a/examples/PDF.Features-examples.json +++ b/examples/PDF.Features-examples.json @@ -31,10 +31,10 @@ "ArchiveFormat": true, "Signature": true, "CoverPage": true, - "FontSize": true, - "FontName": true, - "Margin": true, - "Border": true, + "FontSize": true, + "FontName": true, + "Margin": true, + "Border": true, "FitToPage": false, "ResultSizeDefault": 5000, "ResultSizeMaximum": 50000 @@ -43,4 +43,4 @@ } }, "$EntityContainer": "PDF.examples.Container" -} +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 8650286a..ec6b9f0a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,24 +9,24 @@ "version": "0.0.0", "dependencies": { "colors": "^1.4.0", - "odata-csdl": "^0.4.3", + "odata-csdl": "^0.4.4", "odata-vocabularies": "github:oasis-tcs/odata-vocabularies" }, "devDependencies": { - "eslint": "^8.9.0" + "eslint": "^8.12.0" } }, "node_modules/@eslint/eslintrc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.1.0.tgz", - "integrity": "sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", + "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.3.1", "globals": "^13.9.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.0.4", @@ -36,19 +36,10 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", - "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -220,9 +211,9 @@ } }, "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -267,12 +258,12 @@ } }, "node_modules/eslint": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz", - "integrity": "sha512-PB09IGwv4F4b0/atrbcMFboF/giawbBLVC7fyDamk5Wtey4Jh2K+rYaBhCAbUyEI4QzB1ly09Uglc9iCtFaG2Q==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.12.0.tgz", + "integrity": "sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.1.0", + "@eslint/eslintrc": "^1.2.1", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -467,9 +458,9 @@ } }, "node_modules/flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, "node_modules/fs.realpath": { @@ -517,9 +508,9 @@ } }, "node_modules/globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -661,9 +652,9 @@ "dev": true }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -672,6 +663,11 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -685,47 +681,31 @@ "dev": true }, "node_modules/odata-csdl": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/odata-csdl/-/odata-csdl-0.4.3.tgz", - "integrity": "sha512-d7GWZ9lAP4YVyFc+LVZgcEzdi1E6lgusGwX7oSTCRKiMv1xf4Y2CKhb5A2DOCVhyYclrhsoGD/Q5bOSwTLip+g==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/odata-csdl/-/odata-csdl-0.4.4.tgz", + "integrity": "sha512-TEQnuqXoQmXBhqEJuIbyajWz1d4wwMVdvw+fiM3QO1G9DjWC+pByJEv4ADQ1aBPA8c2BWHzo8Qw5SZQ6GfKC0A==", "dependencies": { "colors": "^1.4.0", - "minimist": "^1.2.5", + "minimist": "^1.2.6", "sax": "^1.2.4" }, "bin": { "odata-csdl-xml2json": "lib/cli.js" } }, - "node_modules/odata-csdl/node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "node_modules/odata-csdl/node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, "node_modules/odata-vocabularies": { - "version": "0.4.4", - "resolved": "git+ssh://git@github.com/oasis-tcs/odata-vocabularies.git#b15966cdbf427174c4f967dbbe4e35aaeded4358", - "integrity": "sha512-j7UeWLaSTula+A2g27RhBL/Bkz7DXfsc+CJh13tigecpE+Ud2MYjolFMh56fbn+QNqCoP5cvFNA83m1mG0YDkA==", + "version": "0.4.6", + "resolved": "git+ssh://git@github.com/oasis-tcs/odata-vocabularies.git#32ec59be5f831018d5fc40ac46288b017a889faf", "license": "SEE LICENSE IN LICENSE.md", "dependencies": { "colors": "^1.4.0", - "minimist": "^1.2.5", - "odata-csdl": "^0.4.0" + "minimist": "^1.2.6", + "odata-csdl": "^0.4.4" }, "bin": { "odata-vocab2md": "lib/cli.js" } }, - "node_modules/odata-vocabularies/node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -836,6 +816,11 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -971,34 +956,26 @@ }, "dependencies": { "@eslint/eslintrc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.1.0.tgz", - "integrity": "sha512-C1DfL7XX4nPqGd6jcP01W9pVM1HYCuUkFk1432D7F0v3JSlUIeOYn9oCoi3eoLZ+iwBSb29BMFxxny0YrrEZqg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", + "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.3.1", "globals": "^13.9.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } } }, "@humanwhocodes/config-array": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", - "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -1128,9 +1105,9 @@ } }, "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -1158,12 +1135,12 @@ "dev": true }, "eslint": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.9.0.tgz", - "integrity": "sha512-PB09IGwv4F4b0/atrbcMFboF/giawbBLVC7fyDamk5Wtey4Jh2K+rYaBhCAbUyEI4QzB1ly09Uglc9iCtFaG2Q==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.12.0.tgz", + "integrity": "sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.1.0", + "@eslint/eslintrc": "^1.2.1", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", @@ -1312,9 +1289,9 @@ } }, "flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, "fs.realpath": { @@ -1353,9 +1330,9 @@ } }, "globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -1464,14 +1441,19 @@ "dev": true }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -1485,42 +1467,22 @@ "dev": true }, "odata-csdl": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/odata-csdl/-/odata-csdl-0.4.3.tgz", - "integrity": "sha512-d7GWZ9lAP4YVyFc+LVZgcEzdi1E6lgusGwX7oSTCRKiMv1xf4Y2CKhb5A2DOCVhyYclrhsoGD/Q5bOSwTLip+g==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/odata-csdl/-/odata-csdl-0.4.4.tgz", + "integrity": "sha512-TEQnuqXoQmXBhqEJuIbyajWz1d4wwMVdvw+fiM3QO1G9DjWC+pByJEv4ADQ1aBPA8c2BWHzo8Qw5SZQ6GfKC0A==", "requires": { "colors": "^1.4.0", - "minimist": "^1.2.5", + "minimist": "^1.2.6", "sax": "^1.2.4" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - } } }, "odata-vocabularies": { - "version": "git+ssh://git@github.com/oasis-tcs/odata-vocabularies.git#b15966cdbf427174c4f967dbbe4e35aaeded4358", - "integrity": "sha512-j7UeWLaSTula+A2g27RhBL/Bkz7DXfsc+CJh13tigecpE+Ud2MYjolFMh56fbn+QNqCoP5cvFNA83m1mG0YDkA==", + "version": "git+ssh://git@github.com/oasis-tcs/odata-vocabularies.git#32ec59be5f831018d5fc40ac46288b017a889faf", "from": "odata-vocabularies@github:oasis-tcs/odata-vocabularies", "requires": { "colors": "^1.4.0", - "minimist": "^1.2.5", - "odata-csdl": "^0.4.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - } + "minimist": "^1.2.6", + "odata-csdl": "^0.4.4" } }, "once": { @@ -1600,6 +1562,11 @@ "glob": "^7.1.3" } }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", diff --git a/package.json b/package.json index f2440bfa..9ff078b1 100644 --- a/package.json +++ b/package.json @@ -13,11 +13,11 @@ ], "dependencies": { "colors": "^1.4.0", - "odata-csdl": "^0.4.3", + "odata-csdl": "^0.4.4", "odata-vocabularies": "github:oasis-tcs/odata-vocabularies" }, "devDependencies": { - "eslint": "^8.9.0" + "eslint": "^8.12.0" }, "scripts": { "build": "node lib/transform.js" diff --git a/vocabularies/PDF.json b/vocabularies/PDF.json index 237107e9..3160a5d2 100644 --- a/vocabularies/PDF.json +++ b/vocabularies/PDF.json @@ -88,7 +88,7 @@ "@Core.Description": "Font size" }, "Margin": { - "$Type": "Edm.Boolean", + "$Type": "Edm.Boolean", "$Nullable": true, "$DefaultValue": false, "@Core.Description": "Margin size" @@ -120,4 +120,4 @@ } } } -} +} \ No newline at end of file diff --git a/vocabularies/PDF.md b/vocabularies/PDF.md index f4520660..176235b7 100644 --- a/vocabularies/PDF.md +++ b/vocabularies/PDF.md @@ -19,13 +19,13 @@ Property|Type|Description :-------|:---|:---------- [DocumentDescriptionReference](./PDF.xml#L46:~:text=If this option is selected, the font size is automatically selected in such a way that all columns of a table fit on one page. Other layout options like margin, border and composite cell spacing are adapted accordingly, with respect to the chose scaling factor. -[ResultSizeDefault](./PDF.xml#L80:~:text=Default result size for PDF documents. Used if a the $top has not been provided. +[ArchiveFormat](./PDF.xml#L53:~:text=If this option is selected, the font size is automatically selected in such a way that all columns of a table fit on one page. Other layout options like margin, border and composite cell spacing are adapted accordingly, with respect to the chose scaling factor. +[ResultSizeDefault](./PDF.xml#L80:~:text=Default result size for PDF documents. Used if $top has not been provided. [ResultSizeMaximum](./PDF.xml#L86:~:text=Max result size for PDF documents. Used if $top has been provided and $top > ResultSizeMaximum From de246cb24db2eff450aad8cb02a8deeb2bfbe86f Mon Sep 17 00:00:00 2001 From: BerSie Date: Wed, 6 Apr 2022 13:30:10 +0200 Subject: [PATCH 05/24] Multilineparameter (#175) * Allow MultiLineText parameters * auto-refreshed * Update vocabularies/UI.xml adapt documentation Co-authored-by: Ralf Handl * auto-refreshed Co-authored-by: Ralf Handl --- vocabularies/UI.json | 5 +++-- vocabularies/UI.md | 2 +- vocabularies/UI.xml | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/vocabularies/UI.json b/vocabularies/UI.json index a4171818..43190b5a 100644 --- a/vocabularies/UI.json +++ b/vocabularies/UI.json @@ -1557,9 +1557,10 @@ "$DefaultValue": true, "$AppliesTo": [ "Property", - "PropertyValue" + "PropertyValue", + "Parameter" ], - "@Core.Description": "Properties annotated with this annotation should be rendered as multi-line text (e.g. text area)", + "@Core.Description": "Properties and parameters annotated with this annotation should be rendered as multi-line text (e.g. text area)", "@Core.RequiresType": "Edm.String" }, "Placeholder": { diff --git a/vocabularies/UI.md b/vocabularies/UI.md index 253aacee..c4366530 100644 --- a/vocabularies/UI.md +++ b/vocabularies/UI.md @@ -52,7 +52,7 @@ Term|Type|Description [Gallery](./UI.xml#L1326:~:text=Target MUST reference a UI.MediaResource [IsImageURL](./UI.xml#L1331:~:text=Properties and terms annotated with this term MUST contain a valid URL referencing an resource with a MIME type image
Can be annotated with:
- [IsNaturalPerson](Common.md#IsNaturalPerson) [IsImage](./UI.xml#L1341:~:text=Properties annotated with this term MUST be a stream property annotated with a MIME type image. Entity types annotated with this term MUST be a media entity type annotated with a MIME type image.
Can be annotated with:
- [IsNaturalPerson](Common.md#IsNaturalPerson) -[MultiLineText](./UI.xml#L1352:~:text=Properties annotated with this annotation should be rendered as multi-line text (e.g. text area) +[MultiLineText](./UI.xml#L1352:~:text=Properties and parameters annotated with this annotation should be rendered as multi-line text (e.g. text area) [Placeholder](./UI.xml#L1357:~:text=A short, human-readable text that gives a hint or an example to help the user with data entry [TextArrangement](./UI.xml#L1363:~:text=Describes the arrangement of a code or ID value and its text
If used for a single property the Common.Text annotation is annotated [Importance](./UI.xml#L1382:~:text=Expresses the importance of e.g. a DataField or an annotation diff --git a/vocabularies/UI.xml b/vocabularies/UI.xml index 5ca0094e..d2387ec1 100644 --- a/vocabularies/UI.xml +++ b/vocabularies/UI.xml @@ -1349,8 +1349,8 @@ The trend is
- - + + From ff8b52fbb1acf21085251228d49f02f783c739b8 Mon Sep 17 00:00:00 2001 From: Ralf Handl Date: Thu, 14 Apr 2022 09:39:17 +0200 Subject: [PATCH 06/24] Graph.traceId: new instance annotation for error messages (#106) * New instance annotation for error messages * Removed obsolete term `links` --- vocabularies/Graph.json | 66 ++++++++++++++++------------------------- vocabularies/Graph.md | 22 ++++---------- vocabularies/Graph.xml | 46 ++++++++++++---------------- 3 files changed, 51 insertions(+), 83 deletions(-) diff --git a/vocabularies/Graph.json b/vocabularies/Graph.json index ea72d955..ba04f60f 100644 --- a/vocabularies/Graph.json +++ b/vocabularies/Graph.json @@ -9,6 +9,14 @@ } ] }, + "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.JSON.V1.json": { + "$Include": [ + { + "$Namespace": "Org.OData.JSON.V1", + "$Alias": "JSON" + } + ] + }, "https://sap.github.io/odata-vocabularies/vocabularies/Common.json": { "$Include": [ { @@ -37,56 +45,34 @@ "href": "https://github.com/sap/odata-vocabularies/blob/main/vocabularies/Graph.md" } ], - "links": { + "traceId": { "$Kind": "Term", - "$Collection": true, - "$Type": "Graph.link", - "$AppliesTo": [ - "EntityType" - ], "@Common.Experimental": true, - "@Core.Description": "Navigation links" + "@Common.IsInstanceAnnotation": true, + "@Core.Description": "The traceId contains a unique string that is preserved across multiple requests and log files. It is used in error responses to help diagnose problems by correlating log entries." }, - "link": { - "$Kind": "ComplexType", + "Details": { + "$Kind": "Term", + "$Type": "Graph.DetailsType", "@Common.Experimental": true, - "@Core.Description": "Navigation link", - "title": { - "$Nullable": true, - "@Core.Description": "Title of the navigation link" - }, - "alias": { - "$Nullable": true, - "@Core.Description": "Name of the virtual navigation property" - }, - "target": { - "$Nullable": true, - "@Core.Description": "Name of the target entity set" - }, - "parameters": { - "$Collection": true, - "$Type": "Graph.binding", - "@Core.Description": "Map of parameter names in the target operation to property paths in the annotated entity type" - }, - "filter": { - "$Collection": true, - "$Type": "Graph.binding", - "@Core.Description": "Map of single-valued property paths in the target entity to property paths in the annotated entity type", - "@Core.LongDescription": "Used to construct a `$filter` expression and triggers the `Read` (list) operation on the target entity set" - } + "@Common.IsInstanceAnnotation": true, + "@Core.Description": "Graph-specific details for error responses" }, - "binding": { + "DetailsType": { "$Kind": "ComplexType", "@Common.Experimental": true, - "source": { - "$Type": "Edm.PropertyPath", + "@Core.Description": "Graph-specific details for error responses", + "url": { "$Nullable": true, - "@Core.Description": "Path to primitive property in the annotated entity type" + "@Common.Experimental": true, + "@Core.IsURL": true, + "@Core.Description": "URL sent to the business system tenant" }, - "target": { - "$Type": "Edm.PropertyPath", + "body": { + "$Type": "JSON.JSON", "$Nullable": true, - "@Core.Description": "Path to primitive property in the target entity set" + "@Common.Experimental": true, + "@Core.Description": "Request body sent to the business system tenant" } } } diff --git a/vocabularies/Graph.md b/vocabularies/Graph.md index b7e2920f..200638e1 100644 --- a/vocabularies/Graph.md +++ b/vocabularies/Graph.md @@ -8,23 +8,13 @@ Terms for SAP Graph Term|Type|Description :---|:---|:---------- -[links](./Graph.xml#L36:~:text=Navigation links +[traceId](./Graph.xml#L39:~:text=The traceId contains a unique string that is preserved across multiple requests and log files. It is used in error responses to help diagnose problems by correlating log entries. +[Details](./Graph.xml#L45:~:text=Graph-specific details for error responses -## [link](./Graph.xml#L41:~:text=[DetailsType](./Graph.xml#L50:~:text=Used to construct a `$filter` expression and triggers the `Read` (list) operation on the target entity set - -## [binding](./Graph.xml#L62:~:text= + + + @@ -33,39 +36,28 @@ - + - + + - + - - - - - - - - - - - - - - - - - - - - + + + + - - + + + + + - - + + + From e29420537c218dba3f368eca8e29ed928bdf9dbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Heiko=20Thei=C3=9Fen?= Date: Tue, 26 Apr 2022 17:50:12 +0200 Subject: [PATCH 07/24] Adapt Hierarchy.RecursiveHierarchy to Aggregation.RecursiveHierarchy (#177) --- vocabularies/Hierarchy.json | 16 +++------------- vocabularies/Hierarchy.md | 16 +++++++--------- vocabularies/Hierarchy.xml | 14 ++++++-------- 3 files changed, 16 insertions(+), 30 deletions(-) diff --git a/vocabularies/Hierarchy.json b/vocabularies/Hierarchy.json index 43aaa105..68d91ea9 100644 --- a/vocabularies/Hierarchy.json +++ b/vocabularies/Hierarchy.json @@ -47,31 +47,21 @@ "RecursiveHierarchy": { "$Kind": "Term", "$Type": "Hierarchy.RecursiveHierarchyType", - "$Nullable": true, "$AppliesTo": [ - "EntityType", - "ComplexType" + "EntityType" ], "$BaseTerm": "Aggregation.RecursiveHierarchy", "@Common.Experimental": true, - "@Core.Description": "Defines a recursive hierarchy." + "@Core.Description": "Defines a recursive hierarchy", + "@Core.LongDescription": "The [base term](https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Aggregation.V1.html#RecursiveHierarchy)\n governs what are the nodes and parents in the hierarchy, whereas this annotation designates properties that contain derived information." }, "RecursiveHierarchyType": { "$Kind": "ComplexType", "@Common.Experimental": true, - "ParentNodeProperty": { - "$Type": "Edm.PropertyPath", - "@Core.Description": "Property holding the parent hierarchy node value" - }, "ExternalKeyProperty": { "$Type": "Edm.PropertyPath", "@Core.Description": "Property holding the external key value for a node" }, - "ValueProperty": { - "$Type": "Edm.PropertyPath", - "$Nullable": true, - "@Core.Description": "Property for whose values the hierarchy is defined" - }, "DescendantCountProperty": { "$Type": "Edm.PropertyPath", "$Nullable": true, diff --git a/vocabularies/Hierarchy.md b/vocabularies/Hierarchy.md index 5f44a091..ace35fa8 100644 --- a/vocabularies/Hierarchy.md +++ b/vocabularies/Hierarchy.md @@ -8,17 +8,15 @@ Terms for Hierarchies Term|Type|Description :---|:---|:---------- -[RecursiveHierarchy](./Hierarchy.xml#L38:~:text=Defines a recursive hierarchy. +[RecursiveHierarchy](./Hierarchy.xml#L38:~:text=Defines a recursive hierarchy
The [base term](https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Aggregation.V1.html#RecursiveHierarchy) governs what are the nodes and parents in the hierarchy, whereas this annotation designates properties that contain derived information. -## [RecursiveHierarchyType](./Hierarchy.xml#L42:~:text=[RecursiveHierarchyType](./Hierarchy.xml#L46:~:text=The descendant count of a node is the number of its descendants in the hierarchy structure of the result considering only those nodes matching any specified $filter and $search. A property holding descendant counts has an integer data type. -[DrillStateProperty](./Hierarchy.xml#L57:~:text=The drill state is indicated by one of the following string values: `collapsed`, `expanded`, `leaf`. For an expanded node, its children are included in the result collection. For a collapsed node, the children are included in the entity set, but they are not part of the result collection. Retrieving them requires a relaxed filter expression or a separate request filtering on the parent node ID with the ID of the collapsed node. A leaf does not have any child in the entity set. -[SiblingRankProperty](./Hierarchy.xml#L61:~:text=The sibling rank of a node is the index of the node in the sequence of all nodes with the same parent created by preorder traversal of the hierarchy structure after evaluating the $filter expression in the request excluding any conditions on key properties. The first sibling is at position 0. -[PreorderRankProperty](./Hierarchy.xml#L65:~:text=The preorder rank of a node expresses its position in the sequence of nodes created from preorder traversal of the hierarchy structure after evaluating the $filter expression in the request excluding any conditions on key properties. The first node in preorder traversal has rank 0. +[ExternalKeyProperty](./Hierarchy.xml#L48:~:text=The descendant count of a node is the number of its descendants in the hierarchy structure of the result considering only those nodes matching any specified $filter and $search. A property holding descendant counts has an integer data type. +[DrillStateProperty](./Hierarchy.xml#L55:~:text=The drill state is indicated by one of the following string values: `collapsed`, `expanded`, `leaf`. For an expanded node, its children are included in the result collection. For a collapsed node, the children are included in the entity set, but they are not part of the result collection. Retrieving them requires a relaxed filter expression or a separate request filtering on the parent node ID with the ID of the collapsed node. A leaf does not have any child in the entity set. +[SiblingRankProperty](./Hierarchy.xml#L59:~:text=The sibling rank of a node is the index of the node in the sequence of all nodes with the same parent created by preorder traversal of the hierarchy structure after evaluating the $filter expression in the request excluding any conditions on key properties. The first sibling is at position 0. +[PreorderRankProperty](./Hierarchy.xml#L63:~:text=The preorder rank of a node expresses its position in the sequence of nodes created from preorder traversal of the hierarchy structure after evaluating the $filter expression in the request excluding any conditions on key properties. The first node in preorder traversal has rank 0. diff --git a/vocabularies/Hierarchy.xml b/vocabularies/Hierarchy.xml index d852ae72..ff587ed9 100644 --- a/vocabularies/Hierarchy.xml +++ b/vocabularies/Hierarchy.xml @@ -35,21 +35,19 @@
- + - + + + The [base term](https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Aggregation.V1.html#RecursiveHierarchy) + governs what are the nodes and parents in the hierarchy, whereas this annotation designates properties that contain derived information. + - - - - - - From 6c775ab997d3f19a0a47c8a60dbe23a97911c592 Mon Sep 17 00:00:00 2001 From: Ralf Handl Date: Wed, 27 Apr 2022 08:45:40 +0200 Subject: [PATCH 08/24] No nullable Boolean (#179) --- vocabularies/PDF.json | 8 -------- vocabularies/PDF.md | 16 ++++++++-------- vocabularies/PDF.xml | 16 ++++++++-------- 3 files changed, 16 insertions(+), 24 deletions(-) diff --git a/vocabularies/PDF.json b/vocabularies/PDF.json index 3160a5d2..98b17023 100644 --- a/vocabularies/PDF.json +++ b/vocabularies/PDF.json @@ -59,49 +59,41 @@ }, "ArchiveFormat": { "$Type": "Edm.Boolean", - "$Nullable": true, "$DefaultValue": false, "@Core.Description": "PDFA conformant format" }, "Signature": { "$Type": "Edm.Boolean", - "$Nullable": true, "$DefaultValue": false, "@Core.Description": "Signing the document" }, "CoverPage": { "$Type": "Edm.Boolean", - "$Nullable": true, "$DefaultValue": false, "@Core.Description": "Cover Page" }, "FontName": { "$Type": "Edm.Boolean", - "$Nullable": true, "$DefaultValue": false, "@Core.Description": "Font name" }, "FontSize": { "$Type": "Edm.Boolean", - "$Nullable": true, "$DefaultValue": false, "@Core.Description": "Font size" }, "Margin": { "$Type": "Edm.Boolean", - "$Nullable": true, "$DefaultValue": false, "@Core.Description": "Margin size" }, "Border": { "$Type": "Edm.Boolean", - "$Nullable": true, "$DefaultValue": false, "@Core.Description": "Border size of the table" }, "FitToPage": { "$Type": "Edm.Boolean", - "$Nullable": true, "$DefaultValue": false, "@Core.Description": "Fit to page", "@Core.LongDescription": "If this option is selected, the font size is automatically selected in such a way that all columns of a table fit on one page. Other layout options like margin, border and composite cell spacing are adapted accordingly, with respect to the chose scaling factor." diff --git a/vocabularies/PDF.md b/vocabularies/PDF.md index 176235b7..07df4c80 100644 --- a/vocabularies/PDF.md +++ b/vocabularies/PDF.md @@ -19,13 +19,13 @@ Property|Type|Description :-------|:---|:---------- [DocumentDescriptionReference](./PDF.xml#L46:~:text=If this option is selected, the font size is automatically selected in such a way that all columns of a table fit on one page. Other layout options like margin, border and composite cell spacing are adapted accordingly, with respect to the chose scaling factor. +[ArchiveFormat](./PDF.xml#L53:~:text=If this option is selected, the font size is automatically selected in such a way that all columns of a table fit on one page. Other layout options like margin, border and composite cell spacing are adapted accordingly, with respect to the chose scaling factor. [ResultSizeDefault](./PDF.xml#L80:~:text=Default result size for PDF documents. Used if $top has not been provided. [ResultSizeMaximum](./PDF.xml#L86:~:text=Max result size for PDF documents. Used if $top has been provided and $top > ResultSizeMaximum diff --git a/vocabularies/PDF.xml b/vocabularies/PDF.xml index f6701b2b..06e9eb23 100644 --- a/vocabularies/PDF.xml +++ b/vocabularies/PDF.xml @@ -50,28 +50,28 @@ - + - + - + - + - + - + - + - + If this option is selected, the font size is automatically selected in such a way that all columns of a table fit on one page. Other layout options like margin, border and composite cell spacing are adapted accordingly, with respect to the chose scaling factor. From e2a90633ea55dfba94ebaa3d27efa8401676e678 Mon Sep 17 00:00:00 2001 From: Ralf Handl Date: Tue, 3 May 2022 15:47:40 +0200 Subject: [PATCH 09/24] Fix: deprecate Common.RecursiveHierarchy (#181) Deprecated term Common.RecursiveHierarchy and its ...Type --- vocabularies/Common.json | 12 ++++++++++++ vocabularies/Common.md | 32 +++++++++++++------------------- vocabularies/Common.xml | 16 ++++++++++++++++ 3 files changed, 41 insertions(+), 19 deletions(-) diff --git a/vocabularies/Common.json b/vocabularies/Common.json index eefd2080..51e59f37 100644 --- a/vocabularies/Common.json +++ b/vocabularies/Common.json @@ -1485,10 +1485,22 @@ "$Kind": "Term", "$Type": "Common.RecursiveHierarchyType", "$BaseTerm": "Aggregation.RecursiveHierarchy", + "@Core.Revisions": [ + { + "Kind": "Deprecated", + "Description": "Use terms [Aggregation.RecursiveHierarchy](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Aggregation.V1.md#RecursiveHierarchy) and [Hierarchy.RecursiveHierarchy](https://github.com/SAP/odata-vocabularies/blob/main/vocabularies/Hierarchy.md#RecursiveHierarchy) instead" + } + ], "@Core.Description": "Defines a recursive hierarchy." }, "RecursiveHierarchyType": { "$Kind": "ComplexType", + "@Core.Revisions": [ + { + "Kind": "Deprecated", + "Description": "Use terms [Aggregation.RecursiveHierarchy](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Aggregation.V1.md#RecursiveHierarchy) and [Hierarchy.RecursiveHierarchy](https://github.com/SAP/odata-vocabularies/blob/main/vocabularies/Hierarchy.md#RecursiveHierarchy) instead" + } + ], "ExternalNodeKeyProperty": { "$Type": "Edm.PropertyPath", "$Nullable": true, diff --git a/vocabularies/Common.md b/vocabularies/Common.md index 7a3355ef..53ff28d0 100644 --- a/vocabularies/Common.md +++ b/vocabularies/Common.md @@ -99,16 +99,16 @@ Term|Type|Description [FilterDefaultValueHigh](./Common.xml#L1221:~:text=A default upper limit for the property to be used in 'less than or equal' filter expressions. [DerivedFilterDefaultValue](./Common.xml#L1226:~:text=Function import to derive a default value for the property from a given context in order to use it in filter expressions.
Function import has two parameters of complex types:
- `parameters`, a structure resembling the entity type the parameter entity set related to the entity set of the annotated property
- `properties`, a structure resembling the type of the entity set of the annotated property
The return type must be of the same type as the annotated property.
Arguments passed to the function import are used as context for deriving the default value. The function import returns this default value, or null in case such a value could not be determined. [SortOrder](./Common.xml#L1250:~:text=List of sort criteria
The items of the annotated entity set or the items of the collection of the annotated entity type are sorted by the first entry of the SortOrder collection. Items with same value for this first sort criteria are sorted by the second entry of the SortOrder collection, and so on. -[RecursiveHierarchy](./Common.xml#L1306:~:text=Defines a recursive hierarchy. -[CreatedAt](./Common.xml#L1338:~:text=Creation timestamp -[CreatedBy](./Common.xml#L1342:~:text=First editor -[ChangedAt](./Common.xml#L1346:~:text=Last modification timestamp -[ChangedBy](./Common.xml#L1350:~:text=Last editor -[OriginalProtocolVersion](./Common.xml#L1362:~:text=Original protocol version of a converted (V4) CSDL document, allowed values `2.0` and `3.0` -[ApplyMultiUnitBehaviorForSortingAndFiltering](./Common.xml#L1367:~:text=Sorting and filtering of amounts in multiple currencies needs special consideration
TODO: add link to UX documentation on https://experience.sap.com/fiori-design/ -[mediaUploadLink](./Common.xml#L1373:~:text=URL for uploading new media content to a Document Management Service
In contrast to the `@odata.mediaEditLink` this URL allows to upload new media content without directly changing a stream property or media resource. The upload request typically uses HTTP POST with `Content-Type: multipart/form-data` following RFC 7578. The upload request must contain one multipart representing the content of the file. The `name` parameter in the `Content-Disposition` header (as described in RFC 7578) is irrelevant, but the `filename` parameter is expected. If the request succeeds the response will contain a JSON body of `Content-Type: application/json` with a JSON property `readLink`. The newly uploaded media resource can be linked to the stream property by changing the `@odata.mediaReadLink` to the value of this `readLink` in a subsequent PATCH request to the OData entity. -[PrimitivePropertyPath](./Common.xml#L1388:~:text=A term or term property with this tag whose type is (a collection of) `Edm.PropertyPath` MUST resolve to a primitive structural property -[WebSocketBaseURL](./Common.xml#L1393:~:text=Base URL for WebSocket connections +[RecursiveHierarchy](./Common.xml#L1306:~:text=Use terms [Aggregation.RecursiveHierarchy](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Aggregation.V1.md#RecursiveHierarchy) and [Hierarchy.RecursiveHierarchy](https://github.com/SAP/odata-vocabularies/blob/main/vocabularies/Hierarchy.md#RecursiveHierarchy) instead +[CreatedAt](./Common.xml#L1354:~:text=Creation timestamp +[CreatedBy](./Common.xml#L1358:~:text=First editor +[ChangedAt](./Common.xml#L1362:~:text=Last modification timestamp +[ChangedBy](./Common.xml#L1366:~:text=Last editor +[OriginalProtocolVersion](./Common.xml#L1378:~:text=Original protocol version of a converted (V4) CSDL document, allowed values `2.0` and `3.0` +[ApplyMultiUnitBehaviorForSortingAndFiltering](./Common.xml#L1383:~:text=Sorting and filtering of amounts in multiple currencies needs special consideration
TODO: add link to UX documentation on https://experience.sap.com/fiori-design/ +[mediaUploadLink](./Common.xml#L1389:~:text=URL for uploading new media content to a Document Management Service
In contrast to the `@odata.mediaEditLink` this URL allows to upload new media content without directly changing a stream property or media resource. The upload request typically uses HTTP POST with `Content-Type: multipart/form-data` following RFC 7578. The upload request must contain one multipart representing the content of the file. The `name` parameter in the `Content-Disposition` header (as described in RFC 7578) is irrelevant, but the `filename` parameter is expected. If the request succeeds the response will contain a JSON body of `Content-Type: application/json` with a JSON property `readLink`. The newly uploaded media resource can be linked to the stream property by changing the `@odata.mediaReadLink` to the value of this `readLink` in a subsequent PATCH request to the OData entity. +[PrimitivePropertyPath](./Common.xml#L1404:~:text=A term or term property with this tag whose type is (a collection of) `Edm.PropertyPath` MUST resolve to a primitive structural property +[WebSocketBaseURL](./Common.xml#L1409:~:text=Base URL for WebSocket connections ## [TextFormatType](./Common.xml#L108:~:text=If the annotation referenced by the annotation path does not apply to the same collection of entities as the one being sorted according to the [`UI.PresentationVariant`](UI.md#PresentationVariant) or `Common.SortOrder` annotation, this instance of `UI.PresentationVariant/SortOrder` or `Common.SortOrder` MUST be silently ignored.
Allowed terms:
- [AggregatedProperty](#AggregatedProperty)
- [CustomAggregate](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Aggregation.V1.md#CustomAggregate) [Descending](./Common.xml#L1286:~:text=[RecursiveHierarchyType](./Common.xml#L1311:~:text=[RecursiveHierarchyType](./Common.xml#L1319:~:text=[UserID](./Common.xml#L1354:~:text=[UserID](./Common.xml#L1370:~:text= + + + + + + + + Defines a recursive hierarchy. + + + + + + + + From e8fef31ee1e9d777becb8e7a2d2afe921ef0653a Mon Sep 17 00:00:00 2001 From: Ralf Handl Date: Tue, 17 May 2022 14:20:45 +0200 Subject: [PATCH 10/24] Generalize UI.DataField to collections of primitive values in addition to primitive values (#176) --- vocabularies/UI.json | 27 +++++++++++--- vocabularies/UI.md | 83 +++++++++++++++++++++++--------------------- vocabularies/UI.xml | 15 ++++++-- 3 files changed, 80 insertions(+), 45 deletions(-) diff --git a/vocabularies/UI.json b/vocabularies/UI.json index 43190b5a..e878a0ac 100644 --- a/vocabularies/UI.json +++ b/vocabularies/UI.json @@ -1,5 +1,5 @@ { - "$Version": "4.0", + "$Version": "4.01", "$Reference": { "https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.json": { "$Include": [ @@ -228,13 +228,13 @@ "Template": "{MaterialName} - {MaterialClassName}", "Data": { "MaterialName": { - "@odata.type": "#UI.DataField", + "@type": "#UI.DataField", "Value": { "$Path": "Material" } }, "MaterialClassName": { - "@odata.type": "#UI.DataField", + "@type": "#UI.DataField", "Value": { "$Path": "MaterialClass" } @@ -1818,8 +1818,12 @@ "$BaseType": "UI.DataFieldAbstract", "@Core.Description": "A piece of data", "Value": { - "$Type": "Edm.PrimitiveType", + "$Type": "Edm.Untyped", "@Core.Description": "The data field's value", + "@Validation.DerivedTypeConstraint": [ + "Edm.PrimitiveType", + "Collection(Edm.PrimitiveType)" + ], "@Core.IsLanguageDependent": true } }, @@ -1828,6 +1832,9 @@ "$BaseType": "UI.DataField", "@Core.Description": "A piece of data that allows triggering an OData action", "@Core.LongDescription": "The action is tied to a data value which should be rendered as a hyperlink. This is in contrast to [DataFieldForAction](#DataFieldForAction)) which is not tied to a specific data value.", + "Value": { + "$Type": "Edm.PrimitiveType" + }, "Action": { "$Type": "Common.QualifiedName", "@Core.Description": "Qualified name of an Action, Function, ActionImport or FunctionImport in scope" @@ -1838,6 +1845,9 @@ "$BaseType": "UI.DataField", "@Core.Description": "A piece of data that allows triggering intent-based UI navigation", "@Core.LongDescription": "The navigation intent is is expressed as a Semantic Object and optionally an Action on that object.\n\nIt is tied to a data value which should be rendered as a hyperlink.\nThis is in contrast to [DataFieldForIntentBasedNavigation](#DataFieldForIntentBasedNavigation) which is not tied to a specific data value.", + "Value": { + "$Type": "Edm.PrimitiveType" + }, "SemanticObject": { "@Core.Description": "Name of the Semantic Object" }, @@ -1856,6 +1866,9 @@ "$BaseType": "UI.DataField", "@Core.Description": "A piece of data that allows navigating to related data", "@Core.LongDescription": "It should be rendered as a hyperlink", + "Value": { + "$Type": "Edm.PrimitiveType" + }, "Target": { "$Type": "Edm.NavigationPropertyPath", "@Core.Description": "Contains either a navigation property or a term cast, where term is of type Edm.EntityType or a concrete entity type or a collection of these types" @@ -1866,6 +1879,9 @@ "$BaseType": "UI.DataField", "@Core.Description": "A piece of data that allows navigating to other information on the Web", "@Core.LongDescription": "It should be rendered as a hyperlink", + "Value": { + "$Type": "Edm.PrimitiveType" + }, "Url": { "@Core.Description": "Target of the hyperlink", "@Core.IsURL": true @@ -1881,6 +1897,9 @@ "$BaseType": "UI.DataField", "@Common.Experimental": true, "@Core.Description": "Collection of OData actions and intent based navigations", + "Value": { + "$Type": "Edm.PrimitiveType" + }, "Actions": { "$Collection": true, "$Type": "UI.DataField", diff --git a/vocabularies/UI.md b/vocabularies/UI.md index c4366530..ba5e740a 100644 --- a/vocabularies/UI.md +++ b/vocabularies/UI.md @@ -62,15 +62,15 @@ Term|Type|Description [DeleteHidden](./UI.xml#L1415:~:text=EntitySets annotated with this term can control the visibility of the Delete operation dynamically
The annotation value should be a path to another property from the same or a related entity. [HiddenFilter](./UI.xml#L1420:~:text=Properties annotated with this term will not be rendered as filter criteria if the annotation evaluates to true.
Properties annotated with `HiddenFilter` are intended as parts of a `$filter` expression that cannot be directly influenced by end users. The properties will be rendered in all other places, e.g. table columns or form fields. This is in contrast to properties annotated with [Hidden](#Hidden) that are not rendered at all. If a navigation property is annotated with `HiddenFilter` true, all subsequent parts are hidden in filter - independent of their own potential `HiddenFilter` annotations. [DataFieldDefault](./UI.xml#L1429:~:text=Default representation of a property as a datafield, e.g. when the property is added as a table column or form field via personalization
Only concrete subtypes of [DataFieldAbstract](#DataFieldAbstract) can be used for a DataFieldDefault. For type [DataField](#DataField) and its subtypes the annotation target SHOULD be the same property that is referenced via a path expression in the `Value` of the datafield. -[Criticality](./UI.xml#L1621:~:text=Service-calculated criticality, alternative to UI.CriticalityCalculation -[CriticalityCalculation](./UI.xml#L1625:~:text=Parameters for client-calculated criticality, alternative to UI.Criticality -[Emphasized](./UI.xml#L1629:~:text=Highlight something that is of special interest
The usage of a property or operation should be highlighted as it's of special interest for the end user -[OrderBy](./UI.xml#L1635:~:text=Sort by the referenced property instead of by the annotated property
Example: annotated property `SizeCode` has string values XS, S, M, L, XL, referenced property SizeOrder has numeric values -2, -1, 0, 1, 2. Numeric ordering by SizeOrder will be more understandable than lexicographic ordering by SizeCode. -[ParameterDefaultValue](./UI.xml#L1641:~:text=Define default values for action parameters
For unbound actions the default value can either be a constant expression, or a dynamic expression using absolute paths, e.g. singletons or function import results. Whereas for bound actions the bound entity and its properties and associated properties can be used as default values -[RecommendationState](./UI.xml#L1647:~:text=Indicates whether a field contains or has a recommended value
Intelligent systems can help users by recommending input the user may "prefer". -[RecommendationList](./UI.xml#L1677:~:text=Specifies how to get a list of recommended values for a property or parameter
Intelligent systems can help users by recommending input the user may "prefer". -[ExcludeFromNavigationContext](./UI.xml#L1709:~:text=The contents of this property must not be propagated to the app-to-app navigation context -[DoNotCheckScaleOfMeasuredQuantity](./UI.xml#L1713:~:text=Do not check the number of fractional digits of the annotated measured quantity
The annotated property contains a measured quantity, and the user may enter more fractional digits than defined for the corresponding unit of measure.
This switches off the validation of user input with respect to decimals. +[Criticality](./UI.xml#L1632:~:text=Service-calculated criticality, alternative to UI.CriticalityCalculation +[CriticalityCalculation](./UI.xml#L1636:~:text=Parameters for client-calculated criticality, alternative to UI.Criticality +[Emphasized](./UI.xml#L1640:~:text=Highlight something that is of special interest
The usage of a property or operation should be highlighted as it's of special interest for the end user +[OrderBy](./UI.xml#L1646:~:text=Sort by the referenced property instead of by the annotated property
Example: annotated property `SizeCode` has string values XS, S, M, L, XL, referenced property SizeOrder has numeric values -2, -1, 0, 1, 2. Numeric ordering by SizeOrder will be more understandable than lexicographic ordering by SizeCode. +[ParameterDefaultValue](./UI.xml#L1652:~:text=Define default values for action parameters
For unbound actions the default value can either be a constant expression, or a dynamic expression using absolute paths, e.g. singletons or function import results. Whereas for bound actions the bound entity and its properties and associated properties can be used as default values +[RecommendationState](./UI.xml#L1658:~:text=Indicates whether a field contains or has a recommended value
Intelligent systems can help users by recommending input the user may "prefer". +[RecommendationList](./UI.xml#L1688:~:text=Specifies how to get a list of recommended values for a property or parameter
Intelligent systems can help users by recommending input the user may "prefer". +[ExcludeFromNavigationContext](./UI.xml#L1720:~:text=The contents of this property must not be propagated to the app-to-app navigation context +[DoNotCheckScaleOfMeasuredQuantity](./UI.xml#L1724:~:text=Do not check the number of fractional digits of the annotated measured quantity
The annotated property contains a measured quantity, and the user may enter more fractional digits than defined for the corresponding unit of measure.
This switches off the validation of user input with respect to decimals. ## [HeaderInfoType](./UI.xml#L62:~:text=[DataFieldWithAction](./UI.xml#L1563:~:text=[DataFieldWithAction](./UI.xml#L1569:~:text=[DataFieldWithIntentBasedNavigation](./UI.xml#L1571:~:text=[DataFieldWithIntentBasedNavigation](./UI.xml#L1578:~:text=[DataFieldWithNavigationPath](./UI.xml#L1590:~:text=[DataFieldWithNavigationPath](./UI.xml#L1598:~:text=[DataFieldWithUrl](./UI.xml#L1600:~:text=[DataFieldWithUrl](./UI.xml#L1609:~:text=[DataFieldWithActionGroup](./UI.xml#L1613:~:text=[DataFieldWithActionGroup](./UI.xml#L1623:~:text=[RecommendationStateType](./UI.xml#L1654:~:text=[RecommendationStateType](./UI.xml#L1665:~:text=[RecommendationListType](./UI.xml#L1684:~:text=[RecommendationListType](./UI.xml#L1695:~:text=[RecommendationBinding](./UI.xml#L1700:~:text=[RecommendationBinding](./UI.xml#L1711:~:text= - + @@ -1554,8 +1554,14 @@ It is NOT tied to a data value (in contrast to [DataFieldWithIntentBasedNavigati - + + + + Edm.PrimitiveType + Collection(Edm.PrimitiveType) + + @@ -1563,6 +1569,7 @@ It is NOT tied to a data value (in contrast to [DataFieldWithIntentBasedNavigati + @@ -1576,6 +1583,7 @@ It is NOT tied to a data value (in contrast to [DataFieldWithIntentBasedNavigati It is tied to a data value which should be rendered as a hyperlink. This is in contrast to [DataFieldForIntentBasedNavigation](#DataFieldForIntentBasedNavigation) which is not tied to a specific data value. + @@ -1590,6 +1598,7 @@ This is in contrast to [DataFieldForIntentBasedNavigation](#DataFieldForIntentBa + Contains either a navigation property or a term cast, where term is of type Edm.EntityType or a concrete entity type or a collection of these types @@ -1600,6 +1609,7 @@ This is in contrast to [DataFieldForIntentBasedNavigation](#DataFieldForIntentBa + @@ -1613,6 +1623,7 @@ This is in contrast to [DataFieldForIntentBasedNavigation](#DataFieldForIntentBa + From 3a27d161027b50288141549040f29f5f45a8595f Mon Sep 17 00:00:00 2001 From: Ralf Handl Date: Tue, 17 May 2022 14:46:31 +0200 Subject: [PATCH 11/24] Allow Common.FieldControl on parameters (#183) --- vocabularies/Common.json | 3 ++- vocabularies/Common.md | 2 +- vocabularies/Common.xml | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/vocabularies/Common.json b/vocabularies/Common.json index 51e59f37..81a1b748 100644 --- a/vocabularies/Common.json +++ b/vocabularies/Common.json @@ -422,10 +422,11 @@ "$DefaultValue": "Optional", "$AppliesTo": [ "Property", + "Parameter", "Record", "EntityType" ], - "@Core.Description": "Control state of a property, or the media stream of a media entity", + "@Core.Description": "Control state of a property, parameter, or the media stream of a media entity", "@Core.LongDescription": "This term can be used for static field control, providing an enumeration member value in $metadata, as well as dynamically, providing a `Path` expression.\n\nIn the dynamic case the property referenced by the `Path` expression MUST be of type `Edm.Byte` to accommodate OData V2 services as well as V4 infrastructures that don't support enumeration types.", "@Common.IsInstanceAnnotation": true }, diff --git a/vocabularies/Common.md b/vocabularies/Common.md index 53ff28d0..4bb71c56 100644 --- a/vocabularies/Common.md +++ b/vocabularies/Common.md @@ -39,7 +39,7 @@ Term|Type|Description [SemanticObjectUnavailableActions](./Common.xml#L282:~:text=List of actions that are not available in the current state of the instance of the Semantic Object [IsInstanceAnnotation](./Common.xml#L286:~:text=Term can also be used as instance annotation; AppliesTo of this term specifies where it can be applied [FilterExpressionRestrictions](./Common.xml#L316:~:text=Use term Capabilities.FilterRestrictions instead -[FieldControl](./Common.xml#L359:~:text=Control state of a property, or the media stream of a media entity
This term can be used for static field control, providing an enumeration member value in $metadata, as well as dynamically, providing a `Path` expression.
In the dynamic case the property referenced by the `Path` expression MUST be of type `Edm.Byte` to accommodate OData V2 services as well as V4 infrastructures that don't support enumeration types. +[FieldControl](./Common.xml#L359:~:text=Control state of a property, parameter, or the media stream of a media entity
This term can be used for static field control, providing an enumeration member value in $metadata, as well as dynamically, providing a `Path` expression.
In the dynamic case the property referenced by the `Path` expression MUST be of type `Edm.Byte` to accommodate OData V2 services as well as V4 infrastructures that don't support enumeration types. [ExceptionCategory](./Common.xml#L392:~:text=A machine-readable exception category [Application](./Common.xml#L397:~:text=... [Timestamp](./Common.xml#L417:~:text=... diff --git a/vocabularies/Common.xml b/vocabularies/Common.xml index bcd03bb6..ff62f95d 100644 --- a/vocabularies/Common.xml +++ b/vocabularies/Common.xml @@ -356,8 +356,8 @@ - - + + From a1a0463267591e427bba250b56a77011075dbb6b Mon Sep 17 00:00:00 2001 From: Ralf Handl Date: Wed, 25 May 2022 14:22:11 +0200 Subject: [PATCH 12/24] Image stream in addition to ImageUrl (#185) * UI.HeaderInfo: new experimental stream property `Image` as an alternative to `ImageUrl` --- vocabularies/UI.json | 12 +- vocabularies/UI.md | 963 ++++++++++++++++++++++--------------------- vocabularies/UI.xml | 10 +- 3 files changed, 498 insertions(+), 487 deletions(-) diff --git a/vocabularies/UI.json b/vocabularies/UI.json index e878a0ac..460b821c 100644 --- a/vocabularies/UI.json +++ b/vocabularies/UI.json @@ -101,10 +101,16 @@ "UI.DataFieldForAnnotation" ] }, + "Image": { + "$Type": "Edm.Stream", + "$Nullable": true, + "@Common.Experimental": true, + "@Core.Description": "Image for an instance of the entity type. If the property has a valid value, it can be used for the visualization of the instance. If it is not available or not valid the value of the property `ImageUrl` can be used instead." + }, "ImageUrl": { "$Nullable": true, "@Core.IsURL": true, - "@Core.Description": "Image URL for an instance of the entity type. If the property ImageUrl has a valid value, it can be used for the visualization of the instance. If it is not available or not valid the property TypeImageUrl can be used instead." + "@Core.Description": "Image URL for an instance of the entity type. If the property has a valid value, it can be used for the visualization of the instance. If it is not available or not valid the value of the property `TypeImageUrl` can be used instead." }, "TypeImageUrl": { "$Nullable": true, @@ -114,7 +120,7 @@ "Initials": { "$Nullable": true, "@Common.Experimental": true, - "@Core.Description": "Latin letters to be used in case no ImageUrl or TypeImageUrl is present" + "@Core.Description": "Latin letters to be used in case no `Image`, `ImageUrl`, or `TypeImageUrl` is present" } }, "Identification": { @@ -150,7 +156,7 @@ "ImageUrl": { "$Nullable": true, "@Core.IsURL": true, - "@Core.Description": "Image URL for an instance of the entity type. If the property ImageUrl has a valid value, it can be used for the visualization of the instance. If it is not available or not valid the property TypeImageUrl can be used instead." + "@Core.Description": "Image URL for an instance of the entity type. If the property has a valid value, it can be used for the visualization of the instance. If it is not available or not valid the value of the property `TypeImageUrl` can be used instead." }, "TypeImageUrl": { "$Nullable": true, diff --git a/vocabularies/UI.md b/vocabularies/UI.md index ba5e740a..24504c92 100644 --- a/vocabularies/UI.md +++ b/vocabularies/UI.md @@ -21,56 +21,56 @@ a collection of business object instances, e.g. as a list or table. Term|Type|Description :---|:---|:---------- [HeaderInfo](./UI.xml#L58:~:text=Information for the header area of an entity representation. HeaderInfo is mandatory for main entity types of the model -[Identification](./UI.xml#L105:~:text=Collection of fields identifying the object -[Badge](./UI.xml#L110:~:text=Information usually displayed in the form of a business card -[LineItem](./UI.xml#L137:~:text=Collection of data fields for representation in a table or list -[StatusInfo](./UI.xml#L142:~:text=Collection of data fields describing the status of an entity -[FieldGroup](./UI.xml#L147:~:text=Group of fields with an optional label -[ConnectedFields](./UI.xml#L161:~:text=Group of semantically connected fields with a representation template and an optional label ([Example](./UI.xml#L163)) -[GeoLocations](./UI.xml#L226:~:text=Collection of geographic locations -[GeoLocation](./UI.xml#L230:~:text=Geographic location -[Contacts](./UI.xml#L250:~:text=Collection of contacts
Each collection item MUST reference an annotation of a Communication.Contact
Allowed terms:
- [Contact](Communication.md#Contact) -[MediaResource](./UI.xml#L261:~:text=Properties that describe a media resource -[DataPoint](./UI.xml#L315:~:text=Visualization of a single point of data, typically a number; may also be textual, e.g. a status value -[KPI](./UI.xml#L623:~:text=A Key Performance Indicator (KPI) bundles a SelectionVariant and a DataPoint, and provides details for progressive disclosure -[Chart](./UI.xml#L669:~:text=Visualization of multiple data points -[ValueCriticality](./UI.xml#L893:~:text=Assign criticalities to primitive values. This information can be used for semantic coloring. -[CriticalityLabels](./UI.xml#L906:~:text=Assign labels to criticalities. This information can be used for semantic coloring. When applied to a property, a label for a criticality must be provided, if more than one value of the annotated property has been assigned to the same criticality. There must be no more than one label per criticality. -[SelectionFields](./UI.xml#L927:~:text=Properties that might be relevant for filtering a collection of entities of this type -[Facets](./UI.xml#L935:~:text=Collection of facets -[HeaderFacets](./UI.xml#L939:~:text=Facets for additional object header information -[QuickViewFacets](./UI.xml#L943:~:text=Facets that may be used for a quick overview of the object -[QuickCreateFacets](./UI.xml#L947:~:text=Facets that may be used for a (quick) create of the object -[FilterFacets](./UI.xml#L951:~:text=Facets that reference UI.FieldGroup annotations to group filterable fields -[SelectionPresentationVariant](./UI.xml#L1018:~:text=A SelectionPresentationVariant bundles a Selection Variant and a Presentation Variant -[PresentationVariant](./UI.xml#L1042:~:text=Defines how the result of a queried collection of entities is shaped and how this result is displayed -[SelectionVariant](./UI.xml#L1155:~:text=A SelectionVariant denotes a combination of parameters and filters to query the annotated entity set -[ThingPerspective](./UI.xml#L1311:~:text=The annotated term is a Thing Perspective -[IsSummary](./UI.xml#L1314:~:text=This Facet and all included Facets are the summary of the thing. At most one Facet of a thing can be tagged with this term -[PartOfPreview](./UI.xml#L1318:~:text=This record and all included structural elements are part of the Thing preview
This term can be applied e.g. to UI.Facet and UI.DataField -[Map](./UI.xml#L1322:~:text=Target MUST reference a UI.GeoLocation, Communication.Address or a collection of these -[Gallery](./UI.xml#L1326:~:text=Target MUST reference a UI.MediaResource -[IsImageURL](./UI.xml#L1331:~:text=Properties and terms annotated with this term MUST contain a valid URL referencing an resource with a MIME type image
Can be annotated with:
- [IsNaturalPerson](Common.md#IsNaturalPerson) -[IsImage](./UI.xml#L1341:~:text=Properties annotated with this term MUST be a stream property annotated with a MIME type image. Entity types annotated with this term MUST be a media entity type annotated with a MIME type image.
Can be annotated with:
- [IsNaturalPerson](Common.md#IsNaturalPerson) -[MultiLineText](./UI.xml#L1352:~:text=Properties and parameters annotated with this annotation should be rendered as multi-line text (e.g. text area) -[Placeholder](./UI.xml#L1357:~:text=A short, human-readable text that gives a hint or an example to help the user with data entry -[TextArrangement](./UI.xml#L1363:~:text=Describes the arrangement of a code or ID value and its text
If used for a single property the Common.Text annotation is annotated -[Importance](./UI.xml#L1382:~:text=Expresses the importance of e.g. a DataField or an annotation -[Hidden](./UI.xml#L1397:~:text=Properties or facets (see UI.Facet) annotated with this term will not be rendered if the annotation evaluates to true.
Hidden properties usually carry technical information that is used for application control and is of no direct interest to end users. The annotation value may be an expression to dynamically hide or render the annotated feature. If a navigation property is annotated with `Hidden` true, all subsequent parts are hidden - independent of their own potential `Hidden` annotations. -[CreateHidden](./UI.xml#L1405:~:text=EntitySets annotated with this term can control the visibility of the Create operation dynamically
The annotation value should be a path to another property from a related entity. -[UpdateHidden](./UI.xml#L1410:~:text=EntitySets annotated with this term can control the visibility of the Edit/Save operation dynamically
The annotation value should be a path to another property from the same or a related entity. -[DeleteHidden](./UI.xml#L1415:~:text=EntitySets annotated with this term can control the visibility of the Delete operation dynamically
The annotation value should be a path to another property from the same or a related entity. -[HiddenFilter](./UI.xml#L1420:~:text=Properties annotated with this term will not be rendered as filter criteria if the annotation evaluates to true.
Properties annotated with `HiddenFilter` are intended as parts of a `$filter` expression that cannot be directly influenced by end users. The properties will be rendered in all other places, e.g. table columns or form fields. This is in contrast to properties annotated with [Hidden](#Hidden) that are not rendered at all. If a navigation property is annotated with `HiddenFilter` true, all subsequent parts are hidden in filter - independent of their own potential `HiddenFilter` annotations. -[DataFieldDefault](./UI.xml#L1429:~:text=Default representation of a property as a datafield, e.g. when the property is added as a table column or form field via personalization
Only concrete subtypes of [DataFieldAbstract](#DataFieldAbstract) can be used for a DataFieldDefault. For type [DataField](#DataField) and its subtypes the annotation target SHOULD be the same property that is referenced via a path expression in the `Value` of the datafield. -[Criticality](./UI.xml#L1632:~:text=Service-calculated criticality, alternative to UI.CriticalityCalculation -[CriticalityCalculation](./UI.xml#L1636:~:text=Parameters for client-calculated criticality, alternative to UI.Criticality -[Emphasized](./UI.xml#L1640:~:text=Highlight something that is of special interest
The usage of a property or operation should be highlighted as it's of special interest for the end user -[OrderBy](./UI.xml#L1646:~:text=Sort by the referenced property instead of by the annotated property
Example: annotated property `SizeCode` has string values XS, S, M, L, XL, referenced property SizeOrder has numeric values -2, -1, 0, 1, 2. Numeric ordering by SizeOrder will be more understandable than lexicographic ordering by SizeCode. -[ParameterDefaultValue](./UI.xml#L1652:~:text=Define default values for action parameters
For unbound actions the default value can either be a constant expression, or a dynamic expression using absolute paths, e.g. singletons or function import results. Whereas for bound actions the bound entity and its properties and associated properties can be used as default values -[RecommendationState](./UI.xml#L1658:~:text=Indicates whether a field contains or has a recommended value
Intelligent systems can help users by recommending input the user may "prefer". -[RecommendationList](./UI.xml#L1688:~:text=Specifies how to get a list of recommended values for a property or parameter
Intelligent systems can help users by recommending input the user may "prefer". -[ExcludeFromNavigationContext](./UI.xml#L1720:~:text=The contents of this property must not be propagated to the app-to-app navigation context -[DoNotCheckScaleOfMeasuredQuantity](./UI.xml#L1724:~:text=Do not check the number of fractional digits of the annotated measured quantity
The annotated property contains a measured quantity, and the user may enter more fractional digits than defined for the corresponding unit of measure.
This switches off the validation of user input with respect to decimals. +[Identification](./UI.xml#L109:~:text=Collection of fields identifying the object +[Badge](./UI.xml#L114:~:text=Information usually displayed in the form of a business card +[LineItem](./UI.xml#L141:~:text=Collection of data fields for representation in a table or list +[StatusInfo](./UI.xml#L146:~:text=Collection of data fields describing the status of an entity +[FieldGroup](./UI.xml#L151:~:text=Group of fields with an optional label +[ConnectedFields](./UI.xml#L165:~:text=Group of semantically connected fields with a representation template and an optional label ([Example](./UI.xml#L167)) +[GeoLocations](./UI.xml#L230:~:text=Collection of geographic locations +[GeoLocation](./UI.xml#L234:~:text=Geographic location +[Contacts](./UI.xml#L254:~:text=Collection of contacts
Each collection item MUST reference an annotation of a Communication.Contact
Allowed terms:
- [Contact](Communication.md#Contact) +[MediaResource](./UI.xml#L265:~:text=Properties that describe a media resource +[DataPoint](./UI.xml#L319:~:text=Visualization of a single point of data, typically a number; may also be textual, e.g. a status value +[KPI](./UI.xml#L627:~:text=A Key Performance Indicator (KPI) bundles a SelectionVariant and a DataPoint, and provides details for progressive disclosure +[Chart](./UI.xml#L673:~:text=Visualization of multiple data points +[ValueCriticality](./UI.xml#L897:~:text=Assign criticalities to primitive values. This information can be used for semantic coloring. +[CriticalityLabels](./UI.xml#L910:~:text=Assign labels to criticalities. This information can be used for semantic coloring. When applied to a property, a label for a criticality must be provided, if more than one value of the annotated property has been assigned to the same criticality. There must be no more than one label per criticality. +[SelectionFields](./UI.xml#L931:~:text=Properties that might be relevant for filtering a collection of entities of this type +[Facets](./UI.xml#L939:~:text=Collection of facets +[HeaderFacets](./UI.xml#L943:~:text=Facets for additional object header information +[QuickViewFacets](./UI.xml#L947:~:text=Facets that may be used for a quick overview of the object +[QuickCreateFacets](./UI.xml#L951:~:text=Facets that may be used for a (quick) create of the object +[FilterFacets](./UI.xml#L955:~:text=Facets that reference UI.FieldGroup annotations to group filterable fields +[SelectionPresentationVariant](./UI.xml#L1022:~:text=A SelectionPresentationVariant bundles a Selection Variant and a Presentation Variant +[PresentationVariant](./UI.xml#L1046:~:text=Defines how the result of a queried collection of entities is shaped and how this result is displayed +[SelectionVariant](./UI.xml#L1159:~:text=A SelectionVariant denotes a combination of parameters and filters to query the annotated entity set +[ThingPerspective](./UI.xml#L1315:~:text=The annotated term is a Thing Perspective +[IsSummary](./UI.xml#L1318:~:text=This Facet and all included Facets are the summary of the thing. At most one Facet of a thing can be tagged with this term +[PartOfPreview](./UI.xml#L1322:~:text=This record and all included structural elements are part of the Thing preview
This term can be applied e.g. to UI.Facet and UI.DataField +[Map](./UI.xml#L1326:~:text=Target MUST reference a UI.GeoLocation, Communication.Address or a collection of these +[Gallery](./UI.xml#L1330:~:text=Target MUST reference a UI.MediaResource +[IsImageURL](./UI.xml#L1335:~:text=Properties and terms annotated with this term MUST contain a valid URL referencing an resource with a MIME type image
Can be annotated with:
- [IsNaturalPerson](Common.md#IsNaturalPerson) +[IsImage](./UI.xml#L1345:~:text=Properties annotated with this term MUST be a stream property annotated with a MIME type image. Entity types annotated with this term MUST be a media entity type annotated with a MIME type image.
Can be annotated with:
- [IsNaturalPerson](Common.md#IsNaturalPerson) +[MultiLineText](./UI.xml#L1356:~:text=Properties and parameters annotated with this annotation should be rendered as multi-line text (e.g. text area) +[Placeholder](./UI.xml#L1361:~:text=A short, human-readable text that gives a hint or an example to help the user with data entry +[TextArrangement](./UI.xml#L1367:~:text=Describes the arrangement of a code or ID value and its text
If used for a single property the Common.Text annotation is annotated +[Importance](./UI.xml#L1386:~:text=Expresses the importance of e.g. a DataField or an annotation +[Hidden](./UI.xml#L1401:~:text=Properties or facets (see UI.Facet) annotated with this term will not be rendered if the annotation evaluates to true.
Hidden properties usually carry technical information that is used for application control and is of no direct interest to end users. The annotation value may be an expression to dynamically hide or render the annotated feature. If a navigation property is annotated with `Hidden` true, all subsequent parts are hidden - independent of their own potential `Hidden` annotations. +[CreateHidden](./UI.xml#L1409:~:text=EntitySets annotated with this term can control the visibility of the Create operation dynamically
The annotation value should be a path to another property from a related entity. +[UpdateHidden](./UI.xml#L1414:~:text=EntitySets annotated with this term can control the visibility of the Edit/Save operation dynamically
The annotation value should be a path to another property from the same or a related entity. +[DeleteHidden](./UI.xml#L1419:~:text=EntitySets annotated with this term can control the visibility of the Delete operation dynamically
The annotation value should be a path to another property from the same or a related entity. +[HiddenFilter](./UI.xml#L1424:~:text=Properties annotated with this term will not be rendered as filter criteria if the annotation evaluates to true.
Properties annotated with `HiddenFilter` are intended as parts of a `$filter` expression that cannot be directly influenced by end users. The properties will be rendered in all other places, e.g. table columns or form fields. This is in contrast to properties annotated with [Hidden](#Hidden) that are not rendered at all. If a navigation property is annotated with `HiddenFilter` true, all subsequent parts are hidden in filter - independent of their own potential `HiddenFilter` annotations. +[DataFieldDefault](./UI.xml#L1433:~:text=Default representation of a property as a datafield, e.g. when the property is added as a table column or form field via personalization
Only concrete subtypes of [DataFieldAbstract](#DataFieldAbstract) can be used for a DataFieldDefault. For type [DataField](#DataField) and its subtypes the annotation target SHOULD be the same property that is referenced via a path expression in the `Value` of the datafield. +[Criticality](./UI.xml#L1636:~:text=Service-calculated criticality, alternative to UI.CriticalityCalculation +[CriticalityCalculation](./UI.xml#L1640:~:text=Parameters for client-calculated criticality, alternative to UI.Criticality +[Emphasized](./UI.xml#L1644:~:text=Highlight something that is of special interest
The usage of a property or operation should be highlighted as it's of special interest for the end user +[OrderBy](./UI.xml#L1650:~:text=Sort by the referenced property instead of by the annotated property
Example: annotated property `SizeCode` has string values XS, S, M, L, XL, referenced property SizeOrder has numeric values -2, -1, 0, 1, 2. Numeric ordering by SizeOrder will be more understandable than lexicographic ordering by SizeCode. +[ParameterDefaultValue](./UI.xml#L1656:~:text=Define default values for action parameters
For unbound actions the default value can either be a constant expression, or a dynamic expression using absolute paths, e.g. singletons or function import results. Whereas for bound actions the bound entity and its properties and associated properties can be used as default values +[RecommendationState](./UI.xml#L1662:~:text=Indicates whether a field contains or has a recommended value
Intelligent systems can help users by recommending input the user may "prefer". +[RecommendationList](./UI.xml#L1692:~:text=Specifies how to get a list of recommended values for a property or parameter
Intelligent systems can help users by recommending input the user may "prefer". +[ExcludeFromNavigationContext](./UI.xml#L1724:~:text=The contents of this property must not be propagated to the app-to-app navigation context +[DoNotCheckScaleOfMeasuredQuantity](./UI.xml#L1728:~:text=Do not check the number of fractional digits of the annotated measured quantity
The annotated property contains a measured quantity, and the user may enter more fractional digits than defined for the corresponding unit of measure.
This switches off the validation of user input with respect to decimals. ## [HeaderInfoType](./UI.xml#L62:~:text=This can be a [DataField](#DataField) and any of its children, or a [DataFieldForAnnotation](#DataFieldForAnnotation) targeting [ConnectedFields](#ConnectedFields). [Description](./UI.xml#L81:~:text=This can be a [DataField](#DataField) and any of its children, or a [DataFieldForAnnotation](#DataFieldForAnnotation) targeting [ConnectedFields](#ConnectedFields). -[ImageUrl](./UI.xml#L91:~:text=[BadgeType](./UI.xml#L114:~:text=[BadgeType](./UI.xml#L118:~:text=[FieldGroupType](./UI.xml#L151:~:text=[FieldGroupType](./UI.xml#L155:~:text=[ConnectedFieldsType](./UI.xml#L188:~:text=[ConnectedFieldsType](./UI.xml#L192:~:text=Template variables are identifiers enclosed in curly braces, e.g. `{MaterialName} - {MaterialClassName}`. The `Data` collection assigns values to the template variables. -[Data](./UI.xml#L199:~:text=Each template variable used in `Template` must be assigned a value here. The value must be of type [DataFieldAbstract](#DataFieldAbstract) +[Label](./UI.xml#L194:~:text=Template variables are identifiers enclosed in curly braces, e.g. `{MaterialName} - {MaterialClassName}`. The `Data` collection assigns values to the template variables. +[Data](./UI.xml#L203:~:text=Each template variable used in `Template` must be assigned a value here. The value must be of type [DataFieldAbstract](#DataFieldAbstract) -## [GeoLocationType](./UI.xml#L234:~:text=[GeoLocationType](./UI.xml#L238:~:text=[MediaResourceType](./UI.xml#L265:~:text=[MediaResourceType](./UI.xml#L269:~:text=[ImageType](./UI.xml#L290:~:text=[ImageType](./UI.xml#L294:~:text=[DataPointType](./UI.xml#L319:~:text=[DataPointType](./UI.xml#L323:~:text=The value is typically provided via a `Path` construct. The path MUST lead to a direct property of the same entity type or a property of a complex property (recursively) of that entity type, navigation segments are not allowed.
It could be annotated with either `UoM.ISOCurrency` or `UoM.Unit`. Percentage values are annotated with `UoM.Unit = '%'`. A renderer should take an optional `Common.Text` annotation into consideration. -[TargetValue](./UI.xml#L344:~:text=Allowed terms:
- [CriticalityLabels](#CriticalityLabels) -[CriticalityRepresentation](./UI.xml#L383:~:text=[NumberFormat](./UI.xml#L401:~:text=The value is typically provided via a `Path` construct. The path MUST lead to a direct property of the same entity type or a property of a complex property (recursively) of that entity type, navigation segments are not allowed.
It could be annotated with either `UoM.ISOCurrency` or `UoM.Unit`. Percentage values are annotated with `UoM.Unit = '%'`. A renderer should take an optional `Common.Text` annotation into consideration. +[TargetValue](./UI.xml#L348:~:text=Allowed terms:
- [CriticalityLabels](#CriticalityLabels) +[CriticalityRepresentation](./UI.xml#L387:~:text=[NumberFormat](./UI.xml#L405:~:text=[VisualizationType](./UI.xml#L411:~:text=[VisualizationType](./UI.xml#L415:~:text=[ReferencePeriod](./UI.xml#L432:~:text=[ReferencePeriod](./UI.xml#L436:~:text=[CriticalityType](./UI.xml#L446:~:text=[CriticalityType](./UI.xml#L450:~:text=[CriticalityCalculationType](./UI.xml#L474:~:text=[CriticalityCalculationType](./UI.xml#L478:~:text=Constant thresholds shall only be used in order to refine constant values given for the data point overall (aggregation level with empty collection of property paths), but not if the thresholds are based on other measure elements. - -## [CriticalityThresholdsType](./UI.xml#L527:~:text=Constant thresholds shall only be used in order to refine constant values given for the data point overall (aggregation level with empty collection of property paths), but not if the thresholds are based on other measure elements. + +## [CriticalityThresholdsType](./UI.xml#L531:~:text=[ImprovementDirectionType](./UI.xml#L549:~:text=[ImprovementDirectionType](./UI.xml#L553:~:text=[LevelThresholdsType](./UI.xml#L562:~:text=[LevelThresholdsType](./UI.xml#L566:~:text=[TrendType](./UI.xml#L570:~:text=[TrendType](./UI.xml#L574:~:text=[TrendCalculationType](./UI.xml#L589:~:text=[TrendCalculationType](./UI.xml#L593:~:text=[KPIType](./UI.xml#L629:~:text=[KPIType](./UI.xml#L633:~:text=Additional data points are typically related to the main data point and provide complementing information or could be used for comparisons -[Detail](./UI.xml#L650:~:text=Additional data points are typically related to the main data point and provide complementing information or could be used for comparisons +[Detail](./UI.xml#L654:~:text=[KPIDetailType](./UI.xml#L654:~:text=[KPIDetailType](./UI.xml#L658:~:text=[ChartDefinitionType](./UI.xml#L673:~:text=[ChartDefinitionType](./UI.xml#L677:~:text=If the annotation referenced by an annotation path does not apply to the same collection of entities as the one being visualized according to the `UI.Chart` annotation, the annotation path MUST be silently ignored.
Allowed terms:
- [AggregatedProperty](#AggregatedProperty)
- [CustomAggregate](#CustomAggregate) -[MeasureAttributes](./UI.xml#L705:~:text=If the annotation referenced by an annotation path does not apply to the same collection of entities as the one being visualized according to the `UI.Chart` annotation, the annotation path MUST be silently ignored.
Allowed terms:
- [AggregatedProperty](#AggregatedProperty)
- [CustomAggregate](#CustomAggregate) +[MeasureAttributes](./UI.xml#L709:~:text=[ChartType](./UI.xml#L723:~:text=[ChartType](./UI.xml#L727:~:text=[ChartAxisScalingType](./UI.xml#L768:~:text=[ChartAxisScalingType](./UI.xml#L772:~:text=[ChartAxisScaleBehaviorType](./UI.xml#L780:~:text=[ChartAxisScaleBehaviorType](./UI.xml#L784:~:text=[ChartAxisAutoScaleBehaviorType](./UI.xml#L793:~:text=[ChartAxisAutoScaleBehaviorType](./UI.xml#L797:~:text=[ChartAxisAutoScaleDataScopeType](./UI.xml#L802:~:text=[ChartAxisAutoScaleDataScopeType](./UI.xml#L806:~:text=[FixedScaleMultipleStackedMeasuresBoundaryValuesType](./UI.xml#L811:~:text=[FixedScaleMultipleStackedMeasuresBoundaryValuesType](./UI.xml#L815:~:text=[ChartDimensionAttributeType](./UI.xml#L820:~:text=[ChartDimensionAttributeType](./UI.xml#L824:~:text=[ChartMeasureAttributeType](./UI.xml#L841:~:text=[ChartMeasureAttributeType](./UI.xml#L845:~:text=If the annotation referenced by an annotation path does not apply to the same collection of entities as the one being visualized according to the `UI.Chart` annotation, the annotation path MUST be silently ignored.
Allowed terms:
- [AggregatedProperty](#AggregatedProperty)
- [CustomAggregate](#CustomAggregate) -[Role](./UI.xml#L859:~:text=Allowed terms:
- [DataPoint](#DataPoint) -[UseSequentialColorLevels](./UI.xml#L868:~:text=If the annotation referenced by an annotation path does not apply to the same collection of entities as the one being visualized according to the `UI.Chart` annotation, the annotation path MUST be silently ignored.
Allowed terms:
- [AggregatedProperty](#AggregatedProperty)
- [CustomAggregate](#CustomAggregate) +[Role](./UI.xml#L863:~:text=Allowed terms:
- [DataPoint](#DataPoint) +[UseSequentialColorLevels](./UI.xml#L872:~:text=[ChartDimensionRoleType](./UI.xml#L874:~:text=[ChartDimensionRoleType](./UI.xml#L878:~:text=[ChartMeasureRoleType](./UI.xml#L880:~:text=[ChartMeasureRoleType](./UI.xml#L884:~:text=[EmphasisLabelType](./UI.xml#L886:~:text=[EmphasisLabelType](./UI.xml#L890:~:text=[ValueCriticalityType](./UI.xml#L897:~:text=[ValueCriticalityType](./UI.xml#L901:~:text=[CriticalityLabelType](./UI.xml#L917:~:text=[CriticalityLabelType](./UI.xml#L921:~:text=[*Facet*](./UI.xml#L955:~:text=[*Facet*](./UI.xml#L959:~:text=[CollectionFacet](./UI.xml#L971:~:text=[CollectionFacet](./UI.xml#L975:~:text=[ReferenceFacet](./UI.xml#L977:~:text=[ReferenceFacet](./UI.xml#L981:~:text=Allowed terms:
- [Address](Communication.md#Address)
- [Contact](Communication.md#Contact)
- [Badge](#Badge)
- [Chart](#Chart)
- [Contacts](#Contacts)
- [DataPoint](#DataPoint)
- [FieldGroup](#FieldGroup)
- [GeoLocation](#GeoLocation)
- [GeoLocations](#GeoLocations)
- [HeaderInfo](#HeaderInfo)
- [Identification](#Identification)
- [KPI](#KPI)
- [LineItem](#LineItem)
- [MediaResource](#MediaResource)
- [PresentationVariant](#PresentationVariant)
- [SelectionFields](#SelectionFields)
- [SelectionPresentationVariant](#SelectionPresentationVariant)
- [StatusInfo](#StatusInfo) +[*Label*](./UI.xml#L967:~:text=Allowed terms:
- [Address](Communication.md#Address)
- [Contact](Communication.md#Contact)
- [Badge](#Badge)
- [Chart](#Chart)
- [Contacts](#Contacts)
- [DataPoint](#DataPoint)
- [FieldGroup](#FieldGroup)
- [GeoLocation](#GeoLocation)
- [GeoLocations](#GeoLocations)
- [HeaderInfo](#HeaderInfo)
- [Identification](#Identification)
- [KPI](#KPI)
- [LineItem](#LineItem)
- [MediaResource](#MediaResource)
- [PresentationVariant](#PresentationVariant)
- [SelectionFields](#SelectionFields)
- [SelectionPresentationVariant](#SelectionPresentationVariant)
- [StatusInfo](#StatusInfo) **Applicable Annotation Terms:** - [Hidden](#Hidden) - [PartOfPreview](#PartOfPreview) -## [ReferenceURLFacet](./UI.xml#L1005:~:text=[ReferenceURLFacet](./UI.xml#L1009:~:text=[SelectionPresentationVariantType](./UI.xml#L1024:~:text=[SelectionPresentationVariantType](./UI.xml#L1028:~:text=[PresentationVariantType](./UI.xml#L1048:~:text=[PresentationVariantType](./UI.xml#L1052:~:text=If the annotation referenced by an annotation path does not apply to the same collection of entities as the one being presented according to the `UI.PresentationVariant` annotation, the annotation path MUST be silently ignored.
Allowed terms:
- [AggregatedProperty](#AggregatedProperty)
- [CustomAggregate](#CustomAggregate) -[IncludeGrandTotal](./UI.xml#L1097:~:text=Allowed terms:
- [Chart](#Chart)
- [DataPoint](#DataPoint)
- [LineItem](#LineItem) -[RequestAtLeast](./UI.xml#L1123:~:text=Properties in `RequestAtLeast` must occur either in the `$select` clause of an OData request or among the grouping properties in an `$apply=groupby((grouping properties),...)` clause of an aggregating OData request. -[SelectionFields](./UI.xml#L1146:~:text=[SelectionVariantType](./UI.xml#L1160:~:text=If the annotation referenced by an annotation path does not apply to the same collection of entities as the one being presented according to the `UI.PresentationVariant` annotation, the annotation path MUST be silently ignored.
Allowed terms:
- [AggregatedProperty](#AggregatedProperty)
- [CustomAggregate](#CustomAggregate) +[IncludeGrandTotal](./UI.xml#L1101:~:text=Allowed terms:
- [Chart](#Chart)
- [DataPoint](#DataPoint)
- [LineItem](#LineItem) +[RequestAtLeast](./UI.xml#L1127:~:text=Properties in `RequestAtLeast` must occur either in the `$select` clause of an OData request or among the grouping properties in an `$apply=groupby((grouping properties),...)` clause of an aggregating OData request. +[SelectionFields](./UI.xml#L1150:~:text=[SelectionVariantType](./UI.xml#L1164:~:text=[*ParameterAbstract*](./UI.xml#L1185:~:text=[*ParameterAbstract*](./UI.xml#L1189:~:text=[Parameter](./UI.xml#L1188:~:text=[Parameter](./UI.xml#L1192:~:text=[IntervalParameter](./UI.xml#L1197:~:text=[IntervalParameter](./UI.xml#L1201:~:text=[SelectOptionType](./UI.xml#L1213:~:text=[SelectOptionType](./UI.xml#L1217:~:text=If the annotation referenced by the annotation path does not apply to the same collection of entities as the one being filtered according to the `UI.SelectionVariant` annotation, this instance of `UI.SelectionVariant/SelectOptions` MUST be silently ignored. For an example, see the `UI.SelectionVariant` annotation in the [example](../examples/DynamicProperties-sample.xml).
Allowed terms:
- [AggregatedProperty](#AggregatedProperty)
- [CustomAggregate](#CustomAggregate) -[Ranges](./UI.xml#L1242:~:text=If the annotation referenced by the annotation path does not apply to the same collection of entities as the one being filtered according to the `UI.SelectionVariant` annotation, this instance of `UI.SelectionVariant/SelectOptions` MUST be silently ignored. For an example, see the `UI.SelectionVariant` annotation in the [example](../examples/DynamicProperties-sample.xml).
Allowed terms:
- [AggregatedProperty](#AggregatedProperty)
- [CustomAggregate](#CustomAggregate) +[Ranges](./UI.xml#L1246:~:text=[SelectionRangeType](./UI.xml#L1247:~:text=[SelectionRangeType](./UI.xml#L1251:~:text=[SelectionRangeSignType](./UI.xml#L1265:~:text=[SelectionRangeSignType](./UI.xml#L1269:~:text=[SelectionRangeOptionType](./UI.xml#L1274:~:text=[SelectionRangeOptionType](./UI.xml#L1278:~:text=[TextArrangementType](./UI.xml#L1367:~:text=[TextArrangementType](./UI.xml#L1371:~:text=
+ + + + - + @@ -98,7 +102,7 @@ a collection of business object instances, e.g. as a list or table. - +
@@ -120,7 +124,7 @@ a collection of business object instances, e.g. as a list or table.
- + From 2fe52e05a9e9fed1989211e290211c2d4480b2e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Heiko=20Thei=C3=9Fen?= Date: Wed, 22 Jun 2022 08:17:22 +0200 Subject: [PATCH 13/24] DataField.Value does not allow mixed-type collections (#187) --- vocabularies/UI.json | 17 +++++++++- vocabularies/UI.md | 76 ++++++++++++++++++++++---------------------- vocabularies/UI.xml | 17 +++++++++- 3 files changed, 70 insertions(+), 40 deletions(-) diff --git a/vocabularies/UI.json b/vocabularies/UI.json index 460b821c..abd8f556 100644 --- a/vocabularies/UI.json +++ b/vocabularies/UI.json @@ -1828,7 +1828,22 @@ "@Core.Description": "The data field's value", "@Validation.DerivedTypeConstraint": [ "Edm.PrimitiveType", - "Collection(Edm.PrimitiveType)" + "Collection(Edm.Binary)", + "Collection(Edm.Boolean)", + "Collection(Edm.Byte)", + "Collection(Edm.Date)", + "Collection(Edm.DateTimeOffset)", + "Collection(Edm.Decimal)", + "Collection(Edm.Double)", + "Collection(Edm.Duration)", + "Collection(Edm.Guid)", + "Collection(Edm.Int16)", + "Collection(Edm.Int32)", + "Collection(Edm.Int64)", + "Collection(Edm.SByte)", + "Collection(Edm.Single)", + "Collection(Edm.String)", + "Collection(Edm.TimeOfDay)" ], "@Core.IsLanguageDependent": true } diff --git a/vocabularies/UI.md b/vocabularies/UI.md index 24504c92..83a1c376 100644 --- a/vocabularies/UI.md +++ b/vocabularies/UI.md @@ -62,15 +62,15 @@ Term|Type|Description [DeleteHidden](./UI.xml#L1419:~:text=EntitySets annotated with this term can control the visibility of the Delete operation dynamically
The annotation value should be a path to another property from the same or a related entity. [HiddenFilter](./UI.xml#L1424:~:text=Properties annotated with this term will not be rendered as filter criteria if the annotation evaluates to true.
Properties annotated with `HiddenFilter` are intended as parts of a `$filter` expression that cannot be directly influenced by end users. The properties will be rendered in all other places, e.g. table columns or form fields. This is in contrast to properties annotated with [Hidden](#Hidden) that are not rendered at all. If a navigation property is annotated with `HiddenFilter` true, all subsequent parts are hidden in filter - independent of their own potential `HiddenFilter` annotations. [DataFieldDefault](./UI.xml#L1433:~:text=Default representation of a property as a datafield, e.g. when the property is added as a table column or form field via personalization
Only concrete subtypes of [DataFieldAbstract](#DataFieldAbstract) can be used for a DataFieldDefault. For type [DataField](#DataField) and its subtypes the annotation target SHOULD be the same property that is referenced via a path expression in the `Value` of the datafield. -[Criticality](./UI.xml#L1636:~:text=Service-calculated criticality, alternative to UI.CriticalityCalculation -[CriticalityCalculation](./UI.xml#L1640:~:text=Parameters for client-calculated criticality, alternative to UI.Criticality -[Emphasized](./UI.xml#L1644:~:text=Highlight something that is of special interest
The usage of a property or operation should be highlighted as it's of special interest for the end user -[OrderBy](./UI.xml#L1650:~:text=Sort by the referenced property instead of by the annotated property
Example: annotated property `SizeCode` has string values XS, S, M, L, XL, referenced property SizeOrder has numeric values -2, -1, 0, 1, 2. Numeric ordering by SizeOrder will be more understandable than lexicographic ordering by SizeCode. -[ParameterDefaultValue](./UI.xml#L1656:~:text=Define default values for action parameters
For unbound actions the default value can either be a constant expression, or a dynamic expression using absolute paths, e.g. singletons or function import results. Whereas for bound actions the bound entity and its properties and associated properties can be used as default values -[RecommendationState](./UI.xml#L1662:~:text=Indicates whether a field contains or has a recommended value
Intelligent systems can help users by recommending input the user may "prefer". -[RecommendationList](./UI.xml#L1692:~:text=Specifies how to get a list of recommended values for a property or parameter
Intelligent systems can help users by recommending input the user may "prefer". -[ExcludeFromNavigationContext](./UI.xml#L1724:~:text=The contents of this property must not be propagated to the app-to-app navigation context -[DoNotCheckScaleOfMeasuredQuantity](./UI.xml#L1728:~:text=Do not check the number of fractional digits of the annotated measured quantity
The annotated property contains a measured quantity, and the user may enter more fractional digits than defined for the corresponding unit of measure.
This switches off the validation of user input with respect to decimals. +[Criticality](./UI.xml#L1651:~:text=Service-calculated criticality, alternative to UI.CriticalityCalculation +[CriticalityCalculation](./UI.xml#L1655:~:text=Parameters for client-calculated criticality, alternative to UI.Criticality +[Emphasized](./UI.xml#L1659:~:text=Highlight something that is of special interest
The usage of a property or operation should be highlighted as it's of special interest for the end user +[OrderBy](./UI.xml#L1665:~:text=Sort by the referenced property instead of by the annotated property
Example: annotated property `SizeCode` has string values XS, S, M, L, XL, referenced property SizeOrder has numeric values -2, -1, 0, 1, 2. Numeric ordering by SizeOrder will be more understandable than lexicographic ordering by SizeCode. +[ParameterDefaultValue](./UI.xml#L1671:~:text=Define default values for action parameters
For unbound actions the default value can either be a constant expression, or a dynamic expression using absolute paths, e.g. singletons or function import results. Whereas for bound actions the bound entity and its properties and associated properties can be used as default values +[RecommendationState](./UI.xml#L1677:~:text=Indicates whether a field contains or has a recommended value
Intelligent systems can help users by recommending input the user may "prefer". +[RecommendationList](./UI.xml#L1707:~:text=Specifies how to get a list of recommended values for a property or parameter
Intelligent systems can help users by recommending input the user may "prefer". +[ExcludeFromNavigationContext](./UI.xml#L1739:~:text=The contents of this property must not be propagated to the app-to-app navigation context +[DoNotCheckScaleOfMeasuredQuantity](./UI.xml#L1743:~:text=Do not check the number of fractional digits of the annotated measured quantity
The annotated property contains a measured quantity, and the user may enter more fractional digits than defined for the corresponding unit of measure.
This switches off the validation of user input with respect to decimals. ## [HeaderInfoType](./UI.xml#L62:~:text=[DataFieldWithAction](./UI.xml#L1573:~:text=[DataFieldWithAction](./UI.xml#L1588:~:text=[DataFieldWithIntentBasedNavigation](./UI.xml#L1582:~:text=[DataFieldWithIntentBasedNavigation](./UI.xml#L1597:~:text=[DataFieldWithNavigationPath](./UI.xml#L1602:~:text=[DataFieldWithNavigationPath](./UI.xml#L1617:~:text=[DataFieldWithUrl](./UI.xml#L1613:~:text=[DataFieldWithUrl](./UI.xml#L1628:~:text=[DataFieldWithActionGroup](./UI.xml#L1627:~:text=[DataFieldWithActionGroup](./UI.xml#L1642:~:text=[RecommendationStateType](./UI.xml#L1669:~:text=[RecommendationStateType](./UI.xml#L1684:~:text=[RecommendationListType](./UI.xml#L1699:~:text=[RecommendationListType](./UI.xml#L1714:~:text=[RecommendationBinding](./UI.xml#L1715:~:text=[RecommendationBinding](./UI.xml#L1730:~:text= Edm.PrimitiveType - Collection(Edm.PrimitiveType) + Collection(Edm.Binary) + Collection(Edm.Boolean) + Collection(Edm.Byte) + Collection(Edm.Date) + Collection(Edm.DateTimeOffset) + Collection(Edm.Decimal) + Collection(Edm.Double) + Collection(Edm.Duration) + Collection(Edm.Guid) + Collection(Edm.Int16) + Collection(Edm.Int32) + Collection(Edm.Int64) + Collection(Edm.SByte) + Collection(Edm.Single) + Collection(Edm.String) + Collection(Edm.TimeOfDay)
From bfbf0d97283e797ef17f95abfc3b6ce6882a48b2 Mon Sep 17 00:00:00 2001 From: Ralf Handl Date: Mon, 11 Jul 2022 15:56:46 +0200 Subject: [PATCH 14/24] Common.DefaultValuesFunction no longer experimental (#189) Documented in https://sapui5.hana.ondemand.com/sdk/#/topic/5ada91cc1ad8455bbfb7e6aee96383f2.html --- vocabularies/Common.json | 1 - vocabularies/Common.md | 44 ++++++++++++++++++++-------------------- vocabularies/Common.xml | 1 - 3 files changed, 22 insertions(+), 24 deletions(-) diff --git a/vocabularies/Common.json b/vocabularies/Common.json index 81a1b748..5b242323 100644 --- a/vocabularies/Common.json +++ b/vocabularies/Common.json @@ -1397,7 +1397,6 @@ "Action", "Function" ], - "@Common.Experimental": true, "@Core.Description": "Function to calculate default values based on user input that is only known to the client and \"context information\" that is already available to the service", "@Core.LongDescription": "\n The default values function must have a bound overload whose binding parameter type matches the annotation target\n\n - for an entity set: collection of entity type of entity set\n\n - for a navigation property: identical to the type of the navigation property (single- or collection-valued)\n\n - for a bound action/function: identical to the binding parameter type of the annotated action/function\n\n In addition the overload can have non-binding parameters for values that the user has already entered:\n\n - for an entity set or navigation property: each non-binding parameter name and type must match the name and type of a property of the entity to be created\n\n - for an action or function: each non-binding parameter name and type must match the name and type of a non-binding parameter of the action or function to be called\n\n The result type of the default values function is a complex type whose properties correspond in name and type to a subset of\n\n - the properties of the entity to create, or\n\n - the parameters of the action or function to call\n " }, diff --git a/vocabularies/Common.md b/vocabularies/Common.md index 4bb71c56..59494d19 100644 --- a/vocabularies/Common.md +++ b/vocabularies/Common.md @@ -93,22 +93,22 @@ Term|Type|Description [EditableFieldFor](./Common.xml#L1052:~:text=The annotated property is an editable field for the referenced key property [SemanticKey](./Common.xml#L1074:~:text=The listed properties form the semantic key, i.e. they are unique modulo IsActiveEntity [SideEffects](./Common.xml#L1078:~:text=Describes side-effects of modification operations -[DefaultValuesFunction](./Common.xml#L1166:~:text=Function to calculate default values based on user input that is only known to the client and "context information" that is already available to the service
The default values function must have a bound overload whose binding parameter type matches the annotation target
- for an entity set: collection of entity type of entity set
- for a navigation property: identical to the type of the navigation property (single- or collection-valued)
- for a bound action/function: identical to the binding parameter type of the annotated action/function
In addition the overload can have non-binding parameters for values that the user has already entered:
- for an entity set or navigation property: each non-binding parameter name and type must match the name and type of a property of the entity to be created
- for an action or function: each non-binding parameter name and type must match the name and type of a non-binding parameter of the action or function to be called
The result type of the default values function is a complex type whose properties correspond in name and type to a subset of
- the properties of the entity to create, or
- the parameters of the action or function to call -[DerivedDefaultValue](./Common.xml#L1196:~:text=Function import to derive a default value for the property from a given context.
Function import has two parameters of complex types:
- `parameters`, a structure resembling the entity type the parameter entity set related to the entity set of the annotated property
- `properties`, a structure resembling the type of the entity set of the annotated property
The return type must be of the same type as the annotated property.
Arguments passed to the function import are used as context for deriving the default value. The function import returns this default value, or null in case such a value could not be determined. -[FilterDefaultValue](./Common.xml#L1217:~:text=A default value for the property to be used in filter expressions. -[FilterDefaultValueHigh](./Common.xml#L1221:~:text=A default upper limit for the property to be used in 'less than or equal' filter expressions. -[DerivedFilterDefaultValue](./Common.xml#L1226:~:text=Function import to derive a default value for the property from a given context in order to use it in filter expressions.
Function import has two parameters of complex types:
- `parameters`, a structure resembling the entity type the parameter entity set related to the entity set of the annotated property
- `properties`, a structure resembling the type of the entity set of the annotated property
The return type must be of the same type as the annotated property.
Arguments passed to the function import are used as context for deriving the default value. The function import returns this default value, or null in case such a value could not be determined. -[SortOrder](./Common.xml#L1250:~:text=List of sort criteria
The items of the annotated entity set or the items of the collection of the annotated entity type are sorted by the first entry of the SortOrder collection. Items with same value for this first sort criteria are sorted by the second entry of the SortOrder collection, and so on. -[RecursiveHierarchy](./Common.xml#L1306:~:text=Use terms [Aggregation.RecursiveHierarchy](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Aggregation.V1.md#RecursiveHierarchy) and [Hierarchy.RecursiveHierarchy](https://github.com/SAP/odata-vocabularies/blob/main/vocabularies/Hierarchy.md#RecursiveHierarchy) instead -[CreatedAt](./Common.xml#L1354:~:text=Creation timestamp -[CreatedBy](./Common.xml#L1358:~:text=First editor -[ChangedAt](./Common.xml#L1362:~:text=Last modification timestamp -[ChangedBy](./Common.xml#L1366:~:text=Last editor -[OriginalProtocolVersion](./Common.xml#L1378:~:text=Original protocol version of a converted (V4) CSDL document, allowed values `2.0` and `3.0` -[ApplyMultiUnitBehaviorForSortingAndFiltering](./Common.xml#L1383:~:text=Sorting and filtering of amounts in multiple currencies needs special consideration
TODO: add link to UX documentation on https://experience.sap.com/fiori-design/ -[mediaUploadLink](./Common.xml#L1389:~:text=URL for uploading new media content to a Document Management Service
In contrast to the `@odata.mediaEditLink` this URL allows to upload new media content without directly changing a stream property or media resource. The upload request typically uses HTTP POST with `Content-Type: multipart/form-data` following RFC 7578. The upload request must contain one multipart representing the content of the file. The `name` parameter in the `Content-Disposition` header (as described in RFC 7578) is irrelevant, but the `filename` parameter is expected. If the request succeeds the response will contain a JSON body of `Content-Type: application/json` with a JSON property `readLink`. The newly uploaded media resource can be linked to the stream property by changing the `@odata.mediaReadLink` to the value of this `readLink` in a subsequent PATCH request to the OData entity. -[PrimitivePropertyPath](./Common.xml#L1404:~:text=A term or term property with this tag whose type is (a collection of) `Edm.PropertyPath` MUST resolve to a primitive structural property -[WebSocketBaseURL](./Common.xml#L1409:~:text=Base URL for WebSocket connections +[DefaultValuesFunction](./Common.xml#L1166:~:text=Function to calculate default values based on user input that is only known to the client and "context information" that is already available to the service
The default values function must have a bound overload whose binding parameter type matches the annotation target
- for an entity set: collection of entity type of entity set
- for a navigation property: identical to the type of the navigation property (single- or collection-valued)
- for a bound action/function: identical to the binding parameter type of the annotated action/function
In addition the overload can have non-binding parameters for values that the user has already entered:
- for an entity set or navigation property: each non-binding parameter name and type must match the name and type of a property of the entity to be created
- for an action or function: each non-binding parameter name and type must match the name and type of a non-binding parameter of the action or function to be called
The result type of the default values function is a complex type whose properties correspond in name and type to a subset of
- the properties of the entity to create, or
- the parameters of the action or function to call +[DerivedDefaultValue](./Common.xml#L1195:~:text=Function import to derive a default value for the property from a given context.
Function import has two parameters of complex types:
- `parameters`, a structure resembling the entity type the parameter entity set related to the entity set of the annotated property
- `properties`, a structure resembling the type of the entity set of the annotated property
The return type must be of the same type as the annotated property.
Arguments passed to the function import are used as context for deriving the default value. The function import returns this default value, or null in case such a value could not be determined. +[FilterDefaultValue](./Common.xml#L1216:~:text=A default value for the property to be used in filter expressions. +[FilterDefaultValueHigh](./Common.xml#L1220:~:text=A default upper limit for the property to be used in 'less than or equal' filter expressions. +[DerivedFilterDefaultValue](./Common.xml#L1225:~:text=Function import to derive a default value for the property from a given context in order to use it in filter expressions.
Function import has two parameters of complex types:
- `parameters`, a structure resembling the entity type the parameter entity set related to the entity set of the annotated property
- `properties`, a structure resembling the type of the entity set of the annotated property
The return type must be of the same type as the annotated property.
Arguments passed to the function import are used as context for deriving the default value. The function import returns this default value, or null in case such a value could not be determined. +[SortOrder](./Common.xml#L1249:~:text=List of sort criteria
The items of the annotated entity set or the items of the collection of the annotated entity type are sorted by the first entry of the SortOrder collection. Items with same value for this first sort criteria are sorted by the second entry of the SortOrder collection, and so on. +[RecursiveHierarchy](./Common.xml#L1305:~:text=Use terms [Aggregation.RecursiveHierarchy](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Aggregation.V1.md#RecursiveHierarchy) and [Hierarchy.RecursiveHierarchy](https://github.com/SAP/odata-vocabularies/blob/main/vocabularies/Hierarchy.md#RecursiveHierarchy) instead +[CreatedAt](./Common.xml#L1353:~:text=Creation timestamp +[CreatedBy](./Common.xml#L1357:~:text=First editor +[ChangedAt](./Common.xml#L1361:~:text=Last modification timestamp +[ChangedBy](./Common.xml#L1365:~:text=Last editor +[OriginalProtocolVersion](./Common.xml#L1377:~:text=Original protocol version of a converted (V4) CSDL document, allowed values `2.0` and `3.0` +[ApplyMultiUnitBehaviorForSortingAndFiltering](./Common.xml#L1382:~:text=Sorting and filtering of amounts in multiple currencies needs special consideration
TODO: add link to UX documentation on https://experience.sap.com/fiori-design/ +[mediaUploadLink](./Common.xml#L1388:~:text=URL for uploading new media content to a Document Management Service
In contrast to the `@odata.mediaEditLink` this URL allows to upload new media content without directly changing a stream property or media resource. The upload request typically uses HTTP POST with `Content-Type: multipart/form-data` following RFC 7578. The upload request must contain one multipart representing the content of the file. The `name` parameter in the `Content-Disposition` header (as described in RFC 7578) is irrelevant, but the `filename` parameter is expected. If the request succeeds the response will contain a JSON body of `Content-Type: application/json` with a JSON property `readLink`. The newly uploaded media resource can be linked to the stream property by changing the `@odata.mediaReadLink` to the value of this `readLink` in a subsequent PATCH request to the OData entity. +[PrimitivePropertyPath](./Common.xml#L1403:~:text=A term or term property with this tag whose type is (a collection of) `Edm.PropertyPath` MUST resolve to a primitive structural property +[WebSocketBaseURL](./Common.xml#L1408:~:text=Base URL for WebSocket connections ## [TextFormatType](./Common.xml#L108:~:text=[EffectType](./Common.xml#L1132:~:text=[SortOrderType](./Common.xml#L1258:~:text=[SortOrderType](./Common.xml#L1257:~:text=If the annotation referenced by the annotation path does not apply to the same collection of entities as the one being sorted according to the [`UI.PresentationVariant`](UI.md#PresentationVariant) or `Common.SortOrder` annotation, this instance of `UI.PresentationVariant/SortOrder` or `Common.SortOrder` MUST be silently ignored.
Allowed terms:
- [AggregatedProperty](#AggregatedProperty)
- [CustomAggregate](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Aggregation.V1.md#CustomAggregate) -[Descending](./Common.xml#L1286:~:text=If the annotation referenced by the annotation path does not apply to the same collection of entities as the one being sorted according to the [`UI.PresentationVariant`](UI.md#PresentationVariant) or `Common.SortOrder` annotation, this instance of `UI.PresentationVariant/SortOrder` or `Common.SortOrder` MUST be silently ignored.
Allowed terms:
- [AggregatedProperty](#AggregatedProperty)
- [CustomAggregate](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Aggregation.V1.md#CustomAggregate) +[Descending](./Common.xml#L1285:~:text=[RecursiveHierarchyType](./Common.xml#L1319:~:text=[RecursiveHierarchyType](./Common.xml#L1318:~:text=[UserID](./Common.xml#L1370:~:text=[UserID](./Common.xml#L1369:~:text= - Function to calculate default values based on user input that is only known to the client and "context information" that is already available to the service From c2acb398bebef70695d08f698d753c57aa3c528f Mon Sep 17 00:00:00 2001 From: Ralf Handl Date: Wed, 20 Jul 2022 18:44:29 +0200 Subject: [PATCH 15/24] Graph.CompositionRoot (#191) --- vocabularies/Graph.json | 10 ++++++++++ vocabularies/Graph.md | 1 + vocabularies/Graph.xml | 5 +++++ 3 files changed, 16 insertions(+) diff --git a/vocabularies/Graph.json b/vocabularies/Graph.json index ba04f60f..3d800a29 100644 --- a/vocabularies/Graph.json +++ b/vocabularies/Graph.json @@ -74,6 +74,16 @@ "@Common.Experimental": true, "@Core.Description": "Request body sent to the business system tenant" } + }, + "CompositionRoot": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": [ + "EntityType" + ], + "@Common.Experimental": true, + "@Core.Description": "The annotated entity type is the root type of a composition tree." } } } \ No newline at end of file diff --git a/vocabularies/Graph.md b/vocabularies/Graph.md index 200638e1..86754ac3 100644 --- a/vocabularies/Graph.md +++ b/vocabularies/Graph.md @@ -10,6 +10,7 @@ Term|Type|Description :---|:---|:---------- [traceId](./Graph.xml#L39:~:text=The traceId contains a unique string that is preserved across multiple requests and log files. It is used in error responses to help diagnose problems by correlating log entries. [Details](./Graph.xml#L45:~:text=Graph-specific details for error responses +[CompositionRoot](./Graph.xml#L64:~:text=The annotated entity type is the root type of a composition tree. ## [DetailsType](./Graph.xml#L50:~:text=
+ + + + +
From f828c2df0a23d02f1ecf351d946cfcc9d8cf90f9 Mon Sep 17 00:00:00 2001 From: Ralf Handl Date: Mon, 25 Jul 2022 09:49:24 +0200 Subject: [PATCH 16/24] Make term nullability explicit (#188) --- vocabularies/Analytics.json | 2 -- vocabularies/Analytics.md | 4 +-- vocabularies/Analytics.xml | 4 +-- vocabularies/Common.json | 3 --- vocabularies/Common.md | 6 ++--- vocabularies/Common.xml | 10 ++++---- vocabularies/Communication.xml | 10 ++++---- vocabularies/DataIntegration.json | 4 --- vocabularies/DataIntegration.md | 8 +++--- vocabularies/DataIntegration.xml | 8 +++--- vocabularies/PersonalData.json | 2 -- vocabularies/PersonalData.md | 4 +-- vocabularies/PersonalData.xml | 8 +++--- vocabularies/UI.json | 19 -------------- vocabularies/UI.md | 38 ++++++++++++++-------------- vocabularies/UI.xml | 42 +++++++++++++++---------------- 16 files changed, 71 insertions(+), 101 deletions(-) diff --git a/vocabularies/Analytics.json b/vocabularies/Analytics.json index 770a46a4..74b435b1 100644 --- a/vocabularies/Analytics.json +++ b/vocabularies/Analytics.json @@ -100,13 +100,11 @@ "RolledUpPropertyCount": { "$Kind": "Term", "$Type": "Edm.Int16", - "$Nullable": true, "@Common.Experimental": true, "@Core.Description": "Number of properties in the entity instance that have been aggregated away" }, "DrillURL": { "$Kind": "Term", - "$Nullable": true, "$AppliesTo": [ "EntityType" ], diff --git a/vocabularies/Analytics.md b/vocabularies/Analytics.md index c9409572..3d8974de 100644 --- a/vocabularies/Analytics.md +++ b/vocabularies/Analytics.md @@ -11,8 +11,8 @@ Term|Type|Description [Dimension](./Analytics.xml#L41:~:text=Deprecated in favor of [`AnalyticalContext/Dimension`](#AnalyticalContext) [Measure](./Analytics.xml#L53:~:text=Deprecated in favor of [`AnalyticalContext/Measure`](#AnalyticalContext) [AccumulativeMeasure](./Analytics.xml#L65:~:text=Deprecated in favor of [`AnalyticalContext/AccumulativeMeasure`](#AnalyticalContext) -[RolledUpPropertyCount](./Analytics.xml#L77:~:text=Number of properties in the entity instance that have been aggregated away -[DrillURL](./Analytics.xml#L83:~:text=URL to retrieve more detailed data related to a node of a recursive hierarchy. Annotations with this term MUST include a qualifier to select the hierarchy for which the drill URL is provided. +[RolledUpPropertyCount](./Analytics.xml#L77:~:text=Number of properties in the entity instance that have been aggregated away +[DrillURL](./Analytics.xml#L83:~:text=URL to retrieve more detailed data related to a node of a recursive hierarchy. Annotations with this term MUST include a qualifier to select the hierarchy for which the drill URL is provided. [PlanningAction](./Analytics.xml#L95:~:text=Processes or generates plan data. Its logic may have side-effects on entity sets. [AggregatedProperties](./Analytics.xml#L103:~:text=Deprecated in favor of [`AggregatedProperty`](#AggregatedProperty) [AggregatedProperty](./Analytics.xml#L121:~:text=Dynamic property for aggregate expression with specified aggregation method defined on the annotated entity type. diff --git a/vocabularies/Analytics.xml b/vocabularies/Analytics.xml index 335ea831..c63ee788 100644 --- a/vocabularies/Analytics.xml +++ b/vocabularies/Analytics.xml @@ -74,13 +74,13 @@
- + - + diff --git a/vocabularies/Common.json b/vocabularies/Common.json index 5b242323..5eed35e8 100644 --- a/vocabularies/Common.json +++ b/vocabularies/Common.json @@ -1390,7 +1390,6 @@ "DefaultValuesFunction": { "$Kind": "Term", "$Type": "Common.QualifiedName", - "$Nullable": true, "$AppliesTo": [ "EntitySet", "NavigationProperty", @@ -1402,7 +1401,6 @@ }, "DerivedDefaultValue": { "$Kind": "Term", - "$Nullable": true, "$AppliesTo": [ "Property" ], @@ -1431,7 +1429,6 @@ }, "DerivedFilterDefaultValue": { "$Kind": "Term", - "$Nullable": true, "$AppliesTo": [ "Property" ], diff --git a/vocabularies/Common.md b/vocabularies/Common.md index 59494d19..1df37595 100644 --- a/vocabularies/Common.md +++ b/vocabularies/Common.md @@ -93,11 +93,11 @@ Term|Type|Description [EditableFieldFor](./Common.xml#L1052:~:text=The annotated property is an editable field for the referenced key property [SemanticKey](./Common.xml#L1074:~:text=The listed properties form the semantic key, i.e. they are unique modulo IsActiveEntity [SideEffects](./Common.xml#L1078:~:text=Describes side-effects of modification operations -[DefaultValuesFunction](./Common.xml#L1166:~:text=Function to calculate default values based on user input that is only known to the client and "context information" that is already available to the service
The default values function must have a bound overload whose binding parameter type matches the annotation target
- for an entity set: collection of entity type of entity set
- for a navigation property: identical to the type of the navigation property (single- or collection-valued)
- for a bound action/function: identical to the binding parameter type of the annotated action/function
In addition the overload can have non-binding parameters for values that the user has already entered:
- for an entity set or navigation property: each non-binding parameter name and type must match the name and type of a property of the entity to be created
- for an action or function: each non-binding parameter name and type must match the name and type of a non-binding parameter of the action or function to be called
The result type of the default values function is a complex type whose properties correspond in name and type to a subset of
- the properties of the entity to create, or
- the parameters of the action or function to call -[DerivedDefaultValue](./Common.xml#L1195:~:text=Function import to derive a default value for the property from a given context.
Function import has two parameters of complex types:
- `parameters`, a structure resembling the entity type the parameter entity set related to the entity set of the annotated property
- `properties`, a structure resembling the type of the entity set of the annotated property
The return type must be of the same type as the annotated property.
Arguments passed to the function import are used as context for deriving the default value. The function import returns this default value, or null in case such a value could not be determined. +[DefaultValuesFunction](./Common.xml#L1166:~:text=Function to calculate default values based on user input that is only known to the client and "context information" that is already available to the service
The default values function must have a bound overload whose binding parameter type matches the annotation target
- for an entity set: collection of entity type of entity set
- for a navigation property: identical to the type of the navigation property (single- or collection-valued)
- for a bound action/function: identical to the binding parameter type of the annotated action/function
In addition the overload can have non-binding parameters for values that the user has already entered:
- for an entity set or navigation property: each non-binding parameter name and type must match the name and type of a property of the entity to be created
- for an action or function: each non-binding parameter name and type must match the name and type of a non-binding parameter of the action or function to be called
The result type of the default values function is a complex type whose properties correspond in name and type to a subset of
- the properties of the entity to create, or
- the parameters of the action or function to call +[DerivedDefaultValue](./Common.xml#L1195:~:text=Function import to derive a default value for the property from a given context.
Function import has two parameters of complex types:
- `parameters`, a structure resembling the entity type the parameter entity set related to the entity set of the annotated property
- `properties`, a structure resembling the type of the entity set of the annotated property
The return type must be of the same type as the annotated property.
Arguments passed to the function import are used as context for deriving the default value. The function import returns this default value, or null in case such a value could not be determined. [FilterDefaultValue](./Common.xml#L1216:~:text=A default value for the property to be used in filter expressions. [FilterDefaultValueHigh](./Common.xml#L1220:~:text=A default upper limit for the property to be used in 'less than or equal' filter expressions. -[DerivedFilterDefaultValue](./Common.xml#L1225:~:text=Function import to derive a default value for the property from a given context in order to use it in filter expressions.
Function import has two parameters of complex types:
- `parameters`, a structure resembling the entity type the parameter entity set related to the entity set of the annotated property
- `properties`, a structure resembling the type of the entity set of the annotated property
The return type must be of the same type as the annotated property.
Arguments passed to the function import are used as context for deriving the default value. The function import returns this default value, or null in case such a value could not be determined. +[DerivedFilterDefaultValue](./Common.xml#L1225:~:text=Function import to derive a default value for the property from a given context in order to use it in filter expressions.
Function import has two parameters of complex types:
- `parameters`, a structure resembling the entity type the parameter entity set related to the entity set of the annotated property
- `properties`, a structure resembling the type of the entity set of the annotated property
The return type must be of the same type as the annotated property.
Arguments passed to the function import are used as context for deriving the default value. The function import returns this default value, or null in case such a value could not be determined. [SortOrder](./Common.xml#L1249:~:text=List of sort criteria
The items of the annotated entity set or the items of the collection of the annotated entity type are sorted by the first entry of the SortOrder collection. Items with same value for this first sort criteria are sorted by the second entry of the SortOrder collection, and so on. [RecursiveHierarchy](./Common.xml#L1305:~:text=Use terms [Aggregation.RecursiveHierarchy](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Aggregation.V1.md#RecursiveHierarchy) and [Hierarchy.RecursiveHierarchy](https://github.com/SAP/odata-vocabularies/blob/main/vocabularies/Hierarchy.md#RecursiveHierarchy) instead [CreatedAt](./Common.xml#L1353:~:text=Creation timestamp diff --git a/vocabularies/Common.xml b/vocabularies/Common.xml index b0dd8e8c..d484fb57 100644 --- a/vocabularies/Common.xml +++ b/vocabularies/Common.xml @@ -1163,7 +1163,7 @@ Upon modification field control logic is invoked so that meta-information like h - + Function to calculate default values based on user input that is only known to the client and "context information" that is already available to the service @@ -1192,7 +1192,7 @@ Upon modification field control logic is invoked so that meta-information like h
- + Function import to derive a default value for the property from a given context. @@ -1213,16 +1213,16 @@ Upon modification field control logic is invoked so that meta-information like h - + - + - + Function import to derive a default value for the property from a given context in order to use it in filter expressions. diff --git a/vocabularies/Communication.xml b/vocabularies/Communication.xml index 7273b2bb..9a2cdf62 100644 --- a/vocabularies/Communication.xml +++ b/vocabularies/Communication.xml @@ -37,7 +37,7 @@ These terms are inspired by - + @@ -121,7 +121,7 @@ These terms are inspired by - + @@ -280,7 +280,7 @@ These terms are inspired by - + @@ -323,7 +323,7 @@ These terms are inspired by - + @@ -348,7 +348,7 @@ These terms are inspired by - + diff --git a/vocabularies/DataIntegration.json b/vocabularies/DataIntegration.json index f57ea539..3277de61 100644 --- a/vocabularies/DataIntegration.json +++ b/vocabularies/DataIntegration.json @@ -39,7 +39,6 @@ }, "OriginalDataType": { "$Kind": "Term", - "$Nullable": true, "$AppliesTo": [ "Property" ], @@ -59,7 +58,6 @@ }, "ConversionExit": { "$Kind": "Term", - "$Nullable": true, "$AppliesTo": [ "Property" ], @@ -71,7 +69,6 @@ }, "SourceSystem": { "$Kind": "Term", - "$Nullable": true, "$AppliesTo": [ "Container" ], @@ -91,7 +88,6 @@ "DeltaMethod": { "$Kind": "Term", "$Type": "DataIntegration.DeltaMethodType", - "$Nullable": true, "$AppliesTo": [ "EntitySet" ], diff --git a/vocabularies/DataIntegration.md b/vocabularies/DataIntegration.md index b3f2bf85..5108deb2 100644 --- a/vocabularies/DataIntegration.md +++ b/vocabularies/DataIntegration.md @@ -9,11 +9,11 @@ Terms for Data Integration Term|Type|Description :---|:---|:---------- [Extractable](./DataIntegration.xml#L32:~:text=Defines if entity set is extractable -[OriginalDataType](./DataIntegration.xml#L36:~:text=Original data type of the annotated property in its source system ([Example](./DataIntegration.xml#L39))
The provider of an OData service maps its local type definitions to Edm types. Sometimes, specific type information is lost. This additional annotation gives the consumer hints about the type original type definition. +[OriginalDataType](./DataIntegration.xml#L36:~:text=Original data type of the annotated property in its source system ([Example](./DataIntegration.xml#L39))
The provider of an OData service maps its local type definitions to Edm types. Sometimes, specific type information is lost. This additional annotation gives the consumer hints about the type original type definition. [OriginalName](./DataIntegration.xml#L46:~:text=Original name of the annotated model element in its source model ([Example](./DataIntegration.xml#L49))
The provider of an OData service maps its local names to Edm identifiers, which may require removing or replacing characters that are not allowed. -[ConversionExit](./DataIntegration.xml#L56:~:text=Identifier that describes the special output conversion of the annotated property in the source system ([Example](./DataIntegration.xml#L59))
The provider of an OData service maps its local type definitions to Edm types. Sometimes, specific type information is lost. This additional annotation gives the consumer hints about the type original type definition. -[SourceSystem](./DataIntegration.xml#L66:~:text=Identifier that classifies the type of the source system
The original type name used in annotation OriginalDataType depend are specific to different source system. Sourc system type ABAP uses other type names as source system type HANA. -[DeltaMethod](./DataIntegration.xml#L83:~:text=Defines which delta method the entity set supports. Only evaluated if Capabilities.ChangeTracking/Supported is true +[ConversionExit](./DataIntegration.xml#L56:~:text=Identifier that describes the special output conversion of the annotated property in the source system ([Example](./DataIntegration.xml#L59))
The provider of an OData service maps its local type definitions to Edm types. Sometimes, specific type information is lost. This additional annotation gives the consumer hints about the type original type definition. +[SourceSystem](./DataIntegration.xml#L66:~:text=Identifier that classifies the type of the source system
The original type name used in annotation OriginalDataType depend are specific to different source system. Sourc system type ABAP uses other type names as source system type HANA. +[DeltaMethod](./DataIntegration.xml#L83:~:text=Defines which delta method the entity set supports. Only evaluated if Capabilities.ChangeTracking/Supported is true ## [DeltaMethodType](./DataIntegration.xml#L71:~:text=
- + @@ -53,7 +53,7 @@ - + @@ -63,7 +63,7 @@ - + @@ -80,7 +80,7 @@ - + diff --git a/vocabularies/PersonalData.json b/vocabularies/PersonalData.json index 01d98d2b..dd695ba0 100644 --- a/vocabularies/PersonalData.json +++ b/vocabularies/PersonalData.json @@ -48,7 +48,6 @@ "EntitySemantics": { "$Kind": "Term", "$Type": "PersonalData.EntitySemanticsType", - "$Nullable": true, "$AppliesTo": [ "EntitySet" ], @@ -100,7 +99,6 @@ "FieldSemantics": { "$Kind": "Term", "$Type": "PersonalData.FieldSemanticsType", - "$Nullable": true, "$AppliesTo": [ "Property" ], diff --git a/vocabularies/PersonalData.md b/vocabularies/PersonalData.md index 6aed7470..84112cad 100644 --- a/vocabularies/PersonalData.md +++ b/vocabularies/PersonalData.md @@ -27,10 +27,10 @@ Terms for contact and address information are defined in the [Communication voca Term|Type|Description :---|:---|:---------- -[EntitySemantics](./PersonalData.xml#L58:~:text=Primary meaning of the entities in the annotated entity set +[EntitySemantics](./PersonalData.xml#L58:~:text=Primary meaning of the entities in the annotated entity set [DataSubjectRole](./PersonalData.xml#L61:~:text=Role of the data subjects in this set (e.g. employee, customer)
Values are application-specific. Can be a static value or a `Path` expression If the role varies per entity [DataSubjectRoleDescription](./PersonalData.xml#L69:~:text=Language-dependent description of the role of the data subjects in this set (e.g. employee, customer)
Values are application-specific. Can be a static value or a `Path` expression If the role varies per entity -[FieldSemantics](./PersonalData.xml#L113:~:text=Primary meaning of the personal data contained in the annotated property
Changes to values of annotated properties are tracked in the audit log.
*TODO: cross-check with Wolfgang Koch: this annotation SHOULD NOT be necessary on fields that are already marked as being contact data (name, phone number, email address, birthday, ...) or address data (street, city, ...)* +[FieldSemantics](./PersonalData.xml#L113:~:text=Primary meaning of the personal data contained in the annotated property
Changes to values of annotated properties are tracked in the audit log.
*TODO: cross-check with Wolfgang Koch: this annotation SHOULD NOT be necessary on fields that are already marked as being contact data (name, phone number, email address, birthday, ...) or address data (street, city, ...)* [IsPotentiallyPersonal](./PersonalData.xml#L186:~:text=Property contains potentially personal data
Personal data is information relating to an identified or identifiable natural person (data subject).
Note: properties annotated with [`FieldSemantics`](#FieldSemantics) need not be additionally annotated with this term.
See also: [What is personal data?](https://ec.europa.eu/info/law/law-topic/data-protection/reform/what-personal-data_en) [IsPotentiallySensitive](./PersonalData.xml#L197:~:text=Property contains potentially sensitive personal data
Sensitive data is a colloquial term usually including the following data:
- Special categories of personal data such as data revealing racial or ethnic origin, political opinions, religious or philosophical beliefs, or trade union membership, and the processing of genetic data, biometric data, data concerning health or sex life or sexual orientation
- Personal data subject to professional secrecy
- Personal data relating to criminal or administrative offences
- Personal data concerning bank or credit card accounts
See also: [What personal data is considered sensitive?](https://ec.europa.eu/info/law/law-topic/data-protection/reform/rules-business-and-organisations/legal-grounds-processing-data/sensitive-data/what-personal-data-considered-sensitive_en) diff --git a/vocabularies/PersonalData.xml b/vocabularies/PersonalData.xml index 1908a5bc..05f64862 100644 --- a/vocabularies/PersonalData.xml +++ b/vocabularies/PersonalData.xml @@ -55,10 +55,10 @@ Terms for contact and address information are defined in the [Communication voca
- + - + @@ -66,7 +66,7 @@ Terms for contact and address information are defined in the [Communication voca Can be a static value or a `Path` expression If the role varies per entity - + @@ -110,7 +110,7 @@ Terms for contact and address information are defined in the [Communication voca - + diff --git a/vocabularies/UI.json b/vocabularies/UI.json index abd8f556..cfb21f1d 100644 --- a/vocabularies/UI.json +++ b/vocabularies/UI.json @@ -64,7 +64,6 @@ "HeaderInfo": { "$Kind": "Term", "$Type": "UI.HeaderInfoType", - "$Nullable": true, "$AppliesTo": [ "EntityType" ], @@ -136,7 +135,6 @@ "Badge": { "$Kind": "Term", "$Type": "UI.BadgeType", - "$Nullable": true, "$AppliesTo": [ "EntityType" ], @@ -197,7 +195,6 @@ "FieldGroup": { "$Kind": "Term", "$Type": "UI.FieldGroupType", - "$Nullable": true, "$AppliesTo": [ "EntityType", "Action", @@ -223,7 +220,6 @@ "ConnectedFields": { "$Kind": "Term", "$Type": "UI.ConnectedFieldsType", - "$Nullable": true, "$AppliesTo": [ "EntityType" ], @@ -284,7 +280,6 @@ "GeoLocation": { "$Kind": "Term", "$Type": "UI.GeoLocationType", - "$Nullable": true, "$AppliesTo": [ "EntityType" ], @@ -333,7 +328,6 @@ "MediaResource": { "$Kind": "Term", "$Type": "UI.MediaResourceType", - "$Nullable": true, "$AppliesTo": [ "EntityType" ], @@ -705,7 +699,6 @@ "KPI": { "$Kind": "Term", "$Type": "UI.KPIType", - "$Nullable": true, "$AppliesTo": [ "EntitySet", "EntityType" @@ -769,7 +762,6 @@ "Chart": { "$Kind": "Term", "$Type": "UI.ChartDefinitionType", - "$Nullable": true, "$AppliesTo": [ "EntityType" ], @@ -1201,7 +1193,6 @@ "SelectionPresentationVariant": { "$Kind": "Term", "$Type": "UI.SelectionPresentationVariantType", - "$Nullable": true, "$AppliesTo": [ "EntitySet", "EntityType" @@ -1232,7 +1223,6 @@ "PresentationVariant": { "$Kind": "Term", "$Type": "UI.PresentationVariantType", - "$Nullable": true, "$AppliesTo": [ "EntitySet", "EntityType" @@ -1323,7 +1313,6 @@ "SelectionVariant": { "$Kind": "Term", "$Type": "UI.SelectionVariantType", - "$Nullable": true, "$AppliesTo": [ "EntitySet", "EntityType" @@ -1581,7 +1570,6 @@ "TextArrangement": { "$Kind": "Term", "$Type": "UI.TextArrangementType", - "$Nullable": true, "$AppliesTo": [ "Annotation", "EntityType" @@ -1603,7 +1591,6 @@ "Importance": { "$Kind": "Term", "$Type": "UI.ImportanceType", - "$Nullable": true, "$AppliesTo": [ "Annotation", "Record" @@ -1676,7 +1663,6 @@ "DataFieldDefault": { "$Kind": "Term", "$Type": "UI.DataFieldAbstract", - "$Nullable": true, "$AppliesTo": [ "Property" ], @@ -1930,7 +1916,6 @@ "Criticality": { "$Kind": "Term", "$Type": "UI.CriticalityType", - "$Nullable": true, "$AppliesTo": [ "Annotation" ], @@ -1939,7 +1924,6 @@ "CriticalityCalculation": { "$Kind": "Term", "$Type": "UI.CriticalityCalculationType", - "$Nullable": true, "$AppliesTo": [ "Annotation" ], @@ -1959,7 +1943,6 @@ "OrderBy": { "$Kind": "Term", "$Type": "Edm.PropertyPath", - "$Nullable": true, "$AppliesTo": [ "Property" ], @@ -1980,7 +1963,6 @@ "RecommendationState": { "$Kind": "Term", "$Type": "UI.RecommendationStateType", - "$Nullable": true, "@Core.Description": "Indicates whether a field contains or has a recommended value", "@Core.LongDescription": "Intelligent systems can help users by recommending input the user may \"prefer\"." }, @@ -2007,7 +1989,6 @@ "RecommendationList": { "$Kind": "Term", "$Type": "UI.RecommendationListType", - "$Nullable": true, "$AppliesTo": [ "Property", "Parameter" diff --git a/vocabularies/UI.md b/vocabularies/UI.md index 83a1c376..56028e3f 100644 --- a/vocabularies/UI.md +++ b/vocabularies/UI.md @@ -20,20 +20,20 @@ a collection of business object instances, e.g. as a list or table. Term|Type|Description :---|:---|:---------- -[HeaderInfo](./UI.xml#L58:~:text=Information for the header area of an entity representation. HeaderInfo is mandatory for main entity types of the model +[HeaderInfo](./UI.xml#L58:~:text=Information for the header area of an entity representation. HeaderInfo is mandatory for main entity types of the model [Identification](./UI.xml#L109:~:text=Collection of fields identifying the object -[Badge](./UI.xml#L114:~:text=Information usually displayed in the form of a business card +[Badge](./UI.xml#L114:~:text=Information usually displayed in the form of a business card [LineItem](./UI.xml#L141:~:text=Collection of data fields for representation in a table or list [StatusInfo](./UI.xml#L146:~:text=Collection of data fields describing the status of an entity -[FieldGroup](./UI.xml#L151:~:text=Group of fields with an optional label -[ConnectedFields](./UI.xml#L165:~:text=Group of semantically connected fields with a representation template and an optional label ([Example](./UI.xml#L167)) +[FieldGroup](./UI.xml#L151:~:text=Group of fields with an optional label +[ConnectedFields](./UI.xml#L165:~:text=Group of semantically connected fields with a representation template and an optional label ([Example](./UI.xml#L167)) [GeoLocations](./UI.xml#L230:~:text=Collection of geographic locations -[GeoLocation](./UI.xml#L234:~:text=Geographic location +[GeoLocation](./UI.xml#L234:~:text=Geographic location [Contacts](./UI.xml#L254:~:text=Collection of contacts
Each collection item MUST reference an annotation of a Communication.Contact
Allowed terms:
- [Contact](Communication.md#Contact) -[MediaResource](./UI.xml#L265:~:text=Properties that describe a media resource +[MediaResource](./UI.xml#L265:~:text=Properties that describe a media resource [DataPoint](./UI.xml#L319:~:text=Visualization of a single point of data, typically a number; may also be textual, e.g. a status value -[KPI](./UI.xml#L627:~:text=A Key Performance Indicator (KPI) bundles a SelectionVariant and a DataPoint, and provides details for progressive disclosure -[Chart](./UI.xml#L673:~:text=Visualization of multiple data points +[KPI](./UI.xml#L627:~:text=A Key Performance Indicator (KPI) bundles a SelectionVariant and a DataPoint, and provides details for progressive disclosure +[Chart](./UI.xml#L673:~:text=Visualization of multiple data points [ValueCriticality](./UI.xml#L897:~:text=Assign criticalities to primitive values. This information can be used for semantic coloring. [CriticalityLabels](./UI.xml#L910:~:text=Assign labels to criticalities. This information can be used for semantic coloring. When applied to a property, a label for a criticality must be provided, if more than one value of the annotated property has been assigned to the same criticality. There must be no more than one label per criticality. [SelectionFields](./UI.xml#L931:~:text=Properties that might be relevant for filtering a collection of entities of this type @@ -42,9 +42,9 @@ Term|Type|Description [QuickViewFacets](./UI.xml#L947:~:text=Facets that may be used for a quick overview of the object [QuickCreateFacets](./UI.xml#L951:~:text=Facets that may be used for a (quick) create of the object [FilterFacets](./UI.xml#L955:~:text=Facets that reference UI.FieldGroup annotations to group filterable fields -[SelectionPresentationVariant](./UI.xml#L1022:~:text=A SelectionPresentationVariant bundles a Selection Variant and a Presentation Variant -[PresentationVariant](./UI.xml#L1046:~:text=Defines how the result of a queried collection of entities is shaped and how this result is displayed -[SelectionVariant](./UI.xml#L1159:~:text=A SelectionVariant denotes a combination of parameters and filters to query the annotated entity set +[SelectionPresentationVariant](./UI.xml#L1022:~:text=A SelectionPresentationVariant bundles a Selection Variant and a Presentation Variant +[PresentationVariant](./UI.xml#L1046:~:text=Defines how the result of a queried collection of entities is shaped and how this result is displayed +[SelectionVariant](./UI.xml#L1159:~:text=A SelectionVariant denotes a combination of parameters and filters to query the annotated entity set [ThingPerspective](./UI.xml#L1315:~:text=The annotated term is a Thing Perspective [IsSummary](./UI.xml#L1318:~:text=This Facet and all included Facets are the summary of the thing. At most one Facet of a thing can be tagged with this term [PartOfPreview](./UI.xml#L1322:~:text=This record and all included structural elements are part of the Thing preview
This term can be applied e.g. to UI.Facet and UI.DataField @@ -54,21 +54,21 @@ Term|Type|Description [IsImage](./UI.xml#L1345:~:text=Properties annotated with this term MUST be a stream property annotated with a MIME type image. Entity types annotated with this term MUST be a media entity type annotated with a MIME type image.
Can be annotated with:
- [IsNaturalPerson](Common.md#IsNaturalPerson) [MultiLineText](./UI.xml#L1356:~:text=Properties and parameters annotated with this annotation should be rendered as multi-line text (e.g. text area) [Placeholder](./UI.xml#L1361:~:text=A short, human-readable text that gives a hint or an example to help the user with data entry -[TextArrangement](./UI.xml#L1367:~:text=Describes the arrangement of a code or ID value and its text
If used for a single property the Common.Text annotation is annotated -[Importance](./UI.xml#L1386:~:text=Expresses the importance of e.g. a DataField or an annotation +[TextArrangement](./UI.xml#L1367:~:text=Describes the arrangement of a code or ID value and its text
If used for a single property the Common.Text annotation is annotated +[Importance](./UI.xml#L1386:~:text=Expresses the importance of e.g. a DataField or an annotation [Hidden](./UI.xml#L1401:~:text=Properties or facets (see UI.Facet) annotated with this term will not be rendered if the annotation evaluates to true.
Hidden properties usually carry technical information that is used for application control and is of no direct interest to end users. The annotation value may be an expression to dynamically hide or render the annotated feature. If a navigation property is annotated with `Hidden` true, all subsequent parts are hidden - independent of their own potential `Hidden` annotations. [CreateHidden](./UI.xml#L1409:~:text=EntitySets annotated with this term can control the visibility of the Create operation dynamically
The annotation value should be a path to another property from a related entity. [UpdateHidden](./UI.xml#L1414:~:text=EntitySets annotated with this term can control the visibility of the Edit/Save operation dynamically
The annotation value should be a path to another property from the same or a related entity. [DeleteHidden](./UI.xml#L1419:~:text=EntitySets annotated with this term can control the visibility of the Delete operation dynamically
The annotation value should be a path to another property from the same or a related entity. [HiddenFilter](./UI.xml#L1424:~:text=Properties annotated with this term will not be rendered as filter criteria if the annotation evaluates to true.
Properties annotated with `HiddenFilter` are intended as parts of a `$filter` expression that cannot be directly influenced by end users. The properties will be rendered in all other places, e.g. table columns or form fields. This is in contrast to properties annotated with [Hidden](#Hidden) that are not rendered at all. If a navigation property is annotated with `HiddenFilter` true, all subsequent parts are hidden in filter - independent of their own potential `HiddenFilter` annotations. -[DataFieldDefault](./UI.xml#L1433:~:text=Default representation of a property as a datafield, e.g. when the property is added as a table column or form field via personalization
Only concrete subtypes of [DataFieldAbstract](#DataFieldAbstract) can be used for a DataFieldDefault. For type [DataField](#DataField) and its subtypes the annotation target SHOULD be the same property that is referenced via a path expression in the `Value` of the datafield. -[Criticality](./UI.xml#L1651:~:text=Service-calculated criticality, alternative to UI.CriticalityCalculation -[CriticalityCalculation](./UI.xml#L1655:~:text=Parameters for client-calculated criticality, alternative to UI.Criticality +[DataFieldDefault](./UI.xml#L1433:~:text=Default representation of a property as a datafield, e.g. when the property is added as a table column or form field via personalization
Only concrete subtypes of [DataFieldAbstract](#DataFieldAbstract) can be used for a DataFieldDefault. For type [DataField](#DataField) and its subtypes the annotation target SHOULD be the same property that is referenced via a path expression in the `Value` of the datafield. +[Criticality](./UI.xml#L1651:~:text=Service-calculated criticality, alternative to UI.CriticalityCalculation +[CriticalityCalculation](./UI.xml#L1655:~:text=Parameters for client-calculated criticality, alternative to UI.Criticality [Emphasized](./UI.xml#L1659:~:text=Highlight something that is of special interest
The usage of a property or operation should be highlighted as it's of special interest for the end user -[OrderBy](./UI.xml#L1665:~:text=Sort by the referenced property instead of by the annotated property
Example: annotated property `SizeCode` has string values XS, S, M, L, XL, referenced property SizeOrder has numeric values -2, -1, 0, 1, 2. Numeric ordering by SizeOrder will be more understandable than lexicographic ordering by SizeCode. +[OrderBy](./UI.xml#L1665:~:text=Sort by the referenced property instead of by the annotated property
Example: annotated property `SizeCode` has string values XS, S, M, L, XL, referenced property SizeOrder has numeric values -2, -1, 0, 1, 2. Numeric ordering by SizeOrder will be more understandable than lexicographic ordering by SizeCode. [ParameterDefaultValue](./UI.xml#L1671:~:text=Define default values for action parameters
For unbound actions the default value can either be a constant expression, or a dynamic expression using absolute paths, e.g. singletons or function import results. Whereas for bound actions the bound entity and its properties and associated properties can be used as default values -[RecommendationState](./UI.xml#L1677:~:text=Indicates whether a field contains or has a recommended value
Intelligent systems can help users by recommending input the user may "prefer". -[RecommendationList](./UI.xml#L1707:~:text=Specifies how to get a list of recommended values for a property or parameter
Intelligent systems can help users by recommending input the user may "prefer". +[RecommendationState](./UI.xml#L1677:~:text=Indicates whether a field contains or has a recommended value
Intelligent systems can help users by recommending input the user may "prefer". +[RecommendationList](./UI.xml#L1707:~:text=Specifies how to get a list of recommended values for a property or parameter
Intelligent systems can help users by recommending input the user may "prefer". [ExcludeFromNavigationContext](./UI.xml#L1739:~:text=The contents of this property must not be propagated to the app-to-app navigation context [DoNotCheckScaleOfMeasuredQuantity](./UI.xml#L1743:~:text=Do not check the number of fractional digits of the annotated measured quantity
The annotated property contains a measured quantity, and the user may enter more fractional digits than defined for the corresponding unit of measure.
This switches off the validation of user input with respect to decimals. diff --git a/vocabularies/UI.xml b/vocabularies/UI.xml index 6bb81db8..847c66b3 100644 --- a/vocabularies/UI.xml +++ b/vocabularies/UI.xml @@ -55,7 +55,7 @@ a collection of business object instances, e.g. as a list or table. - + @@ -111,7 +111,7 @@ a collection of business object instances, e.g. as a list or table. - + @@ -148,7 +148,7 @@ a collection of business object instances, e.g. as a list or table. - + @@ -162,7 +162,7 @@ a collection of business object instances, e.g. as a list or table. - + @@ -231,7 +231,7 @@ a collection of business object instances, e.g. as a list or table. - + @@ -262,7 +262,7 @@ a collection of business object instances, e.g. as a list or table.
- + @@ -305,7 +305,7 @@ a collection of business object instances, e.g. as a list or table. + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vocabularies/UI.json b/vocabularies/UI.json index 1f090ef0..5ade1a76 100644 --- a/vocabularies/UI.json +++ b/vocabularies/UI.json @@ -1635,6 +1635,18 @@ "@Core.Description": "Properties or facets (see UI.Facet) annotated with this term will not be rendered if the annotation evaluates to true.", "@Core.LongDescription": "Hidden properties usually carry technical information that is used for application control and is of no direct interest to end users.\n The annotation value may be an expression to dynamically hide or render the annotated feature. If a navigation property is annotated with `Hidden` true, all subsequent parts are hidden - independent of their own potential `Hidden` annotations." }, + "IsCopyAction": { + "$Kind": "Term", + "$Type": "Core.Tag", + "$DefaultValue": true, + "$AppliesTo": [ + "Record" + ], + "@Common.Experimental": true, + "@Core.RequiresType": "UI.DataFieldForAction", + "@Core.Description": "The annotated `DataFieldForAction` record within a `UI.LineItem` annotation references an action that deep-copies an instance of the annotated entity type", + "@Core.LongDescription": "The referenced action MUST be bound to the annotated entity type and creates a new instance of the same entity type as a deep copy of the bound instance.\nUpon successful completion, the response MUST contain a `Location` header that contains the edit URL or read URL of the created entity,\nand the response MUST be either `201 Created` and a representation of the created entity,\nor `204 No Content` if the request included a `Prefer` header with a value of `return=minimal` and did not include the system query options `$select` and `$expand`." + }, "CreateHidden": { "$Kind": "Term", "$Type": "Core.Tag", diff --git a/vocabularies/UI.md b/vocabularies/UI.md index 4b727eaf..cac74478 100644 --- a/vocabularies/UI.md +++ b/vocabularies/UI.md @@ -57,20 +57,21 @@ Term|Type|Description [TextArrangement](./UI.xml#L1373:~:text=Describes the arrangement of a code or ID value and its text
If used for a single property the Common.Text annotation is annotated [Importance](./UI.xml#L1392:~:text=Expresses the importance of e.g. a DataField or an annotation [Hidden](./UI.xml#L1407:~:text=Properties or facets (see UI.Facet) annotated with this term will not be rendered if the annotation evaluates to true.
Hidden properties usually carry technical information that is used for application control and is of no direct interest to end users. The annotation value may be an expression to dynamically hide or render the annotated feature. If a navigation property is annotated with `Hidden` true, all subsequent parts are hidden - independent of their own potential `Hidden` annotations. -[CreateHidden](./UI.xml#L1415:~:text=EntitySets annotated with this term can control the visibility of the Create operation dynamically
The annotation value should be a path to another property from a related entity. -[UpdateHidden](./UI.xml#L1420:~:text=EntitySets annotated with this term can control the visibility of the Edit/Save operation dynamically
The annotation value should be a path to another property from the same or a related entity. -[DeleteHidden](./UI.xml#L1425:~:text=EntitySets annotated with this term can control the visibility of the Delete operation dynamically
The annotation value should be a path to another property from the same or a related entity. -[HiddenFilter](./UI.xml#L1430:~:text=Properties annotated with this term will not be rendered as filter criteria if the annotation evaluates to true.
Properties annotated with `HiddenFilter` are intended as parts of a `$filter` expression that cannot be directly influenced by end users. The properties will be rendered in all other places, e.g. table columns or form fields. This is in contrast to properties annotated with [Hidden](#Hidden) that are not rendered at all. If a navigation property is annotated with `HiddenFilter` true, all subsequent parts are hidden in filter - independent of their own potential `HiddenFilter` annotations. -[DataFieldDefault](./UI.xml#L1439:~:text=Default representation of a property as a datafield, e.g. when the property is added as a table column or form field via personalization
Only concrete subtypes of [DataFieldAbstract](#DataFieldAbstract) can be used for a DataFieldDefault. For type [DataField](#DataField) and its subtypes the annotation target SHOULD be the same property that is referenced via a path expression in the `Value` of the datafield. -[Criticality](./UI.xml#L1657:~:text=Service-calculated criticality, alternative to UI.CriticalityCalculation -[CriticalityCalculation](./UI.xml#L1661:~:text=Parameters for client-calculated criticality, alternative to UI.Criticality -[Emphasized](./UI.xml#L1665:~:text=Highlight something that is of special interest
The usage of a property or operation should be highlighted as it's of special interest for the end user -[OrderBy](./UI.xml#L1671:~:text=Sort by the referenced property instead of by the annotated property
Example: annotated property `SizeCode` has string values XS, S, M, L, XL, referenced property SizeOrder has numeric values -2, -1, 0, 1, 2. Numeric ordering by SizeOrder will be more understandable than lexicographic ordering by SizeCode. -[ParameterDefaultValue](./UI.xml#L1677:~:text=Define default values for action parameters
For unbound actions the default value can either be a constant expression, or a dynamic expression using absolute paths, e.g. singletons or function import results. Whereas for bound actions the bound entity and its properties and associated properties can be used as default values -[RecommendationState](./UI.xml#L1683:~:text=Indicates whether a field contains or has a recommended value
Intelligent systems can help users by recommending input the user may "prefer". -[RecommendationList](./UI.xml#L1713:~:text=Specifies how to get a list of recommended values for a property or parameter
Intelligent systems can help users by recommending input the user may "prefer". -[ExcludeFromNavigationContext](./UI.xml#L1745:~:text=The contents of this property must not be propagated to the app-to-app navigation context -[DoNotCheckScaleOfMeasuredQuantity](./UI.xml#L1749:~:text=Do not check the number of fractional digits of the annotated measured quantity
The annotated property contains a measured quantity, and the user may enter more fractional digits than defined for the corresponding unit of measure.
This switches off the validation of user input with respect to decimals. +[IsCopyAction](./UI.xml#L1415:~:text=The annotated `DataFieldForAction` record within a `UI.LineItem` annotation references an action that deep-copies an instance of the annotated entity type
The referenced action MUST be bound to the annotated entity type and creates a new instance of the same entity type as a deep copy of the bound instance. Upon successful completion, the response MUST contain a `Location` header that contains the edit URL or read URL of the created entity, and the response MUST be either `201 Created` and a representation of the created entity, or `204 No Content` if the request included a `Prefer` header with a value of `return=minimal` and did not include the system query options `$select` and `$expand`. +[CreateHidden](./UI.xml#L1427:~:text=EntitySets annotated with this term can control the visibility of the Create operation dynamically
The annotation value should be a path to another property from a related entity. +[UpdateHidden](./UI.xml#L1432:~:text=EntitySets annotated with this term can control the visibility of the Edit/Save operation dynamically
The annotation value should be a path to another property from the same or a related entity. +[DeleteHidden](./UI.xml#L1437:~:text=EntitySets annotated with this term can control the visibility of the Delete operation dynamically
The annotation value should be a path to another property from the same or a related entity. +[HiddenFilter](./UI.xml#L1442:~:text=Properties annotated with this term will not be rendered as filter criteria if the annotation evaluates to true.
Properties annotated with `HiddenFilter` are intended as parts of a `$filter` expression that cannot be directly influenced by end users. The properties will be rendered in all other places, e.g. table columns or form fields. This is in contrast to properties annotated with [Hidden](#Hidden) that are not rendered at all. If a navigation property is annotated with `HiddenFilter` true, all subsequent parts are hidden in filter - independent of their own potential `HiddenFilter` annotations. +[DataFieldDefault](./UI.xml#L1451:~:text=Default representation of a property as a datafield, e.g. when the property is added as a table column or form field via personalization
Only concrete subtypes of [DataFieldAbstract](#DataFieldAbstract) can be used for a DataFieldDefault. For type [DataField](#DataField) and its subtypes the annotation target SHOULD be the same property that is referenced via a path expression in the `Value` of the datafield. +[Criticality](./UI.xml#L1669:~:text=Service-calculated criticality, alternative to UI.CriticalityCalculation +[CriticalityCalculation](./UI.xml#L1673:~:text=Parameters for client-calculated criticality, alternative to UI.Criticality +[Emphasized](./UI.xml#L1677:~:text=Highlight something that is of special interest
The usage of a property or operation should be highlighted as it's of special interest for the end user +[OrderBy](./UI.xml#L1683:~:text=Sort by the referenced property instead of by the annotated property
Example: annotated property `SizeCode` has string values XS, S, M, L, XL, referenced property SizeOrder has numeric values -2, -1, 0, 1, 2. Numeric ordering by SizeOrder will be more understandable than lexicographic ordering by SizeCode. +[ParameterDefaultValue](./UI.xml#L1689:~:text=Define default values for action parameters
For unbound actions the default value can either be a constant expression, or a dynamic expression using absolute paths, e.g. singletons or function import results. Whereas for bound actions the bound entity and its properties and associated properties can be used as default values +[RecommendationState](./UI.xml#L1695:~:text=Indicates whether a field contains or has a recommended value
Intelligent systems can help users by recommending input the user may "prefer". +[RecommendationList](./UI.xml#L1725:~:text=Specifies how to get a list of recommended values for a property or parameter
Intelligent systems can help users by recommending input the user may "prefer". +[ExcludeFromNavigationContext](./UI.xml#L1757:~:text=The contents of this property must not be propagated to the app-to-app navigation context +[DoNotCheckScaleOfMeasuredQuantity](./UI.xml#L1761:~:text=Do not check the number of fractional digits of the annotated measured quantity
The annotated property contains a measured quantity, and the user may enter more fractional digits than defined for the corresponding unit of measure.
This switches off the validation of user input with respect to decimals. ## [HeaderInfoType](./UI.xml#L68:~:text=[*DataFieldAbstract*](./UI.xml#L1444:~:text=[*DataFieldAbstract*](./UI.xml#L1456:~:text=[CriticalityRepresentationType](./UI.xml#L1474:~:text=[CriticalityRepresentationType](./UI.xml#L1486:~:text=[DataFieldForAnnotation](./UI.xml#L1487:~:text=[DataFieldForAnnotation](./UI.xml#L1499:~:text=Allowed terms:
- [Address](Communication.md#Address)
- [Contact](Communication.md#Contact)
- [Chart](#Chart)
- [ConnectedFields](#ConnectedFields)
- [DataPoint](#DataPoint)
- [FieldGroup](#FieldGroup) +[*Label*](./UI.xml#L1470:~:text=Allowed terms:
- [Address](Communication.md#Address)
- [Contact](Communication.md#Contact)
- [Chart](#Chart)
- [ConnectedFields](#ConnectedFields)
- [DataPoint](#DataPoint)
- [FieldGroup](#FieldGroup) **Applicable Annotation Terms:** @@ -773,7 +774,7 @@ Property|Type|Description - [PartOfPreview](#PartOfPreview) - [CssDefaults](HTML5.md#CssDefaults) -## [*DataFieldForActionAbstract*](./UI.xml#L1504:~:text=[*DataFieldForActionAbstract*](./UI.xml#L1516:~:text=[DataFieldForAction](./UI.xml#L1514:~:text=[DataFieldForAction](./UI.xml#L1526:~:text=[OperationGroupingType](./UI.xml#L1524:~:text=[OperationGroupingType](./UI.xml#L1536:~:text=[DataFieldForIntentBasedNavigation](./UI.xml#L1533:~:text=[DataFieldForIntentBasedNavigation](./UI.xml#L1545:~:text=[DataFieldForActionGroup](./UI.xml#L1557:~:text=[DataFieldForActionGroup](./UI.xml#L1569:~:text=[DataField](./UI.xml#L1565:~:text=[DataField](./UI.xml#L1577:~:text=[DataFieldWithAction](./UI.xml#L1594:~:text=[DataFieldWithAction](./UI.xml#L1606:~:text=[DataFieldWithIntentBasedNavigation](./UI.xml#L1603:~:text=[DataFieldWithIntentBasedNavigation](./UI.xml#L1615:~:text=[DataFieldWithNavigationPath](./UI.xml#L1623:~:text=[DataFieldWithNavigationPath](./UI.xml#L1635:~:text=[DataFieldWithUrl](./UI.xml#L1634:~:text=[DataFieldWithUrl](./UI.xml#L1646:~:text=[DataFieldWithActionGroup](./UI.xml#L1648:~:text=[DataFieldWithActionGroup](./UI.xml#L1660:~:text=[RecommendationStateType](./UI.xml#L1690:~:text=[RecommendationStateType](./UI.xml#L1702:~:text=[RecommendationListType](./UI.xml#L1720:~:text=[RecommendationListType](./UI.xml#L1732:~:text=[RecommendationBinding](./UI.xml#L1736:~:text=[RecommendationBinding](./UI.xml#L1748:~:text=
+ + + + + + The referenced action MUST be bound to the annotated entity type and creates a new instance of the same entity type as a deep copy of the bound instance. +Upon successful completion, the response MUST contain a `Location` header that contains the edit URL or read URL of the created entity, +and the response MUST be either `201 Created` and a representation of the created entity, +or `204 No Content` if the request included a `Prefer` header with a value of `return=minimal` and did not include the system query options `$select` and `$expand`. + + + From c9a6079a25043a87cee604d92df1b5a5c794dc18 Mon Sep 17 00:00:00 2001 From: Ralf Handl Date: Mon, 26 Sep 2022 11:06:31 +0200 Subject: [PATCH 23/24] UI.IsCopyAction: improved descriptions (#198) * Improved descriptions * Remove restriction to LineItem from description --- vocabularies/UI.json | 4 ++-- vocabularies/UI.md | 2 +- vocabularies/UI.xml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/vocabularies/UI.json b/vocabularies/UI.json index 5ade1a76..ed2a3e9f 100644 --- a/vocabularies/UI.json +++ b/vocabularies/UI.json @@ -1644,8 +1644,8 @@ ], "@Common.Experimental": true, "@Core.RequiresType": "UI.DataFieldForAction", - "@Core.Description": "The annotated `DataFieldForAction` record within a `UI.LineItem` annotation references an action that deep-copies an instance of the annotated entity type", - "@Core.LongDescription": "The referenced action MUST be bound to the annotated entity type and creates a new instance of the same entity type as a deep copy of the bound instance.\nUpon successful completion, the response MUST contain a `Location` header that contains the edit URL or read URL of the created entity,\nand the response MUST be either `201 Created` and a representation of the created entity,\nor `204 No Content` if the request included a `Prefer` header with a value of `return=minimal` and did not include the system query options `$select` and `$expand`." + "@Core.Description": "The annotated [`DataFieldForAction`](#DataFieldForAction) record references an action that deep-copies an instance of the annotated entity type", + "@Core.LongDescription": "The referenced action MUST be bound to the annotated entity type and MUST create a new instance of the same entity type as a deep copy of the bound instance.\nUpon successful completion, the response MUST contain a `Location` header that contains the edit URL or read URL of the created entity,\nand the response MUST be either `201 Created` and a representation of the created entity,\nor `204 No Content` if the request included a `Prefer` header with a value of `return=minimal` and did not include the system query options `$select` and `$expand`." }, "CreateHidden": { "$Kind": "Term", diff --git a/vocabularies/UI.md b/vocabularies/UI.md index cac74478..fc1ee8cf 100644 --- a/vocabularies/UI.md +++ b/vocabularies/UI.md @@ -57,7 +57,7 @@ Term|Type|Description [TextArrangement](./UI.xml#L1373:~:text=Describes the arrangement of a code or ID value and its text
If used for a single property the Common.Text annotation is annotated [Importance](./UI.xml#L1392:~:text=Expresses the importance of e.g. a DataField or an annotation [Hidden](./UI.xml#L1407:~:text=Properties or facets (see UI.Facet) annotated with this term will not be rendered if the annotation evaluates to true.
Hidden properties usually carry technical information that is used for application control and is of no direct interest to end users. The annotation value may be an expression to dynamically hide or render the annotated feature. If a navigation property is annotated with `Hidden` true, all subsequent parts are hidden - independent of their own potential `Hidden` annotations. -[IsCopyAction](./UI.xml#L1415:~:text=The annotated `DataFieldForAction` record within a `UI.LineItem` annotation references an action that deep-copies an instance of the annotated entity type
The referenced action MUST be bound to the annotated entity type and creates a new instance of the same entity type as a deep copy of the bound instance. Upon successful completion, the response MUST contain a `Location` header that contains the edit URL or read URL of the created entity, and the response MUST be either `201 Created` and a representation of the created entity, or `204 No Content` if the request included a `Prefer` header with a value of `return=minimal` and did not include the system query options `$select` and `$expand`. +[IsCopyAction](./UI.xml#L1415:~:text=The annotated [`DataFieldForAction`](#DataFieldForAction) record references an action that deep-copies an instance of the annotated entity type
The referenced action MUST be bound to the annotated entity type and MUST create a new instance of the same entity type as a deep copy of the bound instance. Upon successful completion, the response MUST contain a `Location` header that contains the edit URL or read URL of the created entity, and the response MUST be either `201 Created` and a representation of the created entity, or `204 No Content` if the request included a `Prefer` header with a value of `return=minimal` and did not include the system query options `$select` and `$expand`. [CreateHidden](./UI.xml#L1427:~:text=EntitySets annotated with this term can control the visibility of the Create operation dynamically
The annotation value should be a path to another property from a related entity. [UpdateHidden](./UI.xml#L1432:~:text=EntitySets annotated with this term can control the visibility of the Edit/Save operation dynamically
The annotation value should be a path to another property from the same or a related entity. [DeleteHidden](./UI.xml#L1437:~:text=EntitySets annotated with this term can control the visibility of the Delete operation dynamically
The annotation value should be a path to another property from the same or a related entity. diff --git a/vocabularies/UI.xml b/vocabularies/UI.xml index 13c08154..2c0d51fa 100644 --- a/vocabularies/UI.xml +++ b/vocabularies/UI.xml @@ -1415,9 +1415,9 @@ The trend is - + - The referenced action MUST be bound to the annotated entity type and creates a new instance of the same entity type as a deep copy of the bound instance. + The referenced action MUST be bound to the annotated entity type and MUST create a new instance of the same entity type as a deep copy of the bound instance. Upon successful completion, the response MUST contain a `Location` header that contains the edit URL or read URL of the created entity, and the response MUST be either `201 Created` and a representation of the created entity, or `204 No Content` if the request included a `Prefer` header with a value of `return=minimal` and did not include the system query options `$select` and `$expand`. From 8467d8226346433c7ae857caccab3fc144eb2b92 Mon Sep 17 00:00:00 2001 From: Ralf Handl Date: Wed, 28 Sep 2022 09:40:40 +0200 Subject: [PATCH 24/24] UI.LeadingEntitySet (#199) * UI.LeadingEntitySet * UI.LeadingEntitySet is experimental --- vocabularies/UI.json | 8 ++++++++ vocabularies/UI.md | 1 + vocabularies/UI.xml | 5 +++++ 3 files changed, 14 insertions(+) diff --git a/vocabularies/UI.json b/vocabularies/UI.json index ed2a3e9f..79a1d30c 100644 --- a/vocabularies/UI.json +++ b/vocabularies/UI.json @@ -2068,6 +2068,14 @@ "@Common.Experimental": true, "@Core.Description": "Do not check the number of fractional digits of the annotated measured quantity", "@Core.LongDescription": "The annotated property contains a measured quantity, and the user may enter more fractional digits than defined for the corresponding unit of measure.\n\nThis switches off the validation of user input with respect to decimals." + }, + "LeadingEntitySet": { + "$Kind": "Term", + "$AppliesTo": [ + "EntityContainer" + ], + "@Common.Experimental": true, + "@Core.Description": "The referenced entity set is the preferred starting point for UIs using this service" } } } \ No newline at end of file diff --git a/vocabularies/UI.md b/vocabularies/UI.md index fc1ee8cf..181a9eb3 100644 --- a/vocabularies/UI.md +++ b/vocabularies/UI.md @@ -72,6 +72,7 @@ Term|Type|Description [RecommendationList](./UI.xml#L1725:~:text=Specifies how to get a list of recommended values for a property or parameter
Intelligent systems can help users by recommending input the user may "prefer". [ExcludeFromNavigationContext](./UI.xml#L1757:~:text=The contents of this property must not be propagated to the app-to-app navigation context [DoNotCheckScaleOfMeasuredQuantity](./UI.xml#L1761:~:text=Do not check the number of fractional digits of the annotated measured quantity
The annotated property contains a measured quantity, and the user may enter more fractional digits than defined for the corresponding unit of measure.
This switches off the validation of user input with respect to decimals. +[LeadingEntitySet](./UI.xml#L1771:~:text=The referenced entity set is the preferred starting point for UIs using this service ## [HeaderInfoType](./UI.xml#L68:~:text=
+ + + + +