6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Common Data Model (CDM) を使ったSAP Build Work Zoneへのコンテンツ公開と、ユースケース

Posted at

はじめに

この記事は SAP Advent Calendar 2024 の12月1日分の記事として執筆しています。

2024年7月に、SAP Build Work Zoneでカスタムアプリケーションを「ビジネスソリューション」としてまとめて公開できるようになりました。ビジネスソリューションの中で定義されたロールをそのまま利用することが可能になります。これは、S/4HANAなどの製品からコンテンツを公開するのと同じ方法です。この際に必要となるのが、カスタムアプリケーション側でのCommon Data Model (CDM) を使ったコンテンツの定義です。この記事では、CDMを使ったコンテンツ公開の概要とユースケースについて紹介します。

Common Data Model (CDM) を使ったコンテンツ公開とは

SAP Build Work Zoneでサイトにアプリを表示させるとき、これまでは自分でページ、スペース、ロールなどを作成する必要がありました。

Common Data Model (CDM)とは、Work Zoneに表示させるコンテンツとそれらの関連を表すモデルです。専用のJSONスキーマを使用して定義します。

CDM Content Diagram(About the Common Data Model | Help Portalより引用)
image.png

CDMでコンテンツを定義することにより、複数のアプリケーションを一つの「ビジネスソリューション」としてまとめることができます。Work Zoneでビジネスビジネスソリューションにひもづくコンテンツプロバイダを登録することで、定義したコンテンツを自動でWork Zoneに取り込むことができます。これによりマニュアルでのロールやスペース、ページなどの定義が不要になります。

image.png

Content Managerには取り込んだロールしか表示されませんが、アプリも取り込まれているので独自にスペース、ページなどを定義することも可能です

CDMを使ったコンテンツ公開の手順概要

シングルテナントのアプリケーションにおいて、CDMを使ったコンテンツの公開をするための手順について説明します。ここでは技術的な詳細については入り込みませんが、詳しく知りたい方は次の章で紹介するチュートリアルを参照してください。

image.png

1. cdm.jsonの定義

CDMでWork Zoneに公開するアプリ、ページ、スペース、ロールなどを定義するため、cdm.jsonというファイルを作成します。cdm.jsonは以下のような形式になっています(以下はスペース&ページではなくグループを利用したケース)。
書き方についてはドキュメントを参照してください。

[
    {
    "_version": "3.0",
    "identification": {
        "id": "defaultCatalogId",
        "title": "{{title}}",
        "entityType": "catalog"
    },
    "payload": {
        "viz": [
        {
            "appId": "ns.incidents",
            "vizId": "incidents-display"
        }
        ]
    },
    "texts": [
        {
        "locale": "",
        "textDictionary": {
            "title": "Default Catalog Title"
        }
        }
    ]
    },
    {
    "_version": "3.0",
    "identification": {
        "id": "defaultGroupId",
        "title": "{{title}}",
        "entityType": "group"
    },
    "payload": {
        "viz": [
        {
            "appId": "ns.incidents",
            "vizId": "incidents-display"
        }
        ]
    },
    "texts": [
        {
        "locale": "",
        "textDictionary": {
            "title": "Business Apps"
        }
        }
    ]
    },
    {
    "_version": "3.0",
    "identification": {
        "id": "defaultRole",
        "entityType": "role",
        "title": "Default Role"
    },
    "payload": {
        "apps": [
        {
            "id": "ns.incidents"
        }
        ],
        "catalogs": [
        {
            "id": "defaultCatalogId"
        }
        ],
        "groups": [
        {
            "id": "defaultGroupId"
        }
        ]
    }
    }
]

2. cdm.jsonファイルをHTML5 Application Repositoryにデプロイ

mta.yamlでのビルドの設定により、cdm.jsonファイルがUIアプリケーションと一緒にHTML5 Application Repositoryへデプロイされるようにします。

3. デザインタイム用宛先の登録

デザインタイム用宛先は、Work Zoneに登録したコンテンツプロバイダがロールなどのコンテンツを取り込む際に使用されます。URL、認証情報、およびAdditional Propertiesの項目はhtml5-apps-repoのサービスインスタンスから取得します。
URLは末尾に/applications/cdm/<sap.cloud.service>を設定します。これにより、cdm.jsonで定義したコンテンツを取得することができます。
image.png

4. ランタイム用宛先の登録

ランタイム用宛先は、ユーザがタイルをクリックしてアプリケーションを開いたときに使われます。ランタイム用宛先のURLには、Work ZoneのURLと同じです(例:https://91fec855trial.dt.launchpad.cfapps.us10.hana.ondemand.com)。また、Additional PropertiesにCEP.HTML5contentprovider: trueを設定するのがポイントです。

image.png

5. コンテンツプロバイダーの登録

コンテンツプロバイダーはデザインタイム用宛先、ランタイム用宛先を指定して登録します。その結果、cdm.jsonで定義したコンテンツがWork Zoneに取り込まれます。

image.png

ユースケース

CDMを使ったコンテンツ公開のユースケースは3つあります。

1. シングルテナントでコンテンツを公開

シングルテナントのUI5アプリケーションをWork Zoneへ公開するケースです。単一のアプリケーションというよりは、複数のアプリケーションを一つのMTAで作成し、それらをビジネスソリューションとしてまとめて公開したいという場合に使用すると考えられます。

image.png

チュートリアル

以下のDeveloper TutorialのStep3で手順が紹介されています。このチュートリアルは有名な「CAPでincident managementアプリケーションを作成する」というものですが、最近の更新でコンテンツをCDMで公開する方法が追加されました。

Develop a Full-Stack CAP Application Following SAP BTP Developer’s Guide > Integrate Your Application with SAP Build Work Zone, Standard Edition

チュートリアル実行時の注意点
mta.yamlでデザインタイム用宛先の定義をする箇所で、URLに${default-domain}というパラメータを使用しています。Cloud FoundryのURLがhttps://api.cf.us10-001.hana.ondemand.comなど連番付きの場合はus10-001が設定されますが、この値は正しくありません。連番はつけずにus10とする必要があります。URLをハードコーディングするか、デプロイ後に登録されたDestinationを修正してください。正しいURLはhtml5-apps-repoのサービスインスタンス(プラン:app-runtime)のキーで確認できます。

image.png

2. シングルテナントで異なるサブアカウントにコンテンツを公開

UI5アプリケーションがデプロイされたのとは別のサブアカウントからアプリケーションを利用するケースです。バックエンドはシングルテナントです。

image.png

注意点として、バックエンドが特定のユーザロールを必要とする場合、プロバイダー側サブアカウントにもユーザ登録が必要です(※)。よってこのパターンを現実的に使うことがあるのかは疑問です。

※認証のみでよい場合はコンシュマー側サブアカウントのみにユーザ登録で利用できますが(プロバイダーとコンシュマーが同じIdPを使っている前提)、バックエンド側が特定のロールを必要とする場合はプロバイダー側サブアカウントにユーザ登録とロールコレクションの割り当てが必要でした。ランタイムの宛先がプロバイダー側のWork Zoneとなっており、プロバイダー側サブアカウントで認証しているためだと考えられます。

チュートリアル

以下のブログで手順が紹介されています。1.の方法と異なるのは、コンシュマー側サブアカウントにDestinationおよびコンテンツプロバイダーを登録する必要があるということです。

Simplifying HTML5 Content Consumption Across Subaccounts

3. マルチテナントで異なるサブアカウントにコンテンツを公開

CAPとUI5でマルチテナントなアプリケーションを用意し、コンシュマー側サブアカウントのWork Zoneから利用するというパターンです。これがCDMを使うことで最も実現したいことだと思われます。2.の方法と異なるのは、ランタイム用宛先のURLにはコンシュマー側サブアカウントのWork ZoneのURLを指定する点です。

image.png

チュートリアル

以下のリポジトリで手順が紹介されています。

Implement Multitenancy in a Full-Stack CAP Application Following SAP BTP Developer’s Guide

コンシュマー側からHTML5アプリケーションが利用できない
このチュートリアルを私は完走できていません。手順によると、コンシュマー側サブアカウントでアプリケーションをサブスクライブしたときにHTML5 Applicationリポジトリにアプリケーションが表示されるはずです。しかし、それが出てきませんでした。そのまま先に進めるとWork Zoneでタイルを表示することはできましたが、タイルをクリックするとコンテンツを取得できずエラーになりました。

以下にIssueを上げていますが、残念ながら更新が止まってしまっています。他にも同じ問題にぶつかっている人がいるようです。

HTML5 App is not visible in SaaS consumer subaccount

おわりに

従来は「アプリケーションの開発」と「Work Zoneのコンテンツ定義」は別の人が行うことが多かったのではないでしょうか。しかし、CDMを使いビジネスソリューションとしてコンテンツの公開が可能になったことによりコンテンツの定義も開発側のタスクになる可能性があります。ただし、シングルテナントの場合は個別にアプリケーションをデプロイしてWork Zoneでまとめるというスタイルが今後も主流な気がします。

CDMを使ったコンテンツの公開の真価が発揮されるのは、やはりマルチテナントなアプリケーションでの利用でしょう。残念ながらチュートリアルが最後まで実行できていませんが、時間をおいてやり直してみたいと思います。

参考

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?