【Salesforce】【資格】デベロッパー勉強メモ：ユーザインタフェース

デベロッパー試験勉強時にまとめたメモ書きです。内容が間違っていたら優しくご指摘ください。
他投稿は[デベロッパー試験に関する記事](#デベロッパー試験に関する記事)からどうぞ。

**あくまでも個人のメモ書きなので信用しすぎてはいけません。**
[参考](#参考)にSalesforce公式ページを載せていますので、最新かつ正しい情報をご確認ください。

# Visualforce
・親レコードへのアクセス：標準コントローラと差し込み構文
・子レコードへのアクセス：コントローラ拡張
・Visualforceでできること：PDF表示、ダッシュボード表示
・使用する画像、スタイルシート、JS、ライブラリは静的リソースに入れる
・外部JSファイルの読込タグ``＜apex:includeScript＞`` または ``<script>``
・IDの取得：ApexPages.currentPage().getParameters().get('Id')
・データ駆動型、ホスト型プラットフォーム、自動的にアップグレード
・Visualforceページの表示をLightning Experienceのようにする：　LightningStylesheets 属性

# コントローラとコントローラ拡張

**標準コントローラ**
　　標準ページと同じ機能で構成されている
　　save、quicksave（リダイレクトなし）、edit、delete、cancel、list（標準リストページのPageReferenceを返す）

```
<apex:page standardController="MyCustomObject__c">
</apex:page>
```
　
**標準リストコントローラ**
　　レコードのセットを処理する既存のSalesforceページにはリストページ、関連リスト、および一括アクションページが含まれる
　　save、quicksave（リダイレクトなし）、cancel、list（標準リストページのPageReferenceを返す）、
　　first、last、next、previous

```
　　<apex:page standardController="Account" recordSetVar="accounts">
```

　
**カスタムコントローラとカスタムリストコントローラ**
　　Apexで記述されたクラスであり、標準のコントローラーを利用せずに、ページのすべてのロジックを実装する
　　新しいナビゲーション要素または動作を定義できるが、標準コントローラーで既に提供されている機能も再実装する必要がある

   カスタムコントローラのコンストラクタ

```
public MyController() {
    account = [SELECT Id, Name, Site FROM Account WHERE Id = :ApexPages.currentPage().getParameters().get('id')];
}
```
:::note info
　　★コンストラクタは引数無し！！
:::

```　　
　　<apex:page controller="myController" tabStyle="Account">
```
　　※``<apex:page>`` タグで standardController 属性を使用する場合、同時に controller 属性を使用することはできません。

　
**コントローラ拡張**
　　標準またはカスタムコントローラの動作を追加またはオーバーライドする
　　標準コントローラの機能を使用するが、編集、参照、または削除などのアクションを上書きする、または新しいアクションを追加するときに使う。
　　
　　コントローラ拡張のコンストラクタ

```
public myControllerExtension(ApexPages.StandardController stdController) {
    this.acct = (Account)stdController.getRecord();
}
```
:::note info
　　★コンストラクタの引数はコントローラ
:::
```
　　<apex:page standardController="Account" extensions="myControllerExtension">
```

※カスタムコントローラとコントローラ拡張クラスはデフォルトでシステムモードで実行される。
  共有設定を考慮する場合はwith sharing を入れる。


# Lightning Web Component
・HTML、JS、メタデータ（CSS）
・コンポーネント定義　イベントは親へ（上へ）、プロパティは子へ（下へ）
・標準コンポーネント
　　　アコーディオン、ボタン、カード、コンボボックス、データテーブル、ファイルアップロード、
　　　formatted○○、input〇〇、メニュー、プログレスバー、パンくず、ツリー
・LWCを作成できるのは　SalesforceCLIとVSCode！！
・オブジェクトと項目の使用　→JavaScript の import 構文を使用する
　オブジェクトへの参照：``import ACCOUNT_OBJECT from '@salesforce/schema/Account';``
　項目の参照：``import ACCOUNT_NAME_FIELD from '@salesforce/schema/Account.Name';``
　項目の参照２：``import ACCOUNT_OWNER_NAME_FIELD from '@salesforce/schema/Account.Owner.Name';``
　Apexメソッドのインポート　→JavaScript のimport 構文を使用する　　
　　　　　``import apexMethodName from '@salesforce/apex/Namespace.Classname.apexMethodReference';``

　※Apexメソッドの公開　→`@AuraEnabled`を使用する、メソッドはstatic で、かつ global または public のいずれかである必要がある
　※クライアントにApexメソッドの結果をキャッシュ　@AuraEnabled(cacheable=true)　※メソッドはデータの取得のみ、変更不可

・Salesforce データを読み取る　→ @wire を使用して、Apex メソッドを指定する。
　　　　　　　　　　　　　　　　　プロパティまたは関数を結び付ける (`@wire`) ことでデータを受信できる
　　★`＠api`：プロパティやメソッドを公開する、変更時に再描画する
　　★`＠track`：プライベートなプロパティを監視する、変更時に再描画する
　　★`@wire`：プロパティまたは関数をデコレートする

# Lightning Web componentのリソース
　　　静的リソース：@salesforce/resourceUrl から静的リソースをインポートします。静
　　　コンテンツアセットファイル： @salesforce/contentAssetUrl からコンテンツアセットファイルをインポートします。
　　　SVG リソース：コンポーネントの HTML テンプレートに直接追加する。またはSVG リソースを静的リソースとしてアップロードしてから、コンポーネントの JavaScript ファイルにインポートする。
　　　カスタム表示ラベル：@salesforce/label から表示ラベルをインポートします。
　　　Internationalization プロパティ：@salesforce/i18n から internationalization プロパティをインポートします。世界中のユーザ、言語、通貨、タイムゾーンに適合させることができます。
　　　現在のユーザ： @salesforce/user を使用します。
　　　現在のエクスペリエンスビルダーサイト：@salesforce/community から現在のエクスペリエンスビルダーサイトに関する情報をインポートします。
　　　権限の確認：@salesforce/userPermission および @salesforce/customPermission から Salesforce 権限をインポートします。
　　　クライアントのフォーム要素：@salesforce/client/formFactor をインポートします。

# その他
・Lightning ページの標準コンポーネント
　　アコーディオン、活動、Chatter、Analytics ダッシュボード、Next Best Action、強調表示パネルリストビュー、Quip、
　　最近使ったデータ、レコードの詳細、関連レコード、レポートグラフ、リッチテキスト、Visualforce ページ
・auraコンポーネントのJavaScriptで定義されているもの　 クライアント側のコントローラ、ヘルパー、レンダラ
・SLDS　＝　SalesforceLightning Design System
　　CSSを1 行も記述せずに Lightning Experience のデザインを持つアプリケーションを構築できる。CSSフレームワーク

# 参考
↓Salesforce公式の開発者ガイドやヘルプページなどのリンクになっています
[Visualforce](https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_intro.htm)
[カスタムコントローラとコントローラ拡張](https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_controller.htm)
[Lightning Web component](https://developer.salesforce.com/jpblogs/2019/04/getting-started-lwc/)
[SLDS](https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/vf_dev_best_practices_slds_intro.htm)

# デベロッパー試験に関する記事
[Salesforce 認定 Platform デベロッパー 合格までのあれこれ](https://qiita.com/piepie1231/items/8da91897192dc44584be)
[デベロッパー勉強メモ：Salesforceの基本](https://qiita.com/piepie1231/items/bd94f6c3780f68b89251)
[デベロッパー勉強メモ：データモデリング](https://qiita.com/piepie1231/items/1ea83e14b553698f2aff)
[デベロッパー勉強メモ：プロセスの自動化とロジック①](https://qiita.com/piepie1231/items/407aad4ef1de5da297df)
[デベロッパー勉強メモ：プロセスの自動化とロジック②](https://qiita.com/piepie1231/items/e5eeb25ae2af0f79fd58)
[デベロッパー勉強メモ：ユーザインタフェース](https://qiita.com/piepie1231/items/179e5a39a98d65cb238d)  ←当記事
[デベロッパー勉強メモ：テスト、デバッグ、リリース](https://qiita.com/piepie1231/items/b90b82ec643b0cf5715b)