**TITLE**: Actions

**INTRODUCTION**: Actions enable users to trigger operations on your data. You can add actions to tables, charts, and other UI elements using annotations or by defining custom actions through extension points.

**TAGS**: Actions, AI Actions, Toolbar Actions, Inline Actions, Menu Actions, DataFieldWithAction, DataFieldForAction, DataFieldForActionGroup, invokeAction, skip dialog, IsAIOperation, Button

**STEP**: Toolbar Actions

**DESCRIPTION**: You can place actions in table or chart toolbars by adding a UI.DataFieldForAction to UI.LineItem.

**LANGUAGE**: CDS

**CODE**:
```cds
using {TravelService.Travel} from '../../../../service/service';
using from '../../../../service/annotations';

extend TravelService.Travel with actions {
  action AnnotationAction();
  action AnnotationActionInline();
  action AnnotationActionDataField();
  @UI.IsAIOperation: true
  action AnnotationAIAction();
  action AnnotationMenuAction1();
  action AnnotationMenuAction2();
  action AnnotationActionWithParameters(TotalPrice : Decimal(10, 2));
};

annotate TravelService.Travel with @UI.LineItem: [
  {Value: TravelID},
  {
    $Type : 'UI.DataFieldForAnnotation',
    Target: '@UI.ConnectedFields#TripDates'
  },
  {
    $Type : 'UI.DataFieldForAction',
    Action: 'Travel.AnnotationAction',
    Label : 'Action'
  },
  {
    $Type : 'UI.DataFieldForAction',
    Action: 'Travel.AnnotationAIAction',
    Label : 'AI Action'
  },
  {
    $Type : 'UI.DataFieldForAction',
    Action: 'Travel.AnnotationActionInline',
    Label : 'Inline Action',
    Inline: true
  },
  {
    $Type : 'UI.DataFieldWithAction',
    Value : TotalPrice,
    Action: 'Travel.AnnotationActionDataField',
    Label : 'Action on Total Price'
  },
  {
    $Type  : 'UI.DataFieldForActionGroup',
    Label  : 'Menu Action',
    Actions: [
      {
        $Type : 'UI.DataFieldForAction',
        Action: 'Travel.AnnotationMenuAction1',
        Label : 'Menu Action 1'
      },
      {
        $Type : 'UI.DataFieldForAction',
        Action: 'Travel.AnnotationMenuAction2',
        Label : 'Menu Action 2'
      }
    ]
  }
];

/*
annotate TravelService.Travel with @(UI: {FieldGroup #TravelData: {Data: [
  {Value: TravelID},
  {Value: to_Agency_AgencyID},
  {Value: BeginDate},
  {Value: EndDate},
  {
    $Type : 'UI.DataFieldForAction',
    Action: 'TravelService.Travel.AnnotationAction',
    Label : 'Action'
  }
]}});
*/
```

**LANGUAGE**: ABAP

**CODE**:
```abap
@UI.lineItem: [{
    type        : #FOR_ACTION,
    dataAction  : 'annotationAction',
    label       : 'Action'
}]
TravelID;
```

**LANGUAGE**: XML

**CODE**:
```xml
<Record Type="UI.DataFieldForAction">
	<PropertyValue Property="Action" String="Travel.AnnotationAction" />
	<PropertyValue Property="Label" String="Action" />
</Record>
```

**STEP**: AI Actions

**DESCRIPTION**: To indicate an AI action with the AI icon on the button, add a @UI.IsAIOperation annotation to your action.

**LANGUAGE**: CDS

**CODE**:
```cds
using {TravelService.Travel} from '../../../../service/service';
using from '../../../../service/annotations';

extend TravelService.Travel with actions {
  action AnnotationAction();
  action AnnotationActionInline();
  action AnnotationActionDataField();
  @UI.IsAIOperation: true
  action AnnotationAIAction();
  action AnnotationMenuAction1();
  action AnnotationMenuAction2();
  action AnnotationActionWithParameters(TotalPrice : Decimal(10, 2));
};

annotate TravelService.Travel with @UI.LineItem: [
  {Value: TravelID},
  {
    $Type : 'UI.DataFieldForAnnotation',
    Target: '@UI.ConnectedFields#TripDates'
  },
  {
    $Type : 'UI.DataFieldForAction',
    Action: 'Travel.AnnotationAction',
    Label : 'Action'
  },
  {
    $Type : 'UI.DataFieldForAction',
    Action: 'Travel.AnnotationAIAction',
    Label : 'AI Action'
  },
  {
    $Type : 'UI.DataFieldForAction',
    Action: 'Travel.AnnotationActionInline',
    Label : 'Inline Action',
    Inline: true
  },
  {
    $Type : 'UI.DataFieldWithAction',
    Value : TotalPrice,
    Action: 'Travel.AnnotationActionDataField',
    Label : 'Action on Total Price'
  },
  {
    $Type  : 'UI.DataFieldForActionGroup',
    Label  : 'Menu Action',
    Actions: [
      {
        $Type : 'UI.DataFieldForAction',
        Action: 'Travel.AnnotationMenuAction1',
        Label : 'Menu Action 1'
      },
      {
        $Type : 'UI.DataFieldForAction',
        Action: 'Travel.AnnotationMenuAction2',
        Label : 'Menu Action 2'
      }
    ]
  }
];

/*
annotate TravelService.Travel with @(UI: {FieldGroup #TravelData: {Data: [
  {Value: TravelID},
  {Value: to_Agency_AgencyID},
  {Value: BeginDate},
  {Value: EndDate},
  {
    $Type : 'UI.DataFieldForAction',
    Action: 'TravelService.Travel.AnnotationAction',
    Label : 'Action'
  }
]}});
*/
```

**LANGUAGE**: ABAP

**CODE**:
```abap
@UI.lineItem: [{
    type        : #FOR_ACTION,
    dataAction  : 'annotationAIAction',
    label       : 'AI Action'
}]
TravelID;
```

**LANGUAGE**: XML

**CODE**:
```xml
<Record Type="UI.DataFieldForAction">
	<PropertyValue Property="Action" String="Travel.AnnotationAIAction" />
	<PropertyValue Property="Label" String="AI Action" />
</Record>
```

**STEP**: Inline Actions For Tables

**DESCRIPTION**: You can place actions inside table cells by adding an Inline property to UI.DataFieldForAction.

**LANGUAGE**: CDS

**CODE**:
```cds
using {TravelService.Travel} from '../../../../service/service';
using from '../../../../service/annotations';

extend TravelService.Travel with actions {
  action AnnotationAction();
  action AnnotationActionInline();
  action AnnotationActionDataField();
  @UI.IsAIOperation: true
  action AnnotationAIAction();
  action AnnotationMenuAction1();
  action AnnotationMenuAction2();
  action AnnotationActionWithParameters(TotalPrice : Decimal(10, 2));
};

annotate TravelService.Travel with @UI.LineItem: [
  {Value: TravelID},
  {
    $Type : 'UI.DataFieldForAnnotation',
    Target: '@UI.ConnectedFields#TripDates'
  },
  {
    $Type : 'UI.DataFieldForAction',
    Action: 'Travel.AnnotationAction',
    Label : 'Action'
  },
  {
    $Type : 'UI.DataFieldForAction',
    Action: 'Travel.AnnotationAIAction',
    Label : 'AI Action'
  },
  {
    $Type : 'UI.DataFieldForAction',
    Action: 'Travel.AnnotationActionInline',
    Label : 'Inline Action',
    Inline: true
  },
  {
    $Type : 'UI.DataFieldWithAction',
    Value : TotalPrice,
    Action: 'Travel.AnnotationActionDataField',
    Label : 'Action on Total Price'
  },
  {
    $Type  : 'UI.DataFieldForActionGroup',
    Label  : 'Menu Action',
    Actions: [
      {
        $Type : 'UI.DataFieldForAction',
        Action: 'Travel.AnnotationMenuAction1',
        Label : 'Menu Action 1'
      },
      {
        $Type : 'UI.DataFieldForAction',
        Action: 'Travel.AnnotationMenuAction2',
        Label : 'Menu Action 2'
      }
    ]
  }
];

/*
annotate TravelService.Travel with @(UI: {FieldGroup #TravelData: {Data: [
  {Value: TravelID},
  {Value: to_Agency_AgencyID},
  {Value: BeginDate},
  {Value: EndDate},
  {
    $Type : 'UI.DataFieldForAction',
    Action: 'TravelService.Travel.AnnotationAction',
    Label : 'Action'
  }
]}});
*/
```

**LANGUAGE**: ABAP

**CODE**:
```abap
@UI.lineItem: [{
    position    : 30
    type        : #FOR_ACTION,
    dataAction  : 'annotationActionInline',
    inline      : true,
    label       : 'Inline Action'
}]
TravelID;
```

**LANGUAGE**: XML

**CODE**:
```xml
<Record Type="UI.DataFieldForAction">
	<PropertyValue Property="Action" String="Travel.AnnotationActionInline" />
	<PropertyValue Property="Label" String="Inline Action" />
	<PropertyValue Property="Inline" Bool="true" />
</Record>
```

**STEP**: Data Fields Triggering Actions

**DESCRIPTION**: You can define a data field that can trigger an action by using a UI.DataFieldWithAction annotation.

**LANGUAGE**: CDS

**CODE**:
```cds
using {TravelService.Travel} from '../../../../service/service';
using from '../../../../service/annotations';

extend TravelService.Travel with actions {
  action AnnotationAction();
  action AnnotationActionInline();
  action AnnotationActionDataField();
  @UI.IsAIOperation: true
  action AnnotationAIAction();
  action AnnotationMenuAction1();
  action AnnotationMenuAction2();
  action AnnotationActionWithParameters(TotalPrice : Decimal(10, 2));
};

annotate TravelService.Travel with @UI.LineItem: [
  {Value: TravelID},
  {
    $Type : 'UI.DataFieldForAnnotation',
    Target: '@UI.ConnectedFields#TripDates'
  },
  {
    $Type : 'UI.DataFieldForAction',
    Action: 'Travel.AnnotationAction',
    Label : 'Action'
  },
  {
    $Type : 'UI.DataFieldForAction',
    Action: 'Travel.AnnotationAIAction',
    Label : 'AI Action'
  },
  {
    $Type : 'UI.DataFieldForAction',
    Action: 'Travel.AnnotationActionInline',
    Label : 'Inline Action',
    Inline: true
  },
  {
    $Type : 'UI.DataFieldWithAction',
    Value : TotalPrice,
    Action: 'Travel.AnnotationActionDataField',
    Label : 'Action on Total Price'
  },
  {
    $Type  : 'UI.DataFieldForActionGroup',
    Label  : 'Menu Action',
    Actions: [
      {
        $Type : 'UI.DataFieldForAction',
        Action: 'Travel.AnnotationMenuAction1',
        Label : 'Menu Action 1'
      },
      {
        $Type : 'UI.DataFieldForAction',
        Action: 'Travel.AnnotationMenuAction2',
        Label : 'Menu Action 2'
      }
    ]
  }
];

/*
annotate TravelService.Travel with @(UI: {FieldGroup #TravelData: {Data: [
  {Value: TravelID},
  {Value: to_Agency_AgencyID},
  {Value: BeginDate},
  {Value: EndDate},
  {
    $Type : 'UI.DataFieldForAction',
    Action: 'TravelService.Travel.AnnotationAction',
    Label : 'Action'
  }
]}});
*/
```

**LANGUAGE**: ABAP

**CODE**:
```abap
@UI.lineItem: [{
    position    : 40
    type        : #WITH_ACTION,
    dataAction  : 'annotationActionDataField',
    label       : 'Action on Total Price'
}]
TotalPrice;
```

**LANGUAGE**: XML

**CODE**:
```xml
<Record Type="UI.DataFieldWithAction">
	<PropertyValue Property="Value" Path="TotalPrice" />
	<PropertyValue Property="Action" String="Travel.AnnotationActionDataField" />
	<PropertyValue Property="Label" String="Action on Total Price" />
</Record>
```

**STEP**: Menu Actions

**DESCRIPTION**: You can group actions by defining a UI.DataFieldForActionGroup containing UI.DataFieldForAction definitions.

**LANGUAGE**: CDS

**CODE**:
```cds
using {TravelService.Travel} from '../../../../service/service';
using from '../../../../service/annotations';

extend TravelService.Travel with actions {
  action AnnotationAction();
  action AnnotationActionInline();
  action AnnotationActionDataField();
  @UI.IsAIOperation: true
  action AnnotationAIAction();
  action AnnotationMenuAction1();
  action AnnotationMenuAction2();
  action AnnotationActionWithParameters(TotalPrice : Decimal(10, 2));
};

annotate TravelService.Travel with @UI.LineItem: [
  {Value: TravelID},
  {
    $Type : 'UI.DataFieldForAnnotation',
    Target: '@UI.ConnectedFields#TripDates'
  },
  {
    $Type : 'UI.DataFieldForAction',
    Action: 'Travel.AnnotationAction',
    Label : 'Action'
  },
  {
    $Type : 'UI.DataFieldForAction',
    Action: 'Travel.AnnotationAIAction',
    Label : 'AI Action'
  },
  {
    $Type : 'UI.DataFieldForAction',
    Action: 'Travel.AnnotationActionInline',
    Label : 'Inline Action',
    Inline: true
  },
  {
    $Type : 'UI.DataFieldWithAction',
    Value : TotalPrice,
    Action: 'Travel.AnnotationActionDataField',
    Label : 'Action on Total Price'
  },
  {
    $Type  : 'UI.DataFieldForActionGroup',
    Label  : 'Menu Action',
    Actions: [
      {
        $Type : 'UI.DataFieldForAction',
        Action: 'Travel.AnnotationMenuAction1',
        Label : 'Menu Action 1'
      },
      {
        $Type : 'UI.DataFieldForAction',
        Action: 'Travel.AnnotationMenuAction2',
        Label : 'Menu Action 2'
      }
    ]
  }
];

/*
annotate TravelService.Travel with @(UI: {FieldGroup #TravelData: {Data: [
  {Value: TravelID},
  {Value: to_Agency_AgencyID},
  {Value: BeginDate},
  {Value: EndDate},
  {
    $Type : 'UI.DataFieldForAction',
    Action: 'TravelService.Travel.AnnotationAction',
    Label : 'Action'
  }
]}});
*/
```

**LANGUAGE**: ABAP

**CODE**:
```abap
@UI.lineItem: [{
        type            : #FOR_ACTION_GROUP,
        actionGroupId   : 'menuActionGroup',
        label           : 'Menu Action'
    },
    {
        type            : #FOR_ACTION,
        actionGroupId   : 'menuActionGroup',
        dataAction      : 'annotationMenuAction1',
        label           : 'Menu Action 1'
    },
    {
        type            : #FOR_ACTION,
        actionGroupId   : 'menuActionGroup',
        dataAction      : 'annotationMenuAction2',
        label           : 'Menu Action 2'
    },
}]
TravelID;
```

**LANGUAGE**: XML

**CODE**:
```xml
<Record Type="UI.DataFieldForActionGroup">
	<PropertyValue Property="Label" String="Menu Action" />
	<PropertyValue Property="Actions">
		<Collection>
			<Record Type="UI.DataFieldForAction">
				<PropertyValue Property="Action" String="Travel.AnnotationMenuAction1" />
				<PropertyValue Property="Label" String="Menu Action 1" />
			</Record>
			<Record Type="UI.DataFieldForAction">
				<PropertyValue Property="Action" String="Travel.AnnotationMenuAction2" />
				<PropertyValue Property="Label" String="Menu Action 2" />
			</Record>
		</Collection>
	</PropertyValue>
</Record>
```

**STEP**: Extension Actions

**DESCRIPTION**: You can define extension actions that invoke OData actions in your controller extension. If the action has parameters, a dialog is displayed to the user to enter the parameters. You can also pass the parameters and skip the dialog by using the skipParameterDialog property.

**LANGUAGE**: TypeScript

**CODE**:
```typescript
import PageController from "sap/fe/core/PageController";
import type Button from "sap/m/Button";
import MessageToast from "sap/m/MessageToast";
import type Table from "sap/m/Table";
import type UI5Event from "sap/ui/base/Event";
import type ODataV4Context from "sap/ui/model/odata/v4/Context";

/**
 * @namespace sap.fe.core.fpmExplorer.actions
 */
export default class Actions extends PageController {
	/**
	 * Invokes a custom action.
	 * @param context The binding context for the action
	 */
	public onExtensionActionPress(event: UI5Event<{}, Button>): void {
		const extensionAPI = this.getExtensionAPI();
		const selectedContexts = ((extensionAPI.byId("TableWithActions") as Table)?.getSelectedContexts() ?? []) as ODataV4Context[];
		const context = selectedContexts[0];
		this.editFlow
			.invokeAction("TravelService.Travel.AnnotationActionWithParameters", {
				contexts: selectedContexts.length > 0 ? selectedContexts : undefined,
				parameterValues: [{ name: "TotalPrice", value: context.getObject("TotalPrice") }],
				// Show the dialog in edit mode only
				skipParameterDialog: !extensionAPI.getModel("ui")?.getProperty("/isEditable")
			})
			.then(() => {
				MessageToast.show("Extension action successfully called.");
			});
	}
}
```

**ADDITIONAL RELATED CODE BLOCKS**:

**FILE**: service.cds

**LANGUAGE**: CDS

**CODE**:
```cds
using {
  sap,
  managed,
  Currency,
  Country
} from '@sap/cds/common';

using from '../service/annotations';

@cds.autoexpose  @readonly
aspect MasterData {}

service TravelService {
  @odata.draft.enabled
  @Common.SemanticKey: [TravelID]

  entity Travel : managed {
    key TravelUUID    : UUID;

        @Common.Label          : 'ID'
        @Common.Text           : Description
        TravelID      : Integer default 0                         @readonly;

        @Common.Label          : 'Begin Date'
        BeginDate     : Date;

        @Common.Label          : 'End Date'
        EndDate       : Date;

        @Common.Label          : 'Booking Fee'
        BookingFee    : Decimal(10, 2) default 0                  @Measures.ISOCurrency: CurrencyCode_code;

        @Common.Label          : 'Total Price'
        TotalPrice    : Decimal(10, 2)                            @readonly  @Measures.ISOCurrency: CurrencyCode_code;

        @Common.Label          : 'Currency'
        CurrencyCode  : Association to CurrencyCode default 'EUR' @mandatory;

        @Common.Label          : 'Description'
        Description   : String(1024);

        @Common.Label          : 'Travel Details'
        @UI.MultiLineText
        TravelDetails : String(1024);

        @title                 : 'Status'
        @Common.Text           : TravelStatus.name
        @Common.TextArrangement: #TextOnly
        TravelStatus  : Association to TravelStatus default 'O'   @readonly;

        @title                 : 'Agency'
        @Common.Text           : to_Agency.Name
        @Common.TextArrangement: #TextFirst
        to_Agency     : Association to TravelAgency               @mandatory;

        to_Booking    : Composition of many Booking
                          on to_Booking.to_Travel = $self;
  };

  entity Booking : managed {
    key BookingUUID   : UUID;

        @Common.Label: 'Booking ID'
        BookingID     : Integer                                  @Core.Computed;

        @Common.Label: 'Booking Date'
        BookingDate   : Date;

        @Common.Label: 'Connection'
        ConnectionID  : String(4)                                @mandatory;

        @Common.Label: 'Flight Date'
        FlightDate    : Date                                     @mandatory;

        @Common.Label: 'Flight Price'
        FlightPrice   : Decimal(10, 2)                           @Measures.ISOCurrency: CurrencyCode_code;

        @Common.Label: 'Currency'
        CurrencyCode  : Currency default 'EUR'                   @mandatory;

        @Common.Label: 'Status'
        BookingStatus : Association to BookingStatus default 'N' @mandatory;
        to_Travel     : Association to Travel                    @mandatory;

        PaymentMethod : String(1) default 'B'                    @Common              : {
          Label                   : 'Payment Method',
          Text                    : _Payment.Method,
          TextArrangement         : #TextOnly,
          ValueListWithFixedValues: true,
          ValueList               : {
            Label         : 'Payment Method',
            CollectionPath: 'Payment',
            Parameters    : [{
              $Type            : 'Common.ValueListParameterInOut',
              LocalDataProperty: PaymentMethod,
              ValueListProperty: 'code'
            }]
          }
        };
        _Payment      : Association to one Payment
                          on _Payment.code = PaymentMethod;
  };

  entity Payment {
    key code   : String(1) @(Common: {
          Label          : 'Payment Code',
          Text           : Method,
          TextArrangement: #TextFirst
        });
        Method : String    @(
          Core.Immutable: true,
          Common.Label  : 'Payment Method'
        );
  }

  entity TravelStatus : sap.common.CodeList {
    key code        : String(1) @Common.Text: descr;
        name        : String(255);
        descr       : String(1000);
        criticality : Int16     @odata.Type : 'Edm.Byte' enum {
          Neutral  = 0;
          Negative = 1;
          Critical = 2;
          Positive = 3;
          NewItem  = 5
        };
  };

  entity CurrencyCode : sap.common.CodeList {
        @Common.Label: 'Currency Code'
    key code  : String(3);

        @Common.Label: 'Currency Description'
        descr : String(255);
  };

  entity BookingStatus : sap.common.CodeList {
    key code : BookingStatusCode
  };

  entity TravelAgency : MasterData {
        @Common.Label: 'Agency ID'
        @Common.Text : Name
    key AgencyID       : String(6);

        @Common.Label: 'Agency Name'
        Name           : String(80);
        Street         : String(60);

        @Common.Label: 'Postal Code'
        PostalCode     : String(10);

        @Common.Label: 'City'
        City           : String(40);

        @Common.Label: 'Country Code'
        CountryCode    : Country;

        @Common.Label: 'Phone Number'
        PhoneNumber    : String(30);

        @Common.Label: 'Email Address'
        EMailAddress   : String(256);

        @Common.Label: 'Web Address'
        WebAddress     : String(256);
        Rating         : Integer;
        Recommendation : Integer;
  };

  type TravelStatusCode  : String(1) enum {
    Open     = 'O';
    Accepted = 'A';
    Canceled = 'X';
  };

  type BookingStatusCode : String(1) enum {
    New      = 'N';
    Booked   = 'B';
    Canceled = 'X';
  };
}

```

**FILE**: manifest.json

**LANGUAGE**: JSON

**CODE**:
```json
{
	"_version": "1.12.0",
	"sap.app": {
		"id": "sap.fe.core.fpmExplorer",
		"type": "application",
		"i18n": {
			"bundleUrl": "i18n/i18n.properties",
			"supportedLocales": [""],
			"fallbackLocale": ""
		},
		"applicationVersion": {
			"version": "1.0.0"
		},
		"dataSources": {
			"mainService": {
				"uri": "/sap/fe/core/mock/actions/",
				"type": "OData",
				"settings": {
					"annotations": [],
					"odataVersion": "4.0"
				}
			}
		}
	},
	"sap.ui5": {
		"dependencies": {
			"minUI5Version": "1.111.1",
			"libs": {
				"sap.ui.core": {},
				"sap.fe.templates": {}
			}
		},
		"contentDensities": {
			"compact": true,
			"cozy": true
		},
		"models": {
			"": {
				"dataSource": "mainService",
				"settings": {
					"operationMode": "Server",
					"autoExpandSelect": true,
					"earlyRequests": true
				}
			}
		},
		"routing": {
			"routes": [
				{
					"pattern": "/Travel({key}):?query:",
					"name": "default",
					"target": "sample"
				}
			],
			"targets": {
				"sample": {
					"type": "Component",
					"id": "Default",
					"name": "sap.fe.core.fpm",
					"viewLevel": 1,
					"options": {
						"settings": {
							"viewName": "sap.fe.core.fpmExplorer.actions.Actions",
							"contextPath": "/Travel"
						}
					}
				}
			}
		}
	}
}

```

Actions

Actions
AI Actions
Toolbar Actions
Inline Actions
Menu Actions
DataFieldWithAction
DataFieldForAction
DataFieldForActionGroup
invokeAction
skip dialog
IsAIOperation
Button


**TITLE**: Draft Validation

**INTRODUCTION**: When a user edits an object page and presses 'Enter' in a field, this can trigger a back-end validation: Depending on the used entity and annotations, SAP Fiori elements may execute global side effects or a PreparationAction to fetch draft-related messages immediately.

**TAGS**: draft validation, side effects, PrepareAction, back-end messages, table, validation

**STEP**: Defining Global Side Effects

**DESCRIPTION**: Global side effects are those side effects that are defined without any source properties or source entities. Global side effects can be annotated under each entity separately.

**LANGUAGE**: CDS

**CODE**:
```cds
type sapmessage : {
  code            : String(10) not null;
  message         : String(100);
  numericSeverity : Integer;
  transition      : Boolean default true;
  target          : String(200) not null;
  longtextUrl     : String(200) not null;
};

service Service {
  @odata.draft.enabled
  @Capabilities.DeleteRestrictions.Deletable: false
  @Common.Messages                          : SAP_Message
  entity RootEntity {
    key ID            :      Integer @title: 'Identifier';
        TitleProperty :      String  @title: 'Title';
        SAP_Message   : many sapmessage;
        items         :      Composition of many ChildEntityWithSE
                               on items.Parent = $self;
        items2        :      Composition of many ChildEntityWithoutSE
                               on items2.Parent = $self;
  }

  @Common.Messages                     : SAP_Message
  @Common.SideEffects #globalValidation: {TargetProperties: ['SAP_Message']}
  entity ChildEntityWithSE {
    key ID          :      Integer @title: 'Item Identifier';
        item        :      String  @title: 'Press Enter in the Field';
        SAP_Message : many sapmessage;
        Parent      :      Association to RootEntity;
  } actions {
    action generateMessage();
  }

  entity ChildEntityWithoutSE {
    key ID     : Integer @title: 'Item Identifier';
        item   : String  @title: 'Press Enter in the Field';
        Parent : Association to RootEntity;
  };
}

annotate Service.ChildEntityWithSE with @UI.LineItem: [
  {
    $Type : 'UI.DataFieldForAction',
    Label : 'Generate Message',
    Action: 'Service.generateMessage'
  },
  {Value: ID},
  {Value: item}
];

annotate Service.ChildEntityWithoutSE with @UI.LineItem: [
  {Value: ID},
  {Value: item}
];
```

**LANGUAGE**: XML

**CODE**:
```xml
<Annotations Target="YourEntity">
	<Annotation Term="Common.Messages" PropertyPath="SAP_Message" />
	<Annotation Term="Common.SideEffects" Qualifier="globalValidation">
		<Record>
			<PropertyValue Property="TargetProperties">
				<Collection>
					<PropertyPath>SAP_Message</PropertyPath>
				</Collection>
			</PropertyValue>
		</Record>
	</Annotation>
</Annotations>
```

**STEP**: Fallback Without a Global Side Effect

**DESCRIPTION**: If Enter is pressed on a control bound to an entity without a global side effect, SAP Fiori elements checks the parent entity for side effects. If none are found, SAP Fiori elements triggers the draft prepare action and retrieves messages if these are annotated.

Draft Validation

draft validation
side effects
PrepareAction
back-end messages
table
validation


**TITLE**: Side Effects

**INTRODUCTION**: No introduction

**TAGS**: side effects, TriggerAction, Core.OperationAvailable, value help, invalidate cache, SideEffects

**STEP**: 1.) Side Effect with Single Source Property

**DESCRIPTION**: If you define one source property, the side effect request is sent immediately after the property was changed.

**STEP**: 2.) Side Effect with Trigger Action

**DESCRIPTION**: If you define an additional trigger action, it is always issued before the GET request for 'TargetProperties' and/or 'TargetEntities' defined with the side effect. The action is only called when the side effect source property is changed.

**STEP**: 3.) Side Effect with Multiple Source Properties

**DESCRIPTION**: By configuring a side effect with multiple source properties, a virtual field group is defined. The side effect is only requested when any of the source properties are changed and the focus leaves the virtual field group.

**STEP**: 4.) Side Effect on a Checkbox

**DESCRIPTION**: Properties of type 'Boolean' are displayed as a checkbox on the UI. By defining a side effect with the Boolean property as the source property, the side effect is triggered immediately when the checkbox is selected.

**STEP**: 5.) Side Effect on a Source Entity

**DESCRIPTION**: You can define one or several entity paths in the side effect annotation property 'SourceEntities'. An empty 'SourceEntities' path implies the annotated entity itself.

**STEP**: 6.) Side Effect on a Bound Action (with Operation Control)

**DESCRIPTION**: If an action applies changes to an entity, these changes are only reflected on the UI after adding a side effect annotation to that action.

**STEP**: 7.) Side Effect on an Unbound Action

**DESCRIPTION**: An unbound action can have side effects annotated on it. As the action is not bound to any context, the underlying side effects definition has to use absolute paths.

**STEP**: 8.) Side Effect for Refreshing Data of an Entity for Invalidating a Cached Value Help

**DESCRIPTION**: You can define one or several navigation property paths and/or absolute paths for the side effect property 'TargetEntities'. Value lists are cached during runtime for better performance. They can be refreshed by defining an absolute side effect with the value list collection as the target.

**STEP**: 9.) Side Effect with an Absolute Target Entity Path

**DESCRIPTION**: Some entities requiring a complete refresh on the UI might not be referred by an association. These entities can be addressed in the side effect annotation property 'TargetEntities' by defining an absolute path.

**ADDITIONAL RELATED CODE BLOCKS**:

**FILE**: service.cds

**LANGUAGE**: CDS

**CODE**:
```cds
using {
  cuid,
  managed,
  Currency
} from '@sap/cds/common';

namespace sap.fe.core;

type Amount      : Decimal(9, 2) @(Validation: {Minimum: 0});

type complexType : {
  number : Integer  @Core.Computed  @title: 'Current Number';
  prime  : Boolean  @Core.Computed  @title: 'Prime Number?'
};

@odata.draft.enabled
entity RootEntity {
  key ID                    : Integer  @Core.Computed                 @title               : 'Identifier';
      sourceProperty1       : String   @title: 'Source Property 1';
      sourceProperty2       : String   @title: 'Source Property 2';
      sourceProperty3a      : String   @title: 'Source Property 3a';
      sourceProperty3b      : String   @title: 'Source Property 3b';
      otherProperty3c       : String   @title: 'Other Property 3c';
      sourceProperty4       : Boolean  @title: 'Boolean Source Property';
      targetProperty1a      : String   @title: 'Target Property 1a'   @readonly;
      targetProperty1b      : String   @title: 'Target Property 1b';
      targetProperty2       : String   @title: 'Target Property 2'    @readonly;
      targetProperty3       : String   @title: 'Target Property 3'    @readonly;
      targetProperty4       : String   @title: 'Target Property 4';
      complexProperty       : complexType;
      totalAmount           : Amount   @title: 'Total Amount'         @Measures.ISOCurrency: currency_code             @readonly;
      OperationAvailable    : Boolean  @title: 'Operation Available';
      currency              : Currency @readonly;
      fieldControlProperty1 : Integer  @UI.Hidden;
      fieldControlProperty2 : Integer  @UI.Hidden;
      property1             : String   @title: 'Property 1';
      property2             : String   @title: 'Property 2';
      property3             : String   @title: 'Property 3';
      BusinessPartnerID     : String   @title: 'Business Partner ID'  @Common.Text         : businessPartner.FullName  @Common.TextArrangement: #TextFirst;
      items                 : Association to many ChildEntity
                                on items.Parent = $self;
      businessPartner       : Association to one BusinessPartnerAddress
                                on businessPartner.BusinessPartner = BusinessPartnerID;
}

entity ChildEntity {
  key ID       : Integer  @title: 'Item Identifier';
      item     : String   @title: 'Item';

      @(
        title               : 'Price',
        Measures.ISOCurrency: currency_code
      )
      price    : Amount;
      currency : Currency @readonly;
      Parent   : Association to RootEntity;
}

@readonly
entity BusinessPartnerAddress {
  key BusinessPartner : String  @title: 'Business Partner'  @Common.Text: FullName  @Common.TextArrangement: #TextFirst;
      FullName        : String  @title: 'Name';
      CityName        : String  @title: 'City';
      Country         : String  @title: 'Country';
      PostalCode      : String  @title: 'Postal Code';
      StreetName      : String  @title: 'Street Name';
      HouseNumber     : String  @title: 'House Number';
};

@Capabilities.SearchRestrictions.Searchable: false
entity AbsoluteEntity {
  key ID        : Integer  @Core.Computed  @title: 'Round';
      TimeStamp : DateTime @UI.Hidden;
      Duration  : String   @Core.Computed  @title: 'Duration';
}

@odata.singleton
entity EntitiesSingleton {
  BooleanProperty : Boolean @Core.Computed;
}

annotate RootEntity with
@(UI: {HeaderInfo: {
  TypeName      : 'Root Entity',
  TypeNamePlural: 'Root Entities',
}});

//Sample 1
annotate RootEntity with @(Common: {SideEffects #singleSourceProperty: {
  SourceProperties: [sourceProperty1],
  TargetProperties: [
    'targetProperty1a',
    'fieldControlProperty1'
  ]
}}) {
  targetProperty1b @Common.FieldControl: fieldControlProperty1;
};

//Sample 2
annotate RootEntity with @(Common: {SideEffects #triggerActionProperty: {
  SourceProperties: [sourceProperty2],
  TargetProperties: ['targetProperty2'],
  TriggerAction   : 'sap.fe.core.Service.sideEffectTriggerAction'
}});

annotate RootEntity with @(
  UI    : {
    FieldGroup #SourceProperties: {Data: [
      {Value: sourceProperty3a},
      {Value: sourceProperty3b},
      {Value: otherProperty3c}
    ]},
    FieldGroup #TargetProperty  : {Data: [{Value: targetProperty3}]},
    Facets                      : [
      {
        $Type : 'UI.ReferenceFacet',
        ID    : 'FormSource',
        Target: '@UI.FieldGroup#SourceProperties',
      },
      {
        $Type : 'UI.ReferenceFacet',
        ID    : 'FormTarget',
        Target: '@UI.FieldGroup#TargetProperty',
      }
    ],
    LineItem #sample7           : [
      {
        $Type             : 'UI.DataFieldForAction',
        Label             : 'Table Refresh',
        Action            : 'sap.fe.core.Service.EntityContainer/unBoundAction',
        InvocationGrouping: #ChangeSet
      },
      {
        $Type: 'UI.DataField',
        Value: property1,
      },
      {
        $Type: 'UI.DataField',
        Value: property2
      },
      {
        $Type: 'UI.DataField',
        Value: property3
      }
    ],
  },

  //Sample 3
  Common: {SideEffects #multiSourceProperties: {
    SourceProperties: [
      sourceProperty3a,
      sourceProperty3b
    ],
    TargetProperties: ['targetProperty3'],
    TriggerAction   : 'sap.fe.core.Service.sideEffectTriggerActionMultiSources'
  }}
);

//Sample 4
annotate RootEntity with @(Common: {SideEffects #booleanSourceProperties: {
  SourceProperties: [sourceProperty4],
  TargetProperties: ['fieldControlProperty2']
}}) {
  targetProperty4 @Common.FieldControl: fieldControlProperty2;
};

//Sample 5
annotate RootEntity with @(Common: {SideEffects #sourceEntity: {
  SourceEntities  : [items],
  TargetProperties: ['totalAmount']
}});

annotate ChildEntity with @(
  Capabilities.DeleteRestrictions.Deletable: true,
  UI                                       : {LineItem #sample5: [
    {
      $Type: 'UI.DataField',
      Value: item
    },
    {
      $Type                : 'UI.DataField',
      Value                : price,
      ![@HTML5.CssDefaults]: {width: '15em'}
    }
  ]}
);

annotate RootEntity with @(UI: {
  FieldGroup #sample6a      : {
    $Type: 'UI.FieldGroupType',
    Label: 'Complex Property Fields',
    Data : [
      {
        $Type : 'UI.DataFieldForAction',
        Label : 'Increase Number',
        Action: 'sap.fe.core.Service.increaseAndCheckPrime',
      },
      {
        $Type: 'UI.DataField',
        Value: OperationAvailable,
      }
    ],
  },
  Facets #OperationAvailable: [{
    $Type : 'UI.ReferenceFacet',
    Target: '@UI.FieldGroup#sample6a',
  }, ],
  FieldGroup #sample6b      : {
    $Type: 'UI.FieldGroupType',
    Label: 'Complex Property Fields',
    Data : [
      {
        $Type: 'UI.DataField',
        Value: complexProperty_number,
      },
      {
        $Type: 'UI.DataField',
        Value: complexProperty_prime,
      }
    ],
  },
  Facets #complexProperty   : [{
    $Type : 'UI.ReferenceFacet',
    Target: '@UI.FieldGroup#sample6b',
  }, ],
});

annotate RootEntity with @(
  UI.Facets #BusinessPartnerAddress  : [{
    $Type : 'UI.ReferenceFacet',
    Target: 'businessPartner/@UI.FieldGroup#BusinessPartnerAddress'
  }],
  Common.SideEffects #BusinessPartner: {
    SourceProperties: [BusinessPartnerID],
    TargetEntities  : [businessPartner]
  }
) {
  @Common.ValueListMapping: {
    Label         : 'Business Partner',
    CollectionPath: 'BusinessPartnerAddress',
    Parameters    : [
      {
        $Type            : 'Common.ValueListParameterInOut',
        LocalDataProperty: BusinessPartnerID,
        ValueListProperty: 'BusinessPartner',
      },
      {
        $Type            : 'Common.ValueListParameterDisplayOnly',
        ValueListProperty: 'FullName',
      },
    ],
  }
  @Common.ValueListWithFixedValues
  @Common.Text            : businessPartner.FullName
  @Common.TextArrangement : #TextFirst
  BusinessPartnerID
};

annotate BusinessPartnerAddress with @(UI: {FieldGroup #BusinessPartnerAddress: {
  $Type: 'UI.FieldGroupType',
  Data : [
    {
      $Type: 'UI.DataField',
      Value: CityName
    },
    {
      $Type: 'UI.DataField',
      Value: PostalCode
    },
    {
      $Type: 'UI.DataField',
      Value: StreetName
    },
    {
      $Type: 'UI.DataField',
      Value: HouseNumber
    },
    {
      $Type: 'UI.DataField',
      Value: Country
    }
  ],
}});

//sample 8 (additional action based side effects see further below)
annotate AbsoluteEntity with @(
  Capabilities.DeleteRestrictions.Deletable: false,
  UI.LineItem                              : [
    {
      $Type: 'UI.DataField',
      Value: ID,
    },
    {
      $Type: 'UI.DataField',
      Value: Duration
    }
  ]
);

//actions and corresponding side effects for different samples
service Service {
  //Sample 7
  @Common.SideEffects: {TargetEntities: ['/sap.fe.core.Service.EntityContainer/RootEntity']}
  action unBoundAction();

  entity RootEntity             as projection on core.RootEntity actions {

                                     action sideEffectTriggerAction();
                                     action sideEffectTriggerActionMultiSources();

                                     //Sample 6
                                     @(
                                       Common.SideEffects             : {TargetProperties: ['_it/*']},
                                       cds.odata.bindingparameter.name: '_it',
                                       Core.OperationAvailable        : _it.OperationAvailable
                                     )
                                     action increaseAndCheckPrime();

                                     //Sample 8
                                     @(
                                       Common.SideEffects #InvalidateCachedValueHelp: {
                                         TargetProperties: ['_it/BusinessPartnerID'],
                                         TargetEntities  : ['/sap.fe.core.Service.EntityContainer/BusinessPartnerAddress']
                                       },
                                       cds.odata.bindingparameter.name              : '_it'
                                     )
                                     action deleteBusinessPartner();

                                     //Sample 9
                                     @(
                                       Common.SideEffects             : {
                                         TargetProperties: ['/sap.fe.core.Service.EntityContainer/EntitiesSingleton/BooleanProperty'],
                                         TargetEntities  : ['/sap.fe.core.Service.EntityContainer/AbsoluteEntity']
                                       },
                                       cds.odata.bindingparameter.name: '_it'
                                     )
                                     action addRound();
                                     @(
                                       Common.SideEffects             : {
                                         TargetProperties: ['/sap.fe.core.Service.EntityContainer/EntitiesSingleton/BooleanProperty'],
                                         TargetEntities  : ['/sap.fe.core.Service.EntityContainer/AbsoluteEntity']
                                       },
                                       cds.odata.bindingparameter.name: '_it'
                                     )
                                     action stopRound();
                                     @(
                                       Common.SideEffects             : {
                                         TargetProperties: ['/sap.fe.core.Service.EntityContainer/EntitiesSingleton/BooleanProperty'],
                                         TargetEntities  : ['/sap.fe.core.Service.EntityContainer/AbsoluteEntity']
                                       },
                                       cds.odata.bindingparameter.name: '_it'
                                     )
                                     action clearRounds();
                                   };

  entity ChildEntity            as projection on core.ChildEntity;
  entity BusinessPartnerAddress as projection on core.BusinessPartnerAddress;
  entity AbsoluteEntity         as projection on core.AbsoluteEntity;
  entity EntitiesSingleton      as projection on core.EntitiesSingleton;

  entity SideEffectsProperties {
    key Property     : String @title: 'Property';
        PropertyType : String @title: 'Type';
        Description  : String @title: 'Description';
  };

  entity TargetPropertiesSample {
    key TargetProperties : String @title: 'Target Properties';
        Description      : String @title: 'Description';
  }
}

```

**FILE**: metadata.xml

**LANGUAGE**: XML

**CODE**:
```xml
<?xml version="1.0" encoding="utf-8" ?>
<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
	<edmx:Reference Uri="https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Capabilities.V1.xml">
		<edmx:Include Alias="Capabilities" Namespace="Org.OData.Capabilities.V1" />
	</edmx:Reference>
	<edmx:Reference Uri="https://sap.github.io/odata-vocabularies/vocabularies/Common.xml">
		<edmx:Include Alias="Common" Namespace="com.sap.vocabularies.Common.v1" />
	</edmx:Reference>
	<edmx:Reference Uri="https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.xml">
		<edmx:Include Alias="Core" Namespace="Org.OData.Core.V1" />
	</edmx:Reference>
	<edmx:Reference Uri="https://sap.github.io/odata-vocabularies/vocabularies/HTML5.xml">
		<edmx:Include Alias="HTML5" Namespace="com.sap.vocabularies.HTML5.v1" />
	</edmx:Reference>
	<edmx:Reference Uri="https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Measures.V1.xml">
		<edmx:Include Alias="Measures" Namespace="Org.OData.Measures.V1" />
	</edmx:Reference>
	<edmx:Reference Uri="https://sap.github.io/odata-vocabularies/vocabularies/UI.xml">
		<edmx:Include Alias="UI" Namespace="com.sap.vocabularies.UI.v1" />
	</edmx:Reference>
	<edmx:Reference Uri="https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Validation.V1.xml">
		<edmx:Include Alias="Validation" Namespace="Org.OData.Validation.V1" />
	</edmx:Reference>
	<edmx:DataServices>
		<Schema Namespace="sap.fe.core.Service" xmlns="http://docs.oasis-open.org/odata/ns/edm">
			<Annotations Target="sap.fe.core.Service.RootEntity">
				<Annotation Term="UI.LineItem" Qualifier="sample7">
					<Collection>
						<Record Type="UI.DataFieldForAction">
							<PropertyValue Property="Label" String="Table Refresh" />
							<PropertyValue Property="Action" String="sap.fe.core.Service.EntityContainer/unBoundAction" />
							<PropertyValue Property="InvocationGrouping" EnumMember="UI.OperationGroupingType/ChangeSet" />
						</Record>
						<Record Type="UI.DataFieldForAction">
							<PropertyValue Property="Label" String="Table Refresh" />
							<PropertyValue Property="Action" String="sap.fe.core.Service.EntityContainer/unBoundAction" />
						</Record>
						<Record Type="UI.DataField">
							<PropertyValue Property="Value" Path="property1" />
						</Record>
						<Record Type="UI.DataField">
							<PropertyValue Property="Value" Path="property2" />
						</Record>
						<Record Type="UI.DataField">
							<PropertyValue Property="Value" Path="property3" />
						</Record>
					</Collection>
				</Annotation>
			</Annotations>
			<EntityContainer Name="EntityContainer">
				<ActionImport Name="unBoundAction" Action="sap.fe.core.Service.unBoundAction" />
				<EntitySet Name="RootEntity" EntityType="sap.fe.core.Service.RootEntity">
					<NavigationPropertyBinding Path="currency" Target="Currencies" />
					<NavigationPropertyBinding Path="items" Target="ChildEntity" />
					<NavigationPropertyBinding Path="businessPartner" Target="BusinessPartnerAddress" />
					<NavigationPropertyBinding Path="SiblingEntity" Target="RootEntity" />
				</EntitySet>
				<EntitySet Name="ChildEntity" EntityType="sap.fe.core.Service.ChildEntity">
					<NavigationPropertyBinding Path="currency" Target="Currencies" />
					<NavigationPropertyBinding Path="Parent" Target="RootEntity" />
				</EntitySet>
				<EntitySet Name="BusinessPartnerAddress" EntityType="sap.fe.core.Service.BusinessPartnerAddress" />
				<EntitySet Name="AbsoluteEntity" EntityType="sap.fe.core.Service.AbsoluteEntity" />
				<Singleton Name="EntitiesSingleton" Type="sap.fe.core.Service.EntitiesSingleton" />
				<EntitySet Name="SideEffectsProperties" EntityType="sap.fe.core.Service.SideEffectsProperties" />
				<EntitySet Name="TargetPropertiesSample" EntityType="sap.fe.core.Service.TargetPropertiesSample" />
				<EntitySet Name="Currencies" EntityType="sap.fe.core.Service.Currencies">
					<NavigationPropertyBinding Path="texts" Target="Currencies_texts" />
					<NavigationPropertyBinding Path="localized" Target="Currencies_texts" />
				</EntitySet>
				<EntitySet Name="Currencies_texts" EntityType="sap.fe.core.Service.Currencies_texts" />
			</EntityContainer>
			<EntityType Name="RootEntity">
				<Key>
					<PropertyRef Name="ID" />
					<PropertyRef Name="IsActiveEntity" />
				</Key>
				<Property Name="ID" Type="Edm.Int32" Nullable="false" />
				<Property Name="sourceProperty1" Type="Edm.String" />
				<Property Name="sourceProperty2" Type="Edm.String" />
				<Property Name="sourceProperty3a" Type="Edm.String" />
				<Property Name="sourceProperty3b" Type="Edm.String" />
				<Property Name="otherProperty3c" Type="Edm.String" />
				<Property Name="sourceProperty4" Type="Edm.Boolean" />
				<Property Name="targetProperty1a" Type="Edm.String" />
				<Property Name="targetProperty1b" Type="Edm.String" />
				<Property Name="targetProperty2" Type="Edm.String" />
				<Property Name="targetProperty3" Type="Edm.String" />
				<Property Name="targetProperty4" Type="Edm.String" />
				<Property Name="complexProperty_number" Type="Edm.Int32" />
				<Property Name="complexProperty_prime" Type="Edm.Boolean" />
				<Property Name="totalAmount" Type="Edm.Decimal" Scale="2" Precision="9" />
				<Property Name="OperationAvailable" Type="Edm.Boolean" />
				<NavigationProperty Name="currency" Type="sap.fe.core.Service.Currencies">
					<ReferentialConstraint Property="currency_code" ReferencedProperty="code" />
				</NavigationProperty>
				<Property Name="currency_code" Type="Edm.String" MaxLength="3" />
				<Property Name="fieldControlProperty1" Type="Edm.Int32" />
				<Property Name="fieldControlProperty2" Type="Edm.Int32" />
				<Property Name="BusinessPartnerID" Type="Edm.String" />
				<NavigationProperty Name="items" Type="Collection(sap.fe.core.Service.ChildEntity)" Partner="Parent" />
				<NavigationProperty Name="businessPartner" Type="sap.fe.core.Service.BusinessPartnerAddress">
					<ReferentialConstraint Property="BusinessPartnerID" ReferencedProperty="BusinessPartner" />
				</NavigationProperty>
				<Property Name="IsActiveEntity" Type="Edm.Boolean" Nullable="false" DefaultValue="true" />
				<Property Name="HasActiveEntity" Type="Edm.Boolean" Nullable="false" DefaultValue="false" />
				<Property Name="HasDraftEntity" Type="Edm.Boolean" Nullable="false" DefaultValue="false" />
				<NavigationProperty
					Name="DraftAdministrativeData"
					Type="sap.fe.core.Service.DraftAdministrativeData"
					ContainsTarget="true"
				/>
				<NavigationProperty Name="SiblingEntity" Type="sap.fe.core.Service.RootEntity" />
			</EntityType>
			<EntityType Name="ChildEntity">
				<Key>
					<PropertyRef Name="ID" />
				</Key>
				<Property Name="ID" Type="Edm.Int32" Nullable="false" />
				<Property Name="item" Type="Edm.String" />
				<Property Name="price" Type="Edm.Decimal" Scale="2" Precision="9" />
				<NavigationProperty Name="currency" Type="sap.fe.core.Service.Currencies">
					<ReferentialConstraint Property="currency_code" ReferencedProperty="code" />
				</NavigationProperty>
				<Property Name="currency_code" Type="Edm.String" MaxLength="3" />
				<NavigationProperty Name="Parent" Type="sap.fe.core.Service.RootEntity" Partner="items">
					<ReferentialConstraint Property="Parent_ID" ReferencedProperty="ID" />
				</NavigationProperty>
				<Property Name="Parent_ID" Type="Edm.Int32" />
			</EntityType>
			<EntityType Name="BusinessPartnerAddress">
				<Key>
					<PropertyRef Name="BusinessPartner" />
				</Key>
				<Property Name="BusinessPartner" Type="Edm.String" Nullable="false" />
				<Property Name="FullName" Type="Edm.String" />
				<Property Name="CityName" Type="Edm.String" />
				<Property Name="Country" Type="Edm.String" />
				<Property Name="PostalCode" Type="Edm.String" />
				<Property Name="StreetName" Type="Edm.String" />
				<Property Name="HouseNumber" Type="Edm.String" />
			</EntityType>
			<EntityType Name="AbsoluteEntity">
				<Key>
					<PropertyRef Name="ID" />
				</Key>
				<Property Name="ID" Type="Edm.Int32" Nullable="false" />
				<Property Name="TimeStamp" Type="Edm.DateTimeOffset" />
				<Property Name="Duration" Type="Edm.String" />
			</EntityType>
			<EntityType Name="EntitiesSingleton">
				<Property Name="BooleanProperty" Type="Edm.Boolean" />
			</EntityType>
			<EntityType Name="SideEffectsProperties">
				<Key>
					<PropertyRef Name="Property" />
				</Key>
				<Property Name="Property" Type="Edm.String" Nullable="false" />
				<Property Name="PropertyType" Type="Edm.String" />
				<Property Name="Description" Type="Edm.String" />
			</EntityType>
			<EntityType Name="TargetPropertiesSample">
				<Key>
					<PropertyRef Name="TargetProperties" />
				</Key>
				<Property Name="TargetProperties" Type="Edm.String" Nullable="false" />
				<Property Name="Description" Type="Edm.String" />
			</EntityType>
			<EntityType Name="Currencies">
				<Key>
					<PropertyRef Name="code" />
				</Key>
				<Property Name="name" Type="Edm.String" MaxLength="255" />
				<Property Name="descr" Type="Edm.String" MaxLength="1000" />
				<Property Name="code" Type="Edm.String" MaxLength="3" Nullable="false" />
				<Property Name="symbol" Type="Edm.String" MaxLength="5" />
				<Property Name="minorUnit" Type="Edm.Int16" />
				<NavigationProperty Name="texts" Type="Collection(sap.fe.core.Service.Currencies_texts)">
					<OnDelete Action="Cascade" />
				</NavigationProperty>
				<NavigationProperty Name="localized" Type="sap.fe.core.Service.Currencies_texts">
					<ReferentialConstraint Property="code" ReferencedProperty="code" />
				</NavigationProperty>
			</EntityType>
			<EntityType Name="DraftAdministrativeData">
				<Key>
					<PropertyRef Name="DraftUUID" />
				</Key>
				<Property Name="DraftUUID" Type="Edm.Guid" Nullable="false" />
				<Property Name="CreationDateTime" Type="Edm.DateTimeOffset" Precision="7" />
				<Property Name="CreatedByUser" Type="Edm.String" MaxLength="256" />
				<Property Name="DraftIsCreatedByMe" Type="Edm.Boolean" />
				<Property Name="LastChangeDateTime" Type="Edm.DateTimeOffset" Precision="7" />
				<Property Name="LastChangedByUser" Type="Edm.String" MaxLength="256" />
				<Property Name="InProcessByUser" Type="Edm.String" MaxLength="256" />
				<Property Name="DraftIsProcessedByMe" Type="Edm.Boolean" />
			</EntityType>
			<EntityType Name="Currencies_texts">
				<Key>
					<PropertyRef Name="locale" />
					<PropertyRef Name="code" />
				</Key>
				<Property Name="locale" Type="Edm.String" MaxLength="14" Nullable="false" />
				<Property Name="name" Type="Edm.String" MaxLength="255" />
				<Property Name="descr" Type="Edm.String" MaxLength="1000" />
				<Property Name="code" Type="Edm.String" MaxLength="3" Nullable="false" />
			</EntityType>
			<Action Name="increaseAndCheckPrime" IsBound="true">
				<Parameter Name="_it" Type="sap.fe.core.Service.RootEntity" />
			</Action>
			<Action Name="addRound" IsBound="true">
				<Parameter Name="_it" Type="sap.fe.core.Service.RootEntity" />
			</Action>
			<Action Name="stopRound" IsBound="true">
				<Parameter Name="_it" Type="sap.fe.core.Service.RootEntity" />
			</Action>
			<Action Name="clearRounds" IsBound="true">
				<Parameter Name="_it" Type="sap.fe.core.Service.RootEntity" />
			</Action>
			<Action Name="sideEffectTriggerAction" IsBound="true">
				<Parameter Name="in" Type="sap.fe.core.Service.RootEntity" />
			</Action>
			<Action Name="sideEffectTriggerActionMultiSources" IsBound="true">
				<Parameter Name="in" Type="sap.fe.core.Service.RootEntity" />
			</Action>
			<Action Name="deleteBusinessPartner" IsBound="true">
				<Parameter Name="_it" Type="sap.fe.core.Service.RootEntity" />
			</Action>
			<Action Name="draftPrepare" IsBound="true" EntitySetPath="in">
				<Parameter Name="in" Type="sap.fe.core.Service.RootEntity" />
				<Parameter Name="SideEffectsQualifier" Type="Edm.String" />
				<ReturnType Type="sap.fe.core.Service.RootEntity" />
			</Action>
			<Action Name="draftActivate" IsBound="true" EntitySetPath="in">
				<Parameter Name="in" Type="sap.fe.core.Service.RootEntity" />
				<ReturnType Type="sap.fe.core.Service.RootEntity" />
			</Action>
			<Action Name="draftEdit" IsBound="true" EntitySetPath="in">
				<Parameter Name="in" Type="sap.fe.core.Service.RootEntity" />
				<Parameter Name="PreserveChanges" Type="Edm.Boolean" />
				<ReturnType Type="sap.fe.core.Service.RootEntity" />
			</Action>
			<Action Name="unBoundAction" IsBound="false" />
			<Annotations Target="sap.fe.core.Service.UnboundAction()">
				<Annotation Term="Common.SideEffects">
					<Record Type="Common.SideEffectsType">
						<PropertyValue Property="TargetEntities">
							<Collection>
								<NavigationPropertyPath>"/sap.fe.core.Service.EntityContainer/RootEntity"</NavigationPropertyPath>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity">
				<Annotation Term="UI.HeaderInfo">
					<Record Type="UI.HeaderInfoType">
						<PropertyValue Property="TypeName" String="Root Entity" />
						<PropertyValue Property="TypeNamePlural" String="Root Entities" />
					</Record>
				</Annotation>
				<Annotation Term="UI.FieldGroup" Qualifier="SourceProperties">
					<Record Type="UI.FieldGroupType">
						<PropertyValue Property="Data">
							<Collection>
								<Record Type="UI.DataField">
									<PropertyValue Property="Value" Path="sourceProperty3a" />
								</Record>
								<Record Type="UI.DataField">
									<PropertyValue Property="Value" Path="sourceProperty3b" />
								</Record>
								<Record Type="UI.DataField">
									<PropertyValue Property="Value" Path="otherProperty3c" />
								</Record>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
				<Annotation Term="UI.FieldGroup" Qualifier="TargetProperty">
					<Record Type="UI.FieldGroupType">
						<PropertyValue Property="Data">
							<Collection>
								<Record Type="UI.DataField">
									<PropertyValue Property="Value" Path="targetProperty3" />
								</Record>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
				<Annotation Term="UI.Facets">
					<Collection>
						<Record Type="UI.ReferenceFacet">
							<PropertyValue Property="ID" String="FormSource" />
							<PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#SourceProperties" />
						</Record>
						<Record Type="UI.ReferenceFacet">
							<PropertyValue Property="ID" String="FormTarget" />
							<PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#TargetProperty" />
						</Record>
					</Collection>
				</Annotation>
				<Annotation Term="UI.FieldGroup" Qualifier="sample6a">
					<Record Type="UI.FieldGroupType">
						<PropertyValue Property="Label" String="Complex Property Fields" />
						<PropertyValue Property="Data">
							<Collection>
								<Record Type="UI.DataFieldForAction">
									<PropertyValue Property="Label" String="Increase Number" />
									<PropertyValue Property="Action" String="sap.fe.core.Service.increaseAndCheckPrime" />
								</Record>
								<Record Type="UI.DataField">
									<PropertyValue Property="Value" Path="OperationAvailable" />
								</Record>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
				<Annotation Term="UI.Facets" Qualifier="OperationAvailable">
					<Collection>
						<Record Type="UI.ReferenceFacet">
							<PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#sample6a" />
						</Record>
					</Collection>
				</Annotation>
				<Annotation Term="UI.FieldGroup" Qualifier="sample6b">
					<Record Type="UI.FieldGroupType">
						<PropertyValue Property="Label" String="Complex Property Fields" />
						<PropertyValue Property="Data">
							<Collection>
								<Record Type="UI.DataField">
									<PropertyValue Property="Value" Path="complexProperty_number" />
								</Record>
								<Record Type="UI.DataField">
									<PropertyValue Property="Value" Path="complexProperty_prime" />
								</Record>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
				<Annotation Term="UI.Facets" Qualifier="complexProperty">
					<Collection>
						<Record Type="UI.ReferenceFacet">
							<PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#sample6b" />
						</Record>
					</Collection>
				</Annotation>
				<Annotation Term="UI.Facets" Qualifier="BusinessPartnerAddress">
					<Collection>
						<Record Type="UI.ReferenceFacet">
							<PropertyValue Property="Target" AnnotationPath="businessPartner/@UI.FieldGroup#BusinessPartnerAddress" />
						</Record>
					</Collection>
				</Annotation>
				<Annotation Term="Common.SideEffects" Qualifier="singleSourceProperty">
					<Record Type="Common.SideEffectsType">
						<PropertyValue Property="SourceProperties">
							<Collection>
								<PropertyPath>sourceProperty1</PropertyPath>
							</Collection>
						</PropertyValue>
						<PropertyValue Property="TargetProperties">
							<Collection>
								<String>targetProperty1a</String>
								<String>fieldControlProperty1</String>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
				<Annotation Term="Common.SideEffects" Qualifier="triggerActionProperty">
					<Record Type="Common.SideEffectsType">
						<PropertyValue Property="SourceProperties">
							<Collection>
								<PropertyPath>sourceProperty2</PropertyPath>
							</Collection>
						</PropertyValue>
						<PropertyValue Property="TargetProperties">
							<Collection>
								<String>targetProperty2</String>
							</Collection>
						</PropertyValue>
						<PropertyValue Property="TriggerAction" String="sap.fe.core.Service.sideEffectTriggerAction" />
					</Record>
				</Annotation>
				<Annotation Term="Common.SideEffects" Qualifier="multiSourceProperties">
					<Record Type="Common.SideEffectsType">
						<PropertyValue Property="SourceProperties">
							<Collection>
								<PropertyPath>sourceProperty3a</PropertyPath>
								<PropertyPath>sourceProperty3b</PropertyPath>
							</Collection>
						</PropertyValue>
						<PropertyValue Property="TargetProperties">
							<Collection>
								<String>targetProperty3</String>
							</Collection>
						</PropertyValue>
						<PropertyValue Property="TriggerAction" String="sap.fe.core.Service.sideEffectTriggerActionMultiSources" />
					</Record>
				</Annotation>
				<Annotation Term="Common.SideEffects" Qualifier="booleanSourceProperties">
					<Record Type="Common.SideEffectsType">
						<PropertyValue Property="SourceProperties">
							<Collection>
								<PropertyPath>sourceProperty4</PropertyPath>
							</Collection>
						</PropertyValue>
						<PropertyValue Property="TargetProperties">
							<Collection>
								<String>fieldControlProperty2</String>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
				<Annotation Term="Common.SideEffects" Qualifier="sourceEntity">
					<Record Type="Common.SideEffectsType">
						<PropertyValue Property="SourceEntities">
							<Collection>
								<NavigationPropertyPath>items</NavigationPropertyPath>
							</Collection>
						</PropertyValue>
						<PropertyValue Property="TargetProperties">
							<Collection>
								<String>totalAmount</String>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
				<Annotation Term="Common.SideEffects" Qualifier="BusinessPartner">
					<Record Type="Common.SideEffectsType">
						<PropertyValue Property="SourceProperties">
							<Collection>
								<PropertyPath>BusinessPartnerID</PropertyPath>
							</Collection>
						</PropertyValue>
						<PropertyValue Property="TargetEntities">
							<Collection>
								<NavigationPropertyPath>businessPartner</NavigationPropertyPath>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
			</Annotations>
			<Annotations Target="sap.fe.core.Service.EntityContainer/RootEntity">
				<Annotation Term="Common.SideEffects" Qualifier="singleSourceProperty">
					<Record Type="Common.SideEffectsType">
						<PropertyValue Property="SourceProperties">
							<Collection>
								<PropertyPath>sourceProperty1</PropertyPath>
							</Collection>
						</PropertyValue>
						<PropertyValue Property="TargetProperties">
							<Collection>
								<String>targetProperty1a</String>
								<String>fieldControlProperty1</String>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
				<Annotation Term="Common.SideEffects" Qualifier="triggerActionProperty">
					<Record Type="Common.SideEffectsType">
						<PropertyValue Property="SourceProperties">
							<Collection>
								<PropertyPath>sourceProperty2</PropertyPath>
							</Collection>
						</PropertyValue>
						<PropertyValue Property="TargetProperties">
							<Collection>
								<String>targetProperty2</String>
							</Collection>
						</PropertyValue>
						<PropertyValue Property="TriggerAction" String="sap.fe.core.Service.sideEffectTriggerAction" />
					</Record>
				</Annotation>
				<Annotation Term="Common.SideEffects" Qualifier="multiSourceProperties">
					<Record Type="Common.SideEffectsType">
						<PropertyValue Property="SourceProperties">
							<Collection>
								<PropertyPath>sourceProperty3a</PropertyPath>
								<PropertyPath>sourceProperty3b</PropertyPath>
							</Collection>
						</PropertyValue>
						<PropertyValue Property="TargetProperties">
							<Collection>
								<String>targetProperty3</String>
							</Collection>
						</PropertyValue>
						<PropertyValue Property="TriggerAction" String="sap.fe.core.Service.sideEffectTriggerActionMultiSources" />
					</Record>
				</Annotation>
				<Annotation Term="Common.SideEffects" Qualifier="booleanSourceProperties">
					<Record Type="Common.SideEffectsType">
						<PropertyValue Property="SourceProperties">
							<Collection>
								<PropertyPath>sourceProperty4</PropertyPath>
							</Collection>
						</PropertyValue>
						<PropertyValue Property="TargetProperties">
							<Collection>
								<String>fieldControlProperty2</String>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
				<Annotation Term="Common.SideEffects" Qualifier="sourceEntity">
					<Record Type="Common.SideEffectsType">
						<PropertyValue Property="SourceEntities">
							<Collection>
								<NavigationPropertyPath>items</NavigationPropertyPath>
							</Collection>
						</PropertyValue>
						<PropertyValue Property="TargetProperties">
							<Collection>
								<String>totalAmount</String>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
				<Annotation Term="Common.SideEffects" Qualifier="BusinessPartner">
					<Record Type="Common.SideEffectsType">
						<PropertyValue Property="SourceProperties">
							<Collection>
								<PropertyPath>BusinessPartnerID</PropertyPath>
							</Collection>
						</PropertyValue>
						<PropertyValue Property="TargetEntities">
							<Collection>
								<NavigationPropertyPath>businessPartner</NavigationPropertyPath>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
				<Annotation Term="Common.DraftRoot">
					<Record Type="Common.DraftRootType">
						<PropertyValue Property="ActivationAction" String="sap.fe.core.Service.draftActivate" />
						<PropertyValue Property="EditAction" String="sap.fe.core.Service.draftEdit" />
						<PropertyValue Property="PreparationAction" String="sap.fe.core.Service.draftPrepare" />
					</Record>
				</Annotation>
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/ID">
				<Annotation Term="Core.Computed" Bool="true" />
				<Annotation Term="Common.Label" String="Identifier" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/sourceProperty1">
				<Annotation Term="Common.Label" String="Source Property 1" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/sourceProperty2">
				<Annotation Term="Common.Label" String="Source Property 2" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/sourceProperty3a">
				<Annotation Term="Common.Label" String="Source Property 3a" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/sourceProperty3b">
				<Annotation Term="Common.Label" String="Source Property 3b" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/otherProperty3c">
				<Annotation Term="Common.Label" String="Other Property 3c" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/sourceProperty4">
				<Annotation Term="Common.Label" String="Boolean Source Property" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/targetProperty1a">
				<Annotation Term="Common.Label" String="Target Property 1a" />
				<Annotation Term="Core.Computed" Bool="true" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/targetProperty1b">
				<Annotation Term="Common.FieldControl" Path="fieldControlProperty1" />
				<Annotation Term="Common.Label" String="Target Property 1b" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/targetProperty2">
				<Annotation Term="Common.Label" String="Target Property 2" />
				<Annotation Term="Core.Computed" Bool="true" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/targetProperty3">
				<Annotation Term="Common.Label" String="Target Property 3" />
				<Annotation Term="Core.Computed" Bool="true" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/targetProperty4">
				<Annotation Term="Common.FieldControl" Path="fieldControlProperty2" />
				<Annotation Term="Common.Label" String="Target Property 4" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/complexProperty_number">
				<Annotation Term="Core.Computed" Bool="true" />
				<Annotation Term="Common.Label" String="Current Number" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/complexProperty_prime">
				<Annotation Term="Core.Computed" Bool="true" />
				<Annotation Term="Common.Label" String="Prime Number?" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/totalAmount">
				<Annotation Term="Measures.ISOCurrency" Path="currency_code" />
				<Annotation Term="Validation.Minimum" Int="0" />
				<Annotation Term="Common.Label" String="Total Amount" />
				<Annotation Term="Core.Computed" Bool="true" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/OperationAvailable">
				<Annotation Term="Common.Label" String="Operation Available" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/currency">
				<Annotation Term="Common.Label" String="{i18n>Currency}" />
				<Annotation Term="Core.Description" String="{i18n>CurrencyCode.Description}" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/currency_code">
				<Annotation Term="Common.Label" String="{i18n>Currency}" />
				<Annotation Term="Common.ValueList">
					<Record Type="Common.ValueListType">
						<PropertyValue Property="Label" String="{i18n>Currency}" />
						<PropertyValue Property="CollectionPath" String="Currencies" />
						<PropertyValue Property="Parameters">
							<Collection>
								<Record Type="Common.ValueListParameterInOut">
									<PropertyValue Property="LocalDataProperty" PropertyPath="currency_code" />
									<PropertyValue Property="ValueListProperty" String="code" />
								</Record>
								<Record Type="Common.ValueListParameterDisplayOnly">
									<PropertyValue Property="ValueListProperty" String="name" />
								</Record>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
				<Annotation Term="Core.Description" String="{i18n>CurrencyCode.Description}" />
				<Annotation Term="Core.Computed" Bool="true" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/fieldControlProperty1">
				<Annotation Term="UI.Hidden" Bool="true" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/fieldControlProperty2">
				<Annotation Term="UI.Hidden" Bool="true" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/BusinessPartnerID">
				<Annotation Term="Common.Text" Path="businessPartner/FullName">
					<Annotation Term="UI.TextArrangement" EnumMember="UI.TextArrangementType/TextFirst" />
				</Annotation>
				<Annotation Term="Common.ValueListMapping">
					<Record Type="Common.ValueListMappingType">
						<PropertyValue Property="Label" String="Business Partner" />
						<PropertyValue Property="CollectionPath" String="BusinessPartnerAddress" />
						<PropertyValue Property="Parameters">
							<Collection>
								<Record Type="Common.ValueListParameterInOut">
									<PropertyValue Property="LocalDataProperty" PropertyPath="BusinessPartnerID" />
									<PropertyValue Property="ValueListProperty" String="BusinessPartner" />
								</Record>
								<Record Type="Common.ValueListParameterDisplayOnly">
									<PropertyValue Property="ValueListProperty" String="FullName" />
								</Record>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
				<Annotation Term="Common.ValueListWithFixedValues" Bool="true" />
				<Annotation Term="Common.Label" String="Business Partner ID" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/IsActiveEntity">
				<Annotation Term="UI.Hidden" Bool="true" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/HasActiveEntity">
				<Annotation Term="UI.Hidden" Bool="true" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/HasDraftEntity">
				<Annotation Term="UI.Hidden" Bool="true" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.RootEntity/DraftAdministrativeData">
				<Annotation Term="UI.Hidden" Bool="true" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.increaseAndCheckPrime(sap.fe.core.Service.RootEntity)">
				<Annotation Term="Common.SideEffects">
					<Record Type="Common.SideEffectsType">
						<PropertyValue Property="TargetProperties">
							<Collection>
								<String>_it/*</String>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
				<Annotation Term="Core.OperationAvailable" Path="_it/OperationAvailable" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.addRound(sap.fe.core.Service.RootEntity)">
				<Annotation Term="Common.SideEffects">
					<Record Type="Common.SideEffectsType">
						<PropertyValue Property="TargetProperties">
							<Collection>
								<String>/sap.fe.core.Service.EntityContainer/EntitiesSingleton/BooleanProperty</String>
							</Collection>
						</PropertyValue>
						<PropertyValue Property="TargetEntities">
							<Collection>
								<NavigationPropertyPath>/sap.fe.core.Service.EntityContainer/AbsoluteEntity</NavigationPropertyPath>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
			</Annotations>
			<Annotations Target="sap.fe.core.Service.stopRound(sap.fe.core.Service.RootEntity)">
				<Annotation Term="Common.SideEffects">
					<Record Type="Common.SideEffectsType">
						<PropertyValue Property="TargetProperties">
							<Collection>
								<String>/sap.fe.core.Service.EntityContainer/EntitiesSingleton/BooleanProperty</String>
							</Collection>
						</PropertyValue>
						<PropertyValue Property="TargetEntities">
							<Collection>
								<NavigationPropertyPath>/sap.fe.core.Service.EntityContainer/AbsoluteEntity</NavigationPropertyPath>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
			</Annotations>
			<Annotations Target="sap.fe.core.Service.clearRounds(sap.fe.core.Service.RootEntity)">
				<Annotation Term="Common.SideEffects">
					<Record Type="Common.SideEffectsType">
						<PropertyValue Property="TargetProperties">
							<Collection>
								<String>/sap.fe.core.Service.EntityContainer/EntitiesSingleton/BooleanProperty</String>
							</Collection>
						</PropertyValue>
						<PropertyValue Property="TargetEntities">
							<Collection>
								<NavigationPropertyPath>/sap.fe.core.Service.EntityContainer/AbsoluteEntity</NavigationPropertyPath>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
			</Annotations>
			<Annotations Target="sap.fe.core.Service.deleteBusinessPartner(sap.fe.core.Service.RootEntity)">
				<Annotation Term="Common.SideEffects" Qualifier="InvalidateCachedValueHelp">
					<Record Type="Common.SideEffectsType">
						<PropertyValue Property="TargetProperties">
							<Collection>
								<String>_it/BusinessPartnerID</String>
							</Collection>
						</PropertyValue>
						<PropertyValue Property="TargetEntities">
							<Collection>
								<NavigationPropertyPath>/sap.fe.core.Service.EntityContainer/BusinessPartnerAddress</NavigationPropertyPath>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
			</Annotations>
			<Annotations Target="sap.fe.core.Service.ChildEntity">
				<Annotation Term="UI.LineItem" Qualifier="sample5">
					<Collection>
						<Record Type="UI.DataField">
							<PropertyValue Property="Value" Path="item" />
						</Record>
						<Record Type="UI.DataField">
							<PropertyValue Property="Value" Path="price" />
							<Annotation Term="HTML5.CssDefaults">
								<Record Type="HTML5.CssDefaultsType">
									<PropertyValue Property="width" String="15em" />
								</Record>
							</Annotation>
						</Record>
					</Collection>
				</Annotation>
			</Annotations>
			<Annotations Target="sap.fe.core.Service.EntityContainer/ChildEntity">
				<Annotation Term="Capabilities.DeleteRestrictions">
					<Record Type="Capabilities.DeleteRestrictionsType">
						<PropertyValue Property="Deletable" Bool="true" />
					</Record>
				</Annotation>
			</Annotations>
			<Annotations Target="sap.fe.core.Service.ChildEntity/ID">
				<Annotation Term="Common.Label" String="Item Identifier" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.ChildEntity/item">
				<Annotation Term="Common.Label" String="Item" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.ChildEntity/price">
				<Annotation Term="Measures.ISOCurrency" Path="currency_code" />
				<Annotation Term="Validation.Minimum" Int="0" />
				<Annotation Term="Common.Label" String="Price" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.ChildEntity/currency">
				<Annotation Term="Common.Label" String="{i18n>Currency}" />
				<Annotation Term="Core.Description" String="{i18n>CurrencyCode.Description}" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.ChildEntity/currency_code">
				<Annotation Term="Common.Label" String="{i18n>Currency}" />
				<Annotation Term="Common.ValueList">
					<Record Type="Common.ValueListType">
						<PropertyValue Property="Label" String="{i18n>Currency}" />
						<PropertyValue Property="CollectionPath" String="Currencies" />
						<PropertyValue Property="Parameters">
							<Collection>
								<Record Type="Common.ValueListParameterInOut">
									<PropertyValue Property="LocalDataProperty" PropertyPath="currency_code" />
									<PropertyValue Property="ValueListProperty" String="code" />
								</Record>
								<Record Type="Common.ValueListParameterDisplayOnly">
									<PropertyValue Property="ValueListProperty" String="name" />
								</Record>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
				<Annotation Term="Core.Description" String="{i18n>CurrencyCode.Description}" />
				<Annotation Term="Core.Computed" Bool="true" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.BusinessPartnerAddress">
				<Annotation Term="UI.FieldGroup" Qualifier="BusinessPartnerAddress">
					<Record Type="UI.FieldGroupType">
						<PropertyValue Property="Data">
							<Collection>
								<Record Type="UI.DataField">
									<PropertyValue Property="Value" Path="CityName" />
								</Record>
								<Record Type="UI.DataField">
									<PropertyValue Property="Value" Path="PostalCode" />
								</Record>
								<Record Type="UI.DataField">
									<PropertyValue Property="Value" Path="StreetName" />
								</Record>
								<Record Type="UI.DataField">
									<PropertyValue Property="Value" Path="HouseNumber" />
								</Record>
								<Record Type="UI.DataField">
									<PropertyValue Property="Value" Path="Country" />
								</Record>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
			</Annotations>
			<Annotations Target="sap.fe.core.Service.EntityContainer/BusinessPartnerAddress">
				<Annotation Term="Capabilities.DeleteRestrictions">
					<Record Type="Capabilities.DeleteRestrictionsType">
						<PropertyValue Property="Deletable" Bool="false" />
					</Record>
				</Annotation>
				<Annotation Term="Capabilities.InsertRestrictions">
					<Record Type="Capabilities.InsertRestrictionsType">
						<PropertyValue Property="Insertable" Bool="false" />
					</Record>
				</Annotation>
				<Annotation Term="Capabilities.UpdateRestrictions">
					<Record Type="Capabilities.UpdateRestrictionsType">
						<PropertyValue Property="Updatable" Bool="false" />
					</Record>
				</Annotation>
			</Annotations>
			<Annotations Target="sap.fe.core.Service.BusinessPartnerAddress/BusinessPartner">
				<Annotation Term="Common.Label" String="Business Partner" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.BusinessPartnerAddress/FullName">
				<Annotation Term="Common.Label" String="Name" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.BusinessPartnerAddress/CityName">
				<Annotation Term="Common.Label" String="City" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.BusinessPartnerAddress/Country">
				<Annotation Term="Common.Label" String="Country" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.BusinessPartnerAddress/PostalCode">
				<Annotation Term="Common.Label" String="Postal Code" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.BusinessPartnerAddress/StreetName">
				<Annotation Term="Common.Label" String="Street Name" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.BusinessPartnerAddress/HouseNumber">
				<Annotation Term="Common.Label" String="House Number" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.AbsoluteEntity">
				<Annotation Term="UI.LineItem">
					<Collection>
						<Record Type="UI.DataField">
							<PropertyValue Property="Value" Path="ID" />
						</Record>
						<Record Type="UI.DataField">
							<PropertyValue Property="Value" Path="Duration" />
						</Record>
					</Collection>
				</Annotation>
			</Annotations>
			<Annotations Target="sap.fe.core.Service.EntityContainer/AbsoluteEntity">
				<Annotation Term="Capabilities.SearchRestrictions">
					<Record Type="Capabilities.SearchRestrictionsType">
						<PropertyValue Property="Searchable" Bool="false" />
					</Record>
				</Annotation>
				<Annotation Term="Capabilities.DeleteRestrictions">
					<Record Type="Capabilities.DeleteRestrictionsType">
						<PropertyValue Property="Deletable" Bool="false" />
					</Record>
				</Annotation>
			</Annotations>
			<Annotations Target="sap.fe.core.Service.AbsoluteEntity/ID">
				<Annotation Term="Core.Computed" Bool="true" />
				<Annotation Term="Common.Label" String="Round" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.AbsoluteEntity/TimeStamp">
				<Annotation Term="UI.Hidden" Bool="true" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.AbsoluteEntity/Duration">
				<Annotation Term="Core.Computed" Bool="true" />
				<Annotation Term="Common.Label" String="Duration" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.EntitiesSingleton/BooleanProperty">
				<Annotation Term="Core.Computed" Bool="true" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.SideEffectsProperties/Property">
				<Annotation Term="Common.Label" String="Property" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.SideEffectsProperties/PropertyType">
				<Annotation Term="Common.Label" String="Type" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.SideEffectsProperties/Description">
				<Annotation Term="Common.Label" String="Description" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.TargetPropertiesSample/TargetProperties">
				<Annotation Term="Common.Label" String="Target Properties" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.TargetPropertiesSample/Description">
				<Annotation Term="Common.Label" String="Description" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.Currencies">
				<Annotation Term="UI.Identification">
					<Collection>
						<Record Type="UI.DataField">
							<PropertyValue Property="Value" Path="name" />
						</Record>
					</Collection>
				</Annotation>
			</Annotations>
			<Annotations Target="sap.fe.core.Service.Currencies/name">
				<Annotation Term="Common.Label" String="{i18n>Name}" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.Currencies/descr">
				<Annotation Term="Common.Label" String="{i18n>Description}" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.Currencies/code">
				<Annotation Term="Common.Text" Path="name" />
				<Annotation Term="Common.Label" String="{i18n>CurrencyCode}" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.Currencies/symbol">
				<Annotation Term="Common.Label" String="{i18n>CurrencySymbol}" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.Currencies/minorUnit">
				<Annotation Term="Common.Label" String="{i18n>CurrencyMinorUnit}" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.DraftAdministrativeData">
				<Annotation Term="Common.Label" String="{i18n>Draft_DraftAdministrativeData}" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.DraftAdministrativeData/DraftUUID">
				<Annotation Term="UI.Hidden" Bool="true" />
				<Annotation Term="Common.Label" String="{i18n>Draft_DraftUUID}" />
				<Annotation Term="Core.ComputedDefaultValue" Bool="true" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.DraftAdministrativeData/CreationDateTime">
				<Annotation Term="Common.Label" String="{i18n>Draft_CreationDateTime}" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.DraftAdministrativeData/CreatedByUser">
				<Annotation Term="Common.Label" String="{i18n>Draft_CreatedByUser}" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.DraftAdministrativeData/DraftIsCreatedByMe">
				<Annotation Term="UI.Hidden" Bool="true" />
				<Annotation Term="Common.Label" String="{i18n>Draft_DraftIsCreatedByMe}" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.DraftAdministrativeData/LastChangeDateTime">
				<Annotation Term="Common.Label" String="{i18n>Draft_LastChangeDateTime}" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.DraftAdministrativeData/LastChangedByUser">
				<Annotation Term="Common.Label" String="{i18n>Draft_LastChangedByUser}" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.DraftAdministrativeData/InProcessByUser">
				<Annotation Term="Common.Label" String="{i18n>Draft_InProcessByUser}" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.DraftAdministrativeData/DraftIsProcessedByMe">
				<Annotation Term="UI.Hidden" Bool="true" />
				<Annotation Term="Common.Label" String="{i18n>Draft_DraftIsProcessedByMe}" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.Currencies_texts/locale">
				<Annotation Term="Common.Label" String="{i18n>LanguageCode}" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.Currencies_texts/name">
				<Annotation Term="Common.Label" String="{i18n>Name}" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.Currencies_texts/descr">
				<Annotation Term="Common.Label" String="{i18n>Description}" />
			</Annotations>
			<Annotations Target="sap.fe.core.Service.Currencies_texts/code">
				<Annotation Term="Common.Text" Path="name" />
				<Annotation Term="Common.Label" String="{i18n>CurrencyCode}" />
			</Annotations>
		</Schema>
	</edmx:DataServices>
</edmx:Edmx>

```

Side Effects

side effects
TriggerAction
Core.OperationAvailable
value help
invalidate cache
SideEffects


**TITLE**: Localization

**INTRODUCTION**: If necessary, you can replace standard UI texts for apps that you have created with SAP Fiori elements.

**TAGS**: adapt i18n, internationalization, override texts, i18n properties, localization

**STEP**: Adapting the Manifest to Override the Texts

**DESCRIPTION**: Make the changes in the manifest.json file of your app by adding 'enhanceI18n' to the settings of the corresponding section, as shown in the following code sample:

**LANGUAGE**: JSON

**CODE**:
```json
{
	"_version": "1.12.0",
	"sap.app": {
		"id": "sap.fe.core.fpmExplorer.adaptI18n",
		"type": "application",
		"i18n": {
			"bundleUrl": "i18n/i18n.properties",
			"supportedLocales": [""],
			"fallbackLocale": ""
		},
		"applicationVersion": {
			"version": "1.0.0"
		},
		"dataSources": {
			"mainService": {
				"uri": "/sap/fe/core/mock/service/",
				"type": "OData",
				"settings": {
					"annotations": [],
					"odataVersion": "4.0"
				}
			}
		}
	},
	"sap.ui5": {
		"dependencies": {
			"minUI5Version": "1.111.1",
			"libs": {
				"sap.ui.core": {},
				"sap.fe.templates": {}
			}
		},
		"contentDensities": {
			"compact": true,
			"cozy": true
		},
		"models": {
			"i18n": {
				"type": "sap.ui.model.resource.ResourceModel",
				"settings": {
					"bundleUrl": "i18n/i18n.properties"
				}
			},
			"@i18n": {
				"type": "sap.ui.model.resource.ResourceModel",
				"settings": {
					"bundleUrl": "i18n/i18n.properties"
				}
			},
			"": {
				"dataSource": "mainService",
				"settings": {
					"operationMode": "Server",
					"autoExpandSelect": true,
					"earlyRequests": true
				}
			}
		},

		"routing": {
			"routes": [
				{
					"pattern": ":?query:",
					"name": "detailPage",
					"target": "detailPage"
				}
			],
			"targets": {
				"detailPage": {
					"type": "Component",
					"id": "Default",
					"name": "sap.fe.core.fpm",
					"options": {
						"settings": {
							"viewName": "sap.fe.core.fpmExplorer.adaptI18n.AdaptI18n",
							"contextPath": "/Travel",
							"enhanceI18n": "i18n/i18n.properties"
						}
					}
				}
			}
		}
	}
}
```

Localization

adapt i18n
internationalization
override texts
i18n properties
localization


**TITLE**: Custom Action

**INTRODUCTION**: The Chart building block enables you to define custom actions as toolbar buttons and menu items. This example shows a standalone action, a selection-dependent action, and an action group.

**TAGS**: chart, extensions, customization, actions

**STEP**: Custom Actions

**DESCRIPTION**: Add custom actions using macrosChart:Action elements within the macros:actions aggregation. These actions can be positioned relative to annotation-based actions.

**LANGUAGE**: XML

**CODE**:
```xml
<core:FragmentDefinition xmlns:core="sap.ui.core" xmlns="sap.m" xmlns:macros="sap.fe.macros" xmlns:macrosChart="sap.fe.macros.chart">
	<VBox fitContainer="true" alignItems="Stretch" alignContent="Stretch" justifyContent="Start" renderType="Div">
		<macros:Chart id="chartActions" metaPath="/RootEntity/@com.sap.vocabularies.UI.v1.Chart" selectionMode="Multiple">
			<macros:actions>
				<macrosChart:Action
					key="customAction"
					text="Custom Action"
					press=".onPressAction"
					placement="Before"
					anchor="DataFieldForAction::Service.EntityContainer::ToolbarAction"
				/>
				<macrosChart:Action
					key="customActionSelection"
					text="Custom Action with Selection"
					press=".onPressActionSelection"
					enabled="true"
					placement="Before"
					requiresSelection="true"
					anchor="DataFieldForAction::Service.EntityContainer::ToolbarAction"
				/>
				<macrosChart:ActionGroup key="customActionGroup" text="Grouped Actions" placement="After" anchor="customAction">
					<macrosChart:Action text="Menu Action 1" press=".onPressMenuAction" />
					<macrosChart:Action text="Menu Action 2" press=".onPressMenuAction" enabled="false" />
				</macrosChart:ActionGroup>
			</macros:actions>
		</macros:Chart>
		<Text text="NOTE: Sorting doesn't work here, since we're using a mock service" />
	</VBox>
</core:FragmentDefinition>
```

**STEP**: Selection-Dependent Actions

**DESCRIPTION**: Create actions that are only enabled when chart items are selected by setting requiresSelection='true'.

**LANGUAGE**: XML

**CODE**:
```xml
<core:FragmentDefinition xmlns:core="sap.ui.core" xmlns="sap.m" xmlns:macros="sap.fe.macros" xmlns:macrosChart="sap.fe.macros.chart">
	<VBox fitContainer="true" alignItems="Stretch" alignContent="Stretch" justifyContent="Start" renderType="Div">
		<macros:Chart id="chartActions" metaPath="/RootEntity/@com.sap.vocabularies.UI.v1.Chart" selectionMode="Multiple">
			<macros:actions>
				<macrosChart:Action
					key="customAction"
					text="Custom Action"
					press=".onPressAction"
					placement="Before"
					anchor="DataFieldForAction::Service.EntityContainer::ToolbarAction"
				/>
				<macrosChart:Action
					key="customActionSelection"
					text="Custom Action with Selection"
					press=".onPressActionSelection"
					enabled="true"
					placement="Before"
					requiresSelection="true"
					anchor="DataFieldForAction::Service.EntityContainer::ToolbarAction"
				/>
				<macrosChart:ActionGroup key="customActionGroup" text="Grouped Actions" placement="After" anchor="customAction">
					<macrosChart:Action text="Menu Action 1" press=".onPressMenuAction" />
					<macrosChart:Action text="Menu Action 2" press=".onPressMenuAction" enabled="false" />
				</macrosChart:ActionGroup>
			</macros:actions>
		</macros:Chart>
		<Text text="NOTE: Sorting doesn't work here, since we're using a mock service" />
	</VBox>
</core:FragmentDefinition>
```

**STEP**: Action Groups

**DESCRIPTION**: Group related actions together using macrosChart:ActionGroup to create dropdown menus in the chart toolbar.

**LANGUAGE**: XML

**CODE**:
```xml
<core:FragmentDefinition xmlns:core="sap.ui.core" xmlns="sap.m" xmlns:macros="sap.fe.macros" xmlns:macrosChart="sap.fe.macros.chart">
	<VBox fitContainer="true" alignItems="Stretch" alignContent="Stretch" justifyContent="Start" renderType="Div">
		<macros:Chart id="chartActions" metaPath="/RootEntity/@com.sap.vocabularies.UI.v1.Chart" selectionMode="Multiple">
			<macros:actions>
				<macrosChart:Action
					key="customAction"
					text="Custom Action"
					press=".onPressAction"
					placement="Before"
					anchor="DataFieldForAction::Service.EntityContainer::ToolbarAction"
				/>
				<macrosChart:Action
					key="customActionSelection"
					text="Custom Action with Selection"
					press=".onPressActionSelection"
					enabled="true"
					placement="Before"
					requiresSelection="true"
					anchor="DataFieldForAction::Service.EntityContainer::ToolbarAction"
				/>
				<macrosChart:ActionGroup key="customActionGroup" text="Grouped Actions" placement="After" anchor="customAction">
					<macrosChart:Action text="Menu Action 1" press=".onPressMenuAction" />
					<macrosChart:Action text="Menu Action 2" press=".onPressMenuAction" enabled="false" />
				</macrosChart:ActionGroup>
			</macros:actions>
		</macros:Chart>
		<Text text="NOTE: Sorting doesn't work here, since we're using a mock service" />
	</VBox>
</core:FragmentDefinition>
```

**STEP**: Action Event Handlers

**DESCRIPTION**: Implement event handlers in the controller to respond to action presses. Selection-dependent actions can access selected chart contexts.

**LANGUAGE**: TypeScript

**CODE**:
```typescript
import PageController from "sap/fe/core/PageController";
import type Chart from "sap/fe/macros/Chart";
import type Button from "sap/m/Button";
import MessageBox from "sap/m/MessageBox";
import type UI5Event from "sap/ui/base/Event";
import type ODataV4Context from "sap/ui/model/odata/v4/Context";

export default class ChartActionsController extends PageController {
	public onPressMenuAction(event: UI5Event<{}, Button>): void {
		MessageBox.show("You pressed the custom action: " + event.getSource().getProperty("text"));
	}

	public onPressAction(event: UI5Event<{}, Button>): void {
		MessageBox.show("You pressed the custom action: " + event.getSource().getProperty("text"));
	}

	public onPressActionSelection(event: UI5Event): void {
		const chart = this.byId("chartActions") as Chart;
		const selectedContexts = chart.getSelectedContexts();
		const data = selectedContexts.map((context: ODataV4Context) => context.getObject());
		MessageBox.show("You selected below contexts:", { details: data });
	}
}
```

Custom Action


**TITLE**: Chart with Variant Management

**INTRODUCTION**: The Chart building block enables you to use control-level variant management. This allows users to save and manage chart variants directly within the control.

**TAGS**: chart, variant management, views, save, personalization

**STEP**: Implementation

**DESCRIPTION**: The Chart building block is configured with control-level variant management and personalization options.

**LANGUAGE**: XML

**CODE**:
```xml
<core:FragmentDefinition xmlns:core="sap.ui.core" xmlns="sap.m" xmlns:macros="sap.fe.macros">
	<VBox fitContainer="true" alignItems="Stretch" alignContent="Stretch" justifyContent="Start" renderType="Div">
		<macros:Chart
			id="chartControlLevelVariant"
			metaPath="/RootEntity/@com.sap.vocabularies.UI.v1.Chart"
			personalization="Sort,Type,Item"
			variantManagement="Control"
		/>
		<Text text="NOTE: Sorting doesn't work here, since we're using a mock service" />
	</VBox>
</core:FragmentDefinition>
```

Chart with Variant Management

chart
variant management
views
save
personalization