0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【SAPUI5】ControllerでODataメタデータからEntityのプロパティ情報を取得する方法

Last updated at Posted at 2025-05-26

SAPUI5で開発していると、「ODataモデルのメタデータから特定のEntityのプロパティを取得したい」という場面があります。たとえば、動的にテーブルカラムを生成したい場合などです。

この記事では、Controller内でEntityのプロパティ情報を取得する方法を紹介します。

✅ 使用する前提
モデルはODataModel(v2)

メタデータは事前に読み込み済み(metadata.xmlにEntity定義が存在する)

モデル名はoModelとして例示

🧩 コード全文
以下が、Controller内でEntityのプロパティ情報を非同期で取得するコードです。

// メタデータから Entity のプロパティ情報を抽出
let oMetadataArr = await new Promise(
function (fResolve, fReject) {
oModel.getMetaModel().loaded().then(() => {
let oMetaModel = oModel.getMetaModel().getODataEntityType("Namespace.EntityName");
fResolve(oMetaModel?.property ?? []);
}).catch(fReject);
}
);

🔍 解説
oModel.getMetaModel()
ODataModelからメタモデル(MetaModel)を取得します。

ここにはEntityTypeやPropertyなどの情報が含まれています。

loaded().then(...)
メタデータの読み込みは非同期のため、loaded()で読み込み完了を待つ必要があります。

この中で安全にメタデータアクセスを行います。

getODataEntityType("Namespace.EntityName")
引数には 完全修飾名(Namespace付き) のEntity名が必要です。

例:"my.service.namespace.DestinationSet"

SAP GUIのODataメタデータ(metadata.xml)で確認できます。

?.property ?? []
取得できなかった場合に備え、nullチェック+空配列のデフォルトを指定しています。

🧪 使用例:プロパティ名だけ取得したい場合
js
let aPropNames = oMetadataArr.map(o => o.name);
// 例: ["ID", "Name", "Address", "Email"]
⚠️ 注意点
getODataEntityType() に渡す エンティティ名は正確に。

EntitySet名(例: "Destinations")ではなく、EntityType名(例: "ZC_DestinationsType")を指定します。

メタデータがまだ読み込まれていない段階でアクセスしようとすると、undefinedが返る可能性があります。

📝 おまけ:非async/await版(Promiseチェーン)
oModel.getMetaModel().loaded().then(() => {
let oMetaModel = oModel.getMetaModel().getODataEntityType("Namespace.EntityName");
let aProps = oMetaModel?.property ?? [];
console.log(aProps);
});
🙌 まとめ
SAPUI5では、MetaModelを使えば動的にEntityの情報を取得できます。
特にテーブルカラムの動的生成や、入力チェックの自動化など、柔軟なUI設計に役立ちます。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?