1. はじめに
SAP標準Fioriアプリは、S/4HANAを利用した業務プロセスを支援する重要なツールとして活用されており、Fiori Elementsフレームワークの実装技術を用いたアプリが多く提供されています。しかし、企業固有の業務要件や特定のユーザーのニーズに完全に対応するためには、標準アプリをカスタマイズする必要が生じることがあります。
Fioriアプリのカスタマイズには、メタデータ拡張やUI適応などいくつかの手法が提供されています。しかし、拡張対象オブジェクトがメタデータ拡張に対応していない場合やUI適応による変更では対応できない業務要件が発生する場合があります。そのような場合に、より柔軟なUI拡張手法として利用可能な方法が、Adaptation Project(Developer Adaptation)です。Adaptation Projectを使用することで、標準のSAP Fiori elementsアプリケーションをモディフィケーションフリーで拡張することが可能になります。つまり、元のアプリケーションを変更することなく、新しいアプリケーションバリアントを作成し、独自の要件に合わせてカスタマイズが可能となります。
本ブログでは、SAP標準Fioriアプリ(F0842A: Manage Purchase Orders)に定義されたフィルタ項目(プラント)を必須化する要件を対象に、SAP Business Application Studioを使用してAdaptation Projectを作成し、Local Annotationを追加して標準アプリのカスタマイズを実現する具体的な手順について詳しく解説していきます。
2. 実装方法
1. SAP Business Application Studioへアクセスし、SAP FioriのDev spaceを開きます。
2. Open FolderからProjectsフォルダ(/home/user/projects/)へアクセスします。
3. File>New Project from Templateを開き、SAPUI5 Adaptation Projectを選択します。
4.System and Application Selectionで以下を入力後、Nextをクリックして設定を進めます。
System:拡張対象アプリのS/4HANAへのDestination
Application:拡張対象アプリ(本ブログでは、Manage Purchase Orders)
5. Project Attributesに以下の情報を入力します。
Project Name:任意のプロジェクト名称
Application Title:任意のアプリタイトル
Namespace:入力したプロジェクト名称をもとに自動生成されます(必要に応じて、変更可能です)。
Project Folder Path:Projectsフォルダへのパスが自動入力されます(必要に応じて、変更可能です)。
SAPUI5 Version:最新のSAPUI5バージョンが自動入力されます(ここでは、変更できません。S/4HANAへインストールされたSAPUI5バージョンへ変更する場合は、プロジェクト生成後にui5.yamlファイルの変更が必要になります。詳細は、SAP KBA:3095848 – How to change SAPUI5 version if problems occur for Adaptation Project in BAS をご確認ください)。
Add Deployment Configuration:Yes(デプロイ設定のため)
6. Deployment Configurationに以下の情報を入力後、Finishボタンをクリックしてプロジェクトを生成します。
Destination:System and Application Selectionで選択したDestinationが自動入力されます(必要に応じて変更可能です)。
Select How You Want to Enter the Package:デプロイ用パッケージの選択方法をEnter Manually / Choose from Existingのいずれかを選択します。
Package:デプロイ用パッケージを選択します(スクリーンショットは、例としてローカルパッケージを設定しています)。
7. 生成されたプロジェクトを右クリックして、Add Local Annotation Fileからアノテーションファイルを生成します(Application InformationのAdd Local Annotation Fileボタンからも可能です)。
8. Add Local Annotation Fileで以下の情報を入力します。
Target OData Service: mainService(自動入力されます。)
Annotation XML: Create local annotation file from template(新規作成する場合)/ Select annotation file from workspace(既存のアノテーションファイルを参照する場合)
9. プロジェクトフォルダのwebapp/changes/annotations配下にアノテーションファイルが新規作成されるため、開きます。
10. アノテーションファイルに以下のアノテーション実装を追加します(実装内容詳細は、次のセクションで解説します)。
<edmx:Edmx xmlns:edmx=”http://docs.oasis-open.org/odata/ns/edmx” Version=”4.0″>
<edmx:Reference Uri=”https://sap.github.io/odata-vocabularies/vocabularies/Common.xml”>
<edmx:Include Namespace=”com.sap.vocabularies.Common.v1″ Alias=”Common”/>
</edmx:Reference>
<edmx:Reference Uri=”https://sap.github.io/odata-vocabularies/vocabularies/UI.xml”>
<edmx:Include Namespace=”com.sap.vocabularies.UI.v1″ Alias=”UI”/>
</edmx:Reference>
<edmx:Reference Uri=”https://sap.github.io/odata-vocabularies/vocabularies/Communication.xml”>
<edmx:Include Namespace=”com.sap.vocabularies.Communication.v1″ Alias=”Communication”/>
</edmx:Reference>
<edmx:Reference Uri=”/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV/$metadata”>
<edmx:Include Namespace=”MM_PUR_PO_MAINT_V2_SRV”/>
</edmx:Reference>
<edmx:Reference Uri=”/sap/opu/odata/iwfnd/catalogservice;v=2/Vocabularies(TechnicalName=’%2FIWBEP%2FVOC_CAPABILITIES’,Version=’0001′,SAP__Origin=”)/$value”>
<edmx:Include Namespace=”Org.OData.Capabilities.V1″ Alias=”Capabilities”/>
</edmx:Reference>
<edmx:DataServices>
<Schema xmlns=”http://docs.oasis-open.org/odata/ns/edm” Namespace=”local_1760320506713″>
<Annotations Target=”MM_PUR_PO_MAINT_V2_SRV.MM_PUR_PO_MAINT_V2_SRV_Entities/C_PurchaseOrderTP”>
<Annotation Term=”Capabilities.FilterRestrictions”>
<Record>
<PropertyValue Property=”RequiresFilter” Bool=”true”/>
<PropertyValue Property=”RequiredProperties”>
<Collection>
<PropertyPath>Plant</PropertyPath>
</Collection>
</PropertyValue>
</Record>
</Annotation>
</Annotations>
</Schema>
</edmx:DataServices>
</edmx:Edmx>
11. manifest.appdescr_variantファイルにアプリが追加アノテーションを参照するための定義を追加します。
{
“fileName”: “manifest”,
“layer”: “CUSTOMER_BASE”,
“fileType”: “appdescr_variant”,
“reference”: “ui.ssuite.s2p.mm.pur.po.manage.st.s1”,
“id”: “customer.zapp.f0842a”,
“namespace”: “apps/ui.ssuite.s2p.mm.pur.po.manage.st.s1/appVariants/customer.zapp.f0842a/”,
“version”: “0.1.0”,
“content”: [
{
“changeType”: “appdescr_ui5_addNewModelEnhanceWith”,
“content”: {
“modelId”: “i18n”
},
“texts”: {
“i18n”: “i18n/i18n.properties”
}
},
{
“changeType”: “appdescr_ui5_addNewModelEnhanceWith”,
“content”: {
“modelId”: “@i18n”
},
“texts”: {
“i18n”: “i18n/i18n.properties”
}
},
{
“changeType”: “appdescr_ui5_addNewModelEnhanceWith”,
“content”: {
“modelId”: “i18n|sap.suite.ui.generic.template.ListReport|C_PurchaseOrderTP”
},
“texts”: {
“i18n”: “i18n/ListReport/C_PurchaseOrderTP/i18n.properties”
}
},
{
“changeType”: “appdescr_ui5_addNewModelEnhanceWith”,
“content”: {
“modelId”: “i18n|sap.suite.ui.generic.template.ObjectPage|C_PurchaseOrderTP”
},
“texts”: {
“i18n”: “i18n/ObjectPage/C_PurchaseOrderTP/i18n.properties”
}
},
{
“changeType”: “appdescr_ui5_addNewModelEnhanceWith”,
“content”: {
“modelId”: “i18n|sap.suite.ui.generic.template.ObjectPage|C_PurchaseOrderItemTP”
},
“texts”: {
“i18n”: “i18n/ObjectPage/C_PurchaseOrderItemTP/i18n.properties”
}
},
{
“changeType”: “appdescr_ui5_addNewModelEnhanceWith”,
“content”: {
“modelId”: “i18n|sap.suite.ui.generic.template.ObjectPage|C_PurchaseOrderLimitItemTP”
},
“texts”: {
“i18n”: “i18n/ObjectPage/C_PurchaseOrderLimitItemTP/i18n.properties”
}
},
{
“changeType”: “appdescr_ui5_setMinUI5Version”,
“content”: {
“minUI5Version”: “1.114.9”
}
},
{
“changeType”: “appdescr_app_setTitle”,
“content”: {},
“texts”: {
“i18n”: “i18n/i18n.properties”
}
},
{
“changeType”: “appdescr_app_addAnnotationsToOData”,
“content”: {
“dataSourceId”: “mainService”,
“annotations”: [ “customer.myAnno” ],
“annotationsInsertPosition”: “END”,
“dataSource”: {
“customer.myAnno”: {
“uri”: “changes/annotations/annotation_1760320506713.xml”,
“type”: “ODataAnnotation”
}
}
}
}
]
}
12. webappを右クリック>Preview Applicationからアプリをプレビュー実行します(Application InformationのPreview Applicationボタンからも可能です)。
13. プラント項目が必須入力項目となっていることを確認します。
14. webappを右クリック>Deploy Applicationからアプリをデプロイします(Application InformationのDeployボタンからも可能です)。
15. デプロイしたアプリ(アプリバリアント)は、Fiori技術カタログにSemantic object / semantic action / SAPUI5 Component / タイル等を定義し、ビジネスカタログおよびビジネスロールから参照することでエンドユーザからの利用が可能となります。
Semantic Object: 任意のセマンティックオブジェクト
Action: 任意のセマンティックアクション
SAPUI5 Component ID: Step.5でのプロジェクト生成時のNamespace
3. 実装内容解説
1. Local Annotationファイル(annotation_xxx.xml)
ローカルアノテーションファイルは、標準Fioriアプリで使用されているODataサービスにアノテーションによる拡張を実装したファイルです。ファイル内の記述は、ODataの構文に準じた記述になり、以下のような制約があります(一部抜粋)。
edmx:Edmxルート要素であり、<edmx:Edmx> ~ </edmx:Edmx>の間に、構文を記述します。<edmx:Edmx>の定義には Version の記述と <edmx:DataServices>エレメントが 1 つ含まれている必要があります。edmx:Referenceアノテーションファイル内で参照される外部 CSDL(Common Schema Definition Language) 文書を指定します。子エレメント edmx:Referenceには、 Uri(参照先のURI)の記述と最低1つのedmx:Include エレメントが含まれている必要があります。edmx:Include参照される CSDL ドキュメント配下のスキーマを指定します。Namespace(スキーマ名称)を指定する必要があります。また、Aliasを指定することもできます。edmx:DataservicesAnnotaionのプロパティ等を記述する要素で、1 つの Schemaエレメントが含まれている必要があります。Schemaエレメント内にアノテーションを記述します。Annotations拡張するODataサービスのEntitySet名を含むターゲット属性を指定します。最低1つのAnnotation エレメントが含まれている必要があります。
これらの構文に従って、プラントのフィルタ項目を入力必須化にする実装をしています。
拡張対象ターゲットの特定
本ブログの実装では、以下のTarget情報が必要となります。Target:MM_PUR_PO_MAINT_V2_SRV.MM_PUR_PO_MAINT_V2_SRV_Entities/C_PurchaseOrderTPOData Service Name: MM_PUR_PO_MAINT_V2_SRVEntityContainer Name: MM_PUR_PO_MAINT_V2_SRV_EntitiesEntitySet Name: C_PurchaseOrderTP (*Not EntityType Name)PropertyPath:PlantOData サービス名: SAP Fiori Apps Reference Library(https://fioriappslibrary.hana.ondemand.com/sap/fix/externalViewer/#) から、拡張対象のFioriアプリを検索します。対象アプリのページの“IMPLEMENTATION INFORMATION” タブの“Configuration”の中のOData ServiceにFioriアプリで使用されているODataが記載されています。
4. EntityContainer名
対象のODataサービスのメタデータを確認します(https://<IP Adress>:<Port Number>/sap/opu/odata/sap/ MM_PUR_PO_MAINT_V2_SRV/$metadata)。
EntityContainerと検索すると、EntityContainer名を確認できます。
5. EntitySet 名
Fioriアプリ “購買発注管理” の起動時に、ブラウザの開発者ツールでmanifest.appdescrに対するリクエストのPreview / Responseを確認すると、List Reportに使用されるエンティティセットは、“C_PurchaseOrderTP”であることがわかります。
6. PropertyPath
対象のODataサービスのメタデータの対象エンティティセットの定義を確認することで項目名(PropertyPath)を特定することが可能です。
拡張対象およびアノテーションによる変更プロパティの設定
“購買発注管理” に使用されているODataサービス“MM_PUR_PO_MAINT_V2_SRV”のメタデータをロードして、アノテーションによる拡張対象の項目を持つCDS ViewをTargetに設定しています。実装では、FilterRestrictionsを使用してプロパティ“RequiresFilter”と“RequiredProperties”を変更することが目的のため、FilterRestrictionsを含む“Org.OData.Capabilities.V1” vocabularyを指定したエイリアスで参照しています。
2. manifest.appdescr_variant.json
manifest.appdescr_variant.jsonは、元のアプリで利用可能なオブジェクトを記述したファイルで、多くの設定は標準アプリのmanifest情報を参照しています。ローカルアノテーションファイルを追加する場合は、以下のプロパティを設定します。
“dataSourceId” :対象のODataサービスを指定するプロパティで本シナリオでは“mainService” です。
“annotations”:指定したODataデータソース“mainService”に対して、でアノテーションの名前を指定します。名称は “customer” で始まる必要があります (例: “customer.myAnno”)。
“annotationsInsertPosition” :“END” に設定する必要があります。そうでない場合、これらはサーバのユーザによって無効化され、まったく効果がない可能性があります。
“dataSource”:“customer” で始まるアノテーション名を指定します。“uri”で作成したローカルアノテーションファイルを指定し、“type”をODataへのアノテーション追加の場合は、“ODataAnnotation”とします。
4. まとめ
本記事では、SAP Business Application StudioでAdaptation Projectを作成し、Local Annotationを追加してフィルタ項目を必須化する手順について紹介しました。Adaptation Projectでは、フィルタの必須化以外にもアノテーション実装の変更やコントローラ拡張やカスタムXMLフラグメントの追加などの拡張が可能です。Adaptation Projectの詳細については、参考情報に記載のドキュメントをご確認ください。
参考情報
SAP Help: Extending an SAP Fiori Application for an SAP S/4HANA or SAP S/4HANA Cloud Private Edition
SAP Blog: Extending SAP-delivered SAP Fiori elements apps using adaptation projects to create SAP S/4HANA app variants
SAP KBA: https://me.sap.com/notes/3285957
1. はじめにSAP標準Fioriアプリは、S/4HANAを利用した業務プロセスを支援する重要なツールとして活用されており、Fiori Elementsフレームワークの実装技術を用いたアプリが多く提供されています。しかし、企業固有の業務要件や特定のユーザーのニーズに完全に対応するためには、標準アプリをカスタマイズする必要が生じることがあります。Fioriアプリのカスタマイズには、メタデータ拡張やUI適応などいくつかの手法が提供されています。しかし、拡張対象オブジェクトがメタデータ拡張に対応していない場合やUI適応による変更では対応できない業務要件が発生する場合があります。そのような場合に、より柔軟なUI拡張手法として利用可能な方法が、Adaptation Project(Developer Adaptation)です。Adaptation Projectを使用することで、標準のSAP Fiori elementsアプリケーションをモディフィケーションフリーで拡張することが可能になります。つまり、元のアプリケーションを変更することなく、新しいアプリケーションバリアントを作成し、独自の要件に合わせてカスタマイズが可能となります。本ブログでは、SAP標準Fioriアプリ(F0842A: Manage Purchase Orders)に定義されたフィルタ項目(プラント)を必須化する要件を対象に、SAP Business Application Studioを使用してAdaptation Projectを作成し、Local Annotationを追加して標準アプリのカスタマイズを実現する具体的な手順について詳しく解説していきます。 2. 実装方法1. SAP Business Application Studioへアクセスし、SAP FioriのDev spaceを開きます。 2. Open FolderからProjectsフォルダ(/home/user/projects/)へアクセスします。 3. File>New Project from Templateを開き、SAPUI5 Adaptation Projectを選択します。 4.System and Application Selectionで以下を入力後、Nextをクリックして設定を進めます。System:拡張対象アプリのS/4HANAへのDestinationApplication:拡張対象アプリ(本ブログでは、Manage Purchase Orders) 5. Project Attributesに以下の情報を入力します。Project Name:任意のプロジェクト名称Application Title:任意のアプリタイトルNamespace:入力したプロジェクト名称をもとに自動生成されます(必要に応じて、変更可能です)。Project Folder Path:Projectsフォルダへのパスが自動入力されます(必要に応じて、変更可能です)。SAPUI5 Version:最新のSAPUI5バージョンが自動入力されます(ここでは、変更できません。S/4HANAへインストールされたSAPUI5バージョンへ変更する場合は、プロジェクト生成後にui5.yamlファイルの変更が必要になります。詳細は、SAP KBA:3095848 – How to change SAPUI5 version if problems occur for Adaptation Project in BAS をご確認ください)。Add Deployment Configuration:Yes(デプロイ設定のため) 6. Deployment Configurationに以下の情報を入力後、Finishボタンをクリックしてプロジェクトを生成します。Destination:System and Application Selectionで選択したDestinationが自動入力されます(必要に応じて変更可能です)。Select How You Want to Enter the Package:デプロイ用パッケージの選択方法をEnter Manually / Choose from Existingのいずれかを選択します。Package:デプロイ用パッケージを選択します(スクリーンショットは、例としてローカルパッケージを設定しています)。 7. 生成されたプロジェクトを右クリックして、Add Local Annotation Fileからアノテーションファイルを生成します(Application InformationのAdd Local Annotation Fileボタンからも可能です)。 8. Add Local Annotation Fileで以下の情報を入力します。Target OData Service: mainService(自動入力されます。)Annotation XML: Create local annotation file from template(新規作成する場合)/ Select annotation file from workspace(既存のアノテーションファイルを参照する場合) 9. プロジェクトフォルダのwebapp/changes/annotations配下にアノテーションファイルが新規作成されるため、開きます。 10. アノテーションファイルに以下のアノテーション実装を追加します(実装内容詳細は、次のセクションで解説します)。<edmx:Edmx xmlns:edmx=”http://docs.oasis-open.org/odata/ns/edmx” Version=”4.0″>
<edmx:Reference Uri=”https://sap.github.io/odata-vocabularies/vocabularies/Common.xml”>
<edmx:Include Namespace=”com.sap.vocabularies.Common.v1″ Alias=”Common”/>
</edmx:Reference>
<edmx:Reference Uri=”https://sap.github.io/odata-vocabularies/vocabularies/UI.xml”>
<edmx:Include Namespace=”com.sap.vocabularies.UI.v1″ Alias=”UI”/>
</edmx:Reference>
<edmx:Reference Uri=”https://sap.github.io/odata-vocabularies/vocabularies/Communication.xml”>
<edmx:Include Namespace=”com.sap.vocabularies.Communication.v1″ Alias=”Communication”/>
</edmx:Reference>
<edmx:Reference Uri=”/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV/$metadata”>
<edmx:Include Namespace=”MM_PUR_PO_MAINT_V2_SRV”/>
</edmx:Reference>
<edmx:Reference Uri=”/sap/opu/odata/iwfnd/catalogservice;v=2/Vocabularies(TechnicalName=’%2FIWBEP%2FVOC_CAPABILITIES’,Version=’0001′,SAP__Origin=”)/$value”>
<edmx:Include Namespace=”Org.OData.Capabilities.V1″ Alias=”Capabilities”/>
</edmx:Reference>
<edmx:DataServices>
<Schema xmlns=”http://docs.oasis-open.org/odata/ns/edm” Namespace=”local_1760320506713″>
<Annotations Target=”MM_PUR_PO_MAINT_V2_SRV.MM_PUR_PO_MAINT_V2_SRV_Entities/C_PurchaseOrderTP”>
<Annotation Term=”Capabilities.FilterRestrictions”>
<Record>
<PropertyValue Property=”RequiresFilter” Bool=”true”/>
<PropertyValue Property=”RequiredProperties”>
<Collection>
<PropertyPath>Plant</PropertyPath>
</Collection>
</PropertyValue>
</Record>
</Annotation>
</Annotations>
</Schema>
</edmx:DataServices>
</edmx:Edmx> 11. manifest.appdescr_variantファイルにアプリが追加アノテーションを参照するための定義を追加します。 {
“fileName”: “manifest”,
“layer”: “CUSTOMER_BASE”,
“fileType”: “appdescr_variant”,
“reference”: “ui.ssuite.s2p.mm.pur.po.manage.st.s1”,
“id”: “customer.zapp.f0842a”,
“namespace”: “apps/ui.ssuite.s2p.mm.pur.po.manage.st.s1/appVariants/customer.zapp.f0842a/”,
“version”: “0.1.0”,
“content”: [
{
“changeType”: “appdescr_ui5_addNewModelEnhanceWith”,
“content”: {
“modelId”: “i18n”
},
“texts”: {
“i18n”: “i18n/i18n.properties”
}
},
{
“changeType”: “appdescr_ui5_addNewModelEnhanceWith”,
“content”: {
“modelId”: “@i18n”
},
“texts”: {
“i18n”: “i18n/i18n.properties”
}
},
{
“changeType”: “appdescr_ui5_addNewModelEnhanceWith”,
“content”: {
“modelId”: “i18n|sap.suite.ui.generic.template.ListReport|C_PurchaseOrderTP”
},
“texts”: {
“i18n”: “i18n/ListReport/C_PurchaseOrderTP/i18n.properties”
}
},
{
“changeType”: “appdescr_ui5_addNewModelEnhanceWith”,
“content”: {
“modelId”: “i18n|sap.suite.ui.generic.template.ObjectPage|C_PurchaseOrderTP”
},
“texts”: {
“i18n”: “i18n/ObjectPage/C_PurchaseOrderTP/i18n.properties”
}
},
{
“changeType”: “appdescr_ui5_addNewModelEnhanceWith”,
“content”: {
“modelId”: “i18n|sap.suite.ui.generic.template.ObjectPage|C_PurchaseOrderItemTP”
},
“texts”: {
“i18n”: “i18n/ObjectPage/C_PurchaseOrderItemTP/i18n.properties”
}
},
{
“changeType”: “appdescr_ui5_addNewModelEnhanceWith”,
“content”: {
“modelId”: “i18n|sap.suite.ui.generic.template.ObjectPage|C_PurchaseOrderLimitItemTP”
},
“texts”: {
“i18n”: “i18n/ObjectPage/C_PurchaseOrderLimitItemTP/i18n.properties”
}
},
{
“changeType”: “appdescr_ui5_setMinUI5Version”,
“content”: {
“minUI5Version”: “1.114.9”
}
},
{
“changeType”: “appdescr_app_setTitle”,
“content”: {},
“texts”: {
“i18n”: “i18n/i18n.properties”
}
},
{
“changeType”: “appdescr_app_addAnnotationsToOData”,
“content”: {
“dataSourceId”: “mainService”,
“annotations”: [ “customer.myAnno” ],
“annotationsInsertPosition”: “END”,
“dataSource”: {
“customer.myAnno”: {
“uri”: “changes/annotations/annotation_1760320506713.xml”,
“type”: “ODataAnnotation”
}
}
}
}
]
} 12. webappを右クリック>Preview Applicationからアプリをプレビュー実行します(Application InformationのPreview Applicationボタンからも可能です)。 13. プラント項目が必須入力項目となっていることを確認します。 14. webappを右クリック>Deploy Applicationからアプリをデプロイします(Application InformationのDeployボタンからも可能です)。 15. デプロイしたアプリ(アプリバリアント)は、Fiori技術カタログにSemantic object / semantic action / SAPUI5 Component / タイル等を定義し、ビジネスカタログおよびビジネスロールから参照することでエンドユーザからの利用が可能となります。Semantic Object: 任意のセマンティックオブジェクトAction: 任意のセマンティックアクションSAPUI5 Component ID: Step.5でのプロジェクト生成時のNamespace 3. 実装内容解説1. Local Annotationファイル(annotation_xxx.xml)ローカルアノテーションファイルは、標準Fioriアプリで使用されているODataサービスにアノテーションによる拡張を実装したファイルです。ファイル内の記述は、ODataの構文に準じた記述になり、以下のような制約があります(一部抜粋)。edmx:Edmxルート要素であり、<edmx:Edmx> ~ </edmx:Edmx>の間に、構文を記述します。<edmx:Edmx>の定義には Version の記述と <edmx:DataServices>エレメントが 1 つ含まれている必要があります。edmx:Referenceアノテーションファイル内で参照される外部 CSDL(Common Schema Definition Language) 文書を指定します。子エレメント edmx:Referenceには、 Uri(参照先のURI)の記述と最低1つのedmx:Include エレメントが含まれている必要があります。edmx:Include参照される CSDL ドキュメント配下のスキーマを指定します。Namespace(スキーマ名称)を指定する必要があります。また、Aliasを指定することもできます。edmx:DataservicesAnnotaionのプロパティ等を記述する要素で、1 つの Schemaエレメントが含まれている必要があります。Schemaエレメント内にアノテーションを記述します。Annotations拡張するODataサービスのEntitySet名を含むターゲット属性を指定します。最低1つのAnnotation エレメントが含まれている必要があります。これらの構文に従って、プラントのフィルタ項目を入力必須化にする実装をしています。拡張対象ターゲットの特定本ブログの実装では、以下のTarget情報が必要となります。Target:MM_PUR_PO_MAINT_V2_SRV.MM_PUR_PO_MAINT_V2_SRV_Entities/C_PurchaseOrderTPOData Service Name: MM_PUR_PO_MAINT_V2_SRVEntityContainer Name: MM_PUR_PO_MAINT_V2_SRV_EntitiesEntitySet Name: C_PurchaseOrderTP (*Not EntityType Name)PropertyPath:PlantOData サービス名: SAP Fiori Apps Reference Library(https://fioriappslibrary.hana.ondemand.com/sap/fix/externalViewer/#) から、拡張対象のFioriアプリを検索します。対象アプリのページの“IMPLEMENTATION INFORMATION” タブの“Configuration”の中のOData ServiceにFioriアプリで使用されているODataが記載されています。4. EntityContainer名対象のODataサービスのメタデータを確認します(https://<IP Adress>:<Port Number>/sap/opu/odata/sap/ MM_PUR_PO_MAINT_V2_SRV/$metadata)。EntityContainerと検索すると、EntityContainer名を確認できます。 5. EntitySet 名Fioriアプリ “購買発注管理” の起動時に、ブラウザの開発者ツールでmanifest.appdescrに対するリクエストのPreview / Responseを確認すると、List Reportに使用されるエンティティセットは、“C_PurchaseOrderTP”であることがわかります。6. PropertyPath対象のODataサービスのメタデータの対象エンティティセットの定義を確認することで項目名(PropertyPath)を特定することが可能です。 拡張対象およびアノテーションによる変更プロパティの設定“購買発注管理” に使用されているODataサービス“MM_PUR_PO_MAINT_V2_SRV”のメタデータをロードして、アノテーションによる拡張対象の項目を持つCDS ViewをTargetに設定しています。実装では、FilterRestrictionsを使用してプロパティ”RequiresFilter”と”RequiredProperties”を変更することが目的のため、FilterRestrictionsを含む”Org.OData.Capabilities.V1″ vocabularyを指定したエイリアスで参照しています。 2. manifest.appdescr_variant.jsonmanifest.appdescr_variant.jsonは、元のアプリで利用可能なオブジェクトを記述したファイルで、多くの設定は標準アプリのmanifest情報を参照しています。ローカルアノテーションファイルを追加する場合は、以下のプロパティを設定します。”dataSourceId” :対象のODataサービスを指定するプロパティで本シナリオでは”mainService” です。”annotations”:指定したODataデータソース”mainService”に対して、でアノテーションの名前を指定します。名称は “customer” で始まる必要があります (例: “customer.myAnno”)。”annotationsInsertPosition” :”END” に設定する必要があります。そうでない場合、これらはサーバのユーザによって無効化され、まったく効果がない可能性があります。”dataSource”:”customer” で始まるアノテーション名を指定します。”uri”で作成したローカルアノテーションファイルを指定し、”type”をODataへのアノテーション追加の場合は、”ODataAnnotation”とします。 4. まとめ本記事では、SAP Business Application StudioでAdaptation Projectを作成し、Local Annotationを追加してフィルタ項目を必須化する手順について紹介しました。Adaptation Projectでは、フィルタの必須化以外にもアノテーション実装の変更やコントローラ拡張やカスタムXMLフラグメントの追加などの拡張が可能です。Adaptation Projectの詳細については、参考情報に記載のドキュメントをご確認ください。 参考情報SAP Help: Extending an SAP Fiori Application for an SAP S/4HANA or SAP S/4HANA Cloud Private EditionSAP Blog: Extending SAP-delivered SAP Fiori elements apps using adaptation projects to create SAP S/4HANA app variantsSAP KBA: https://me.sap.com/notes/3285957 Read More Technology Blog Posts by SAP articles
#SAP
#SAPTechnologyblog