Enabling Actions in the Object Page Header
Enabling Actions in the Object Page Header
You can enable generic actions in
the
object
page header.
Edit, Delete and
Copy are the generic actions.
All com.sap.vocabularies.UI.v1.DataFieldForAction within the unqualified
UI.Identification are interpreted as actions. The system renders a
button in the header displaying the text of the data field label.
Object Page: Enable Actions in Header
Annotations for the Copy with new supplier Button:
XML
Annotation
Sample Code
Hidden
<Annotation Term="UI.Identification">
<Collection>
<Record Type="UI.DataFieldForAction">
<PropertyValue Property="Label" String="Copy with new supplier" />
<PropertyValue Property="Action"
String="STTA_PROD_MAN.STTA_PROD_MAN_Entities/STTA_C_MP_ProductCopy_new_supplier" />
<Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High" />
</Record>
...
</Collection>
</Annotation>
ABAP CDS
Annotation
Sample Code
Hidden
@UI.identification: [
{
importance: #HIGH,
label: 'Copy with new supplier',
dataAction: 'PUSHDOWN:STTA_C_MP_ProductCopy_new_supplier',
type: #FOR_ACTION,
position: 1
}
]
product;
CAP CDS
Annotation
Sample Code
Hidden
UI.Identification : [
{
$Type : 'UI.DataFieldForAction',
Label : 'Copy with new supplier',
Action : 'STTA_PROD_MAN.STTA_PROD_MAN_Entities/STTA_C_MP_ProductCopy_new_supplier',
![@UI.Importance] : #High
}
]
In SAP Fiori elements for OData
V2, the
object page context is always passed when a header action is invoked.
In SAP Fiori elements for OData
V4, the
object page context is only passed for bound header actions. For unbound actions, no
context is passed.
Edit Action on Subobject Page
The edit action is also available on the subobject page. Its behavior depends on
the annotations on both levels:
-
The edit button is displayed on the subobject page only if it is also
visible on the object page and if the subobject page entity is not
annotated to hide it.
-
The edit button is enabled on the subobject page only if it is also
enabled on the object page and if the subobject page entity is not
annotated to disable it.
Selecting the edit button on the subobject page enables the edit action for
the entire object page, not just the subobject page where it was
selected.
Copy Action
The Copy button is not available by default. However,
applications can define a standard copy action by annotating a
dataFieldForAction with isCopyAction.
This Copy button is placed after the
Delete button.
XML
Annotation
Sample Code
Hidden
<Annotation Term="UI.Identification">
<Collection>
<Record Type="UI.DataFieldForAction">
<PropertyValue Property="Label" String="Copy" />
<PropertyValue Property="Action" String="STTA_PROD_MAN.STTA_PROD_MAN_Entities/STTA_C_MP_ProductCopy" />
<Annotation Term="UI.IsCopyAction" Bool="true" />
</Record>
CAP
CDS
Annotation
Sample Code
Hidden
UI.Identification : [
{
$Type : 'UI.DataFieldForAction',
Label : 'Copy',
Action : 'STTA_PROD_MAN.STTA_PROD_MAN_Entities/STTA_C_MP_ProductCopy',
![@UI.IsCopyAction] : true,
},
],
Applications can define a label for this button. If a label is not provided, then
by default this button is labeled as Copy.
The copy action is only available on the object page, not on the
subobject pages.
Additional Features in SAP Fiori Elements for OData V2
Edit and Delete Buttons
The Edit and Delete buttons are
displayed as shown above, if the following conditions are met:
If you want to specify conditions for deletion or updates (using the
deletable-path or updatable path
annotation), you need to ensure that you have not made the
sap:deletable or sap:updatable setting
in your annotations.
For more information about the Delete button, see the
Enable or
Disable Delete Button (Using
deletable-path Annotations) section in Adding Actions to Tables.
Show or Hide the Edit Button (Using updatable-path
Annotation)
You can choose to display or hide the Edit button on the
object page based on certain conditions in your back-end system. For example,
you may want to disable editing for a sales order that has already been paid.
In your annotation, set the updatable-path for the
Edit button to point to a particular property of an
object (entity) in the back-end system that is either true or
false. If the value of this property is
true, the Edit button is displayed;
if it is false, it is hidden.
If you want to specify conditions for the updatable-path
annotation, you need to ensure that you have not made the
sap:updatable setting in your annotations.
Code Samples for updatable-path
The code sample below shows you how to set up your annotation to display or hide
the Edit button, based on the value of the
Updatable_mc property in the back-end system.
XML
Annotation
Sample Code
Hidden
<Annotations Target="STTA_PROD_MAN.STTA_PROD_MAN_Entities/STTA_C_MP_Product">
<Annotation Term="Org.OData.Capabilities.V1.UpdateRestrictions">
<Record>
<PropertyValue Property="Updatable" Path="Updatable_mc"/>
</Record>
</Annotation>
</Annotations> Additional Features in SAP Fiori Elements for OData V4
Edit and Delete Buttons
The Edit button allows users to edit the instance of the
object page.
The Delete button allows users to delete the instance of
the object page.
-
When
determining
the enablement of the Edit button on the
object page,
updateRestrictions
are ignored because
draft
applications always have an EditAction, as shown in
the following sample code:
Hidden
<Annotation Term="com.sap.vocabularies.Common.v1.DraftRoot">
<Record>
<PropertyValue Property="EditAction" String="com.sap.gateway.srvd.sadl_gw_appmusicdr_definition.v0001.EditAction"/>
</Record>
</Annotation>
For more information, see the Edit Enablement subsection in this topic.
-
The visibility of the Edit button can be
controlled by the updateHidden annotation under the
entity set (it can be path-based if the apps need to hide the
Edit button, for example for specific
instances only).
XML
Annotation
Sample Code
Hidden
<Annotations Target="com.c_salesordermanage_sd.EntityContainer/HeaderPartner">
<Annotation Term="UI.UpdateHidden" Bool="true"/>
</Annotations>
OR
<Annotations Target="com.c_salesordermanage_sd.EntityContainer/SalesOrderManage">
<Annotation Term="UI.UpdateHidden" Path="isUpdateHidden"/>
</Annotations>
ABAP CDS
Annotation
Sample Code
Hidden
@UI.updateHidden:true
OR
@UI.updateHidden: #('isUpdateHidden')
CAP CDS
Annotation
Sample Code
Hidden
annotate com.c_salesordermanage_sd.SalesOrderManage with @( UI.UpdateHidden: true);
OR
annotate com.c_salesordermanage_sd.SalesOrderManage with @( UI.UpdateHidden: isUpdateHidden);
For more information about the visibility of the
Delete button, see the Showing or Hiding the Delete
Button section in Adding Actions to Tables.
Edit Enablement
As
shown in the sample annotation above, the UpdateRestrictions
are completely ignored. Instead, OperationAvailable determines
the enablement of the button. For more information about
OperationAvailable, see the Enabling Custom Actions Defined Using Annotations section in Actions.
-
If OperationAvailable = true (static) OR if
OperationAvailable is not defined, the
Edit button is visible (provided that
updateHidden doesn't evaluate to false) and
enabled.
-
If OperationAvailable = false (static), the
Edit button is not visible.
-
If OperationAvailable = <path>, the enablement of
the Edit button depends on whether the path returns
true or false. If the path returns null, the button is visible but
disabled.
Custom Global Actions
Applications can define their own global actions. The actions defined under the
unqualified UI.Identification, that are not set to
determining=true, are considered global actions and
rendered next to the standard actions in the header. The object page context is
passed to the action if the action is configured as a bound action or as a
DataFieldForIBN. For an unbound action, no context is
passed. For information about custom annotation actions, see Setting the Criticality for Actions and Actions.
The following sample shows examples of global actions:
XML
Annotation
Sample Code
Hidden
<Annotation Term="UI.Identification">
<Collection>
...
<Record Type="UI.DataFieldForAction">
<PropertyValue Property="Label" String="Break Up" />
<PropertyValue Property="Action" String="com.sap.gateway.srvd.sadl_gw_appmusicdr_definition.v0001.BREAK_UP" />
</Record>
<Record Type="UI.DataFieldForIntentBasedNavigation">
<PropertyValue Property="Label" String="SampleIBN"/>
<PropertyValue Property="SemanticObject" String="MySemanticObject"/>
<PropertyValue Property="Action" String="manage"/>
<PropertyValue Property="RequiresContext" Bool="false"/> // For header IBN buttons, this should only be false or not specified!
</Record>
...
</Collection>
</Annotation>
ABAP CDS
Annotation
Sample Code
Hidden
@UI.identification: [
{
label: 'Break Up',
dataAction: 'com.sap.gateway.srvd.sadl_gw_appmusicdr_definition.v0001.BREAK_UP',
type: #FOR_ACTION,
position: 1
},
{
label: 'SampleIBN',
semanticObjectAction: 'manage',
type: #FOR_INTENT_BASED_NAVIGATION,
position: 2
}
]
TEST;
@Consumption.semanticObject: 'MySemanticObject'
%ENTITY;
CAP
CDS Annotation
Sample Code
Hidden
UI : {
Identification: [
{
$Type : 'UI.DataFieldForAction',
Label : 'Break Up',
Action : ' com.sap.gateway.srvd.sadl_gw_appmusicdr_definition.v0001.BREAK_UP'
},
{
$Type : ' UI.DataFieldForIntentBasedNavigation',
Label : ' SampleIBN ',
SemanticObject : 'MySemanticObject',
Action : 'manage',
RequiresContext : false
}
]
}
In the sample above, "UI" is used as an alias for
com.sap.vocabularies.UI.v1.
You control the visibility of the custom global actions by using the
UI.Hidden annotation.
If
static true or path-based evaluate to
true, the action button is
hidden.
You also control the enablement of the DataFieldForAction
buttons through the OperationAvailable mechanism in the same
way as described in the Enabling Custom Actions Defined Using Annotations section in Actions.
The enablement of intent-based navigation (IBN) buttons can be controlled using
the "NavigationAvailable" property, as described in the Navigation
Using a Button section in Navigation from an App (Outbound Navigation).
The UI.DataFieldForAction can be bound or unbound actions. For
more information, see the
Bound and Unbound
Actions
section in
Actions.
Parent topic:
Previous:
Next: