upload current sources
This commit is contained in:
@@ -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