🐥

[salesforce]カスタムメタデータで画像表示を動的に変更!Salesforceで柔軟な画像管理を実現

2024/10/01に公開

こんにちは、Salesforceエンジニアのトモです。
初めての投稿でやや緊張しながら書いておりますが、アウトプットの場として気軽に見てもらえると嬉しいです。

今回のテーマになった理由ですが、各レコードで表示したい画像を動的に変更したい!から始まりました。
Visualforceで画面を作成してApexで処理を行いました。

概要

1.カスタムメタデータ型とは
2.作成した画面の紹介と動作
3.実装
4.最後に

カスタムメタデータ型とは

Salesforceで設定情報や参照データを保存する為に使用されるメタデータベースのデータ型です。
主に、設定や定義情報を保存し開発者や管理者が簡単に参照・変更出来るように設計されています。
アクセス権に依存しないやガバナ制限に引っかからないなどメリットもありますが
データの制限や複雑なデータ構造には不向きです。
簡単に言いますと、小さなオブジェクトです。

作成した画面の紹介と動作

まず、作成した3画面の紹介です。
項目名の「メニューアイテム名」の値によってMenuPhotosの画像の表示が変更されます。
もし、メニューアイテム名の値がカスタムメタデータで指定した画像にない場合は「No Image」を表示しています。
※表示している画像のクオリティーなどは無視してください🙇🙇


実装

Visualforce

<apex:page>にControllerとligthningStyleSheetsを使用。

Apex

SOQL文の説明

最初のSOQL文のWHEREでは、VisualforceページのURLからパラメータとして渡されたIDを使用してレコードを検索しています。
要するに、ApexPages.currentPage()で現在表示しているVisualforceページの情報を取得。
次に、getParameters().get('Id)でページのURLに含まれているクエリパラメータ(?id=xxxxx)を取得。
二つ目のSOQL文では、最初に取得したIdのメニューアイテム名とMasterLabelの値が一致しているかを比べています。

条件式

isEmpty()を使用してMenuItemsがあるならtrue、空ならfalseとしています。
コメントアウトにしている所は、書きながらこれだと項目が作成された時にコードを毎回書く必要あると思いコメントアウトしています。
※一応載せています。

カスタムメタデータ型の作成

その前に静的リソースを使用して画像を参照します。
設定→静的リソースと検索。
今回、以下の様な作成をしています。

次にカスタムメタデータ型の作成を行います。
設定→カスタムメタデータ型と検索。
今回、以下の様な作成をしています。

Query Editorを使用したら以下の様に確認できます。
MaseterLabelに合わせてそれぞれの画像が確認出来ます。

感想

初投稿でまだまだ改善点が多いblogですね。。
これからもどしどしアップロードしていきますので何か参考になれば幸いです。
また、コードの内容や色んなコメント、質問お待ちしております!!
ではまた。

GitHubで編集を提案

Discussion