upload current sources
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
node_modules/
|
||||
dist/
|
||||
.scp/
|
||||
.env
|
||||
Makefile*.mta
|
||||
mta_archives
|
||||
mta-*
|
||||
resources
|
||||
archive.zip
|
||||
.*_mta_build_tmp
|
||||
@@ -0,0 +1,95 @@
|
||||
## Application Details
|
||||
| |
|
||||
| ------------- |
|
||||
|**Generation Date and Time**<br>Mon Sep 14 2026 12:49:13 GMT-0700 (Pacific Daylight Time)|
|
||||
|**App Generator**<br>SAP Fiori Application Generator|
|
||||
|**App Generator Version**<br>1.32.0|
|
||||
|**Generation Platform**<br>Visual Studio Code|
|
||||
|**Template Used**<br>List Report Page V4|
|
||||
|**Service Type**<br>File|
|
||||
|**Metadata File**<br>metadata.xml|
|
||||
|**Module Name**<br>app|
|
||||
|**Application Title**<br>Arena PLM Engineering Changes Approval Flow|
|
||||
|**Namespace**<br>com.minicircuits|
|
||||
|**UI5 Theme**<br>sap_horizon|
|
||||
|**UI5 Version**<br>1.152.0|
|
||||
|**Enable TypeScript**<br>True|
|
||||
|**Add Eslint configuration**<br>True, see https://www.npmjs.com/package/@sap-ux/eslint-plugin-fiori-tools#rules for the eslint rules.|
|
||||
|**Main Entity**<br>ChangeApprovals|
|
||||
|
||||
## Service binding (provisional)
|
||||
|
||||
The app binds to the RAP **UI** service binding, not the A2X binding the worker uses.
|
||||
The single source of truth for the service identity is the header comment of
|
||||
`webapp/localService/mainService/metadata.xml`:
|
||||
|
||||
| Item | Value |
|
||||
|---|---|
|
||||
| Service binding (OData V4 - UI) | `ZUI_ARENA_CHANGE_APPROVAL_O4` |
|
||||
| Service definition | `ZUI_ARENA_CHANGE_APPROVAL` |
|
||||
| Service URL | `/sap/opu/odata4/sap/zui_arena_change_approval_o4/srvd/sap/zui_arena_change_approval/0001/` |
|
||||
| Schema namespace / alias | `com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001` / `SAP__self` |
|
||||
| Entity type / entity set | `ChangeApproval_Type` / `ChangeApproval` |
|
||||
|
||||
The first URL segment and the schema namespace are derived from the service **binding** name,
|
||||
the segment after `srvd/sap/` from the service **definition** name - strongly indicated by the
|
||||
tenant's `/sap/opu/odata4/sap/api_currencyexchangerate/srvd_a2x/sap/currencyexchangerate/0001`
|
||||
(namespace `com.sap.gateway.srvd_a2x.api_currencyexchangerate.v0001`) and SAP Help's
|
||||
`/sap/opu/odata4/sap/api_product/srvd_a2x/sap/product/0002`
|
||||
[source: sap-docs sap-help loio 5f45f125dfe84c20beb18f5de1512f5a, verified 2026-09-14].
|
||||
|
||||
`webapp/manifest.json` (`sap.app.dataSources.mainService.uri`, routing) and
|
||||
`webapp/annotations/annotation.xml` (`edmx:Reference`, every `Annotations Target`, every
|
||||
`DataFieldForAction.Action`) must stay in sync with it. JSON cannot carry comments, so the
|
||||
manifest references this note instead.
|
||||
|
||||
**Provisional - namespace = binding name is strongly indicated, not proven; reconcile namespace,
|
||||
entity type suffix and URL segments against the live `$metadata` of the RAP UI service binding
|
||||
at PRD V-2 before deploy.**
|
||||
|
||||
## Status model and actions
|
||||
|
||||
`Status`: `PENDING -> APPROVED -> EXECUTING -> SYNCED | FAILED`; `REJECTED` is terminal;
|
||||
`FAILED -> retrySync -> EXECUTING`. `approve`/`reject` are enabled only for `PENDING`,
|
||||
`retrySync` only for `FAILED` (mocked via `IsApprovable` / `IsRetriable`, which stand in for the
|
||||
`Core.OperationAvailable` RAP emits for `( features : instance )` actions - PRD RAP-1).
|
||||
Actions are offered on the object page header only; the list report table is display-only
|
||||
(`selectionMode: "None"`).
|
||||
|
||||
## Launchpad
|
||||
|
||||
`sap.app.crossNavigation.inbounds` declares the intent `ArenaChangeApproval-manage`; on
|
||||
deployment to the ABAP environment the launchpad app descriptor item (target mapping + tile) is
|
||||
generated from it, and an IAM app / business catalog / business role make it visible
|
||||
[source: sap-docs /btp-cloud-platform/30-development/sap-fiori-applications-in-the-abap-environment-1d9deef, verified 2026-09-14].
|
||||
`sap.fiori.registrationIds` stays empty: it holds SAP Fiori IDs of SAP-delivered apps and is not
|
||||
required for a custom app (only `archeType` is mandatory)
|
||||
[source: sap-docs /sapui5/04_Essentials/manifest-descriptor-for-applications-components-and-libraries-be0cf40, verified 2026-09-14].
|
||||
|
||||
Dev server: `npm run start-mock` / `npm run int-test` bind to port **8082** (8080 is taken on
|
||||
the dev host). Mock data lives in `webapp/localService/mainService/data/ChangeApproval.json`
|
||||
(`generateMockData: false`), 8 rows covering every status.
|
||||
|
||||
## app
|
||||
|
||||
An SAP Fiori application.
|
||||
|
||||
### Starting the generated app
|
||||
|
||||
- This app has been generated using the SAP Fiori tools - App Generator, as part of the SAP Fiori tools suite. To launch the generated application, run the following from the generated application root folder:
|
||||
|
||||
```
|
||||
npm start
|
||||
```
|
||||
|
||||
- It is also possible to run the application using mock data that reflects the OData Service URL supplied during application generation. In order to run the application with Mock Data, run the following from the generated app root folder:
|
||||
|
||||
```
|
||||
npm run start-mock
|
||||
```
|
||||
|
||||
#### Pre-requisites:
|
||||
|
||||
1. Active NodeJS LTS (Long Term Support) version and associated supported NPM version. (See https://nodejs.org)
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
import fioriTools from '@sap-ux/eslint-plugin-fiori-tools';
|
||||
|
||||
export default [
|
||||
...fioriTools.configs.recommended
|
||||
];
|
||||
Generated
+11164
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"name": "com.minicircuits.arenaplm",
|
||||
"version": "0.0.1",
|
||||
"description": "An SAP Fiori application.",
|
||||
"keywords": [
|
||||
"ui5",
|
||||
"openui5",
|
||||
"sapui5"
|
||||
],
|
||||
"main": "webapp/index.html",
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"@ui5/cli": "^4.0.33",
|
||||
"@sap/ux-ui5-tooling": "1",
|
||||
"@sap-ux/eslint-plugin-fiori-tools": "^10.0.0",
|
||||
"eslint": "^10",
|
||||
"@sapui5/types": "~1.152.0",
|
||||
"ui5-tooling-transpile": "^3.10.0",
|
||||
"typescript": "^5.9.3",
|
||||
"@sap-ux/ui5-middleware-fe-mockserver": "2"
|
||||
},
|
||||
"scripts": {
|
||||
"start": "echo \\\"This application was generated with a local metadata file and does not reference a live server. Please add the required server configuration or start this application with mock data using the target: `npm run start-mock`.\\\"",
|
||||
"start-local": "fiori run --config ./ui5-local.yaml --open \"test/flp.html#app-preview\"",
|
||||
"build": "ui5 build --config=ui5.yaml --clean-dest --dest dist",
|
||||
"lint": "eslint ./",
|
||||
"ts-typecheck": "tsc --noEmit",
|
||||
"prestart": "npm run ts-typecheck",
|
||||
"prebuild": "npm run ts-typecheck",
|
||||
"start-mock": "fiori run --config ./ui5-mock.yaml --port 8082 --open \"test/flp.html#app-preview\"",
|
||||
"deploy": "fiori verify",
|
||||
"deploy-config": "fiori add deploy-config",
|
||||
"start-noflp": "echo \\\"This application was generated with a local metadata file and does not reference a live server. Please add the required server configuration or start this application with mock data using the target: `npm run start-mock`.\\\"",
|
||||
"int-test": "fiori run --config ./ui5-mock.yaml --port 8082 --open \"/test/integration/opaTests.qunit.html\"",
|
||||
"start-variants-management": "echo \\\"This application was generated with a local metadata file and does not reference a live server. Please add the required server configuration or start this application with mock data using the target: `npm run start-mock`.\\\""
|
||||
},
|
||||
"sapuxLayer": "CUSTOMER_BASE",
|
||||
"sapux": true
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "es2022",
|
||||
"module": "es2022",
|
||||
"skipLibCheck": true,
|
||||
"allowJs": true,
|
||||
"strict": true,
|
||||
"strictPropertyInitialization": false,
|
||||
"moduleResolution": "node",
|
||||
"rootDir": "./webapp",
|
||||
"outDir": "./dist",
|
||||
"baseUrl": "./",
|
||||
"paths": {
|
||||
"com/minicircuits/arenaplm/*": [
|
||||
"./webapp/*"
|
||||
]
|
||||
},
|
||||
"typeRoots": [
|
||||
"./node_modules/@types",
|
||||
"./node_modules/@sapui5/types"
|
||||
]
|
||||
},
|
||||
"include": [
|
||||
"./webapp/**/*"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
# yaml-language-server: $schema=https://sap.github.io/ui5-tooling/schema/ui5.yaml.json
|
||||
|
||||
specVersion: "4.0"
|
||||
metadata:
|
||||
name: com.minicircuits.arenaplm
|
||||
type: application
|
||||
framework:
|
||||
name: SAPUI5
|
||||
version: 1.152.0
|
||||
libraries:
|
||||
- name: sap.m
|
||||
- name: sap.ui.core
|
||||
- name: sap.fe.templates
|
||||
- name: sap.ushell
|
||||
- name: themelib_sap_horizon
|
||||
server:
|
||||
customMiddleware:
|
||||
- name: fiori-tools-appreload
|
||||
afterMiddleware: compression
|
||||
configuration:
|
||||
port: 35729
|
||||
path: webapp
|
||||
delay: 300
|
||||
- name: ui5-tooling-transpile-middleware
|
||||
afterMiddleware: compression
|
||||
configuration:
|
||||
debug: true
|
||||
transformModulesToUI5:
|
||||
overridesToOverride: true
|
||||
excludePatterns:
|
||||
- /Component-preload.js
|
||||
- name: fiori-tools-preview
|
||||
afterMiddleware: fiori-tools-appreload
|
||||
configuration:
|
||||
flp:
|
||||
theme: sap_horizon
|
||||
- name: fiori-tools-proxy
|
||||
afterMiddleware: compression
|
||||
configuration:
|
||||
ignoreCertErrors: false # If set to true, certificate errors will be ignored. E.g. self-signed certificates will be accepted
|
||||
backend: []
|
||||
- name: sap-fe-mockserver
|
||||
beforeMiddleware: csp
|
||||
configuration:
|
||||
mountPath: /
|
||||
services:
|
||||
- urlPath: /sap/opu/odata4/sap/zui_arena_change_approval_o4/srvd/sap/zui_arena_change_approval/0001/
|
||||
metadataPath: ./webapp/localService/mainService/metadata.xml
|
||||
mockdataPath: ./webapp/localService/mainService/data
|
||||
generateMockData: false
|
||||
builder:
|
||||
resources:
|
||||
excludes:
|
||||
- /test/**
|
||||
- /localService/**
|
||||
customTasks:
|
||||
- name: ui5-tooling-transpile-task
|
||||
afterTask: replaceVersion
|
||||
configuration:
|
||||
debug: true
|
||||
transformModulesToUI5:
|
||||
overridesToOverride: true
|
||||
@@ -0,0 +1,62 @@
|
||||
# yaml-language-server: $schema=https://sap.github.io/ui5-tooling/schema/ui5.yaml.json
|
||||
|
||||
specVersion: "4.0"
|
||||
metadata:
|
||||
name: com.minicircuits.arenaplm
|
||||
type: application
|
||||
server:
|
||||
customMiddleware:
|
||||
- name: fiori-tools-proxy
|
||||
afterMiddleware: compression
|
||||
configuration:
|
||||
ignoreCertErrors: false # If set to true, certificate errors will be ignored. E.g. self-signed certificates will be accepted
|
||||
ui5:
|
||||
path:
|
||||
- /resources
|
||||
- /test-resources
|
||||
url: https://ui5.sap.com
|
||||
backend: []
|
||||
- name: fiori-tools-appreload
|
||||
afterMiddleware: compression
|
||||
configuration:
|
||||
port: 35729
|
||||
path: webapp
|
||||
delay: 300
|
||||
- name: fiori-tools-preview
|
||||
afterMiddleware: fiori-tools-appreload
|
||||
configuration:
|
||||
flp:
|
||||
theme: sap_horizon
|
||||
test:
|
||||
- framework: OPA5
|
||||
path: /test/integration/opaTests.qunit.html
|
||||
- framework: Testsuite
|
||||
- name: ui5-tooling-transpile-middleware
|
||||
afterMiddleware: compression
|
||||
configuration:
|
||||
debug: true
|
||||
transformModulesToUI5:
|
||||
overridesToOverride: true
|
||||
excludePatterns:
|
||||
- /Component-preload.js
|
||||
- name: sap-fe-mockserver
|
||||
beforeMiddleware: csp
|
||||
configuration:
|
||||
mountPath: /
|
||||
services:
|
||||
- urlPath: /sap/opu/odata4/sap/zui_arena_change_approval_o4/srvd/sap/zui_arena_change_approval/0001/
|
||||
metadataPath: ./webapp/localService/mainService/metadata.xml
|
||||
mockdataPath: ./webapp/localService/mainService/data
|
||||
generateMockData: false
|
||||
builder:
|
||||
resources:
|
||||
excludes:
|
||||
- /test/**
|
||||
- /localService/**
|
||||
customTasks:
|
||||
- name: ui5-tooling-transpile-task
|
||||
afterTask: replaceVersion
|
||||
configuration:
|
||||
debug: true
|
||||
transformModulesToUI5:
|
||||
overridesToOverride: true
|
||||
@@ -0,0 +1,49 @@
|
||||
# yaml-language-server: $schema=https://sap.github.io/ui5-tooling/schema/ui5.yaml.json
|
||||
|
||||
specVersion: "4.0"
|
||||
metadata:
|
||||
name: com.minicircuits.arenaplm
|
||||
type: application
|
||||
server:
|
||||
customMiddleware:
|
||||
- name: fiori-tools-proxy
|
||||
afterMiddleware: compression
|
||||
configuration:
|
||||
ignoreCertErrors: false # If set to true, certificate errors will be ignored. E.g. self-signed certificates will be accepted
|
||||
ui5:
|
||||
path:
|
||||
- /resources
|
||||
- /test-resources
|
||||
url: https://ui5.sap.com
|
||||
backend: []
|
||||
- name: fiori-tools-appreload
|
||||
afterMiddleware: compression
|
||||
configuration:
|
||||
port: 35729
|
||||
path: webapp
|
||||
delay: 300
|
||||
- name: fiori-tools-preview
|
||||
afterMiddleware: fiori-tools-appreload
|
||||
configuration:
|
||||
flp:
|
||||
theme: sap_horizon
|
||||
- name: ui5-tooling-transpile-middleware
|
||||
afterMiddleware: compression
|
||||
configuration:
|
||||
debug: true
|
||||
transformModulesToUI5:
|
||||
overridesToOverride: true
|
||||
excludePatterns:
|
||||
- /Component-preload.js
|
||||
builder:
|
||||
resources:
|
||||
excludes:
|
||||
- /test/**
|
||||
- /localService/**
|
||||
customTasks:
|
||||
- name: ui5-tooling-transpile-task
|
||||
afterTask: replaceVersion
|
||||
configuration:
|
||||
debug: true
|
||||
transformModulesToUI5:
|
||||
overridesToOverride: true
|
||||
@@ -0,0 +1,20 @@
|
||||
import BaseComponent from "sap/fe/core/AppComponent";
|
||||
|
||||
/**
|
||||
* @namespace com.minicircuits.arenaplm
|
||||
*/
|
||||
export default class Component extends BaseComponent {
|
||||
|
||||
public static metadata = {
|
||||
manifest: "json"
|
||||
};
|
||||
|
||||
/**
|
||||
* The component is initialized by UI5 automatically during the startup of the app and calls the init method once.
|
||||
* @public
|
||||
* @override
|
||||
*/
|
||||
//public init() : void {
|
||||
// super.init();
|
||||
//}
|
||||
}
|
||||
@@ -0,0 +1,396 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Local UI annotations for the Arena PLM change-approval Fiori Elements app.
|
||||
Service identity (binding, service definition, version, namespace) is defined ONCE in
|
||||
webapp/localService/mainService/metadata.xml - keep this file's edmx:Reference, every
|
||||
Annotations Target and every DataFieldForAction.Action in sync with it.
|
||||
Provisional - namespace = binding name is strongly indicated, not proven; reconcile namespace,
|
||||
entity type suffix and URL segments against the live $metadata of the RAP UI service binding
|
||||
at PRD V-2 before deploy.
|
||||
-->
|
||||
<edmx:Edmx xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
|
||||
<edmx:Reference Uri="https://sap.github.io/odata-vocabularies/vocabularies/UI.xml">
|
||||
<edmx:Include Namespace="com.sap.vocabularies.UI.v1" Alias="UI"/>
|
||||
</edmx:Reference>
|
||||
<edmx:Reference Uri="https://sap.github.io/odata-vocabularies/vocabularies/Common.xml">
|
||||
<edmx:Include Namespace="com.sap.vocabularies.Common.v1" Alias="Common"/>
|
||||
</edmx:Reference>
|
||||
<edmx:Reference Uri="/sap/opu/odata4/sap/zui_arena_change_approval_o4/srvd/sap/zui_arena_change_approval/0001/$metadata">
|
||||
<edmx:Include Namespace="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001"/>
|
||||
</edmx:Reference>
|
||||
<edmx:DataServices>
|
||||
<Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="local">
|
||||
|
||||
<!-- ============================================================================
|
||||
Property-level annotations: labels, read-only field control, hiding.
|
||||
UI.Hidden hides a property everywhere; UI.HiddenFilter removes it from the
|
||||
filter bar / Adapt Filters / table personalization filters.
|
||||
[source: fiori-mcp-server "Hiding UI Elements with the UI.Hidden Annotation";
|
||||
"Enabling Table Personalization in SAP Fiori Elements (OData V2 & V4)";
|
||||
"Filter Fields - Add, Configure, Move, Delete...", verified 2026-09-14]
|
||||
============================================================================ -->
|
||||
<Annotations Target="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.ChangeApproval_Type/ID">
|
||||
<Annotation Term="Common.Label" String="{@i18n>FIELD_ID}"/>
|
||||
<Annotation Term="UI.Hidden" Bool="true"/>
|
||||
</Annotations>
|
||||
<Annotations Target="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.ChangeApproval_Type/ItemNumber">
|
||||
<Annotation Term="Common.Label" String="{@i18n>FIELD_ITEM}"/>
|
||||
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/ReadOnly"/>
|
||||
</Annotations>
|
||||
<Annotations Target="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.ChangeApproval_Type/ItemName">
|
||||
<Annotation Term="Common.Label" String="{@i18n>FIELD_NAME}"/>
|
||||
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/ReadOnly"/>
|
||||
</Annotations>
|
||||
<Annotations Target="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.ChangeApproval_Type/ChangeType">
|
||||
<Annotation Term="Common.Label" String="{@i18n>FIELD_CHANGE_TYPE}"/>
|
||||
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/ReadOnly"/>
|
||||
</Annotations>
|
||||
<Annotations Target="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.ChangeApproval_Type/Status">
|
||||
<Annotation Term="Common.Label" String="{@i18n>FIELD_STATUS}"/>
|
||||
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/ReadOnly"/>
|
||||
</Annotations>
|
||||
<Annotations Target="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.ChangeApproval_Type/StatusCriticality">
|
||||
<Annotation Term="Common.Label" String="{@i18n>FIELD_STATUS_CRITICALITY}"/>
|
||||
<Annotation Term="UI.Hidden" Bool="true"/>
|
||||
<Annotation Term="UI.HiddenFilter" Bool="true"/>
|
||||
</Annotations>
|
||||
<Annotations Target="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.ChangeApproval_Type/RequestedBy">
|
||||
<Annotation Term="Common.Label" String="{@i18n>FIELD_REQUESTED_BY}"/>
|
||||
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/ReadOnly"/>
|
||||
</Annotations>
|
||||
<Annotations Target="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.ChangeApproval_Type/RequestedOn">
|
||||
<Annotation Term="Common.Label" String="{@i18n>FIELD_REQUESTED_ON}"/>
|
||||
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/ReadOnly"/>
|
||||
</Annotations>
|
||||
<Annotations Target="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.ChangeApproval_Type/DecidedBy">
|
||||
<Annotation Term="Common.Label" String="{@i18n>FIELD_DECIDED_BY}"/>
|
||||
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/ReadOnly"/>
|
||||
</Annotations>
|
||||
<Annotations Target="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.ChangeApproval_Type/DecidedOn">
|
||||
<Annotation Term="Common.Label" String="{@i18n>FIELD_DECIDED_ON}"/>
|
||||
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/ReadOnly"/>
|
||||
</Annotations>
|
||||
<Annotations Target="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.ChangeApproval_Type/ArenaEcoId">
|
||||
<Annotation Term="Common.Label" String="{@i18n>FIELD_ARENA_ECO}"/>
|
||||
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/ReadOnly"/>
|
||||
</Annotations>
|
||||
<Annotations Target="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.ChangeApproval_Type/SapChangeNumber">
|
||||
<Annotation Term="Common.Label" String="{@i18n>FIELD_SAP_CHANGE_NO}"/>
|
||||
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/ReadOnly"/>
|
||||
</Annotations>
|
||||
<Annotations Target="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.ChangeApproval_Type/ErrorMessage">
|
||||
<Annotation Term="Common.Label" String="{@i18n>FIELD_ERROR_MSG}"/>
|
||||
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/ReadOnly"/>
|
||||
<Annotation Term="UI.HiddenFilter" Bool="true"/>
|
||||
</Annotations>
|
||||
<Annotations Target="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.ChangeApproval_Type/RejectReason">
|
||||
<Annotation Term="Common.Label" String="{@i18n>FIELD_REJECT_REASON}"/>
|
||||
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/ReadOnly"/>
|
||||
<Annotation Term="UI.HiddenFilter" Bool="true"/>
|
||||
</Annotations>
|
||||
<Annotations Target="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.ChangeApproval_Type/SapPreview">
|
||||
<Annotation Term="Common.Label" String="{@i18n>FIELD_STAGED_PAYLOAD}"/>
|
||||
<Annotation Term="Common.FieldControl" EnumMember="Common.FieldControlType/ReadOnly"/>
|
||||
<Annotation Term="UI.HiddenFilter" Bool="true"/>
|
||||
<!-- long JSON payload: render as text area [source: fiori-mcp-server "Text and Text Arrangement" sample (@UI.MultiLineText), verified 2026-09-14] -->
|
||||
<Annotation Term="UI.MultiLineText" Bool="true"/>
|
||||
</Annotations>
|
||||
<Annotations Target="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.ChangeApproval_Type/IsApprovable">
|
||||
<Annotation Term="Common.Label" String="{@i18n>FIELD_IS_APPROVABLE}"/>
|
||||
<Annotation Term="UI.Hidden" Bool="true"/>
|
||||
<Annotation Term="UI.HiddenFilter" Bool="true"/>
|
||||
</Annotations>
|
||||
<Annotations Target="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.ChangeApproval_Type/IsRetriable">
|
||||
<Annotation Term="Common.Label" String="{@i18n>FIELD_IS_RETRIABLE}"/>
|
||||
<Annotation Term="UI.Hidden" Bool="true"/>
|
||||
<Annotation Term="UI.HiddenFilter" Bool="true"/>
|
||||
</Annotations>
|
||||
|
||||
<!-- Action parameter label for the reject dialog -->
|
||||
<Annotations Target="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.reject(com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.ChangeApproval_Type)/RejectReason">
|
||||
<Annotation Term="Common.Label" String="{@i18n>FIELD_REJECT_REASON}"/>
|
||||
</Annotations>
|
||||
|
||||
<!-- ============================================================================
|
||||
Entity-type annotations
|
||||
============================================================================ -->
|
||||
<Annotations Target="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.ChangeApproval_Type">
|
||||
|
||||
<!-- Semantic key: bold ObjectIdentifier in responsive tables
|
||||
[source: fiori-mcp-server "Handling Semantic Key Fields in SAP Fiori Elements", verified 2026-09-14] -->
|
||||
<Annotation Term="Common.SemanticKey">
|
||||
<Collection>
|
||||
<PropertyPath>ItemNumber</PropertyPath>
|
||||
<PropertyPath>ChangeType</PropertyPath>
|
||||
<PropertyPath>ArenaEcoId</PropertyPath>
|
||||
</Collection>
|
||||
</Annotation>
|
||||
|
||||
<!-- Object page header (TypeImageUrl = object-type icon)
|
||||
[source: fiori-mcp-server "Setting Up the Object Page Header (UI.HeaderInfo)";
|
||||
"Object Page Header - Fiori Tools" (TypeImageUrl: sap-icon://...), verified 2026-09-14] -->
|
||||
<Annotation Term="UI.HeaderInfo">
|
||||
<Record Type="UI.HeaderInfoType">
|
||||
<PropertyValue Property="TypeName" String="{@i18n>CHANGE_APPROVAL_TITLE}"/>
|
||||
<PropertyValue Property="TypeNamePlural" String="{@i18n>CHANGE_APPROVALS_TITLE}"/>
|
||||
<PropertyValue Property="TypeImageUrl" String="sap-icon://approvals"/>
|
||||
<PropertyValue Property="Title">
|
||||
<Record Type="UI.DataField">
|
||||
<PropertyValue Property="Value" Path="ItemNumber"/>
|
||||
</Record>
|
||||
</PropertyValue>
|
||||
<PropertyValue Property="Description">
|
||||
<Record Type="UI.DataField">
|
||||
<PropertyValue Property="Value" Path="ItemName"/>
|
||||
</Record>
|
||||
</PropertyValue>
|
||||
</Record>
|
||||
</Annotation>
|
||||
|
||||
<!-- Header facets: status data point + reference-number form
|
||||
[source: fiori-mcp-server "Form Facet - Add a header form facet to an Object Page", verified 2026-09-14] -->
|
||||
<Annotation Term="UI.DataPoint" Qualifier="StatusPoint">
|
||||
<Record Type="UI.DataPointType">
|
||||
<PropertyValue Property="Title" String="{@i18n>FIELD_STATUS}"/>
|
||||
<PropertyValue Property="Value" Path="Status"/>
|
||||
<PropertyValue Property="Criticality" Path="StatusCriticality"/>
|
||||
</Record>
|
||||
</Annotation>
|
||||
<Annotation Term="UI.FieldGroup" Qualifier="Keys">
|
||||
<Record Type="UI.FieldGroupType">
|
||||
<PropertyValue Property="Data">
|
||||
<Collection>
|
||||
<Record Type="UI.DataField">
|
||||
<PropertyValue Property="Value" Path="ArenaEcoId"/>
|
||||
<Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/>
|
||||
</Record>
|
||||
<Record Type="UI.DataField">
|
||||
<PropertyValue Property="Value" Path="SapChangeNumber"/>
|
||||
<Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/>
|
||||
</Record>
|
||||
</Collection>
|
||||
</PropertyValue>
|
||||
</Record>
|
||||
</Annotation>
|
||||
<Annotation Term="UI.HeaderFacets">
|
||||
<Collection>
|
||||
<Record Type="UI.ReferenceFacet">
|
||||
<PropertyValue Property="ID" String="HeaderStatusFacet"/>
|
||||
<PropertyValue Property="Target" AnnotationPath="@UI.DataPoint#StatusPoint"/>
|
||||
</Record>
|
||||
<Record Type="UI.ReferenceFacet">
|
||||
<PropertyValue Property="ID" String="HeaderReferencesFacet"/>
|
||||
<PropertyValue Property="Label" String="{@i18n>FACET_REFERENCES}"/>
|
||||
<PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#Keys"/>
|
||||
</Record>
|
||||
</Collection>
|
||||
</Annotation>
|
||||
|
||||
<!-- Filter bar -->
|
||||
<Annotation Term="UI.SelectionFields">
|
||||
<Collection>
|
||||
<PropertyPath>ItemNumber</PropertyPath>
|
||||
<PropertyPath>Status</PropertyPath>
|
||||
<PropertyPath>ChangeType</PropertyPath>
|
||||
<PropertyPath>ArenaEcoId</PropertyPath>
|
||||
</Collection>
|
||||
</Annotation>
|
||||
|
||||
<!-- Default list report view: Status = PENDING, sorted Status asc then RequestedOn desc.
|
||||
Wired via manifest sap.ui5.routing.targets.ChangeApprovalList.options.settings
|
||||
.defaultTemplateAnnotationPath (V4 requires a SelectionPresentationVariant).
|
||||
[source: fiori-mcp-server "Configure Default Visualizations, Sort Order, and Filter Defaults
|
||||
(UI.SelectionPresentationVariant, UI.PresentationVariant, UI.SelectionVariant)";
|
||||
"Filter Bar Default Values", verified 2026-09-14] -->
|
||||
<Annotation Term="UI.SelectionVariant" Qualifier="Default">
|
||||
<Record Type="UI.SelectionVariantType">
|
||||
<PropertyValue Property="Text" String="{@i18n>SPV_DEFAULT}"/>
|
||||
<PropertyValue Property="SelectOptions">
|
||||
<Collection>
|
||||
<Record Type="UI.SelectOptionType">
|
||||
<PropertyValue Property="PropertyName" PropertyPath="Status"/>
|
||||
<PropertyValue Property="Ranges">
|
||||
<Collection>
|
||||
<Record Type="UI.SelectionRangeType">
|
||||
<PropertyValue Property="Sign" EnumMember="UI.SelectionRangeSignType/I"/>
|
||||
<PropertyValue Property="Option" EnumMember="UI.SelectionRangeOptionType/EQ"/>
|
||||
<PropertyValue Property="Low" String="PENDING"/>
|
||||
</Record>
|
||||
</Collection>
|
||||
</PropertyValue>
|
||||
</Record>
|
||||
</Collection>
|
||||
</PropertyValue>
|
||||
</Record>
|
||||
</Annotation>
|
||||
<Annotation Term="UI.PresentationVariant" Qualifier="Default">
|
||||
<Record Type="UI.PresentationVariantType">
|
||||
<PropertyValue Property="Text" String="{@i18n>SPV_DEFAULT}"/>
|
||||
<PropertyValue Property="SortOrder">
|
||||
<Collection>
|
||||
<Record Type="Common.SortOrderType">
|
||||
<PropertyValue Property="Property" PropertyPath="Status"/>
|
||||
<PropertyValue Property="Descending" Bool="false"/>
|
||||
</Record>
|
||||
<Record Type="Common.SortOrderType">
|
||||
<PropertyValue Property="Property" PropertyPath="RequestedOn"/>
|
||||
<PropertyValue Property="Descending" Bool="true"/>
|
||||
</Record>
|
||||
</Collection>
|
||||
</PropertyValue>
|
||||
<PropertyValue Property="Visualizations">
|
||||
<Collection>
|
||||
<AnnotationPath>@UI.LineItem</AnnotationPath>
|
||||
</Collection>
|
||||
</PropertyValue>
|
||||
</Record>
|
||||
</Annotation>
|
||||
<Annotation Term="UI.SelectionPresentationVariant" Qualifier="Default">
|
||||
<Record Type="UI.SelectionPresentationVariantType">
|
||||
<PropertyValue Property="Text" String="{@i18n>SPV_DEFAULT}"/>
|
||||
<PropertyValue Property="SelectionVariant" Path="@UI.SelectionVariant#Default"/>
|
||||
<PropertyValue Property="PresentationVariant" Path="@UI.PresentationVariant#Default"/>
|
||||
</Record>
|
||||
</Annotation>
|
||||
|
||||
<!-- Object page header actions (the ONLY place approve/reject/retry are offered; the list
|
||||
report table is display-only with selectionMode None in the manifest).
|
||||
Enablement comes from Core.OperationAvailable in the service metadata
|
||||
(approve/reject: IsApprovable, retrySync: IsRetriable).
|
||||
[source: fiori-mcp-server "Action Control for Context-Dependent Actions";
|
||||
sap-docs /sapui5/06_SAP_Fiori_Elements/actions-cbf16c5#enabling-custom-actions-defined-using-annotations,
|
||||
verified 2026-09-14] -->
|
||||
<Annotation Term="UI.Identification">
|
||||
<Collection>
|
||||
<Record Type="UI.DataFieldForAction">
|
||||
<PropertyValue Property="Label" String="{@i18n>ACTION_APPROVE}"/>
|
||||
<PropertyValue Property="Action" String="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.approve"/>
|
||||
<PropertyValue Property="Determining" Bool="false"/>
|
||||
<PropertyValue Property="Criticality" EnumMember="UI.CriticalityType/Positive"/>
|
||||
</Record>
|
||||
<Record Type="UI.DataFieldForAction">
|
||||
<PropertyValue Property="Label" String="{@i18n>ACTION_REJECT}"/>
|
||||
<PropertyValue Property="Action" String="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.reject"/>
|
||||
<PropertyValue Property="Determining" Bool="false"/>
|
||||
<PropertyValue Property="Criticality" EnumMember="UI.CriticalityType/Negative"/>
|
||||
</Record>
|
||||
<Record Type="UI.DataFieldForAction">
|
||||
<PropertyValue Property="Label" String="{@i18n>ACTION_RETRY}"/>
|
||||
<PropertyValue Property="Action" String="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.retrySync"/>
|
||||
<PropertyValue Property="Determining" Bool="false"/>
|
||||
<PropertyValue Property="Criticality" EnumMember="UI.CriticalityType/Critical"/>
|
||||
</Record>
|
||||
</Collection>
|
||||
</Annotation>
|
||||
|
||||
<!-- List report table: columns only (no toolbar actions - decisions are taken on the object page).
|
||||
UI.Importance: High stays visible on narrow screens, Medium/Low are hidden progressively;
|
||||
semantic-key columns without importance are treated as High.
|
||||
[source: fiori-mcp-server "Tables - configuration and annotation samples for SAP Fiori elements"
|
||||
(Control column visibility by screen size using UI.Importance), verified 2026-09-14] -->
|
||||
<Annotation Term="UI.LineItem">
|
||||
<Collection>
|
||||
<Record Type="UI.DataField">
|
||||
<PropertyValue Property="Value" Path="ItemNumber"/>
|
||||
<Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/>
|
||||
</Record>
|
||||
<Record Type="UI.DataField">
|
||||
<PropertyValue Property="Value" Path="ItemName"/>
|
||||
<Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/Low"/>
|
||||
</Record>
|
||||
<Record Type="UI.DataField">
|
||||
<PropertyValue Property="Value" Path="ChangeType"/>
|
||||
<Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/>
|
||||
</Record>
|
||||
<Record Type="UI.DataField">
|
||||
<PropertyValue Property="Value" Path="Status"/>
|
||||
<PropertyValue Property="Criticality" Path="StatusCriticality"/>
|
||||
<Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/>
|
||||
</Record>
|
||||
<Record Type="UI.DataField">
|
||||
<PropertyValue Property="Value" Path="RequestedOn"/>
|
||||
<Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/Medium"/>
|
||||
</Record>
|
||||
<Record Type="UI.DataField">
|
||||
<PropertyValue Property="Value" Path="ArenaEcoId"/>
|
||||
<Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/Medium"/>
|
||||
</Record>
|
||||
</Collection>
|
||||
</Annotation>
|
||||
|
||||
<!-- Object page sections -->
|
||||
<Annotation Term="UI.FieldGroup" Qualifier="Change">
|
||||
<Record Type="UI.FieldGroupType">
|
||||
<PropertyValue Property="Data">
|
||||
<Collection>
|
||||
<Record Type="UI.DataField"><PropertyValue Property="Value" Path="ItemNumber"/></Record>
|
||||
<Record Type="UI.DataField"><PropertyValue Property="Value" Path="ItemName"/></Record>
|
||||
<Record Type="UI.DataField"><PropertyValue Property="Value" Path="ChangeType"/></Record>
|
||||
<Record Type="UI.DataField"><PropertyValue Property="Value" Path="ArenaEcoId"/></Record>
|
||||
</Collection>
|
||||
</PropertyValue>
|
||||
</Record>
|
||||
</Annotation>
|
||||
<Annotation Term="UI.FieldGroup" Qualifier="Approval">
|
||||
<Record Type="UI.FieldGroupType">
|
||||
<PropertyValue Property="Data">
|
||||
<Collection>
|
||||
<Record Type="UI.DataField"><PropertyValue Property="Value" Path="Status"/><PropertyValue Property="Criticality" Path="StatusCriticality"/></Record>
|
||||
<Record Type="UI.DataField"><PropertyValue Property="Value" Path="RequestedBy"/></Record>
|
||||
<Record Type="UI.DataField"><PropertyValue Property="Value" Path="RequestedOn"/></Record>
|
||||
<Record Type="UI.DataField"><PropertyValue Property="Value" Path="DecidedBy"/></Record>
|
||||
<Record Type="UI.DataField"><PropertyValue Property="Value" Path="DecidedOn"/></Record>
|
||||
<Record Type="UI.DataField"><PropertyValue Property="Value" Path="RejectReason"/></Record>
|
||||
</Collection>
|
||||
</PropertyValue>
|
||||
</Record>
|
||||
</Annotation>
|
||||
<!-- Staged payload gets its own section so the long JSON does not crowd the decision fields -->
|
||||
<Annotation Term="UI.FieldGroup" Qualifier="Payload">
|
||||
<Record Type="UI.FieldGroupType">
|
||||
<PropertyValue Property="Data">
|
||||
<Collection>
|
||||
<Record Type="UI.DataField"><PropertyValue Property="Value" Path="SapPreview"/></Record>
|
||||
</Collection>
|
||||
</PropertyValue>
|
||||
</Record>
|
||||
</Annotation>
|
||||
<Annotation Term="UI.FieldGroup" Qualifier="Execution">
|
||||
<Record Type="UI.FieldGroupType">
|
||||
<PropertyValue Property="Data">
|
||||
<Collection>
|
||||
<Record Type="UI.DataField"><PropertyValue Property="Value" Path="SapChangeNumber"/></Record>
|
||||
<Record Type="UI.DataField"><PropertyValue Property="Value" Path="ErrorMessage"/></Record>
|
||||
</Collection>
|
||||
</PropertyValue>
|
||||
</Record>
|
||||
</Annotation>
|
||||
<Annotation Term="UI.Facets">
|
||||
<Collection>
|
||||
<Record Type="UI.ReferenceFacet">
|
||||
<PropertyValue Property="ID" String="ChangeFacet"/>
|
||||
<PropertyValue Property="Label" String="{@i18n>FACET_CHANGE}"/>
|
||||
<PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#Change"/>
|
||||
</Record>
|
||||
<Record Type="UI.ReferenceFacet">
|
||||
<PropertyValue Property="ID" String="PayloadFacet"/>
|
||||
<PropertyValue Property="Label" String="{@i18n>FACET_STAGED_PAYLOAD}"/>
|
||||
<PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#Payload"/>
|
||||
</Record>
|
||||
<Record Type="UI.ReferenceFacet">
|
||||
<PropertyValue Property="ID" String="ApprovalFacet"/>
|
||||
<PropertyValue Property="Label" String="{@i18n>FACET_APPROVAL}"/>
|
||||
<PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#Approval"/>
|
||||
</Record>
|
||||
<Record Type="UI.ReferenceFacet">
|
||||
<PropertyValue Property="ID" String="ExecutionFacet"/>
|
||||
<PropertyValue Property="Label" String="{@i18n>FACET_EXECUTION}"/>
|
||||
<PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#Execution"/>
|
||||
</Record>
|
||||
</Collection>
|
||||
</Annotation>
|
||||
|
||||
</Annotations>
|
||||
</Schema>
|
||||
</edmx:DataServices>
|
||||
</edmx:Edmx>
|
||||
@@ -0,0 +1,79 @@
|
||||
# This is the resource bundle for com.minicircuits.arenaplm
|
||||
#
|
||||
# Text-type comments follow SAP's translator conventions
|
||||
# (# <text type>: <note>) - XTIT title/heading, XFLD field label, XBUT button.
|
||||
# [source: sap-docs SAP Translation Hub loio 028d963837b84dbf8d73d4306b032900, verified 2026-09-14]
|
||||
|
||||
#Texts for manifest.json
|
||||
|
||||
#XTIT: Application name
|
||||
appTitle=Arena PLM Change Approvals
|
||||
|
||||
#YDES: Application description
|
||||
appDescription=Arena PLM Change Approval Workbench
|
||||
|
||||
#XTIT: Fiori launchpad tile title (sap.app.crossNavigation.inbounds)
|
||||
flpTitle=Arena PLM Change Approvals
|
||||
#XTIT: Fiori launchpad tile subtitle
|
||||
flpSubtitle=Approve staged Arena changes for SAP
|
||||
|
||||
#XTIT: Object type name (singular) in the object page header
|
||||
CHANGE_APPROVAL_TITLE=Change Approval
|
||||
#XTIT: Object type name (plural) - list report table header
|
||||
CHANGE_APPROVALS_TITLE=Change Approvals
|
||||
|
||||
#XBUT: Approves the staged change and triggers the SAP sync
|
||||
ACTION_APPROVE=Approve
|
||||
#XBUT: Rejects the staged change; asks for a reason
|
||||
ACTION_REJECT=Reject
|
||||
#XBUT: Re-runs a FAILED SAP sync (FAILED -> EXECUTING)
|
||||
ACTION_RETRY=Retry Sync
|
||||
|
||||
#XFLD: Arena item number (e.g. MC-100-0042)
|
||||
FIELD_ITEM=Item Number
|
||||
#XFLD: Arena item name / description
|
||||
FIELD_NAME=Item Name
|
||||
#XFLD: Kind of SAP object being synced (PRODUCT, CHANGE_MASTER, BOM, DOCUMENTS)
|
||||
FIELD_CHANGE_TYPE=Change Type
|
||||
#XFLD: Approval/sync status (PENDING, APPROVED, EXECUTING, SYNCED, REJECTED, FAILED); text comes from the RAP text element (PRD RAP-3)
|
||||
FIELD_STATUS=Status
|
||||
#XFLD: User who staged the change
|
||||
FIELD_REQUESTED_BY=Requested By
|
||||
#XFLD: Timestamp the change was staged
|
||||
FIELD_REQUESTED_ON=Requested On
|
||||
#XFLD: User who approved or rejected the change
|
||||
FIELD_DECIDED_BY=Decided By
|
||||
#XFLD: Timestamp of the approve/reject decision
|
||||
FIELD_DECIDED_ON=Decided On
|
||||
#XFLD: Arena engineering change order id (e.g. ECO-2026-0113)
|
||||
FIELD_ARENA_ECO=Arena ECO
|
||||
#XFLD: SAP change master number created by the sync
|
||||
FIELD_SAP_CHANGE_NO=SAP Change Number
|
||||
#XFLD: Error returned by SAP when the sync failed
|
||||
FIELD_ERROR_MSG=Error Message
|
||||
#XFLD: Reason entered by the approver when rejecting
|
||||
FIELD_REJECT_REASON=Rejection Reason
|
||||
#XFLD: JSON payload that will be written to SAP on approval
|
||||
FIELD_STAGED_PAYLOAD=Staged SAP Payload
|
||||
#XFLD: Technical flag - approve/reject allowed (hidden)
|
||||
FIELD_IS_APPROVABLE=Can Be Approved
|
||||
#XFLD: Technical flag - retry allowed (hidden)
|
||||
FIELD_IS_RETRIABLE=Can Be Retried
|
||||
#XFLD: Technical record key (hidden)
|
||||
FIELD_ID=Record ID
|
||||
#XFLD: Technical criticality code for the status (hidden)
|
||||
FIELD_STATUS_CRITICALITY=Status Criticality
|
||||
|
||||
#XTIT: Object page section - what is being changed
|
||||
FACET_CHANGE=Change
|
||||
#XTIT: Object page section - who requested / decided and when
|
||||
FACET_APPROVAL=Approval
|
||||
#XTIT: Object page section - the JSON payload staged for SAP (shown before the approval section)
|
||||
FACET_STAGED_PAYLOAD=Staged Payload
|
||||
#XTIT: Object page section - outcome of the SAP sync (change number / error)
|
||||
FACET_EXECUTION=SAP Result
|
||||
#XTIT: Object page header facet - Arena / SAP reference numbers
|
||||
FACET_REFERENCES=References
|
||||
|
||||
#XTIT: Name of the default list report view (pending approvals first)
|
||||
SPV_DEFAULT=Pending Approvals
|
||||
@@ -0,0 +1,79 @@
|
||||
# This is the English resource bundle for com.minicircuits.arenaplm
|
||||
#
|
||||
# Text-type comments follow SAP's translator conventions
|
||||
# (# <text type>: <note>) - XTIT title/heading, XFLD field label, XBUT button.
|
||||
# [source: sap-docs SAP Translation Hub loio 028d963837b84dbf8d73d4306b032900, verified 2026-09-14]
|
||||
|
||||
#Texts for manifest.json
|
||||
|
||||
#XTIT: Application name
|
||||
appTitle=Arena PLM Change Approvals
|
||||
|
||||
#YDES: Application description
|
||||
appDescription=Arena PLM Change Approval Workbench
|
||||
|
||||
#XTIT: Fiori launchpad tile title (sap.app.crossNavigation.inbounds)
|
||||
flpTitle=Arena PLM Change Approvals
|
||||
#XTIT: Fiori launchpad tile subtitle
|
||||
flpSubtitle=Approve staged Arena changes for SAP
|
||||
|
||||
#XTIT: Object type name (singular) in the object page header
|
||||
CHANGE_APPROVAL_TITLE=Change Approval
|
||||
#XTIT: Object type name (plural) - list report table header
|
||||
CHANGE_APPROVALS_TITLE=Change Approvals
|
||||
|
||||
#XBUT: Approves the staged change and triggers the SAP sync
|
||||
ACTION_APPROVE=Approve
|
||||
#XBUT: Rejects the staged change; asks for a reason
|
||||
ACTION_REJECT=Reject
|
||||
#XBUT: Re-runs a FAILED SAP sync (FAILED -> EXECUTING)
|
||||
ACTION_RETRY=Retry Sync
|
||||
|
||||
#XFLD: Arena item number (e.g. MC-100-0042)
|
||||
FIELD_ITEM=Item Number
|
||||
#XFLD: Arena item name / description
|
||||
FIELD_NAME=Item Name
|
||||
#XFLD: Kind of SAP object being synced (PRODUCT, CHANGE_MASTER, BOM, DOCUMENTS)
|
||||
FIELD_CHANGE_TYPE=Change Type
|
||||
#XFLD: Approval/sync status (PENDING, APPROVED, EXECUTING, SYNCED, REJECTED, FAILED); text comes from the RAP text element (PRD RAP-3)
|
||||
FIELD_STATUS=Status
|
||||
#XFLD: User who staged the change
|
||||
FIELD_REQUESTED_BY=Requested By
|
||||
#XFLD: Timestamp the change was staged
|
||||
FIELD_REQUESTED_ON=Requested On
|
||||
#XFLD: User who approved or rejected the change
|
||||
FIELD_DECIDED_BY=Decided By
|
||||
#XFLD: Timestamp of the approve/reject decision
|
||||
FIELD_DECIDED_ON=Decided On
|
||||
#XFLD: Arena engineering change order id (e.g. ECO-2026-0113)
|
||||
FIELD_ARENA_ECO=Arena ECO
|
||||
#XFLD: SAP change master number created by the sync
|
||||
FIELD_SAP_CHANGE_NO=SAP Change Number
|
||||
#XFLD: Error returned by SAP when the sync failed
|
||||
FIELD_ERROR_MSG=Error Message
|
||||
#XFLD: Reason entered by the approver when rejecting
|
||||
FIELD_REJECT_REASON=Rejection Reason
|
||||
#XFLD: JSON payload that will be written to SAP on approval
|
||||
FIELD_STAGED_PAYLOAD=Staged SAP Payload
|
||||
#XFLD: Technical flag - approve/reject allowed (hidden)
|
||||
FIELD_IS_APPROVABLE=Can Be Approved
|
||||
#XFLD: Technical flag - retry allowed (hidden)
|
||||
FIELD_IS_RETRIABLE=Can Be Retried
|
||||
#XFLD: Technical record key (hidden)
|
||||
FIELD_ID=Record ID
|
||||
#XFLD: Technical criticality code for the status (hidden)
|
||||
FIELD_STATUS_CRITICALITY=Status Criticality
|
||||
|
||||
#XTIT: Object page section - what is being changed
|
||||
FACET_CHANGE=Change
|
||||
#XTIT: Object page section - who requested / decided and when
|
||||
FACET_APPROVAL=Approval
|
||||
#XTIT: Object page section - the JSON payload staged for SAP (shown before the approval section)
|
||||
FACET_STAGED_PAYLOAD=Staged Payload
|
||||
#XTIT: Object page section - outcome of the SAP sync (change number / error)
|
||||
FACET_EXECUTION=SAP Result
|
||||
#XTIT: Object page header facet - Arena / SAP reference numbers
|
||||
FACET_REFERENCES=References
|
||||
|
||||
#XTIT: Name of the default list report view (pending approvals first)
|
||||
SPV_DEFAULT=Pending Approvals
|
||||
@@ -0,0 +1,35 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<title>Arena PLM Engineering Changes Approval Flow</title>
|
||||
<style>
|
||||
html, body, body > div, #container, #container-uiarea {
|
||||
height: 100%;
|
||||
}
|
||||
</style>
|
||||
<script
|
||||
id="sap-ui-bootstrap"
|
||||
src="resources/sap-ui-core.js"
|
||||
data-sap-ui-theme="sap_horizon"
|
||||
data-sap-ui-resource-roots='{
|
||||
"com.minicircuits.arenaplm": "./"
|
||||
}'
|
||||
data-sap-ui-on-init="module:sap/ui/core/ComponentSupport"
|
||||
data-sap-ui-compat-version="edge"
|
||||
data-sap-ui-async="true"
|
||||
data-sap-ui-frame-options="trusted"
|
||||
></script>
|
||||
</head>
|
||||
<body class="sapUiBody sapUiSizeCompact" id="content">
|
||||
<div
|
||||
data-sap-ui-component
|
||||
data-name="com.minicircuits.arenaplm"
|
||||
data-id="container"
|
||||
data-settings='{"id" : "com.minicircuits.arenaplm"}'
|
||||
data-handle-validation="true"
|
||||
></div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,154 @@
|
||||
[
|
||||
{
|
||||
"ID": "6f1c2a3e-0001-4a6b-9c1d-000000000001",
|
||||
"ItemNumber": "MC-100-0042",
|
||||
"ItemName": "RF Amplifier Module, 2-18 GHz",
|
||||
"ChangeType": "PRODUCT",
|
||||
"Status": "PENDING",
|
||||
"StatusCriticality": 2,
|
||||
"ArenaEcoId": "ECO-2026-0113",
|
||||
"RequestedBy": "AZAW",
|
||||
"RequestedOn": "2026-09-12T14:05:00Z",
|
||||
"DecidedBy": null,
|
||||
"DecidedOn": null,
|
||||
"SapChangeNumber": null,
|
||||
"ErrorMessage": null,
|
||||
"RejectReason": null,
|
||||
"SapPreview": "{\"Product\":\"MC-100-0042\",\"ProductType\":\"FERT\",\"BaseUnit\":\"PC\",\"IndustrySector\":\"M\",\"GrossWeight\":\"0.412\",\"WeightUnit\":\"KG\",\"ProductGroup\":\"RFAMP\",\"CrossPlantStatus\":\"\",\"_ProductDescription\":[{\"Language\":\"EN\",\"ProductDescription\":\"RF Amplifier Module, 2-18 GHz\"}],\"_ProductPlant\":[{\"Plant\":\"1710\",\"AvailabilityCheckType\":\"02\",\"ProfitCenter\":\"YB700\",\"MRPType\":\"PD\",\"ProcurementType\":\"E\"},{\"Plant\":\"1720\",\"AvailabilityCheckType\":\"02\",\"ProfitCenter\":\"YB700\",\"MRPType\":\"PD\",\"ProcurementType\":\"F\"}],\"_ProductSalesDelivery\":[{\"ProductSalesOrg\":\"1710\",\"ProductDistributionChnl\":\"10\",\"DeliveryQuantityUnit\":\"PC\",\"ItemCategoryGroup\":\"NORM\"}],\"_ProductStorage\":[{\"Plant\":\"1710\",\"StorageLocation\":\"171A\"}],\"_ProductValuation\":[{\"ValuationArea\":\"1710\",\"ValuationClass\":\"7920\",\"PriceControl\":\"S\",\"StandardPrice\":\"245.00\",\"Currency\":\"USD\"}]}",
|
||||
"IsApprovable": true,
|
||||
"IsRetriable": false
|
||||
},
|
||||
{
|
||||
"ID": "6f1c2a3e-0002-4a6b-9c1d-000000000002",
|
||||
"ItemNumber": "MC-100-0042",
|
||||
"ItemName": "RF Amplifier Module, 2-18 GHz",
|
||||
"ChangeType": "CHANGE_MASTER",
|
||||
"Status": "PENDING",
|
||||
"StatusCriticality": 2,
|
||||
"ArenaEcoId": "ECO-2026-0113",
|
||||
"RequestedBy": "AZAW",
|
||||
"RequestedOn": "2026-09-12T14:05:04Z",
|
||||
"DecidedBy": null,
|
||||
"DecidedOn": null,
|
||||
"SapChangeNumber": null,
|
||||
"ErrorMessage": null,
|
||||
"RejectReason": null,
|
||||
"SapPreview": "{\"ChangeNumberDescription\":\"ECO: Rev C amplifier bias network update\",\"ChangeNumberValidFromDate\":\"2026-09-12T00:00:00Z\",\"ReasonForChangeText\":\"ARENA ECO-2026-0113\",\"ChangeNumberStatus\":\"01\"}",
|
||||
"IsApprovable": true,
|
||||
"IsRetriable": false
|
||||
},
|
||||
{
|
||||
"ID": "6f1c2a3e-0003-4a6b-9c1d-000000000003",
|
||||
"ItemNumber": "MC-200-0117",
|
||||
"ItemName": "Bias Tee Assembly, SMA",
|
||||
"ChangeType": "BOM",
|
||||
"Status": "PENDING",
|
||||
"StatusCriticality": 2,
|
||||
"ArenaEcoId": "ECO-2026-0118",
|
||||
"RequestedBy": "JDOE",
|
||||
"RequestedOn": "2026-09-13T09:41:00Z",
|
||||
"DecidedBy": null,
|
||||
"DecidedOn": null,
|
||||
"SapChangeNumber": null,
|
||||
"ErrorMessage": null,
|
||||
"RejectReason": null,
|
||||
"SapPreview": "{\"Material\":\"MC-200-0117\",\"Plant\":\"1710\",\"BillOfMaterialCategory\":\"M\",\"BillOfMaterialVariantUsage\":\"1\",\"HeaderValidityStartDate\":\"2026-09-13T00:00:00Z\",\"ToBOMItem\":[{\"BillOfMaterialItemNumber\":\"0010\",\"BillOfMaterialComponent\":\"MC-500-0031\",\"BillOfMaterialItemQuantity\":\"2\",\"BillOfMaterialItemCategory\":\"L\"},{\"BillOfMaterialItemNumber\":\"0020\",\"BillOfMaterialComponent\":\"MC-500-0088\",\"BillOfMaterialItemQuantity\":\"1\",\"BillOfMaterialItemCategory\":\"L\"}]}",
|
||||
"IsApprovable": true,
|
||||
"IsRetriable": false
|
||||
},
|
||||
{
|
||||
"ID": "6f1c2a3e-0004-4a6b-9c1d-000000000004",
|
||||
"ItemNumber": "MC-300-0009",
|
||||
"ItemName": "Low Noise Amplifier, 0.5-4 GHz",
|
||||
"ChangeType": "PRODUCT",
|
||||
"Status": "APPROVED",
|
||||
"StatusCriticality": 2,
|
||||
"ArenaEcoId": "ECO-2026-0097",
|
||||
"RequestedBy": "AZAW",
|
||||
"RequestedOn": "2026-09-08T16:22:00Z",
|
||||
"DecidedBy": "MSMITH",
|
||||
"DecidedOn": "2026-09-09T08:10:00Z",
|
||||
"SapChangeNumber": null,
|
||||
"ErrorMessage": null,
|
||||
"RejectReason": null,
|
||||
"SapPreview": "{\"Product\":\"MC-300-0009\",\"ProductType\":\"FERT\",\"BaseUnit\":\"PC\",\"ProductGroup\":\"LNA\",\"_ProductDescription\":[{\"Language\":\"EN\",\"ProductDescription\":\"Low Noise Amplifier, 0.5-4 GHz\"}]}",
|
||||
"IsApprovable": false,
|
||||
"IsRetriable": false
|
||||
},
|
||||
{
|
||||
"ID": "6f1c2a3e-0007-4a6b-9c1d-000000000007",
|
||||
"ItemNumber": "MC-300-0009",
|
||||
"ItemName": "Low Noise Amplifier, 0.5-4 GHz",
|
||||
"ChangeType": "CHANGE_MASTER",
|
||||
"Status": "EXECUTING",
|
||||
"ArenaEcoId": "ECO-2026-0097",
|
||||
"RequestedBy": "AZAW",
|
||||
"RequestedOn": "2026-09-08T16:22:03Z",
|
||||
"DecidedBy": "MSMITH",
|
||||
"DecidedOn": "2026-09-09T08:10:00Z",
|
||||
"SapChangeNumber": null,
|
||||
"ErrorMessage": null,
|
||||
"RejectReason": null,
|
||||
"SapPreview": "{\"ChangeNumberDescription\":\"ECO: LNA input match rework\",\"ChangeNumberValidFromDate\":\"2026-09-09T00:00:00Z\",\"ReasonForChangeText\":\"ARENA ECO-2026-0097\",\"ChangeNumberStatus\":\"01\"}",
|
||||
"StatusCriticality": 5,
|
||||
"IsApprovable": false,
|
||||
"IsRetriable": false
|
||||
},
|
||||
{
|
||||
"ID": "6f1c2a3e-0008-4a6b-9c1d-000000000008",
|
||||
"ItemNumber": "MC-150-0301",
|
||||
"ItemName": "Directional Coupler, 10 dB",
|
||||
"ChangeType": "CHANGE_MASTER",
|
||||
"Status": "SYNCED",
|
||||
"ArenaEcoId": "ECO-2026-0088",
|
||||
"RequestedBy": "JDOE",
|
||||
"RequestedOn": "2026-09-05T10:00:00Z",
|
||||
"DecidedBy": "MSMITH",
|
||||
"DecidedOn": "2026-09-05T11:30:00Z",
|
||||
"SapChangeNumber": "500000012301",
|
||||
"ErrorMessage": null,
|
||||
"RejectReason": null,
|
||||
"SapPreview": "{\"ChangeNumberDescription\":\"ECO: Coupler housing plating change\",\"ChangeNumberValidFromDate\":\"2026-09-05T00:00:00Z\",\"ReasonForChangeText\":\"ARENA ECO-2026-0088\",\"ChangeNumberStatus\":\"01\"}",
|
||||
"StatusCriticality": 3,
|
||||
"IsApprovable": false,
|
||||
"IsRetriable": false
|
||||
},
|
||||
{
|
||||
"ID": "6f1c2a3e-0005-4a6b-9c1d-000000000005",
|
||||
"ItemNumber": "MC-410-0250",
|
||||
"ItemName": "Datasheet MC-410-0250 Rev B",
|
||||
"ChangeType": "DOCUMENTS",
|
||||
"Status": "REJECTED",
|
||||
"StatusCriticality": 1,
|
||||
"ArenaEcoId": "ECO-2026-0101",
|
||||
"RequestedBy": "JDOE",
|
||||
"RequestedOn": "2026-09-10T11:15:00Z",
|
||||
"DecidedBy": "MSMITH",
|
||||
"DecidedOn": "2026-09-10T13:02:00Z",
|
||||
"SapChangeNumber": null,
|
||||
"ErrorMessage": null,
|
||||
"RejectReason": "Datasheet revision B superseded by Rev C in Arena; re-stage after ECO-2026-0121 is released.",
|
||||
"SapPreview": "{\"BusinessObjectTypeName\":\"BUS1001006\",\"LinkedSAPObjectKey\":\"MC-410-0250\",\"Url\":\"https://app.bom.com/files/MC-410-0250-B.pdf\",\"MIMEType\":\"text/url\",\"AttachmentDescription\":\"MC-410-0250 Datasheet Rev B\"}",
|
||||
"IsApprovable": false,
|
||||
"IsRetriable": false
|
||||
},
|
||||
{
|
||||
"ID": "6f1c2a3e-0006-4a6b-9c1d-000000000006",
|
||||
"ItemNumber": "MC-200-0117",
|
||||
"ItemName": "Bias Tee Assembly, SMA",
|
||||
"ChangeType": "CHANGE_MASTER",
|
||||
"Status": "FAILED",
|
||||
"StatusCriticality": 1,
|
||||
"ArenaEcoId": "ECO-2026-0118",
|
||||
"RequestedBy": "JDOE",
|
||||
"RequestedOn": "2026-09-13T09:40:00Z",
|
||||
"DecidedBy": "AZAW",
|
||||
"DecidedOn": "2026-09-13T10:05:00Z",
|
||||
"SapChangeNumber": null,
|
||||
"ErrorMessage": "API_CHANGEMASTER;v=0002 returned 400: Input parameters are initial (A_ChangeMasterObjTypeAssgmt requires IsActiveForChangeNumber).",
|
||||
"RejectReason": null,
|
||||
"SapPreview": "{\"ChangeNumberDescription\":\"ECO: Bias tee connector change to SMA-F\",\"ChangeNumberValidFromDate\":\"2026-09-13T00:00:00Z\",\"ReasonForChangeText\":\"ARENA ECO-2026-0118\",\"ChangeNumberStatus\":\"01\"}",
|
||||
"IsApprovable": false,
|
||||
"IsRetriable": true
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,133 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
MOCK OData V4 $metadata for the Arena PLM change-approval Fiori Elements app (ADR-002).
|
||||
|
||||
=====================================================================================
|
||||
SERVICE IDENTITY - single source of truth for the app (referenced by manifest.json,
|
||||
annotation.xml and ui5-mock.yaml / ui5-local.yaml):
|
||||
RAP service binding (OData V4 - UI) : ZUI_ARENA_CHANGE_APPROVAL_O4
|
||||
RAP service definition : ZUI_ARENA_CHANGE_APPROVAL
|
||||
Version : 0001
|
||||
Service URL : /sap/opu/odata4/sap/zui_arena_change_approval_o4/srvd/sap/zui_arena_change_approval/0001/
|
||||
Schema namespace / alias : com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001 / SAP__self
|
||||
Root entity type / entity set : ChangeApproval_Type / ChangeApproval
|
||||
The first URL segment after /sap/opu/odata4/sap/ and the schema namespace are strongly
|
||||
indicated to be derived from the service BINDING name (the segment after srvd|srvd_a2x/sap/
|
||||
is the service DEFINITION name): the tenant serves
|
||||
/sap/opu/odata4/sap/api_currencyexchangerate/srvd_a2x/sap/currencyexchangerate/0001 with
|
||||
namespace com.sap.gateway.srvd_a2x.api_currencyexchangerate.v0001, and SAP Help documents
|
||||
/sap/opu/odata4/sap/api_product/srvd_a2x/sap/product/0002.
|
||||
[source: live tenant my429480 ~/projects/sap-apps/exchange-rates-cap/package.json lines 33,39 and
|
||||
srv/external/API_CURRENCYEXCHANGERATE.edmx line 55; sap-docs sap-help loio 5f45f125dfe84c20beb18f5de1512f5a,
|
||||
verified 2026-09-14]
|
||||
Provisional - namespace = binding name is strongly indicated, not proven; reconcile namespace,
|
||||
entity type suffix and URL segments against the live $metadata of the RAP UI service binding
|
||||
at PRD V-2 before deploy.
|
||||
=====================================================================================
|
||||
|
||||
Shape mirrors what an ABAP Cloud OData V4 service binding emits: schema namespace
|
||||
com.sap.gateway.<srvd|srvd_a2x>.<binding>.v0001 with Alias="SAP__self", entity types
|
||||
suffixed "_Type", un-suffixed entity sets, and vocabulary aliases SAP__common /
|
||||
SAP__capabilities / SAP__core / SAP__UI.
|
||||
[source: live tenant my429480 EDMX ~/projects/sap-apps/exchange-rates-cap/srv/external/API_CURRENCYEXCHANGERATE.edmx
|
||||
lines 13-31 (vocabulary aliases), 55 (schema/alias), 57 (_Type), 95 (entity set), verified 2026-09-14]
|
||||
A Fiori app consumes the UI service binding (srvd), not the A2X binding used by the worker.
|
||||
[source: sap-docs sap-help loio 5717c0a1dafc4335add0207b81c39cef, verified 2026-09-14]
|
||||
|
||||
Action availability: RAP emits Core.OperationAvailable for actions declared with
|
||||
"( features : instance )" in the behavior definition; the Fiori side needs no extra annotation.
|
||||
[source: sap-docs /sapui5/06_SAP_Fiori_Elements/actions-cbf16c5#enabling-custom-actions-defined-using-annotations
|
||||
("No ABAP CDS annotation is required, since the setting is made according to the modelling ... in RAP BDEF"),
|
||||
abap-docs /abap-docs-standard/ABENBDL_ACTIONS_FC, verified 2026-09-14]
|
||||
The mock models the emitted result with the boolean properties IsApprovable / IsRetriable.
|
||||
-->
|
||||
<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
|
||||
<edmx:Reference Uri="/sap/opu/odata/IWFND/CATALOGSERVICE;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_CAPABILITIES',Version='0001',SAP__Origin='LOCAL')/$value">
|
||||
<edmx:Include Namespace="Org.OData.Capabilities.V1" Alias="SAP__capabilities"/>
|
||||
</edmx:Reference>
|
||||
<edmx:Reference Uri="/sap/opu/odata/IWFND/CATALOGSERVICE;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_COMMON',Version='0001',SAP__Origin='LOCAL')/$value">
|
||||
<edmx:Include Namespace="com.sap.vocabularies.Common.v1" Alias="SAP__common"/>
|
||||
</edmx:Reference>
|
||||
<edmx:Reference Uri="/sap/opu/odata/IWFND/CATALOGSERVICE;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_CORE',Version='0001',SAP__Origin='LOCAL')/$value">
|
||||
<edmx:Include Namespace="Org.OData.Core.V1" Alias="SAP__core"/>
|
||||
</edmx:Reference>
|
||||
<edmx:Reference Uri="/sap/opu/odata/IWFND/CATALOGSERVICE;v=2/Vocabularies(TechnicalName='%2FIWBEP%2FVOC_UI',Version='0001',SAP__Origin='LOCAL')/$value">
|
||||
<edmx:Include Namespace="com.sap.vocabularies.UI.v1" Alias="SAP__UI"/>
|
||||
</edmx:Reference>
|
||||
<edmx:DataServices>
|
||||
<Schema Namespace="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001" Alias="SAP__self" xmlns="http://docs.oasis-open.org/odata/ns/edm">
|
||||
<Annotation Term="SAP__core.SchemaVersion" String="1.0.0"/>
|
||||
|
||||
<EntityType Name="ChangeApproval_Type">
|
||||
<Key>
|
||||
<PropertyRef Name="ID"/>
|
||||
</Key>
|
||||
<Property Name="ID" Type="Edm.Guid" Nullable="false"/>
|
||||
<Property Name="ItemNumber" Type="Edm.String" MaxLength="18"/>
|
||||
<Property Name="ItemName" Type="Edm.String" MaxLength="40"/>
|
||||
<Property Name="ChangeType" Type="Edm.String" MaxLength="15"/>
|
||||
<!-- Status domain: PENDING -> APPROVED -> EXECUTING -> SYNCED | FAILED; REJECTED terminal;
|
||||
FAILED -retrySync-> EXECUTING. approve/reject only for PENDING, retrySync only for FAILED (PRD RAP-1). -->
|
||||
<Property Name="Status" Type="Edm.String" MaxLength="10"/>
|
||||
<Property Name="StatusCriticality" Type="Edm.Byte"/>
|
||||
<Property Name="ArenaEcoId" Type="Edm.String" MaxLength="20"/>
|
||||
<Property Name="RequestedBy" Type="Edm.String" MaxLength="12"/>
|
||||
<Property Name="RequestedOn" Type="Edm.DateTimeOffset" Precision="7"/>
|
||||
<Property Name="DecidedBy" Type="Edm.String" MaxLength="12"/>
|
||||
<Property Name="DecidedOn" Type="Edm.DateTimeOffset" Precision="7"/>
|
||||
<Property Name="SapChangeNumber" Type="Edm.String" MaxLength="12"/>
|
||||
<Property Name="ErrorMessage" Type="Edm.String" MaxLength="255"/>
|
||||
<Property Name="RejectReason" Type="Edm.String" MaxLength="255"/>
|
||||
<!-- abap.string on the RAP side: emitted as Edm.String without MaxLength -->
|
||||
<Property Name="SapPreview" Type="Edm.String"/>
|
||||
<!-- Instance feature-control results (RAP "features : instance"), consumed by Core.OperationAvailable below -->
|
||||
<Property Name="IsApprovable" Type="Edm.Boolean"/>
|
||||
<Property Name="IsRetriable" Type="Edm.Boolean"/>
|
||||
</EntityType>
|
||||
|
||||
<!-- Bound actions (binding parameter "_it" as emitted by RAP service bindings) -->
|
||||
<Action Name="approve" IsBound="true">
|
||||
<Parameter Name="_it" Type="SAP__self.ChangeApproval_Type" Nullable="false"/>
|
||||
<ReturnType Type="SAP__self.ChangeApproval_Type" Nullable="false"/>
|
||||
</Action>
|
||||
<Action Name="reject" IsBound="true">
|
||||
<Parameter Name="_it" Type="SAP__self.ChangeApproval_Type" Nullable="false"/>
|
||||
<Parameter Name="RejectReason" Type="Edm.String" Nullable="false" MaxLength="255"/>
|
||||
<ReturnType Type="SAP__self.ChangeApproval_Type" Nullable="false"/>
|
||||
</Action>
|
||||
<Action Name="retrySync" IsBound="true">
|
||||
<Parameter Name="_it" Type="SAP__self.ChangeApproval_Type" Nullable="false"/>
|
||||
<ReturnType Type="SAP__self.ChangeApproval_Type" Nullable="false"/>
|
||||
</Action>
|
||||
|
||||
<EntityContainer Name="Container">
|
||||
<EntitySet Name="ChangeApproval" EntityType="com.sap.gateway.srvd.zui_arena_change_approval_o4.v0001.ChangeApproval_Type"/>
|
||||
</EntityContainer>
|
||||
|
||||
<!-- Service-side (metadata) annotations, as a RAP service binding would emit them -->
|
||||
<Annotations Target="SAP__self.ChangeApproval_Type/ID">
|
||||
<Annotation Term="SAP__core.Computed"/>
|
||||
</Annotations>
|
||||
<Annotations Target="SAP__self.approve">
|
||||
<Annotation Term="SAP__core.OperationAvailable" Path="IsApprovable"/>
|
||||
</Annotations>
|
||||
<Annotations Target="SAP__self.reject">
|
||||
<Annotation Term="SAP__core.OperationAvailable" Path="IsApprovable"/>
|
||||
</Annotations>
|
||||
<Annotations Target="SAP__self.retrySync">
|
||||
<Annotation Term="SAP__core.OperationAvailable" Path="IsRetriable"/>
|
||||
</Annotations>
|
||||
<Annotations Target="SAP__self.Container/ChangeApproval">
|
||||
<Annotation Term="SAP__capabilities.InsertRestrictions">
|
||||
<Record><PropertyValue Property="Insertable" Bool="false"/></Record>
|
||||
</Annotation>
|
||||
<Annotation Term="SAP__capabilities.DeleteRestrictions">
|
||||
<Record><PropertyValue Property="Deletable" Bool="false"/></Record>
|
||||
</Annotation>
|
||||
<Annotation Term="SAP__capabilities.UpdateRestrictions">
|
||||
<Record><PropertyValue Property="Updatable" Bool="false"/></Record>
|
||||
</Annotation>
|
||||
</Annotations>
|
||||
</Schema>
|
||||
</edmx:DataServices>
|
||||
</edmx:Edmx>
|
||||
@@ -0,0 +1,179 @@
|
||||
{
|
||||
"_version": "2.11.0",
|
||||
"sap.app": {
|
||||
"id": "com.minicircuits.arenaplm",
|
||||
"type": "application",
|
||||
"i18n": "i18n/i18n.properties",
|
||||
"applicationVersion": {
|
||||
"version": "0.0.1"
|
||||
},
|
||||
"title": "{{appTitle}}",
|
||||
"description": "{{appDescription}}",
|
||||
"resources": "resources.json",
|
||||
"sourceTemplate": {
|
||||
"id": "@sap/generator-fiori:lrop",
|
||||
"version": "1.32.0",
|
||||
"toolsId": "0ea36282-572c-4a90-b419-a3705f20a9c3"
|
||||
},
|
||||
"dataSources": {
|
||||
"annotation": {
|
||||
"type": "ODataAnnotation",
|
||||
"uri": "annotations/annotation.xml",
|
||||
"settings": {
|
||||
"localUri": "annotations/annotation.xml"
|
||||
}
|
||||
},
|
||||
"mainService": {
|
||||
"uri": "/sap/opu/odata4/sap/zui_arena_change_approval_o4/srvd/sap/zui_arena_change_approval/0001/",
|
||||
"type": "OData",
|
||||
"settings": {
|
||||
"annotations": [
|
||||
"annotation"
|
||||
],
|
||||
"localUri": "localService/mainService/metadata.xml",
|
||||
"odataVersion": "4.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"crossNavigation": {
|
||||
"inbounds": {
|
||||
"ArenaChangeApproval-manage": {
|
||||
"semanticObject": "ArenaChangeApproval",
|
||||
"action": "manage",
|
||||
"title": "{{flpTitle}}",
|
||||
"subTitle": "{{flpSubtitle}}",
|
||||
"icon": "sap-icon://approvals",
|
||||
"signature": {
|
||||
"parameters": {},
|
||||
"additionalParameters": "allowed"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"sap.ui": {
|
||||
"technology": "UI5",
|
||||
"icons": {
|
||||
"icon": "",
|
||||
"favIcon": "",
|
||||
"phone": "",
|
||||
"phone@2": "",
|
||||
"tablet": "",
|
||||
"tablet@2": ""
|
||||
},
|
||||
"deviceTypes": {
|
||||
"desktop": true,
|
||||
"tablet": true,
|
||||
"phone": true
|
||||
}
|
||||
},
|
||||
"sap.ui5": {
|
||||
"flexEnabled": true,
|
||||
"dependencies": {
|
||||
"minUI5Version": "1.152.0",
|
||||
"libs": {
|
||||
"sap.m": {},
|
||||
"sap.ui.core": {},
|
||||
"sap.fe.templates": {}
|
||||
}
|
||||
},
|
||||
"contentDensities": {
|
||||
"compact": true,
|
||||
"cozy": true
|
||||
},
|
||||
"models": {
|
||||
"i18n": {
|
||||
"type": "sap.ui.model.resource.ResourceModel",
|
||||
"settings": {
|
||||
"bundleName": "com.minicircuits.arenaplm.i18n.i18n"
|
||||
}
|
||||
},
|
||||
"": {
|
||||
"dataSource": "mainService",
|
||||
"preload": true,
|
||||
"settings": {
|
||||
"operationMode": "Server",
|
||||
"autoExpandSelect": true,
|
||||
"earlyRequests": true
|
||||
}
|
||||
},
|
||||
"@i18n": {
|
||||
"type": "sap.ui.model.resource.ResourceModel",
|
||||
"uri": "i18n/i18n.properties"
|
||||
}
|
||||
},
|
||||
"resources": {
|
||||
"css": []
|
||||
},
|
||||
"routing": {
|
||||
"config": {},
|
||||
"routes": [
|
||||
{
|
||||
"pattern": ":?query:",
|
||||
"name": "ChangeApprovalList",
|
||||
"target": "ChangeApprovalList"
|
||||
},
|
||||
{
|
||||
"pattern": "ChangeApproval({key}):?query:",
|
||||
"name": "ChangeApprovalObjectPage",
|
||||
"target": [
|
||||
"ChangeApprovalList",
|
||||
"ChangeApprovalObjectPage"
|
||||
]
|
||||
}
|
||||
],
|
||||
"targets": {
|
||||
"ChangeApprovalList": {
|
||||
"type": "Component",
|
||||
"id": "ChangeApprovalList",
|
||||
"name": "sap.fe.templates.ListReport",
|
||||
"options": {
|
||||
"settings": {
|
||||
"contextPath": "/ChangeApproval",
|
||||
"defaultTemplateAnnotationPath": "com.sap.vocabularies.UI.v1.SelectionPresentationVariant#Default",
|
||||
"initialLoad": "Enabled",
|
||||
"variantManagement": "Page",
|
||||
"navigation": {
|
||||
"ChangeApproval": {
|
||||
"detail": {
|
||||
"route": "ChangeApprovalObjectPage"
|
||||
}
|
||||
}
|
||||
},
|
||||
"controlConfiguration": {
|
||||
"@com.sap.vocabularies.UI.v1.LineItem": {
|
||||
"tableSettings": {
|
||||
"type": "ResponsiveTable",
|
||||
"selectionMode": "None"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"controlAggregation": "beginColumnPages"
|
||||
},
|
||||
"ChangeApprovalObjectPage": {
|
||||
"type": "Component",
|
||||
"id": "ChangeApprovalObjectPage",
|
||||
"name": "sap.fe.templates.ObjectPage",
|
||||
"options": {
|
||||
"settings": {
|
||||
"editableHeaderContent": false,
|
||||
"contextPath": "/ChangeApproval"
|
||||
}
|
||||
},
|
||||
"controlAggregation": "midColumnPages"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"sap.fiori": {
|
||||
"registrationIds": [],
|
||||
"archeType": "transactional"
|
||||
},
|
||||
"sap.fe": {
|
||||
"app": {
|
||||
"enableLazyLoading": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
/******************************************************************************
|
||||
* ╔═══════════════════════════════════════════════════════════════════════╗ *
|
||||
* ║ ║ *
|
||||
* ║ WARNING: AUTO-GENERATED FILE ║ *
|
||||
* ║ ║ *
|
||||
* ║ This file is automatically generated by SAP Fiori tools and is ║ *
|
||||
* ║ overwritten when you run the OPA test generator again. ║ *
|
||||
* ║ ║ *
|
||||
* ║ To add your own custom tests: ║ *
|
||||
* ║ - Create a new journey test file in this directory. ║ *
|
||||
* ║ - Follow the same pattern as this file. ║ *
|
||||
* ║ - Add the new file to the opaTests.qunit.js config file. ║ *
|
||||
* ║ - Custom journey files are not overwritten. ║ *
|
||||
* ║ ║ *
|
||||
* ╚═══════════════════════════════════════════════════════════════════════╝ *
|
||||
******************************************************************************/
|
||||
|
||||
import opaTest from "sap/ui/test/opaQunit";
|
||||
import type { Given, When, Then } from "./types/OpaJourneyTypes.gen";
|
||||
import runner from "./pages/JourneyRunner";
|
||||
|
||||
function journey() {
|
||||
QUnit.module("ChangeApprovalsListListReport journey");
|
||||
|
||||
const defaultTableId = "";
|
||||
|
||||
opaTest("Start application", function (Given: Given, _When: When, Then: Then) {
|
||||
Given.iStartMyApp();
|
||||
|
||||
Then.onTheChangeApprovalsListGenerated.iSeeThisPage();
|
||||
});
|
||||
|
||||
|
||||
// Note: this test will only work if the ListReport page has a search field and shows data that matches the search term. Please ensure that the test data and search term are set up accordingly.
|
||||
// opaTest("Perform a global search and check the result", function (Given: Given, When: When, Then: Then) {
|
||||
// When.onTheChangeApprovalsListGenerated.onFilterBar().iChangeSearchField("Search Term");
|
||||
// When.onTheChangeApprovalsListGenerated.onFilterBar().iExecuteSearch();
|
||||
// Then.onTheChangeApprovalsListGenerated.onTable(defaultTableId).iCheckRows();
|
||||
// When.onTheChangeApprovalsListGenerated.onFilterBar().iChangeSearchField(undefined);
|
||||
// Then.onTheChangeApprovalsListGenerated.onFilterBar().iCheckSearchField(undefined);
|
||||
// });
|
||||
|
||||
opaTest("Check table columns and actions", function (_Given: Given, _When: When, Then: Then) {
|
||||
Then.onTheChangeApprovalsListGenerated.onTable(defaultTableId).iCheckColumns(undefined, {"ItemNumber":{"header":"ItemNumber"},"ItemName":{"header":"ItemName"},"ChangeType":{"header":"ChangeType"},"Status":{"header":"Status"},"StatusCriticality":{"header":"StatusCriticality"}});
|
||||
});
|
||||
|
||||
opaTest("Navigate to ObjectPage", function (_Given: Given, When: When, Then: Then) {
|
||||
// Note: this test will fail if the ListReport page doesn't show any data
|
||||
When.onTheChangeApprovalsListGenerated.onFilterBar().iExecuteSearch();
|
||||
Then.onTheChangeApprovalsListGenerated.onTable(defaultTableId).iCheckRows();
|
||||
When.onTheChangeApprovalsListGenerated.onTable(defaultTableId).iPressRow(0);
|
||||
Then.onTheChangeApprovalsObjectPageGenerated.iSeeThisPage();
|
||||
});
|
||||
|
||||
opaTest("Teardown", function (Given: Given) {
|
||||
// Cleanup
|
||||
Given.iTearDownMyApp();
|
||||
});
|
||||
}
|
||||
|
||||
runner.run([journey]);
|
||||
@@ -0,0 +1,71 @@
|
||||
/******************************************************************************
|
||||
* ╔═══════════════════════════════════════════════════════════════════════╗ *
|
||||
* ║ ║ *
|
||||
* ║ WARNING: AUTO-GENERATED FILE ║ *
|
||||
* ║ ║ *
|
||||
* ║ This file is automatically generated by SAP Fiori tools and is ║ *
|
||||
* ║ overwritten when you run the OPA test generator again. ║ *
|
||||
* ║ ║ *
|
||||
* ║ To add your own custom tests: ║ *
|
||||
* ║ - Create a new journey test file in this directory. ║ *
|
||||
* ║ - Follow the same pattern as this file. ║ *
|
||||
* ║ - Add the new file to the opaTests.qunit.js config file. ║ *
|
||||
* ║ - Custom journey files are not overwritten. ║ *
|
||||
* ║ ║ *
|
||||
* ╚═══════════════════════════════════════════════════════════════════════╝ *
|
||||
******************************************************************************/
|
||||
|
||||
import opaTest from "sap/ui/test/opaQunit";
|
||||
import type { Given, When, Then } from "./types/OpaJourneyTypes.gen";
|
||||
import runner from "./pages/JourneyRunner";
|
||||
|
||||
function journey() {
|
||||
QUnit.module("ChangeApprovalsObjectPageObjectPage journey");
|
||||
|
||||
opaTest("Navigate to ChangeApprovalsObjectPageObjectPage", function (Given: Given, When: When, Then: Then) {
|
||||
Given.iStartMyApp();
|
||||
When.onTheChangeApprovalsListGenerated.onFilterBar().iExecuteSearch();
|
||||
Then.onTheChangeApprovalsListGenerated.onTable("").iCheckRows();
|
||||
When.onTheChangeApprovalsListGenerated.onTable("").iPressRow(0);
|
||||
|
||||
Then.onTheChangeApprovalsObjectPageGenerated.iSeeThisPage();
|
||||
});
|
||||
|
||||
|
||||
|
||||
opaTest("Check the ChangeFacet section of the Object Page", function (_Given: Given, _When: When, Then: Then) {
|
||||
Then.onTheChangeApprovalsObjectPageGenerated.iCheckSection({ section: "ChangeFacet" }, {});
|
||||
Then.onTheChangeApprovalsObjectPageGenerated.onForm({ section: "ChangeFacet" }).iCheckField({ property: "ItemNumber" });
|
||||
Then.onTheChangeApprovalsObjectPageGenerated.onForm({ section: "ChangeFacet" }).iCheckField({ property: "ItemName" });
|
||||
Then.onTheChangeApprovalsObjectPageGenerated.onForm({ section: "ChangeFacet" }).iCheckField({ property: "ChangeType" });
|
||||
Then.onTheChangeApprovalsObjectPageGenerated.onForm({ section: "ChangeFacet" }).iCheckField({ property: "ArenaEcoId" });
|
||||
});
|
||||
|
||||
opaTest("Check the ApprovalFacet section of the Object Page", function (_Given: Given, _When: When, Then: Then) {
|
||||
Then.onTheChangeApprovalsObjectPageGenerated.iCheckSection({ section: "ApprovalFacet" }, {});
|
||||
Then.onTheChangeApprovalsObjectPageGenerated.onForm({ section: "ApprovalFacet" }).iCheckField({ property: "Status" });
|
||||
Then.onTheChangeApprovalsObjectPageGenerated.onForm({ section: "ApprovalFacet" }).iCheckField({ property: "RequestedBy" });
|
||||
Then.onTheChangeApprovalsObjectPageGenerated.onForm({ section: "ApprovalFacet" }).iCheckField({ property: "RequestedOn" });
|
||||
Then.onTheChangeApprovalsObjectPageGenerated.onForm({ section: "ApprovalFacet" }).iCheckField({ property: "DecidedBy" });
|
||||
Then.onTheChangeApprovalsObjectPageGenerated.onForm({ section: "ApprovalFacet" }).iCheckField({ property: "DecidedOn" });
|
||||
Then.onTheChangeApprovalsObjectPageGenerated.onForm({ section: "ApprovalFacet" }).iCheckField({ property: "RejectReason" });
|
||||
});
|
||||
|
||||
opaTest("Check the ExecutionFacet section of the Object Page", function (_Given: Given, _When: When, Then: Then) {
|
||||
Then.onTheChangeApprovalsObjectPageGenerated.iCheckSection({ section: "ExecutionFacet" }, {});
|
||||
Then.onTheChangeApprovalsObjectPageGenerated.onForm({ section: "ExecutionFacet" }).iCheckField({ property: "SapChangeNumber" });
|
||||
Then.onTheChangeApprovalsObjectPageGenerated.onForm({ section: "ExecutionFacet" }).iCheckField({ property: "ErrorMessage" });
|
||||
});
|
||||
|
||||
opaTest("Check the PayloadFacet section of the Object Page", function (_Given: Given, _When: When, Then: Then) {
|
||||
Then.onTheChangeApprovalsObjectPageGenerated.iCheckSection({ section: "PayloadFacet" }, {});
|
||||
Then.onTheChangeApprovalsObjectPageGenerated.onForm({ section: "PayloadFacet" }).iCheckField({ property: "SapPreview" });
|
||||
});
|
||||
|
||||
opaTest("Teardown", function (Given: Given) {
|
||||
// Cleanup
|
||||
Given.iTearDownMyApp();
|
||||
});
|
||||
}
|
||||
|
||||
runner.run([journey]);
|
||||
@@ -0,0 +1,25 @@
|
||||
/******************************************************************************
|
||||
* ╔═══════════════════════════════════════════════════════════════════════╗ *
|
||||
* ║ ║ *
|
||||
* ║ WARNING: AUTO-GENERATED FILE ║ *
|
||||
* ║ ║ *
|
||||
* ║ This file is automatically generated by SAP Fiori tools and is ║ *
|
||||
* ║ overwritten when you run the OPA test generator again. ║ *
|
||||
* ║ ║ *
|
||||
* ║ To add your own custom pages: ║ *
|
||||
* ║ - Create a new page file in this directory. ║ *
|
||||
* ║ - Follow the same pattern as this file. ║ *
|
||||
* ║ - Add the new file to the JourneyRunner. ║ *
|
||||
* ║ - Custom page files are not overwritten. ║ *
|
||||
* ║ ║ *
|
||||
* ╚═══════════════════════════════════════════════════════════════════════╝ *
|
||||
******************************************************************************/
|
||||
|
||||
export const actions = {};
|
||||
|
||||
export const assertions = {};
|
||||
|
||||
export default class ListReport {
|
||||
actions = actions;
|
||||
assertions = assertions;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
/******************************************************************************
|
||||
* ╔═══════════════════════════════════════════════════════════════════════╗ *
|
||||
* ║ ║ *
|
||||
* ║ WARNING: AUTO-GENERATED FILE ║ *
|
||||
* ║ ║ *
|
||||
* ║ This file is automatically generated by SAP Fiori tools and is ║ *
|
||||
* ║ overwritten when you run the OPA test generator again. ║ *
|
||||
* ║ ║ *
|
||||
* ║ To add your own custom pages: ║ *
|
||||
* ║ - Create a new page file in this directory. ║ *
|
||||
* ║ - Follow the same pattern as this file. ║ *
|
||||
* ║ - Add the new file to the JourneyRunner. ║ *
|
||||
* ║ - Custom page files are not overwritten. ║ *
|
||||
* ║ ║ *
|
||||
* ╚═══════════════════════════════════════════════════════════════════════╝ *
|
||||
******************************************************************************/
|
||||
|
||||
export const actions = {};
|
||||
|
||||
export const assertions = {};
|
||||
|
||||
export default class ObjectPage {
|
||||
actions = actions;
|
||||
assertions = assertions;
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
import JourneyRunner from "sap/fe/test/JourneyRunner";
|
||||
import ListReport from "sap/fe/test/ListReport";
|
||||
import ObjectPage from "sap/fe/test/ObjectPage";
|
||||
import CustomChangeApprovalsListGenerated from "./ChangeApprovalsList.gen";
|
||||
import CustomChangeApprovalsObjectPageGenerated from "./ChangeApprovalsObjectPage.gen";
|
||||
|
||||
const runner = new JourneyRunner({
|
||||
launchUrl: sap.ui.require.toUrl("com/minicircuits/arenaplm") + "/test/flp.html#app-preview",
|
||||
pages: {
|
||||
onTheChangeApprovalsListGenerated: new ListReport(
|
||||
{
|
||||
appId: "com.minicircuits.arenaplm",
|
||||
componentId: "ChangeApprovalList",
|
||||
entitySet: "",
|
||||
contextPath: "/ChangeApproval"
|
||||
},
|
||||
CustomChangeApprovalsListGenerated
|
||||
),
|
||||
onTheChangeApprovalsObjectPageGenerated: new ObjectPage(
|
||||
{
|
||||
appId: "com.minicircuits.arenaplm",
|
||||
componentId: "ChangeApprovalObjectPage",
|
||||
entitySet: "",
|
||||
contextPath: "/ChangeApproval"
|
||||
},
|
||||
CustomChangeApprovalsObjectPageGenerated
|
||||
)
|
||||
},
|
||||
async: true
|
||||
});
|
||||
|
||||
export default runner;
|
||||
@@ -0,0 +1,56 @@
|
||||
/******************************************************************************
|
||||
* ╔═══════════════════════════════════════════════════════════════════════╗ *
|
||||
* ║ ║ *
|
||||
* ║ WARNING: AUTO-GENERATED FILE ║ *
|
||||
* ║ ║ *
|
||||
* ║ This file is automatically generated by SAP Fiori tools and is ║ *
|
||||
* ║ overwritten when you run the OPA test generator again. ║ *
|
||||
* ║ ║ *
|
||||
* ║ Do not edit this file directly. Any changes will be lost. ║ *
|
||||
* ║ ║ *
|
||||
* ╚═══════════════════════════════════════════════════════════════════════╝ *
|
||||
******************************************************************************/
|
||||
|
||||
import type Opa5 from "sap/ui/test/Opa5";
|
||||
import type { actions as ListReportActions, assertions as ListReportAssertions } from "sap/fe/test/ListReport";
|
||||
import type { actions as ObjectPageActions, assertions as ObjectPageAssertions } from "sap/fe/test/ObjectPage";
|
||||
import type { actions as TemplatePageActions, assertions as TemplatePageAssertions } from "sap/fe/test/TemplatePage";
|
||||
import type Shell from "sap/fe/test/Shell";
|
||||
import type BaseArrangements from "sap/fe/test/BaseArrangements";
|
||||
import type { actions as ChangeApprovalsListGeneratedCustomActions, assertions as ChangeApprovalsListGeneratedCustomAssertions } from "../pages/ChangeApprovalsList.gen";
|
||||
import type { actions as ChangeApprovalsObjectPageGeneratedCustomActions, assertions as ChangeApprovalsObjectPageGeneratedCustomAssertions } from "../pages/ChangeApprovalsObjectPage.gen";
|
||||
|
||||
/**
|
||||
* Enables OPA5 fluent `.and` chaining on page objects and their sub-objects.
|
||||
*
|
||||
* @example
|
||||
* Then.onTheObjectPageGenerated.iCheckSection({ section: "A" }).and.iCheckSection({ section: "B" });
|
||||
* When.onTheListReportGenerated.onFilterBar().iExecuteSearch().and.iClearFilterBar();
|
||||
*/
|
||||
type WithAnd<T> = {
|
||||
[K in keyof T | 'and']: K extends 'and'
|
||||
? WithAnd<T>
|
||||
: K extends keyof T
|
||||
? T[K] extends (...args: infer A) => infer R
|
||||
? (...args: A) => (R extends Opa5 | object ? (keyof R extends never ? WithAnd<T> : [R] extends [Opa5] ? WithAnd<T> : WithAnd<R>) : WithAnd<T>)
|
||||
: T[K]
|
||||
: never;
|
||||
};
|
||||
|
||||
export type Given = Opa5 & BaseArrangements & {
|
||||
iTearDownMyApp: () => Given;
|
||||
iStartMyApp: (sAppHash?: string, mInUrlParameters?: object) => Given;
|
||||
and: Given;
|
||||
};
|
||||
|
||||
export type When = Opa5 & BaseArrangements & {
|
||||
onTheChangeApprovalsListGenerated: WithAnd<Opa5 & ListReportActions & TemplatePageActions & typeof ChangeApprovalsListGeneratedCustomActions>;
|
||||
onTheChangeApprovalsObjectPageGenerated: WithAnd<Opa5 & ObjectPageActions & TemplatePageActions & typeof ChangeApprovalsObjectPageGeneratedCustomActions>;
|
||||
onTheShell: Shell;
|
||||
};
|
||||
|
||||
export type Then = Opa5 & BaseArrangements & {
|
||||
onTheChangeApprovalsListGenerated: WithAnd<Opa5 & ListReportAssertions & TemplatePageAssertions & typeof ChangeApprovalsListGeneratedCustomAssertions>;
|
||||
onTheChangeApprovalsObjectPageGenerated: WithAnd<Opa5 & ObjectPageAssertions & TemplatePageAssertions & typeof ChangeApprovalsObjectPageGeneratedCustomAssertions>;
|
||||
onTheShell: Shell;
|
||||
};
|
||||
Reference in New Issue
Block a user