【Fiori】Object Pageのためのアノテーション

##はじめに
この記事は、UIアノテーションの使い方について学ぶシリーズの3回目です。

過去の記事
[【Fiori】UIアノテーションの定義を知る](https://qiita.com/tami/items/341d8e2c12b6055e759a)
[【Fiori】List Reportのためのアノテーション](https://qiita.com/tami/items/87a4d18e9954cd4c34ee)

List Reportのためのアノテーションの記事で作成したCDSビューにアノテーションを足していきます。

##ゴール
以下のようなObject Pageの画面を作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/cfc1c177-8d96-e5c9-2049-c3000188e7ca.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/092e2823-2edb-386d-cf92-f3d7e9772a3f.png)


①ヘッダ
②セクション
③明細テーブル
④アクション
⑤明細の詳細画面に遷移せずに明細を追加する

##Metadata Extensionの定義
###①ヘッダ
ヘッダに画面のタイトル、伝票番号、顧客名が表示されるようにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/bfe2177f-ba97-2450-0834-569766e4d1b3.png)

####Metadata Extension
`@UI.headerInfo`にアノテーションを追加します。追加したのはtypeName, title, descriptionです。_Customer.CompanyNameのように、アソシエーション先の項目を指定することも可能です。

```abap
@Metadata.layer: #CORE
@UI: { 
    headerInfo: { 
        typeName: 'Sales Order', 
        typeNamePlural: 'Sales Orders',
        title: { value: 'SoId' },
        description: { value: '_Customer.CompanyName' }
    }
}
annotate view Z_C_SO_MOB67
    with     
{
```
画面項目との対応は以下のようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/2a5d08a7-ae45-c2a1-191f-5377714937d7.png)

####アノテーションモデル
アノテーションモデルには以下のように反映されます。

```xml
				<Annotation Term="UI.HeaderInfo">
					<Record><PropertyValue Property="TypeName" String="Sales Order"/><PropertyValue Property="TypeNamePlural" String="Sales Orders"/>
						<PropertyValue Property="Title">
							<Record Type="UI.DataField"><PropertyValue Property="Value" Path="SoId"/></Record>
						</PropertyValue>
						<PropertyValue Property="Description">
							<Record Type="UI.DataField"><PropertyValue Property="Value" Path="to_Customer/CompanyName"/></Record>
						</PropertyValue>
					</Record>
				</Annotation>
```

###②セクション
セクション、およびサブセクションを定義します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/0de6c4fe-1d63-8531-65e6-e7a54d42ddfd.png)


セクションの定義は2段階で行います。
**①レイアウトの定義**
画面のどの部分にどんなセクションやサブセクション（項目のかたまり）を置くのかを決める
**②表示項目の定義**
各セクションの中にどんな項目を入れるのかを決める
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/e83a42bd-f6af-35d6-f148-c3b352b055de.png)

####Metadata Extension
①レイアウトの定義
レイアウトの定義では`@UI.facet`というアノテーションを使います。このアノテーションは`annotate view...`のすぐあとに書きます。
最初にセクションにあたるFacetを`type: #COLLECTION`で定義し、次にサブセクションにあたるFacetを`type: #FIELDGROUP_REFERENCE`で定義します。サブセクションには`parentId`として親セクションのIDを指定します。

```abap
annotate view Z_C_SO_MOB67
    with     
{
    @UI: { 
        facet: [
            { 
                id: 'HeaderFacet',
                type: #COLLECTION,
                purpose: #STANDARD,
                label: 'Order Information'            
            },
            // Header Info Group
            { 
                id: 'BasicGroup',
                parentId: 'HeaderFacet',
                type: #FIELDGROUP_REFERENCE,
                purpose: #STANDARD,
                label: 'Basic Information',
                targetQualifier: 'BasicFieldGroup'            
            },
            // Status Group
            { 
                id: 'StatusGroup',
                type: #FIELDGROUP_REFERENCE,
                parentId: 'HeaderFacet',
                purpose: #STANDARD,
                label: 'Order Status',
                targetQualifier: 'StatusFieldGroup'               
            }                 
        ]
```

②表示項目の定義
サブセクションの中に入る項目のかたまりとして、fieldGroupを定義します。ポイントは、qualifierにそのグループが入る先のfacetを指定することです。

```abap
    @UI: { 
        selectionField: [{position: 10 }],
        lineItem: [
            { position: 10, importance: #HIGH },
            { type: #FOR_ACTION, position: 10, dataAction: 'BOPF:SET_TO_DELIVERED', label: 'Set to Delivered' }
        ]
    }
    SoId;

    @UI: { 
        selectionField: [{position: 20 }],
        lineItem: [{ position: 20, importance: #HIGH }],
        fieldGroup: [{ qualifier: 'BasicFieldGroup', position: 40, importance: #MEDIUM }]
    }
    CreatedAt;
        
    @UI: { 
        lineItem: [{ position: 30, importance: #HIGH }],
        fieldGroup: [{ qualifier: 'BasicFieldGroup', position: 50, importance: #MEDIUM }]
    }
    CreatedBy;
    
    @UI: { 
        selectionField: [{position: 30 }],
        lineItem: [
            { position: 40, importance: #HIGH, type: #WITH_INTENT_BASED_NAVIGATION, semanticObjectAction: 'manage' }
        ],
        fieldGroup: [{ qualifier: 'BasicFieldGroup', position: 10, importance: #HIGH }]
    }
    @Consumption.semanticObject: 'BusinessPartner'
    BpId;      
    
    @UI: { 
        selectionField: [{ position: 40 }],
        fieldGroup: [{ qualifier: 'BasicFieldGroup', position: 20, importance: #HIGH }]
    }
    Currency;
    
    @UI: { 
        lineItem: [{ position: 50, importance: #MEDIUM }],
        fieldGroup: [{ qualifier: 'BasicFieldGroup', position: 30, importance: #MEDIUM }]
    }    
    GrossAmount;

    @UI: { 
        selectionField: [{ position: 50 }],
        lineItem: [{ position: 60, importance: #MEDIUM }],
        fieldGroup: [{ qualifier: 'StatusFieldGroup', position: 10, importance: #MEDIUM }]
    }
    DeliveryStatus;
    
    @UI: { 
        lineItem: [{ position: 70, importance: #MEDIUM }],
        fieldGroup: [{ qualifier: 'StatusFieldGroup', position: 20, importance: #MEDIUM }]
    }
    OverallStatus;
```
各アノテーションのつながりは以下のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/8dde459d-f71d-6db7-e594-484e57ca81a3.png)

####アノテーションモデル
アノテーションモデルには以下のように反映されます。
UI.ReferenceFacetのTargetプロパティが`AnnotationPath="@UI.FieldGroup#<qualifier>"`となっており、UI.FieldGroupというアノテーションを見に行くことを表しています。

```xml
				<Annotation Term="UI.Facets">
					<Collection>
						<Record Type="UI.CollectionFacet"><PropertyValue Property="Label" String="Order Information"/><PropertyValue Property="ID" String="HeaderFacet"/>
							<PropertyValue Property="Facets">
								<Collection>
									<Record Type="UI.ReferenceFacet"><PropertyValue Property="Label" String="Basic Information"/><PropertyValue Property="ID" String="BasicGroup"/><PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#BasicFieldGroup"/></Record>
									<Record Type="UI.ReferenceFacet"><PropertyValue Property="Label" String="Order Status"/><PropertyValue Property="ID" String="StatusGroup"/><PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#StatusFieldGroup"/></Record>
								</Collection>
							</PropertyValue>
						</Record>
					</Collection>
				</Annotation>
				<Annotation Term="UI.FieldGroup" Qualifier="BasicFieldGroup">
					<Record>
						<PropertyValue Property="Data">
							<Collection>
								<Record Type="UI.DataField"><PropertyValue Property="Value" Path="BpId"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/></Record>
								<Record Type="UI.DataField"><PropertyValue Property="Value" Path="Currency"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/></Record>
								<Record Type="UI.DataField"><PropertyValue Property="Value" Path="GrossAmount"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/Medium"/></Record>
								<Record Type="UI.DataField"><PropertyValue Property="Value" Path="CreatedAt"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/Medium"/></Record>
								<Record Type="UI.DataField"><PropertyValue Property="Value" Path="CreatedBy"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/Medium"/></Record>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
				<Annotation Term="UI.FieldGroup" Qualifier="StatusFieldGroup">
					<Record>
						<PropertyValue Property="Data">
							<Collection>
								<Record Type="UI.DataField"><PropertyValue Property="Value" Path="DeliveryStatus"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/Medium"/></Record>
								<Record Type="UI.DataField"><PropertyValue Property="Value" Path="OverallStatus"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/Medium"/></Record>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
```

###③明細テーブル
明細用のセクションを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/4c3a3c5f-51c3-3a52-a04c-b705680ac89d.png)

####Metadata Extension
CDSビューでやることは2つあります。
①ヘッダに明細を参照するFacetを追加する
②明細側にlineItemアノテーションを設定する

①ヘッダに明細を参照するFacetを追加する
`type: #LINEITEM_REFERENCE`としたFacetを追加します。`targetElement: '_Item'`とすることで、明細のアソシエーションを参照することを表します。

```abap
    @UI: { 
        facet: [
            { 
                id: 'HeaderFacet',
                type: #COLLECTION,
                purpose: #STANDARD,
                label: 'Order Information'            
            },
            //...
            { 
                id: 'ItemFacet',
                type: #LINEITEM_REFERENCE,
                purpose: #STANDARD,
                label: 'Item',
                targetElement: '_Item'           
            }               
        ]        
    }
```
②明細側にlineItemアノテーションを設定する

```abap
@Metadata.layer: #CORE

@UI: { 
    headerInfo: { 
        typeNamePlural: 'Items'
    }
}
annotate view Z_C_SOI_MOB67
    with 
{   
    @UI: { 
        lineItem: [{ position: 10, importance: #HIGH }]
    }
    ItemPos;
    
    @UI: { 
        lineItem: [{ position: 20, importance: #HIGH }],
    }    
    Product;
    
    @UI: { 
        lineItem: [{ position: 30, importance: #HIGH }]
    }     
    Quantity;  
    
    @UI: { 
        lineItem: [{ position: 40, importance: #HIGH }]
    }     
    GrossAmount;
    
    @UI: { 
        lineItem: [{ position: 50, importance: #MEDIUM }]
    }     
    NetAmount;
    
    @UI: { 
        lineItem: [{ position: 60, importance: #MEDIUM }]
    }     
    TaxAmount;     
}
```

####アノテーションモデル
アノテーションモデルには以下のように反映されます。UI.FacetsのCollectionの中に以下の行が追加されています。

```xml
<Record Type="UI.ReferenceFacet"><PropertyValue Property="Label" String="Item"/><PropertyValue Property="ID" String="ItemFacet"/><PropertyValue Property="Target" AnnotationPath="to_Item/@UI.LineItem"/></Record>
```
Targetプロパティが`AnnotationPath="to_Item/@UI.LineItem"`となっており、アソシエーション先のエンティティのUI.LineItemというアノテーションを見に行くことを表しています。

UI.Facetsの全体は以下のようになりました。

```xml
				<Annotation Term="UI.Facets">
					<Collection>
						<Record Type="UI.CollectionFacet"><PropertyValue Property="Label" String="Order Information"/><PropertyValue Property="ID" String="HeaderFacet"/>
							<PropertyValue Property="Facets">
								<Collection>
									<Record Type="UI.ReferenceFacet"><PropertyValue Property="Label" String="Basic Information"/><PropertyValue Property="ID" String="BasicGroup"/><PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#BasicFieldGroup"/></Record>
									<Record Type="UI.ReferenceFacet"><PropertyValue Property="Label" String="Order Status"/><PropertyValue Property="ID" String="StatusGroup"/><PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#StatusFieldGroup"/></Record>
								</Collection>
							</PropertyValue>
						</Record>
						<Record Type="UI.ReferenceFacet"><PropertyValue Property="Label" String="Item"/><PropertyValue Property="ID" String="ItemFacet"/><PropertyValue Property="Target" AnnotationPath="to_Item/@UI.LineItem"/></Record>
					</Collection>
				</Annotation>
```

以下は明細のlineItemアノテーションです。

```xml
				<Annotation Term="UI.LineItem">
					<Collection>
						<Record Type="UI.DataField"><PropertyValue Property="Value" Path="ItemPos"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/></Record>
						<Record Type="UI.DataField"><PropertyValue Property="Value" Path="Product"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/></Record>
						<Record Type="UI.DataField"><PropertyValue Property="Value" Path="Quantity"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/></Record>
						<Record Type="UI.DataField"><PropertyValue Property="Value" Path="GrossAmount"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/></Record>
						<Record Type="UI.DataField"><PropertyValue Property="Value" Path="NetAmount"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/Medium"/></Record>
						<Record Type="UI.DataField"><PropertyValue Property="Value" Path="TaxAmount"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/Medium"/></Record>
					</Collection>
				</Annotation>
```

###④アクション
"Set to Delivered"ボタンをObject Pageにも追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/37d8df3a-2f7e-f501-9789-73a4d259b3d6.png)

####Metadata Extension
`@UI.identification`アノテーションを追加します。内容はlineItemに設定したものと同じです。

```abap
    @UI: { 
        selectionField: [{position: 10 }],
        lineItem: [
            { position: 10, importance: #HIGH },
            { type: #FOR_ACTION, position: 10, dataAction: 'BOPF:SET_TO_DELIVERED', label: 'Set to Delivered' }
        ],
        identification: [
            { type: #FOR_ACTION, position: 10, dataAction: 'BOPF:SET_TO_DELIVERED', label: 'Set to Delivered' }
        ]
    }
    SoId;
```

####アノテーションモデル
アノテーションモデルには以下のように反映されます。

```xml
				<Annotation Term="UI.Identification">
					<Collection>
						<Record Type="UI.DataFieldForAction"><PropertyValue Property="Label" String="Set to Delivered"/><PropertyValue Property="Action" String="Z_C_SO_MOB67_CDS.Z_C_SO_MOB67_CDS_Entities/Z_C_SO_MOB67Set_to_delivered"/><PropertyValue Property="InvocationGrouping" EnumMember="UI.OperationGroupingType/Isolated"/></Record>
					</Collection>
				</Annotation>
```
####注意点
"Set to Delivered"はDelivery Statusを変更するアクションですが、オブジェクトページで実行すると画面が自動的にはリフレッシュされませんでした。（ブラウザをリフレッシュすると反映される）
[Side Effect Annotations](https://sapui5.hana.ondemand.com/#/topic/61cf21d50ed34cbf888713496c618904)をつけてみたもののうまくいかず、とりあえず放置しました。
自動リフレッシュが必要な場合、アノテーションでなくExtensionでアクションを追加する必要があるかもしれません。

###⑤明細の詳細画面に遷移せずに明細を追加する
これはUIアノテーションではないのですが、需要がありそうなので調べてみました。
明細の登録ボタンを押すと、通常は明細の詳細画面（Object Page）に遷移しますが、画面遷移させずに新規行を追加する方法があります。
参考：[Enabling Inline Creation of Table Entries on Object Page](https://sapui5.hana.ondemand.com/#/topic/cfb04f0c58e7409992feb4c91aa9410b)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/24d03ece-0d26-35da-c3b8-7489825233f2.png)

manifest.jsonのObjectPageの"component"セクションに以下を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/92b22bf2-e48c-838c-ab93-b306d18c0e05.png)

| 項目       |設定内容 |
|:-----------------|:------------------|
| navigationProperty             |明細をターゲットにしているUI.ReferenceFacetのID（※）を指定する |
| entitySet             |明細のEntitySet |
| createMode            |`inline`にすると画面遷移せずに行が追加される |
| disableDefaultInlineCreateSort            |`ture`にすると新規行が一番下に追加される。このプロパティを指定しないと新規行が一番上に追加される |

※navigationPropertyはアノテーションモデルで確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/709353bb-e33c-542a-41fa-504e02f585fe.png)

##全体
今回の実装にかかわるアノテーションの全体は以下のようになります。（List Report部分も含む）

###Metadata Extension
ヘッダ

```abap
@Metadata.layer: #CORE
@UI: { 
    headerInfo: { 
        typeName: 'Sales Order', 
        typeNamePlural: 'Sales Orders',
        title: { value: 'SoId' },
        description: { value: '_Customer.CompanyName' }
    }
}
annotate view Z_C_SO_MOB67
    with     
{
    @UI: { 
        facet: [
            { 
                id: 'HeaderFacet',
                type: #COLLECTION,
                purpose: #STANDARD,
                label: 'Order Information'            
            },
            // Header Info Group
            { 
                id: 'BasicGroup',
                parentId: 'HeaderFacet',
                type: #FIELDGROUP_REFERENCE,
                purpose: #STANDARD,
                label: 'Basic Information',
                targetQualifier: 'BasicFieldGroup'            
            },
            // Status Group
            { 
                id: 'StatusGroup',
                type: #FIELDGROUP_REFERENCE,
                parentId: 'HeaderFacet',
                purpose: #STANDARD,
                label: 'Order Status',
                targetQualifier: 'StatusFieldGroup'               
            },
            //Items
            { 
                id: 'ItemFacet',
                type: #LINEITEM_REFERENCE,
                purpose: #STANDARD,
                label: 'Item',
                targetElement: '_Item'           
            }               
        ]
        
    }
    @UI: { 
        selectionField: [{position: 10 }],
        lineItem: [
            { position: 10, importance: #HIGH },
            { type: #FOR_ACTION, position: 10, dataAction: 'BOPF:SET_TO_DELIVERED', label: 'Set to Delivered' }
        ],
        identification: [
            { type: #FOR_ACTION, position: 10, dataAction: 'BOPF:SET_TO_DELIVERED', label: 'Set to Delivered' }
        ]
    }
    SoId;

    @UI: { 
        selectionField: [{position: 20 }],
        lineItem: [{ position: 20, importance: #HIGH }],
        fieldGroup: [{ qualifier: 'BasicFieldGroup', position: 40, importance: #MEDIUM }]
    }
    CreatedAt;
        
    @UI: { 
        lineItem: [{ position: 30, importance: #HIGH }],
        fieldGroup: [{ qualifier: 'BasicFieldGroup', position: 50, importance: #MEDIUM }]
    }
    CreatedBy;
    
    @UI: { 
        selectionField: [{position: 30 }],
        lineItem: [
            { position: 40, importance: #HIGH, type: #WITH_INTENT_BASED_NAVIGATION, semanticObjectAction: 'manage' }
        ],
        fieldGroup: [{ qualifier: 'BasicFieldGroup', position: 10, importance: #HIGH }]
    }
    @Consumption.semanticObject: 'BusinessPartner'
    BpId;      
    
    @UI: { 
        selectionField: [{ position: 40 }],
        fieldGroup: [{ qualifier: 'BasicFieldGroup', position: 20, importance: #HIGH }]
    }
    Currency;
    
    @UI: { 
        lineItem: [{ position: 50, importance: #MEDIUM }],
        fieldGroup: [{ qualifier: 'BasicFieldGroup', position: 30, importance: #MEDIUM }]
    }    
    GrossAmount;

    @UI: { 
        selectionField: [{ position: 50 }],
        lineItem: [{ position: 60, importance: #MEDIUM }],
        fieldGroup: [{ qualifier: 'StatusFieldGroup', position: 10, importance: #MEDIUM }]
    }
    DeliveryStatus;
    
    @UI: { 
        lineItem: [{ position: 70, importance: #MEDIUM }],
        fieldGroup: [{ qualifier: 'StatusFieldGroup', position: 20, importance: #MEDIUM }]
    }
    OverallStatus;
    
}
```

明細

```abap
@Metadata.layer: #CORE

annotate view Z_C_SOI_MOB67
    with 
{
    //Z_C_SOI_MOB67
    @UI.hidden: true
    ItemUUID;
    @UI.hidden: true
    ParentUUID;
    
    @UI: { 
        lineItem: [{ position: 10, importance: #HIGH }]
    }
    ItemPos;
    
    @UI: { 
        lineItem: [{ position: 20, importance: #HIGH }]
    }    
    Product;
    
    @UI: { 
        lineItem: [{ position: 30, importance: #HIGH }]
    }     
    Quantity;
    
    @UI: { 
        lineItem: [{ position: 40, importance: #HIGH }]
    }     
    GrossAmount;
    
    @UI: { 
        lineItem: [{ position: 50, importance: #MEDIUM }]
    }     
    NetAmount;
    
    @UI: { 
        lineItem: [{ position: 60, importance: #MEDIUM }]
    }     
    TaxAmount;
     
}
```

###アノテーションモデル
ヘッダ

```xml
			<Annotations Target="Z_C_SO_MOB67_CDS.Z_C_SO_MOB67Type">
				<Annotation Term="UI.Facets">
					<Collection>
						<Record Type="UI.CollectionFacet"><PropertyValue Property="Label" String="Order Information"/><PropertyValue Property="ID" String="HeaderFacet"/>
							<PropertyValue Property="Facets">
								<Collection>
									<Record Type="UI.ReferenceFacet"><PropertyValue Property="Label" String="Basic Information"/><PropertyValue Property="ID" String="BasicGroup"/><PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#BasicFieldGroup"/></Record>
									<Record Type="UI.ReferenceFacet"><PropertyValue Property="Label" String="Order Status"/><PropertyValue Property="ID" String="StatusGroup"/><PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#StatusFieldGroup"/></Record>
								</Collection>
							</PropertyValue>
						</Record>
						<Record Type="UI.ReferenceFacet"><PropertyValue Property="Label" String="Item"/><PropertyValue Property="ID" String="ItemFacet"/><PropertyValue Property="Target" AnnotationPath="to_Item/@UI.LineItem"/></Record>
					</Collection>
				</Annotation>
				<Annotation Term="UI.FieldGroup" Qualifier="BasicFieldGroup">
					<Record>
						<PropertyValue Property="Data">
							<Collection>
								<Record Type="UI.DataField"><PropertyValue Property="Value" Path="BpId"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/></Record>
								<Record Type="UI.DataField"><PropertyValue Property="Value" Path="Currency"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/></Record>
								<Record Type="UI.DataField"><PropertyValue Property="Value" Path="GrossAmount"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/Medium"/></Record>
								<Record Type="UI.DataField"><PropertyValue Property="Value" Path="CreatedAt"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/Medium"/></Record>
								<Record Type="UI.DataField"><PropertyValue Property="Value" Path="CreatedBy"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/Medium"/></Record>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
				<Annotation Term="UI.FieldGroup" Qualifier="StatusFieldGroup">
					<Record>
						<PropertyValue Property="Data">
							<Collection>
								<Record Type="UI.DataField"><PropertyValue Property="Value" Path="DeliveryStatus"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/Medium"/></Record>
								<Record Type="UI.DataField"><PropertyValue Property="Value" Path="OverallStatus"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/Medium"/></Record>
							</Collection>
						</PropertyValue>
					</Record>
				</Annotation>
				<Annotation Term="UI.HeaderInfo">
					<Record><PropertyValue Property="TypeName" String="Sales Order"/><PropertyValue Property="TypeNamePlural" String="Sales Orders"/>
						<PropertyValue Property="Title">
							<Record Type="UI.DataField"><PropertyValue Property="Value" Path="SoId"/></Record>
						</PropertyValue>
						<PropertyValue Property="Description">
							<Record Type="UI.DataField"><PropertyValue Property="Value" Path="to_Customer/CompanyName"/></Record>
						</PropertyValue>
					</Record>
				</Annotation>
				<Annotation Term="UI.Identification">
					<Collection>
						<Record Type="UI.DataFieldForAction"><PropertyValue Property="Label" String="Set to Delivered"/><PropertyValue Property="Action" String="Z_C_SO_MOB67_CDS.Z_C_SO_MOB67_CDS_Entities/Z_C_SO_MOB67Set_to_delivered"/><PropertyValue Property="InvocationGrouping" EnumMember="UI.OperationGroupingType/Isolated"/></Record>
					</Collection>
				</Annotation>
				<Annotation Term="UI.LineItem">
					<Collection>
						<Record Type="UI.DataField"><PropertyValue Property="Value" Path="SoId"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/></Record>
						<Record Type="UI.DataFieldForAction"><PropertyValue Property="Label" String="Set to Delivered"/><PropertyValue Property="Action" String="Z_C_SO_MOB67_CDS.Z_C_SO_MOB67_CDS_Entities/Z_C_SO_MOB67Set_to_delivered"/><PropertyValue Property="InvocationGrouping" EnumMember="UI.OperationGroupingType/Isolated"/></Record>
						<Record Type="UI.DataField"><PropertyValue Property="Value" Path="CreatedAt"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/></Record>
						<Record Type="UI.DataField"><PropertyValue Property="Value" Path="CreatedBy"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/></Record>
						<Record Type="UI.DataFieldWithIntentBasedNavigation"><PropertyValue Property="SemanticObject" String="BusinessPartner"/><PropertyValue Property="Action" String="manage"/><PropertyValue Property="Value" Path="BpId"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/></Record>
						<Record Type="UI.DataField"><PropertyValue Property="Value" Path="GrossAmount"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/Medium"/></Record>
						<Record Type="UI.DataField"><PropertyValue Property="Value" Path="DeliveryStatus"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/Medium"/></Record>
						<Record Type="UI.DataField"><PropertyValue Property="Value" Path="OverallStatus"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/Medium"/></Record>
					</Collection>
				</Annotation>
				<Annotation Term="UI.SelectionFields">
					<Collection>
						<PropertyPath>SoId</PropertyPath>
						<PropertyPath>CreatedAt</PropertyPath>
						<PropertyPath>BpId</PropertyPath>
						<PropertyPath>Currency</PropertyPath>
						<PropertyPath>DeliveryStatus</PropertyPath>
					</Collection>
				</Annotation>
			</Annotations>
```

明細

```xml
			<Annotations Target="Z_C_SO_MOB67_CDS.Z_C_SOI_MOB67Type">			
				<Annotation Term="UI.LineItem">
					<Collection>
						<Record Type="UI.DataField"><PropertyValue Property="Value" Path="ItemPos"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/></Record>
						<Record Type="UI.DataField"><PropertyValue Property="Value" Path="Product"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/></Record>
						<Record Type="UI.DataField"><PropertyValue Property="Value" Path="Quantity"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/></Record>
						<Record Type="UI.DataField"><PropertyValue Property="Value" Path="GrossAmount"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/High"/></Record>
						<Record Type="UI.DataField"><PropertyValue Property="Value" Path="NetAmount"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/Medium"/></Record>
						<Record Type="UI.DataField"><PropertyValue Property="Value" Path="TaxAmount"/><Annotation Term="UI.Importance" EnumMember="UI.ImportanceType/Medium"/></Record>
					</Collection>
				</Annotation>
			</Annotations>
```