LoginSignup
1
1

CAPの@cap-js/attachmentsプラグインを使ってみる

Last updated at Posted at 2024-05-17

はじめに

CAPの@cap-js/attachmentsプラグインは今年の3月にリリースされた機能で、簡単な設定だけでFiori elementsアプリに添付ファイルをアップロードするセクションを追加することができます。現在はまだベータのステータスです。

image.png

設定方法は以下のリポジトリに書かれています。設定している中でつまづいた点があったので、それを含めてこの記事で説明します。

ステップ

  1. プロジェクトを作成
  2. @cap-js/attachmentsをインストール
  3. Attachmentsを追加
  4. Fiori elementsアプリを作成
  5. デプロイ

1. プロジェクトを作成

以下のコマンドでプロジェクトを作成し、サンプルのデータモデルも追加します。

cds init
cds add tiny-sample

追加されたデータモデルは以下です。

db/data-model.cds
namespace my.bookshop;

entity Books {
  key ID : Integer;
  title  : String;
  stock  : Integer;
}

2. @cap-js/attachmentsをインストール

@cap-js/attachmentsをインストールします。

 npm add @cap-js/attachments

3. Attachmentsを追加

db/attachments.cdsファイルを追加します。元のdata-model.cdsに設定を追加してもよいのですが、「関心の分離」のベストプラクティスに従って別ファイルにするのがよいとのことです。
image.png

"Books"エンティティにAttachmentsのアスペクトをコンポジションとして追加しています。

using { my.bookshop as my } from './data-model';
using { Attachments } from '@cap-js/attachments';

extend my.Books with { attachments: Composition of many Attachments }

Attachmentを使うための設定はこれだけです。
cds watchでサービスを実行してメタデータを見てみると、"Books_attachmehts"というエンティティが追加されています。
image.png
`

4. Fiori elementsアプリを作成

Fiori toolsを使ってFiori elements (List Report)アプリを作成します。

データソースには"Use a Local CAP Project"を選択します。
image.png
メインのエンティティと、ナビゲーションプロパティとして"attachments"を選択します。
image.png
プロジェクトの設定を以下のように行います。
image.png

この状態でFiori elementsアプリを実行し、Object Pageに遷移すると画面が固まってしまいました。
image.png

@cap-js/attachmentsのリポジトリで説明に使われていたプロジェクトは、SAPUI5バージョンが1.121.0だったので、index.htmlでバージョンを1.121.0にすると動くようになりました(1.122.0でも動いたので、以下では1.122.0にしています)。1.123.0以降のバージョンでは今のところ動かないようでした。

image.png

※デプロイ前にはmanifest.jsonのminUI5Versionも変更しておきましょう
image.png

Object Pageを開くと、"Attachments"のテーブルが表示されます。
image.png

編集モードにすると"Upload"ボタンからファイルをアップロードすることができます。
image.png

以下がアップロードした結果です。
※"Status"という項目はウイルススキャンのステータスを格納するための項目のようですが、ドキュメントに説明がなく、どうやってスキャンを有効にするのかは不明です。
image.png

裏では以下のアノテーションが生成されており、そのおかげで添付ファイルのセクションがUIに表示されるようになっているのでした。

  • Books_attachmentsのためのUI.LineItemアノテーション
    image.png

  • LineItemをObject Pageに追加するためのUI.ReferenceFacetアノテーション
    image.png

@cap-js/attachmentsプラグインを使わずに添付ファイル用のエンティティとアノテーションを定義した場合、以下の見え方になりました。使われているコントロールやボタン名、テーブルツールバーのボタンも違っています。この方法では、アップロードもエラーになってしまいました。@cap-js/attachmentsは他にも何か裏でやっていそうです。

image.png

5. デプロイ

まずは普通に、以下の手順でデプロイしてみました。

cds add hana --for production
cds add xsuaa --for production
mbt build --mtar archive
cf deploy mta_archives/archive.mtar

Fiori elementsアプリをHTML5 Application Repositoryにデプロイするためには、以下のブログに記載の設定も必要です。

Deploying a CAP based Fiori app to a central Launchpad

その結果、CAPのサービス起動時にエラーになりました。
image.png

@cap-js/attachmentsはデフォルトではファイルの格納先としてSAP Object Storeを使うようになっており、そのためには以下の設定を行います。

格納先としてSAP HANA Cloudを使いたい場合、package.jsonに以下の設定が必要です。

    "cds": {
        "requires": {
            ...,
            "attachments": {
                "kind": "db"
            }             
        }
    }

上記の設定後、デプロイは成功しHTML5 Application Repositoryから実行できるようになりました。

まとめ

  • @cap-js/attachmentsを使う場合、UI5バージョンは1.122.0を使用する(2024年5月現在)
  • ファイルの格納先としてSAP HANA Cloudを使用する場合、package.jsonに設定を追加する
1
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
1
1