自社の商品とそのオプション(どの商品にも付けられる)をレコードを関連付けて、孤立したレコードを防いで管理したいときのベストプラクティスはどれか
A. 商品とオプションで1対多の主従関係にする
B. オプションに商品に対する参照関係項目を作る
C. 商品とオプションそれぞれと参照関係をもつ連結オブジェクトを作成して、多対多の関係を作る
D. 商品とオプションそれぞれと主従関係をもつ連結オブジェクトを作成して、多対多の関係を作るデベロッパーの基本
D. 商品とオプションそれぞれと主従関係をもつ連結オブジェクトを作成して、多対多の関係を作る連結オブジェクトが従で、商品とオプションが主となる2つの主従関係項目を作成する
https://help.salesforce.com/s/articleView?id=sf.relationships_manytomany.htm&type=5
A. 転職希望者オブジェクトと面談オブジェクト間に主従関係を作成する
B. 転職希望者オブジェクトと面談オブジェクト間に参照関係を作成する
C. 転職希望者オブジェクトに面談レコードをカウントする積み上げ集計項目を作成する
D. 面談オブジェクトに転職希望者オブジェクトの項目を更新するレコードトリガーフローを作成するデベロッパーの基本
B. 転職希望者オブジェクトと面談オブジェクト間に参照関係を作成する
D. 面談オブジェクトに転職希望者オブジェクトの項目を更新するレコードトリガーフローを作成する主従関係だと従に参照権限がある場合は主にも参照権限が必要となり独立しない。要件を満たすには参照関係を選ぶ。
積み上げ集計項目は参照関係では使えないのでフローを使う。
ユーザーがリードとの取引を開始する際に、リードレコードのリードソース項目を入力するように強制したいときのベストプラクティスはどれか
A. 入力規則
B. トリガーフロー
C. Apexトリガー
D. 数式項目デベロッパーの基本
A. 入力規則Apexトリガーでも可能だがより簡単な入力規則がベストプラクティス
取引を開始するとリードレコードは参照のみとなる。
商談レコードの表示権限は持たせずに、各取引先レコードでそのすべての関連商談で最新の完了予定日を確認できるようにするためのベストプラクティスはどれか
A. 取引先オブジェクトに関連する商談の完了予定日を「最大」で集計する積み上げ集計項目を作成する
B. 取引先オブジェクトに最新の商談の完了予定日を照会するクエリを作成する
C. 商談オブジェクトに取引先の項目を更新するフローを作成する
D. 取引先オブジェクトに関連する商談の完了予定日を「最大」で集計する数式項目を作成するデベロッパーの基本
A. 取引先オブジェクトに関連する商談の完了予定日を「最大」で集計する積み上げ集計項目を作成する数式項目では関連レコードの集計(SUM、MAX、MIN等)はできず「#Error!」が返される。
ワークフロールールは関連レコードの値をもとに項目を更新することはできない。
トリガーは実現可能だがより簡単な方法があるでベストプラクティスではない
List<Case> cCases = new List<Case>();
for(Case pCase : Trigger.new){
Case cCase = new Case(ParentId = pCase.Id, Subject = pCase.Subject);
cCases.add(cCase);
}
insert cCases;デベロッパーの基本
after insertのトリガーでinsertを実行しているため無限ループになるトリガーの処理内容によって再帰的にまた同じトリガーが呼び出されてしまう
各取引先への請求書を管理するカスタムオブジェクトを作成したいとき、取引先へのアクセス権がある全ユーザーが請求書にもアクセスできるようにするためのベストプラクティスはどれか
A. 取引先に請求書との主従関係項目を作成する
B. 請求書に取引先との参照関係項目を作成する
C. 請求書に取引先との主従関係項目を作成する
D. 取引先に請求書との参照関係項目を作成するデベロッパーの基本
C. 請求書に取引先との主従関係項目を作成する主にアクセス権があればそのすべての子レコードにアクセスできる
Salesforce 組織にデータをインポートして更新するときに既存のレコードと照合する方法はどれか(2つ)
A. 名前項目をインポートファイルの列と照合する
B. 自動採番項目をインポートファイルの列と照合する
C. ID項目をインポートファイルの列と照合する
D. 外部ID項目をインポートファイルの列と照合するデベロッパーの基本
C. ID項目をインポートファイルの列と照合する
D. 外部ID項目をインポートファイルの列と照合する
データの品質を確保するために有用な宣言型の方法は以下のうちどれか(3つ)
A. 入力規則
B. ワークフローアラート
C. ルックアップ検索条件
D. 例外処理
E. ページレイアウトデベロッパーの基本
A. 入力規則
C. ルックアップ検索条件
E. ページレイアウト「宣言型の方法(Declarative Method)」とはコーディングなしの開発方法という意味
レコード数が不明のときsize()やlength()を使わずにレコードセットの各レコードを処理するには以下のどれが適切か
A. do while
B. while
C. for(index;condition;increment){...}
D. for(variable : list){...}プロセスの自動化とロジック
D. for(variable : list){...}あらかじめコレクションのサイズを把握してなくてもループ処理できる
以下のコードを実行後のxの値は何になるか
String x = 'X';
Integer y = 1;
if(y < 15){
y = 15;
x = 'A';
} elseif(y < 20 ){
x = 'B';
} else{
x = 'C';
}プロセスの自動化とロジック
Aifは条件を上から順に評価され、条件に合致すると以降は評価されない
変数のスコープについて正しい記述はどれか(3つ)
A. 変数はブロックの任意の場所で定義できる
B. サブブロックが親ブロックの変数を再定義することはできない
C. 値がnullの場合はサブブロックが親ブロックの変数を再定義できる
D. 並行ブロックは同じ変数名を使用できる
E. 値がnullの場合は静的変数のスコープを現在のブロックに限定できるプロセスの自動化とロジック
A. 変数はブロックの任意の場所で定義できる
B. サブブロックが親ブロックの変数を再定義することはできない
D. 並行ブロックは同じ変数名を使用できる変数の値にかかわらずサブブロックが親ブロックの変数を再定義することはできない。
静的変数は1トランザクションの実行コンテキストで保持され、トランザクションが終わる時にリセットされる。
ApplicationとPositionというカスタムオブジェクトがあり、ApplicationにはPositionへの参照関係項目がある。
両オブジェクトにはStatusという選択リスト項目があり、PositionのStatusが更新されたときApplicationのStatusも同じ値に更新し、さらにApplication__cでワークフロールールを実行したい。
この要件を満たすには以下のどの方法を取るべきか。
A. ApexトリガーでDMLステートメントを使用する
B. ワークフローでクロスオブジェクトの項目自動更新を設定する
C. Application__c.Status__cを数式項目に変更する
D. Application__c.Status__cを積み上げ集計項目に変更するプロセスの自動化とロジック
A. ApexトリガーでDMLステートメントを使用するB⇒ワークフロールールでは他オブジェクトの項目を参照できない、また廃止予定であるため非推奨
C⇒既存の項目を数式項目に変えることはできないし、ワークフロールールのトリガーにはならない
D⇒参照関係だから積み上げ集計項目は使えない。使えたとしてもテキストの表示はできないので要件は満たせない。
ループ内での使用を避けるべきステートメントはどれか(2つ)
A. List<Contact> cts = [SELECT Id, Salutation, FirstName, LastName, Email FROM Contact WHERE AccountId = :a.Id];
B. update contactList;
C. if (o.AccountId == a.Id)
D. System.debug('Amount of CPU time(in ms) used so far: ' + Limits.getCpuTime());プロセスの自動化とロジック
A. List<Contact> cts = [SELECT Id, Salutation, FirstName, LastName, Email FROM Contact WHERE AccountId = :a.Id];
B. update contactList;ガバナ制限に引っかかるのでループ内でDMLステートメントは使わない。
↓ベストプラクティス
A:データをループの外で一括で取得し、ループで任意の処理をする
B:更新したいリストにループ内でレコードを追加し、ループ外でupdate操作する
SOQLステートメントが値の入力や評価できるデータ型はどれか(3つ)
A. Integer型
B. 単一のsObject
C. sObjectリスト
D. String型
E. Boolean型プロセスの自動化とロジック
A. Integer型
B. 単一のsObject
C. sObjectリストA⇒count メソッドを使用して、クエリによって返される行数を返すことができる
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/langCon_apex_SOQL.htm
MyControllerというカスタムコントローラーの正しいコンストラクターはどれか
A. public MyController(ApexPages.StandardController stdController){
account = (Account)stdController.getRecord();
}
B. public MyController(){
account = new Account();
}
C. public MyController(SObject obj){
account = (Account)obj;
}
D. public MyController(List<SObject> objects){
accounts = (List<Account>)objects;
}プロセスの自動化とロジック
B. public MyController(){
account = new Account();
}カスタムコントローラーのコンストラクターは引数を持てない。
https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_controller_custom.htm
Leadオブジェクトのbefor insertで、郵便番号が一致するLeadレコードにTerritory__cレコードを紐づけるApexトリガーがある。
この組織にデータローダーで10,000件のLeadレコードを作成するとエラーが発生する。
このApexトリガーの問題は何か。
for(Lead ld : Trigger.new){
if(ld.PostalCode != null){
List<Territory__c>terrList = [SELECT Id FROM Territory__c WHERE PostalCode__c = :ld.PostalCode];
if(terrList.size() > 0){
ld.Territory__c = terrList[0].Id;
}
}
}プロセスの自動化とロジック
取引先責任者レコードに関連するAccount項目とDepartment項目の値をもとに、取引先責任者のReportsTo項目を入力する要件を満たすにはどのトリガーを使うのがベストプラクティスか(2つ)。
A. before insert
B. after insert
C. before update
D. after updateプロセスの自動化とロジック
A. before insert
C. before update同一レコードの項目の値をもとに別の項目を更新したいときはbeforeトリガーを使うとDMLステートメントが最小限で済む。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_triggers_context_variables_considerations.htm
レコードの保存時の実行順序として正しいものは以下のどれか。
A. beforeトリガー、保存前フロー、入力規則、ワークフロールール、保存後フロー、フロー自動化、afterトリガー、保存
B. 入力規則、保存前フロー、beforeトリガー、入力規則、afterトリガー、入力規則、フロー自動化、保存後フロー、保存
C. 入力規則、beforeトリガー、保存前フロー、ワークフロールール、afterトリガー、フロー自動化、ワークフロールール、保存後フロー、保存
D. 保存前フロー、beforeトリガー、入力規則、afterトリガー、ワークフロールール、フロー自動化、保存後フロー、入力規則、保存プロセスの自動化とロジック
B. 入力規則、保存前フロー、beforeトリガー、入力規則、afterトリガー、入力規則、フロー自動化、保存後フロー、保存最初とbeforeトリガー、afterトリガー実行後の計3回入力規則が評価される
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_triggers_order_of_execution.htm
ApexでCustomObject__cレコードが現在のユーザーと共有されているか確認するにはどうすればよいか
A. レコードに対してisShared()をコールする
B. 現在のユーザーのプロファイル設定をコールする
C. ロール階層を照会する
D. CustomObject__Shareを照会するプロセスの自動化とロジック
D. CustomObject__Shareを照会する[カスタムオブジェクトのAPI名]__Shareでカスタムオブジェクトに関連付けられている共有オブジェクトを呼び出すことができ、共有管理、ユーザー共有管理、Apex 共有管理の 3 種類すべてをサポートするレコードが含まれている。
標準オブジェクトは「__」は不要。例:ContactShare
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_bulk_sharing_creating_with_apex.htm
あるオブジェクトの項目にワークフロールールによる自動更新が設定されており、さらにこのオブジェクトにはafter updateトリガーがある。
この組織でユーザーがこのオブジェクトのレコードを更新すると何が起きるか。
A. ワークフロールールが複数回実行される
B. データの変更はない
C. Apexトリガーが複数回実行される
D. Apexトリガーとワークフロールールが1回ずつ実行されるプロセスの自動化とロジック
C. Apexトリガーが複数回実行されるワークフローによるレコードの操作 (挿入または更新) に関わらず、before update トリガーと after update トリガーが追加で1 回のみ実行される。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_triggers_order_of_execution.htm
before insertトリガーで受け取ったレコードにそのトリガー内でアクセスしたいときに使用するコンテキスト変数は何か。プロセスの自動化とロジック
Review__cオブジェクトにはApplication__cオブジェクトへの参照関係項目があり、Application__cオブジェクトにはPosition__cオブジェクトへの主従関係項目がある。
Position__cレコードのVisualforceページで関連するReview__cレコードを表示するためのベストプラクティスはどれか。
A. Position__cの標準コントローラーとApplication__cオブジェクトのクロスオブジェクト数式項目を使って表示する
B. Position__cの標準コントローラーとReview__cオブジェクトのクロスオブジェクト数式項目を使って表示する
C. Position__cの標準コントローラーとコントローラー拡張を使って表示する
D. Position__cの標準コントローラーとページの式構文を使い、Application__cオブジェクトを介して表示するユーザーインターフェース
C. Position__cの標準コントローラーとコントローラー拡張を使って表示するクロスオブジェクト数式項目がアクセスできるのは親レコードのみ。
標準コントローラーだけで子レコードにアクセスはできない。
StandardSetControllerの機能は何か(2つ)
A. ページで大量のレコードセットのページネーションを実行できるようにする
B. ページでレコードを一括更新できるようにする
C. 大量のレコードセットを読み取るときに項目レベルセキュリティを適用する
D. 標準コントローラーまたはカスタムコントローラーの機能を拡張するユーザーインターフェース
A. ページで大量のレコードセットのページネーションを実行できるようにする
B. ページでレコードを一括更新できるようにする StandardSetControllerクラスはレコードのリストを扱うもの。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_pages_standardsetcontroller.htm
参照関係項目を持つオブジェクトの標準コントローラーのVisualforceページで、親レコードからのデータをページに表示するベストプラクティスはどれか。
A. 子レコードの積み上げ数式項目を使用して、親レコードからのデータを含める
B. 差し込み項目構文を使用して、親レコードからデータを取得する
C. VisualforceページでSOQLを使用して、親レコードからのデータを照会する
D. 親レコードのページに2つ目の標準コントローラーを追加すあるユーザーインターフェース
B. 差し込み項目構文を使用して、親レコードからデータを取得する例:{!Contact.Account.Name}
LightningプラットフォームでカスタムVisualforceページを使用すべき理由はどれか(2つ)
A. 2つの組織間でコンポーネントをリリースするため
B. ダッシュボードやレイアウトのコンポーネントを作成するため
C. カスタムオブジェクトのページレイアウト設定を変更するため
D. アプリケーションデータを使用してPDFドキュメントを生成するためユーザーインターフェース
B. ダッシュボードやレイアウトのコンポーネントを作成するため
D. アプリケーションデータを使用してPDFドキュメントを生成するため
階層カスタム設定にはSalesforceの各プロファイルのURLが保存される。
現在のユーザーのプロファイルの正しいURLを取得してVisualforceページに表示するために正しいのはどれか。
A. {!$Setup.Url_Settings__c.URL__c}
B. {!$Setup.Url_Settings__c.Instance[Profile.Id].URL__c}
C. {!$Setup.Url_Settings__c[Profile.Id].URL__c}
D. {!$Setup.Url_Settings__c[$Profile.Id].URL__c}ユーザーインターフェース
A. {!$Setup.Url_Settings__c.URL__c}
カスタムVisualforceページにCaseオブジェクトとStatus項目が存在している。
コントローラーで使用可能なすべてのレコードタイプとStatus項目の選択リスト値を取得、表示するために、どのアクションを取るべきか(2つ)。
A. SOQLを使用して組織のCaseレコードを照会し、使用可能なすべてのレコードタイプ値を取得する
B. Case.SObjectType.getDescribe().getRecordTypeInfos()で返されたSchema.RecordTypeInfoを使用する
C. SOQLを使用して組織のCaseレコードを照会し、Status項目の選択リスト値をすべて取得する
D. Case.Status.getDescribe().getPicklistValues()で返されたSchema.PicklistEntryを使用するユーザーインターフェース
B. Case.SObjectType.getDescribe().getRecordTypeInfos()で返されたSchema.RecordTypeInfoを使用する
D. Case.Status.getDescribe().getPicklistValues()で返されたSchema.PicklistEntryを使用するレコードタイプはsObject Describe ResultからgetRecordTypeInfosメソッドで取得できる。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_class_Schema_RecordTypeInfo.htm#apex_Schema_RecordTypeInfo_methods
選択リストの値はField Describe ResultからgetPicklistValuesメソッドで取得できる。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_class_Schema_PicklistEntry.htm
取引先の標準の編集ボタンを上書きするVisualforceページを作成したい。このページではSOQLクエリを使って取引先の住所を検証し、ユーザーは住所を編集することもできる。
取引先住所の検証ロジックをどこに記述すべきか。
A. 標準エクステンション内
B. 標準コントローラー内
C. カスタムコントローラー内
D. コントローラー拡張内ユーザーインターフェース
標準の商談ビューボタンを上書きするには、Visualforceページのコントローラで何を使用すべきか。
A. ページネーション用の関連リストをサポートするStandardSetController
B. StandardControllerを参照するコールバックコンストラクタ
C. 商談オブジェクトの変数を初期化するコンストラクタ
D. あらかじめ組み込まれた機能の商談オブジェクトのStandardControllerユーザーインターフェース
D. あらかじめ組み込まれた機能の商談オブジェクトのStandardControllerA⇒ページネーションやリストビューに関する機能
B、C⇒コンストラクタは呼び出されたときに実行されるコードブロックで合ってボタンの上書きには直接関係ない
Lightningコンポーネントバンドルに含めることができるリソースはどれか(2つ)
A. Adobe Flash
B. ヘルパー
C. Apexクラス
D. ドキュメントユーザーインターフェース
B. ヘルパー
D. ドキュメントヘルパーはJavaScriptコードからコール可能なJavaScript関数
https://developer.salesforce.com/docs/atlas.ja-jp.lightning.meta/lightning/components_bundle.htm
Lightningコンポーネントフレームワークのメリットはどれか
A. Salesforce Classicのデザインを自動的に再現する
B. Salesforceサイトとのインテグレーションが向上する
C. サーバー側ロジックによって一元管理が向上する
D. カスタムSalesforceモバイルアプリケーションのパフォーマンスが向上するユーザーインターフェース
D. カスタムSalesforceモバイルアプリケーションのパフォーマンスが向上するC⇒大半のロジックはフロントエンドで処理される
レコードから項目を表示するために使用するタグはどれかユーザーインターフェース
<lightning:outputField>
Lightningコンポーネントを使用可能な3つの製品はどれかユーザーインターフェース
Salesforceモバイルアプリケーション
Salesforceコミュニティ
Lightning ExperienceLightningコンポーネントはAuraコンポーネントとLightning Web コンポーネントの総称。
Salesforceコミュニティとは顧客やパートナー、従業員が製品やサービスについて情報交換ができるサイトのこと。コミュニティビルダーで構築できる。
開発者が新しいVisualforceページとApex拡張を作成して、Apex拡張のカバー率を95%とするテストクラスを作成している。
その後リリースしようとしたところ、「少なくとも75%以上のカバー率が必要です」という警告が表示された。
正常にリリースするためのベストプラクティスはどれか。
A. Visualforceページのマークアップを実施するテストクラスを作成する
B. 「迅速リリース」を選択してすべてのテストをスキップする
C. 「並列Apexテストを無効化」を選択してすべてのテストを実行する
D. 既存のテストクラスにテストメソッドを追加するテスト、デバッグ、リリース
D. 既存のテストクラスにテストメソッドを追加する
Apexでの単体テストについて正確な説明はどれか
A. カバー率を高めるためには、1つのメソッドに多数のコード行がある大規模なテストクラスが必要である
B. トリガーをSandboxから本番にリリースするために単体テストは必要ない
C. 単体テストにメソッドが多数ある場合、1つのメソッドが失敗すると、すべてのメソッドが失敗する
D. カバー率が上昇しないというシステムのassertステートメントも、単体テストの重要なフィードバックであるテスト、デバッグ、リリース
D. カバー率が上昇しないというシステムのassertステートメントも、単体テストの重要なフィードバックである
Apex単体テストの適切なプロセスはどれか
A. テストのデータを作成し、テストするメソッドによる結果が正しいことを検証する
B. seeAllData=trueを使用してテストデータを照会し、テストするメソッドによる結果が正しいことを検証する
C. テストのデータを作成するrunAllTests()を実行し結果が正しいことを検証する
D. seeAllData=trueを使用してテストデータを照会し、runAllTests()を実行し結果が正しいことを検証するテスト、デバッグ、リリース
A. テストのデータを作成し、テストするメソッドによる結果が正しいことを検証するseeAllData=trueで現在の組織のデータを使うこともできるがベストプラクティスではない。基本はテスト用にデータを作成するべき。
複数のSObjectの作成と編集をサポートするVisualforceウィザードと連動する1つのカスタムコントローラークラスがある。
このウィザードは複数のVisualforceページのユーザー入力のデータや、最初のURLのパラメーターを受け入れる。
このカスタムコントローラークラスの単体テストに必要な3つのステートメントはどれか(3つ)。
A. Test.setCurrentPage(pageRef);
B. String nextPage = controller.save().getUrl();
C. ApexPages.currentPage().getParameters().put('input', 'TestValue');
D. public ExtendedController(ApexPages.StandardController cntrl){}テスト、デバッグ、リリース
A. Test.setCurrentPage(pageRef);
B. String nextPage = controller.save().getUrl();
C. ApexPages.currentPage().getParameters().put('input', 'TestValue');Aで最初のURLパラメータを取得するように、現在のページを設定する
BでページのURLパラメータを使用して新しいコントローラーをインスタンス化する
CでページのURLに「?input=TestValue」というクエリパラメータを挿入する
取引先に関連する機能を実装する様々なApexクラスがある。この組織の取引先オブジェクトに新しい入力規則を追加した後、多数のテストメソッドに失敗している。
この問題を解決しコードの変更数を最小限にする方法はどれか(2つ)。
A. 有効な取引先レコードを作成するメソッドを作成し、テストメソッド内からこのメソッドをコールする
B. 有効な取引先を照会するメソッドを作成し、テストメソッド内からこのメソッドをコールする
C. 静的リソースから有効な取引先を読み込むメソッドを作成し、テストメソッド内からこのメソッドをコールする
D. 有効な取引先レコードのコールアウトを実行するメソッドを作成し、テストメソッド内からこのメソッドをコールするテスト、デバッグ、リリース
A. 有効な取引先レコードを作成するメソッドを作成し、テストメソッド内からこのメソッドをコールする
C. 静的リソースから有効な取引先を読み込むメソッドを作成し、テストメソッド内からこのメソッドをコールする
Sandbox環境で作業中、開発者が新しいテストクラスを本番にリリースする前にその機能を確認するために使用すべきものはどれか(2つ)
A. 開発者コンソールの「Test」メニュー
B. Salesforceの「設定」の「テスト実行」メニューページ
C. REST APIとApexTestRunメソッド
D. Salesforceの「設定」の「Apexテスト実行」ページテスト、デバッグ、リリース
テストクラスの実行はどこでできるか?
A. 開発者コンソールの「Test」メニュー
D. Salesforceの「設定」の「Apexテスト実行」ページ開発者コンソールのTestメニューでテストの一部またはすべてを実行したり、テストスイートを設定・実行できる。
Apexテスト実行ページでは単体テストの実行履歴が結果とともに確認できる。
共有ルール適用の有無を示すステートメントを省略したコードブロックがある時、組織の共有設定とコードを実行するユーザーの共有設定に自動的に従うものはどれか。
A. Apexコントローラー
B. Apexトリガー
C. 匿名ブロック
D. HTTPコールアウトテスト、デバッグ、リリース
C. 匿名ブロック匿名ブロックは現在のユーザーのフル権限で実行される。
Apexトリガーは明示的な共有宣言を含めることはできない。
HTTPコールアウトはユーザーの共有ルールなどは影響しない。
カスタムコントローラーは共有宣言を省略されている場合は呼び出すクラスの設定に従うがユーザーの共有ルールではない。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_keywords_sharing.htm
非公開メソッドをもつApexクラスについて、テストクラスがその非公開メソッドにアクセスするにはどうすればよいか。
A. TestVisibleアノテーションをApexクラスに追加する
B. SeeAllDataアノテーションをテストメソッドに追加する
C. SeeAllDataアノテーションをテストクラスに追加する
D. TestVisibleアノテーションをApexメソッドに追加するテスト、デバッグ、リリース
D. TestVisibleアノテーションをApexメソッドに追加する@TestVisibleを付けると、テストクラス外にあるprivateメソッドや変数等の非公開メンバーにアクセスできる。テストクラス以外はアクセス不可。
@isTest(SeeAllData=true)はあるが@SeeAllDataはない
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_annotation_testvisible.htm
開発者コンソールを使用してApexトリガーのデバッグをしたいとき以下のどれが適切か
A. トリガーの「Override Log Triggers(ログトリガーの上書き)」チェックボックスをオンにする
B. 開発者コンソールの「Progress」タブを開く
C. 開発者コンソールの「Logs」タブを開く
D. ログインスペクターにユーザー名を追加するテスト、デバッグ、リリース
C. 開発者コンソールの「Logs」タブを開くデバッグログの確認ができる
開発者コンソールの「Checkpoints」タブに表示されるものはどれか(2つ)
A. 名前空間
B. 例外
C. 時間
D. debugステートメントテスト、デバッグ、リリース
A. 名前空間
C. 時間チェックポイントに達した時点でメモリに存在したオブジェクトの状態のスナップショットが保存されている。
チェックポイントが含まれるパッケージの名前空間と、そのチェックポイントに達した日時が表示される。
変更セットを受送信できる組み合わせはどれか(2つ)
A. Developer Edition SandboxからSandbox
B. Sandboxから本番
C. Developer Editionから本番
D. SandboxからSandboxテスト、デバッグ、リリース
B. Sandboxから本番
D. SandboxからSandbox他に、本番からSandboxでも可能
メタデータAPIを使用してリリースできる2つのコンポーネントはどれか(2つ)
A. コンソールレイアウト
B. 取引先レイアウト
C. ケースフィードレイアウト
D. ケースレイアウトテスト、デバッグ、リリース
B. 取引先レイアウト
D. ケースレイアウトオブジェクトのページレイアウトはメタデータAPIのサポート対象。
A,Cは対象外なので手動で設定する
https://developer.salesforce.com/docs/atlas.ja-jp.api_meta.meta/api_meta/meta_unsupported_types.htm
Partial Sandboxに該当し、Full Sandboxに当てはまらないものはどれか(2つ)
A. 頻繁に更新される
B. 変更セットの使用
C. データの5GBの制限
D. 必要なメタデータのみ搭載テスト、デバッグ、リリース
A. 頻繁に更新される
C. データの5GBの制限Partialは5日おき、Fullは29日おきに更新される。
Partialは5GB、Fullは本番組織と同じ。
https://help.salesforce.com/s/articleView?id=sf.data_sandbox_environments.htm&type=5
LightningコンポーネントからApexメソッドおよびプロパティへのアクセスを可能にするアノテーションはどれか
A. @RestResource
B. @HttpInbocable
C. @AuraEnabled
D. @RemoteAction
C. @AuraEnabledメソッドやプロパティ側にアノテーションを付ける
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_annotation_AuraEnabled.htm
非同期Apexを実行して、ガバナ制限と実行制限が緩和されるものはどれか(3つ)。
A. ヒープの合計サイズ
B. Salesforce サーバーの最大 CPU 時間
C. Apexトランザクションごとの最大実行時間
D. SOQLクエリによって取得されるレコードの合計数
E. SOQLクエリ発行総数
A. ヒープの合計サイズ
B. Salesforce サーバーの最大 CPU 時間
E. SOQLクエリ発行総数同期処理に対して、以下のように非同期処理では制限が緩和される。
ヒープの合計サイズ:6MB⇒12MB
Salesforce サーバーの最大 CPU 時間:10,000ms⇒60,000ms
SOQLクエリ発行総数:100⇒200
https://developer.salesforce.com/docs/atlas.ja-jp.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_apexgov.htm
トリガーの実行順序について、以下を正しい順序に並び替えよ。
A. システム検証ステップが再度実行され、ユーザー定義の入力規則がチェックされます。
B. beforeトリガー
C. afterトリガー
D. レコードはデータベースに保存されますが、まだコミットされていません。
E. 重複ルールの実行
共有について正しいものはどれか(2つ)
A. 内部クラスは外部クラスから共有設定を継承しない
B. 内部クラスまたは外部クラスのいずれかを共有と宣言できるが両方は宣言できない
C. 内部クラスは外部クラスから共有設定を継承する
D. 内部クラスと外部クラスの両方を共有と宣言できる
A. 内部クラスは外部クラスから共有設定を継承しない
D. 内部クラスと外部クラスの両方を共有と宣言できるinherited sharingを宣言しない限りは継承しない。
内部クラスでも外部クラスでも独立して共有の有無は宣言できる。
https://developer.salesforce.com/docs/atlas.ja-jp.248.0.apexcode.meta/apexcode/apex_classes_keywords_sharing.htm
SalesforceDXを使用する場合、スクラッチ組織を作成・管理するために何を有効化する必要があるか
A. Production
B. Dev Hub
C. 環境ハブ
D. SandboxSalesforceDXはCLIなどを含む開発ツール
B. Dev HubDev Hubはスクラッチ組織を作成・管理するための機能。
スクラッチ組織はSandboxと違い有効期限が最大30日間で新機能やカスタマイズの開発に使用する。Sandboxは最終段階のユーザーテストなどに使う。
https://developer.salesforce.com/docs/atlas.ja-jp.sfdx_dev.meta/sfdx_dev/sfdx_setup_enable_devhub.htm
取引先を操作するApexメソッドに十分なテストカバレッジがあることを確認するため、テストデータを作成する適切な方法はどれか(2つ)
A. csvファイルを使用する
B. HttpCalloutMocksを使用する
C. WebServiceTestsを使用する
D. 静的リソースを使用する
A. csvファイルを使用する
D. 静的リソースを使用するcsvファイルを使う場合も静的リソースとしてアップロードし使用する。
静的リソースのデータを使用するにはTest.loadDataメソッドを使用する。
取引先のテストデータmyResourceを読み込む場合:List<sObject> accts = Test.loadData(Account.sObjectType, 'myResource');
https://developer.salesforce.com/docs/atlas.ja-jp.222.0.apexcode.meta/apexcode/apex_testing_load_data.htm
ある企業は組織に注文管理アプリケーションをもっている。各注文は1つ以上の注文明細項目を持つことができ、注文明細オブジェクトは主従関係を通じて注文オブジェクトに関連している。各注文明細について、合計価格は注文明細の価格に注文数量を掛け合わせることで計算される。注文レコード上のすべての注文明細項目の合計を取得するためのベストプラクティスは何か。
A. クイックアクション
B. Apex トリガー
C. 積み上げ集計項目
D. 数式項目
C. 積み上げ集計項目
カスタム例外「RecordNotFoundException」が次のように定義されているとき、どのステートメントでこのカスタム例外をスローできるか(2つ)
public class RecordNotFoundException extends Exception() {
}
A. throw new RecordNotFoundException(“problem occured”);
B. throw new RecordNotFoundException();
C. throw RecordNotFoundException(“problem occured”);
D. throw RecordNotFoundException();
A. throw new RecordNotFoundException(“problem occured”);
B. throw new RecordNotFoundException();newキーワードでインスタンスを生成する必要がある。任意のエラーメッセージを含めたい場合は引数を設定する(省略可)。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_exception_custom.htm
Apexテストクラスを作成するときに使用できるメソッドはどれか(2つ)
A. 開発者コンソールで無視するエラータイプを選択するメソッド
B. @futureメソッドの後にテストするアサーションを作成するメソッド
C. ApexテストでCreatedDateフィールドを設定および変更するメソッド
D. ブレークポイントを設定して、特定のポイントで実行をフリーズするメソッド
E. システムに保存されているcsvファイルを使用してテストデータを選択するメソッド
C. ApexテストでCreatedDateフィールドを設定および変更するメソッド
E. システムに保存されているcsvファイルを使用してテストデータを選択するメソッドC⇒Test.setCreatedDate(recordId, createdDatetime)でテスト実行コンテキストにおいてレコードの作成日(CreatedDate)項目を任意の値に設定できる。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_test.htm#apex_System_Test_setCreatedDate
E⇒Test.loadDataメソッド
https://developer.salesforce.com/docs/atlas.ja-jp.222.0.apexcode.meta/apexcode/apex_testing_load_data.htm
Lightningコンポーネントフレームワークでは、クライアント側のコントローラーロジックはどれに含まれているか
A. Apex
B. Visualforce
C. HTML
D. JavaScriptLightningコンポーネントはAuraコンポーネントとLightning Webコンポーネントの総称
D. JavaScriptJavaScriptはクライアント側を実装する言語
Apexはサーバー側のロジックを実装するもの
VisualforceはUIのカスタマイズをするものだがサーバー側のロジックを実装するもの
HTMLはマークアップ言語なのでロジックは実装できない
Apexコードについて、すべてのテストが合格しているか確認するためにどの機能を使用できるか( 2つ)
A. 開発者コンソール
B. Ant 移行ツール
C. Salesforce設定の「Apex テスト実行」
D. Workbenchメタデータの取得
A. 開発者コンソール
C. Salesforce設定の「Apex テスト実行」Ant移行ツールはメタデータを操作する機能(Spring24で廃止、SalesforceCLIに移行)
WorkbenchはRESTAPIクライアントツール
いずれもテストは関係ない
https://developer.salesforce.com/docs/atlas.ja-jp.daas.meta/daas/meta_development.htm
https://workbench.developerforce.com/about.php
Salesforce Lightning環境において、ユーザーページレイアウトのアクションに関係なくユーザープロファイルページに表示される標準的なChatterアクションは何か(2つ)
A. 投稿
B. 感謝(WDC)
C. アンケート
D. ファイル
E. メール
A. 投稿
C. アンケートLightning Experienceの標準Chatterアクションは4つ
投稿
アンケート
質問
お知らせ(グループのみ)
これらはレイアウトに割り当てられたアクションに関係なくユーザープロファイルページに表示される。
https://help.salesforce.com/s/articleView?id=sf.actions_chatter_actions.htm&type=5
ユーザーが特定のオブジェクト用の作成アクションを使って新しいデータを作成する場合、その新しいデータに関連する情報がどのタイムラインに表示されるか(3つ)
A. レコードを作成したユーザーのChatterフィード
B. 新しいレコードが作成されたレコードのフィード
C. レコードを表示できるすべてのユーザーのユーザープロフィールフィード
D. 新しいレコードのフィードの最初のエントリとして
E. レコードが作成されたレコードをフォローする最初のユーザーのChatterフィード
A. レコードを作成したユーザーのChatterフィード
B. 新しいレコードが作成されたレコードのフィード
D. 新しいレコードのフィードの最初のエントリとして明示的に共有されたり、直接そのレコードに関連していない限りは他のユーザーのフィードには表示されない。
Dがわかりにくいが、そのレコードが「新規作成された」という履歴が残るという意味合い。
商品(API名:Product2)と価格表(API名:Pricebook2)のテストデータを作成するときに使用するステートメントはどれか。
A. List objList = Test.loadData(Account.sObjectType, “myResource”);
B. Pricebook pb = new Pricebook();
C. Id pricebookId = Test.getStandardPricebookId();
D. IsTest(SeeAllData = false);
C. Id pricebookId = Test.getStandardPricebookId();前提としてPrduct2とPricebook2をそれぞれ参照するPricebookEntryという各商品とその価格を項目として持つオブジェクトがある。
よって商品と価格表のテストデータを作る際はTest.getStandardPricebookIdメソッドでPricebookID(標準価格表ID)を取得して、任意のProductレコードと一緒に紐づけて、価格を設定したPricebookEntryレコードを作成する。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_test.htm#apex_System_Test_getStandardPricebookId
A. ApexPages.StandardSetController controller = new Apexpages.StandardSetController([SELECT id FROM Account LIMIT 1]);
B. ApexPages.StandardController controller = new ApexPages.StandardController([SELECT Id FROM Account LIMIT 1]);
C. ApexPages.StandardController controller = new ApexPages.StandardController(Database.getQueryLocator(‘SELECT Id FROM Account LIMIT 1’));
D. ApexPages.StandardSetController controller = new ApexPages.StandardSetController(Database.getQueryLocator(‘SELECT Id FROM Account LIMIT 1’));
D. ApexPages.StandardSetController controller = new ApexPages.StandardSetController(Database.getQueryLocator(‘SELECT Id FROM Account LIMIT 1’));StandardSetControllerクラスはレコードのリストを扱うもので、sObjectリストかDatabase.getQueryLocatorを使用する。
A⇒単一のSObjectレコードなので間違い
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_pages_standardsetcontroller.htm
getQueryLocatorは引数としてSOQLクエリ文字列でもSOQLクエリでも受け取れる。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_database.htm#apex_System_Database_getQueryLocator
開発者が別途定義したdowork() メソッドを呼び出す際に使用できるコードとして正しいものはどれか。
A. For(Trigger.isInsert t: Trigger.new) { dowork(); }
B. If(Trigger.isInsert) dowork();
C. If(Trigger.isRunning) dowork();
D. For(Trigger.isRunning t: Trigger.new) { dowork(); }
B. If(Trigger.isInsert) dowork();Trigger.isRunnningというトリガーコンテキスト変数は存在しない。
Trigger.isInsertはBoolean型なのでforループの中でTrigger.newの各要素を受けることはできない。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_triggers_context_variables.htm
StandardControllerクラスで定義されているメソッドはどれか(2つ)
A. Merge
B. Save
C. Undelete
D. Cancel
B. Save
D. CancelB⇒変更を保存し更新後のPageReferenceを返す
D⇒変更をキャンセルしキャンセルページのPageReferenceを返す
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_pages_standardcontroller.htm#apex_ApexPages_StandardController_methods
取引先レコードの項目値が更新された場合、関連する商談のカスタム項目の値を更新する方法はどれか(2つ)
A. 取引先オブジェクトのApexトリガー
B. 取引先オブジェクトのプロセスビルダー
C. 取引先オブジェクトのクロスオブジェクト数式項目
D. 取引先オブジェクトのワークフロールール
A. 取引先オブジェクトのApexトリガー
B. 取引先オブジェクトのプロセスビルダーワークフロールールで更新できるのは同一オブジェクトの項目だけ。
クロスオブジェクト数式項目は配置されたオブジェクトに関連するオブジェクトの項目に基づいて値を表示するものなので関連オブジェクトの項目を更新するものではない。
開発者がプログラムで新しい取引先責任者レコードを作成する場合、どの標準項目が必須入力か
A. Accountld
B. Name
C. LastName
D. FirstName
C. LastName必須の項目はLastNameのみ
Nameは複合項目で直接入力する項目ではない
https://developer.salesforce.com/docs/atlas.ja-jp.object_reference.meta/object_reference/sforce_api_objects_contact.htm?q=Contact
ある企業は注文を外部オブジェクトとしてSalesforceに保存している。
外部オブジェクトと取引先の両方にある取引先のキー項目(SalesforceレコードIDではない)を活用して、
取引先と注文オブジェクトの関係(1対多の関係)を作成したいとき、どの関係を作成するべきか。
A. 主従関係
B. 間接参照関係
C. 参照関係
D. 階層関係
E. 外部参照関係
B. 間接参照関係前提として、外部オブジェクトとはSalesforce外のデータとリアルタイムに連動するレコードを作成、保存できるオブジェクトの一種。
外部オブジェクトは3種類のリレーションを持つことができる。
参照関係:紐づけに使えるのはSalesforceIDのみ
外部参照関係:親が外部オブジェクト
間接参照関係:親が標準またはカスタムオブジェクト、紐づけは外部IDかUnique属性をもつ項目
https://help.salesforce.com/s/articleView?id=sf.external_object_relationships.htm&type=5
LastModified項目の値が90日以上である場合に、List内の各Accountを非アクティブまたは非アクティブとしてマークするように実装したい。
どれを使用すべきか。
A. 内部にswitch文を含むforループ
B. 内部にforループを持つIf/else文
C. 内部にforループがあるswitch文
D. 内部にif/else文があるforループ
D. 内部にif/else文があるforループリストの各レコードに対してLastModified項目の値が90日以上か否かを判定したいのでループの中に判定するコードを置く。
2パターンを判断できればいいのでifで十分。switchはより多くのパターンを判定する場合に使用する。
複雑なトリガーロジックを処理するためにApexヘルパークラスを作成した。
トリガーがDMLガバナ制限を超える場合、ヘルパークラスはどのようにユーザーに警告できるか。
A. Messaging.sendEmail()を使用してトランザクションを続行し、DML文の数を超えたらユーザーにアラートを送信する。
B. PageReference.setRedirect()を使用して、DML文の数を超える前にユーザーをカスタムVisualforceページにリダイレクトする。
C. Limits.getDMLRows()を使用して、DML文の数を超える前にエラーメッセージを表示する。
D. ApexMessage.Messages()を使用して、DML文の数を超えた後にエラーメッセージを表示する。
C. Limits.getDMLRows()を使用して、DML文の数を超える前にエラーメッセージを表示する。AとDは超えた後にエラーを伝えるようにしているが、超えた時点でその後のコードは実行されないので間違い。
BはPageReference.setRedirect()がVisualforceコントローラー内で使われるものでトリガーの実行コンテキストでは使えない。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_System_PageReference_setRedirect.htm?q=setredirect
トリガー内でクラス変数SalesTaxの値にアクセスしてproductTaxを計算するために、次のコードブロックの[code]にどれを挿入すべきか。
public class PaymentTax {
public static decimal SalesTax = 0.0875;
}
trigger OpportunityLineItemTrigger on OpportunityLineItem (before insert, before update) {
PaymentTax PayTax = new PaymentTax();
decimal ProductTax = ProductCost * [code];
}
A. SalesTax
B. PayTax.SalesTax
C. PaymentTax.SalesTax
D. OpportunityLineItemTrigger.SalesTax
C. PaymentTax.SalesTax静的変数やメソッドはそのクラス全体で共有されるものであるため、アクセスするにはインスタンスではなくクラスに対して呼び出す。
静的メンバーをインスタンスから呼び出すことはできない。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_static.htm
組織のデータを変更せずに取引先トリガーが正常に機能していることを確認する必要がある。
取引先トリガーをテストするには、開発者は何をすべきか。
A. [取引先]タブの[新規]ボタンを使用して新しいレコードを作成する
B. 開発者コンソールのテストメニューを使用して、取引先トリガーのすべてのテストクラスを実行する
C. Force.com IDEを使用する
D. 開発者コンソールで匿名実行機能を使用する
B. 開発者コンソールのテストメニューを使用して、取引先トリガーのすべてのテストクラスを実行するAとDは組織のデータに変更を加えることになるので間違い。
CのForce.comIDEはすでに廃止済みの開発ツールのことで、テストそのものを行う機能ではない。
Salesforce AppExchangeからパッケージをインストールおよびアンインストールするには、どの権限が必要か。
A. パッケージライセンスの管理
B. AppExchange パッケージのアップロード
C. AppExchange パッケージのダウンロード
D. AppExchange パッケージの作成
C. AppExchange パッケージのダウンロードAはインストール済みの管理パッケージを管理するための権限。
BとDはパッケージを開発して公開する場合に必要な権限。
Apexクラスとインターフェースに関して、次のうち正しいステートメントはどれか(3つ)
A. クラスはデフォルトでfinal
B. インターフェースのメソッドはデフォルトでpublic
C. 内部クラスはデフォルトでprivate
D. 最上位クラスは1つの内部クラスレベルのみを持つことができる
A. クラスはデフォルトでfinal
C. 内部クラスはデフォルトでprivate
D. 最上位クラスは1つの内部クラスレベルのみを持つことができるAは↓を参照
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_keywords_final.htm
CとDは↓を参照
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_defining.htm
※Bは「デフォルトでglobalである」という記載がリファレンスで見つけられなかった。
APIツールを使用してレコードを挿入するとき、開発者は何を考慮する必要があるか(2つ)
A. ページレイアウトの必須項目が適用される
B. 必須項目の設定が適用される
C. Apexトリガーは無視される
D. 入力規則が適用される
B. 必須項目の設定が適用される
D. 入力規則が適用されるA⇒UIからの入力ではないので適用されない
C⇒ApexトリガーはAPIによる操作でも実行される
「APIツール」はDataloaderも含まれる。
Sandbox内のLightningWebコンポーネントのバグを修正するには、開発者は何を使用する必要があるか。
A. VSCode
B. 匿名実行
C. 開発者コンソール
D. Force.com IDE
A. VSCodeLightning Web コンポーネントはVSCodeの拡張機能(Salesforce Extension Pack)で開発、デバッグする。
https://trailhead.salesforce.com/ja/content/learn/projects/quick-start-lightning-web-components/set-up-salesforce-dx?trail_id=build-lightning-web-components
ある組織で取引先オブジェクトのプライベート共有モデルを実装し、Apexでカスタム取引先検索ツールを開発し、営業担当者が指定した複数の条件に一致する取引先を検索できるようにした。
リリース後、ユーザーから自分が所有していない取引先が表示されると報告があった。カスタム検索ツールで現在ログインしているユーザーに対して共有権限を強制するために何を使用すべきか。
A. Schemaクラスのメソッドを使用して、ログインしているユーザーが取引先オブジェクトへのアクセス権を持っているか判断する
B. UserInfoクラスを使用して、ログインしているユーザーが所有するレコードを返すようにすべてのSOQLクエリを絞り込む
C. クラス宣言でwith sharingキーワードを使用する
D. クラス宣言でwithout sharingキーワードを使用する
C. クラス宣言でwith sharingキーワードを使用する
販売活動中にユーザーが商品固有の情報を入力できるVisualforceページを提供する必要がある。正しい方法はどれか(2つ)
A. 新しいVisualforceページとApexコントローラを作成して、商品データ入力を提供する
B. 標準ページをコピーし、商品データ入力用の新しいVisualforceページを作成する
C. 変更するカスタムVisualforceページを提供するAppExchangeから管理パッケージをダウンロードする
D. 変更するカスタムVisualforceページを提供するAppExchangeから未管理パッケージをダウンロードする
A. 新しいVisualforceページとApexコントローラを作成して、商品データ入力を提供する
D. 変更するカスタムVisualforceページを提供するAppExchangeから未管理パッケージをダウンロードするB⇒Salesforce標準ページをコピーすることはできないので間違い
C⇒管理パッケージは変更できないので間違い
複数の通貨を有効にしている組織で、CampaignオブジェクトでTotal_estimated_value__cと呼ばれる積み上げ集計項目を使用して、
CampaignMemberオブジェクトからEstimated_value__c通貨項目の合計を集計する必要がある。
Total_estimated_value__c積み上げ集計項目の通貨はどのように決定されるか。
A. Campaignmember.Estimated_value__cの値はCampaignオブジェクトのレコードの通貨に変換され、合計はCampaignオブジェクトのレコードの通貨を使用して表示される。
B. CampaignMember.Estimated_value__cの値はCampaignMemberレコードの大半で通貨に変換され、その通貨を使用して合計が表示される。
C. CampaignMember.Estimated_value__cの値が合計され、結果のTotal_estimated_value__cフィールドがCampaignオブジェクトのレコードの数値項目として表示される。
D. CampaignMember.Estimated_value__cの値は現在のユーザーの通貨に変換され、合計はCampaignオブジェクトのレコードの通貨を使用して表示される。
A. Campaignmember.Estimated_value__cの値はCampaignオブジェクトのレコードの通貨に変換され、合計はCampaignオブジェクトのレコードの通貨を使用して表示される。組織でマルチ通貨を使用している場合は、主レコードの通貨によって積み上げ集計項目の通貨が決まる。例えば、主レコードと従レコードの通貨が異なる場合、従レコードの値は主レコードの通貨に換算される。
https://help.salesforce.com/s/articleView?id=sf.fields_about_roll_up_summary_fields.htm&type=5
レビュアーは、候補者の採用が推奨されている場合にのみ、コメント項目に理由を入力する必要がある。
開発者はこの要件を実施するためにどのアクションを実行すべきか。
A. 必須のコメント項目を作成
B. 数式項目を作成
C. 入力規則を作成
D. 必要なVisualforceコンポーネントを作成
C. 入力規則を作成特定の条件をもとにコメント項目の入力を求めるようにシンプルに実装可能なのは選択肢の中では入力規則だけ。
Test.startTest()およびTest.stopTest()を使用する理由は次のうちどれか。
A. この2つの行間のコードのApexコードカバレッジ要件を回避するため
B. 匿名Apexコードの実行時に匿名ブロックの実行を開始および停止するため
C. テストコードを指定して、Apexの行数ガバナ制限に影響を与えないようにするため
D. 単一のテストクラスの実行中にガバナ制限の追加セットを作成するため
D. 単一のテストクラスの実行中にガバナ制限の追加セットを作成するためTest.startTestとTest.stopTestを使うことでガバナ制限の追加セットを作成されるので、それまでにテストデータ作成などで消費したガバナ制限がリセットされて、通常の実行と同じ条件でテストが可能になる。
カスタムボタンとカスタムリンクでサポートされるコンテンツソースはどれか(2つ)
A. VisualForceページ
B. 静的リソース
C. URL
D. Chatterファイル
E. Lightningページ
A. VisualForceページ
C. URLLightning Experienceでサポートされているコンテンツソース
・URL
・Visualforceページ
・OnClick JavaScript(非推奨)
https://help.salesforce.com/s/articleView?id=sf.defining_custom_links_fields.htm&type=5
A. 建設作業オブジェクトに機械オブジェクトへの参照項目を作成する。
B. 機械オブジェクトに建設作業オブジェクトへの参照項目を作成する。
C. 機械オブジェクトと建設作業オブジェクトの両方に主従関係を持つ連結オブジェクトを作成する。
D. 機械オブジェクトに、建設作業オブジェクトへの主従関係を作成する。
C. 機械オブジェクトと建設作業オブジェクトの両方に主従関係を持つ連結オブジェクトを作成する。機械を様々な建設作業に割り当てたい、1つの建設作業に複数の機械を割り当てたい⇒多対多の関係性が求められている
クイックアクションでレコードを作成する際、フィード項目を投稿する最も簡単な方法はどれか。
A. クイックアクションでフィード項目の作成を選択する。
B. 新しいレコードでケースフィードの作成を選択する。
C. 新しいレコードにワークフロールールを追加する。
D. 新しいレコードにトリガーを追加する。
A. クイックアクションでフィード項目の作成を選択する。各オブジェクトの設定>ボタン、リンク、およびアクション>新しいアクションで作成できる。作成画面の「フィード項目を作成」チェックボックスをONにすればレコード作成時にChatterフィードに投稿されるようになる。
https://help.salesforce.com/s/articleView?id=sf.creating_object_specific_actions.htm&type=5
Warehouseという名前のカスタムオブジェクトがあり、各レコードには個別のレコード所有者がおり、Salesforceの親Accountに関連付けられている。
AccountとWarehouseを関連付けるためにどの関係を使用すべきか。
A. 1対多
B. 参照
C. 主従
D. 親子
B. 参照主従だと所有者を個別に設定できず主レコードに依存する。
https://help.salesforce.com/s/articleView?id=sf.relationships_considerations.htm&type=5
映画、俳優、契約を追跡するスキーマを作成したい。1つの映画は多くの契約を持つことができ、1人の俳優は多くの契約を持つことができる。各契約は、1 人のユーザーによって所有され、アクティブに管理される。
映画や俳優のレコードにアクセスすることなく、ユーザーが所有する契約を簡単に管理できるようにするには、どのスキーマを作成すべきか。
A. 映画オブジェクトへの主従関係と俳優オブジェクトへの参照関係
B. 映画オブジェクトへの参照関係と俳優オブジェクトへの主従関係
C. 映画オブジェクトへの主従関係と俳優オブジェクトへの主従関係
D. 映画オブジェクトへの参照関係と俳優オブジェクトへの参照関係
D. 映画オブジェクトへの参照関係と俳優オブジェクトへの参照関係映画と契約で1対多、俳優と契約で1対多とし、かつ契約に所有者を持たせるためには参照関係を使用する必要があるため、2つの参照関係項目を使用する。主従関係の従レコードになると所有者は設定できない。
以下のコードでBooleanはどのタイプから継承するか
Boolean b = true;
A. Enum
B. Object
C. String
D. Class
B. ObjectすべてのApexデータ型がObject型から継承される。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/langCon_apex_primitives.htm
A. メッセージは記録されない
B. Generic Exception
C. List Exception
D. NullPointer Exception
D. NullPointer Exception取引先レコードとして宣言された変数aがnullなのにName項目にアクセスしようとしているため、nullを参照していることを表す例外が出る。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_exception_methods.htm?q=nullpointer%20exception
開発者コンソールの機能として正しいものはどれか
A. 匿名Apexコードの実行、REST APIの実行、コードの作成/編集
B. 匿名Apexコードの実行、コードの作成/編集、デバッグログの表示
C. 匿名Apexコードの実行、コードの作成/編集、コード変更のデプロイ
D. 匿名Apexコードの実行、REST APIの実行、コード変更のデプロイ
B. 匿名Apexコードの実行、コードの作成/編集、デバッグログの表示REST APIの実行は対応していない。コード変更のデプロイはVSCode拡張機能の機能。
単一レコードで、ユーザーは複数選択リストから複数の値を選択する。選択した値はApexでどのように表されるか。
A. 各値をカンマで区切ったStringとして
B. 各値をSetの要素とした、Set<String>として
C. 各値をListの要素とした、List<String>として
D. 各値をセミコロンで区切ったStringとして
D. 各値をセミコロンで区切ったStringとして例えばSOQLクエリでWHERE句にセミコロンで区切った値を設定して複数の値に合致するレコードを取得できる
https://developer.salesforce.com/docs/atlas.ja-jp.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_querying_multiselect_picklists.htm
カスタムSVGをLightning Webコンポーネントに含めることができる3つのステップはどれですか。3つ選びなさい。
A. SVGを静的リソースとしてアップロードします。
B. HTMLテンプレートでgetterを参照します。
C. SVGをコンテンツアセットファイルとしてインポートします。
D. HTMLテンプレートでインポートを参照します。
E. 静的リソースをインポートし、JavaScriptでgetterを提供します。SVGは画像ファイルの一種
A. SVGを静的リソースとしてアップロードします。
B. HTMLテンプレートでgetterを参照します。
E. 静的リソースをインポートし、JavaScriptでgetterを提供します。A⇒E⇒Bの順で実装する。
Eでgetterを使うことで静的リソースとしてアップロードしたSVGのURLをHTMLから参照してコンポーネントに表示する。
https://developer.salesforce.com/docs/platform/ja-jp/lwc/guide/use-svg-in-component.html
https://developer.salesforce.com/docs/platform/ja-jp/lwc/guide/js-props-getters-setters.html?q=getter
外部IDの用途はどれか(2つ)
A. 外部システムからインポートされたレコード間の関係を作成する
B. 別の環境と同じSalesforceIDを使用して開発環境でレコードを作成する
C. SalesforceでsObjectタイプを識別する
D. Upsertを使用して重複レコードを作成するのを防ぐ
A. 外部システムからインポートされたレコード間の関係を作成する
D. Upsertを使用して重複レコードを作成するのを防ぐ文字通りSalesforceIDのような性質をもった外部システムのIDとして使える
組織には「NoContacts」という名前の単一の取引先があり、関連する取引先責任者はない。
以下のApexを実行した結果はどうなるか。
List<Account> accounts = [
SELECT Name, (SELECT Id, Name FROM Contacts)
FROM Account
WHERE Name = 'NoContacts'
];
A. QueryExceptionがスローされる
B. accounts[0].contactsは空となる
C. accounts[0].contactsはNullとなる
D. accounts[0].contactsは無効となる
B. accounts[0].contactsは空となるクエリは正常に実行され、関連レコードのリストが空で返される(nullではない)。
Lightningコンポーネントで外部Javascriptライブラリをロードするために使用される<ltng:require>タグの機能は何か(3つ)
A. ドキュメントからのファイルの読み込み
B. 重複するスクリプトの1回限りの読み込み
C. 読み込み順序の指定
D. スクリプトを並行して読み込む
E. 外部でホストされているスクリプトの読み込み
B. 重複するスクリプトの1回限りの読み込み
C. 読み込み順序の指定
D. スクリプトを並行して読み込む静的リソースとしてアップロードしたJavaScriptライブラリを参照することができる。
その他、読み込んだJavaScriptライブラリをカプセル化して再利用することもできる。
https://developer.salesforce.com/docs/atlas.ja-jp.lightning.meta/lightning/js_libs_platform.htm
GetterメソッドとSetterメソッドに関する記述のうち、正しいものはどれか(2つ)
A. ページからコントローラーに値を渡すには、より適切なメソッドが必要である
B. Setterメソッドは常にグローバルに宣言する必要がある
C. GetterメソッドとSetterメソッドの実行順序は保証されない
D. Getterメソッドは、コントローラからページに値を渡すことができる
C. GetterメソッドとSetterメソッドの実行順序は保証されない
D. Getterメソッドは、コントローラからページに値を渡すことができるGetterとSetterはカスタムコントローラの作成において、ページとコントローラ間の値のやり取りを行うメソッドである。
A⇒Visualforceコンテキストではページからコントローラへ値を渡すのがSetterメソッドなので他のメソッドは不要
B⇒必ずしもglobalである必要はなく、一般的にはpublicが多い
https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_quick_start_controller_getter_methods.htm
以下のコントローラクラスがある時、どのコードブロックが匿名ウィンドウで正常に実行されるか。
public with sharing class myFooController{
public integer prop {get; private set;}
}
A. myFooController m = new myFooController();
System.assert(m.prop == null);
B. myFooController m = new myFooController();
System.assert(m.prop == 0);
C. myFooController m = new myFooController();
System.assert(m.prop == 1);
D. myFooController m = new myFooController();
System.assert(m.prop != null);
A. myFooController m = new myFooController();
System.assert(m.prop == null);初期値を設定されない限りApexの変数はnullが設定される。
https://developer.salesforce.com/docs/atlas.ja-jp.248.0.apexcode.meta/apexcode/langCon_apex_primitives.htm
マルチテナント環境で開発する場合、開発者がガバナ制限に達するのを避けるために使用すべき戦略はどれか(2つ)
A. コレクションを使用して、最低限必要な項目だけでなく、関連するオブジェクトのすべての項目を保存する。
B. Apexクラス内の変数を使用して、大量のデータを保存する。
C. SOQL For ループを使用して、多数の行を返すクエリから取得したデータを繰り返し処理する。
D. Limitsクラスのメソッドを使用して、ガバナ制限を監視する。
C. SOQL For ループを使用して、多数の行を返すクエリから取得したデータを繰り返し処理する。
D. Limitsクラスのメソッドを使用して、ガバナ制限を監視する。まとめてリストで取得しておいてループ処理することでSOQLクエリのガバナ制限消費を抑えらえれる。
Limitクラスのメソッドで制限値と現在の消費量を確認できる。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_limits.htm?q=limit
あるカスタムオブジェクトにFood_Preference__cというカスタム選択リスト項目が存在し、この選択リストには”Vegan”、”Kosher”、”No Preference”というオプションが含まれている。
レコードが作成または更新されるたびに値が入力されることを確認する必要があり、レコードが保存されるたびに値が選択されることを確実にするための最も効率的な方法は何か。
A. 項目定義で項目を必須としてマークする
B. 選択リスト作成時に「最初の値をデフォルト値とする」にチェックを入れる
C. オブジェクトのページレイアウトで項目を必須としてマークする
D. 値が選択されることを強制するための入力規則を設定する
A. 項目定義で項目を必須としてマークするB⇒必ず値が選択された状態にはなるがユーザーが入力せずに保存してしまう可能性がある
C⇒ページレイアウトではAPI経由の変更では空白になるリスクがある
D⇒可能だがAのほうがよりシンプル
Lightningコンポーネントはリソースバンドルに何を含めることができるか(2つ)
A. カスタムクライアント側のレンダリング動作
B. 縮小化のためのスクリプト作成
C. コンポーネントに割り当てられたCSSスタイル
D. グローバル設定を含むプロパティファイル
A. カスタムクライアント側のレンダリング動作
C. コンポーネントに割り当てられたCSSスタイルLightningコンポーネントのバンドルに配下が含められる。
・コンポーネントまたはアプリケーション
・CSS スタイル(.cmpまたは.app)
・コントローラ(.js)
・設計
・ドキュメント(.auradoc)
・レンダラ(.js)
・ヘルパー(.js)
・SVG ファイル
https://developer.salesforce.com/docs/atlas.ja-jp.lightning.meta/lightning/components_bundle.htm
開発者がSalesforce REST APIにリクエストを送信し、レスポンスを表示できるツールはどれか。
A. Workbench RESTエクスプローラ
B. RESTリソースパスのURL
C. 開発者コンソールのRESTタブ
D. Force.com IDE RESTエクスプローラタブ
A. Workbench RESTエクスプローラWorkbenchはRESTAPIクライアントツール
https://workbench.developerforce.com/about.php
VisualforceページのコンテンツをPDFとして表示するコードはどれか
A. <apex:page contentType=”pdf”>
B. <apex:page renderAs=”pdf”>
C. <apex:page contentType=”application/pdf”>
D. <apex:page rendersAs=”application/pdf”>
B. <apex:page renderAs=”pdf”>apex:pageタグを使用しrendersAs属性を使用する
https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_output_pdf_renderas.htm
SOQLインジェクションの脆弱性から保護するために、開発者がVisualforceコントローラで使用できるクエリはどれか(2つ)
A
String qryString = 'SELECT Id FROM Contact WHERE Name LIKE :qryName';
List<Contact> queryResults = Database.query(qryString);
B
String qryName = '%' + Name + '%';
String qryString = 'SELECT Id FROM Contact WHERE Name LIKE :qryName';
List<Contact> queryResults = Database.query(qryString);
C
String qryName = '%' + String.escapeSingleQuotes(name) + '%';
String qryString = 'SELECT Id FROM Contact WHERE Name LIKE :qryName';
List<Contact> queryResults = Database.query(qryString);
D
String qryName = '%' + String.enforceSecurityChecks(name) + '%';
String qryString = 'SELECT Id FROM Contact WHERE Name LIKE :qryName';
List<Contact> queryResults = Database.query(qryString);
Apexコンパイラエラーが発生するステートメントはどれか。
A. Map<Id, Lead> lmap = new Map<Id, Lead>([Select ID from Lead Limit 8]);
B. Date d1 = Date.Today(), d2 = Date.ValueOf(‘2018-01-01’);
C. Integer a=5, b=6, c, d = 7;
D. List<String> s = List<String>{‘a’,’b’,’c’};
D. List<String> s = List<String>{‘a’,’b’,’c’};newキーワードが抜けている。
正しくはList<String> s = new List<String>{‘a’,’b’,’c’};
新しく採用された開発者は、ケースオブジェクトに複数のトリガーがあることがわかった。
トリガーを使用する際に開発者は何を考慮すべきか。
A. 開発者はトリガーの実行順序を決めなければなりません。
B. トリガーの実行順序は作成日時に基づいています。
C. 単体テストではテストするトリガーを指定する必要があります。
D. 同じsObjectに対するトリガーは実行順序が保証されません。
D. 同じsObjectに対するトリガーは実行順序が保証されません。1つのオブジェクトに複数トリガーがある場合はその実行順序は保証されない。つまり決まっていない。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_triggers_order_of_execution.htm
標準機能とカスタム機能の両方を含むケースレコードを表示および編集するVisualforceページが必要であるとき、
myControllerExtensionというApexクラスで定義されたコントローラ機能の正しい実装はどれか。
A. extensions = “myControllerExtension”
B. controller = “myControllerExtension”
C. controller = “Case” extensions = “myControllerExtension”
D. standardController = “Case” extensions = “myControllerExtension”
D. standardController = “Case” extensions = “myControllerExtension”<apex:page>コンポーネントのstandardController属性でCaseオブジェクトの標準コントローラーを呼び出し、extensions属性で別途定義したApexクラスの拡張機能を呼び出す。
https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_controller_extension.htm
取引先責任者のリストを更新するApexメソッドを作成し、LightningWebコンポーネントで使用できるようにしたい。
これを実現するために、開発者はどのアノテーションをApexメソッドに追加する必要があるか。
A. @RemoteAction
B. @AuraEnabled
C. @AuraEnabled(cacheable=true)
D. @RemoteAction(cacheable=true)
B. @AuraEnabled@RemoteActionはApexメソッドをJavaScriptを介してVisualforceでコールできるようにするもの。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_annotation_RemoteAction.htm
@AuraEnabled(cacheable=true) は、クライアントにメソッドの結果をキャッシュし、実行時のパフォーマンスを改善できる。ただし、データを取得するが変更しないメソッドにしか使えない。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_annotation_AuraEnabled.htm
Visualforceページにページネーションを追加するために、開発者が使用すべき手段はどれか。
A. StandardController
B. ページのaction属性
C. ページのextensions属性
D. StandardSetController
D. StandardSetControllerStandardSetControllerクラスはレコードのリストを扱うもので、setPageSize(pageSize)メソッドで各ページセット内のレコード数を設定(ページネーション)できる。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_pages_standardsetcontroller.htm
“without sharing”キーワードを使用してApexクラスを宣言すると、どのような影響があるか。
A. 現在のユーザーが所有するレコードのみを更新できる
B. 現在のユーザーの共有ルールは適用されなくなる
C. クラスが作成したレコードに共有ルールを設定できなくなる
D. このクラスは、開発者権限を持つユーザーのみが使用できなくなる
B. 現在のユーザーの共有ルールは適用されなくなるhttps://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_keywords_sharing.htm
どの数式が正しく評価されるか(2つ)
A. Double d = 3.14159;
B. Integer I = 3.14159;
C. Decimal d = 3.14159;
D. Long l = 3.14159;
A. Double d = 3.14159;
C. Decimal d = 3.14159;IntegerとLongは小数点を含まない数値を扱うデータ型
Decimalは小数点以下の数値を正確に表現できる。Doubleは浮動小数点数(有効桁数内で値を近似値で扱う)
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/langCon_apex_primitives.htm
変更セットのデプロイについて正しい説明はどれか(3つ)
A. 変更セットはカスタム設定データをデプロイできる
B. 変更セットは、関連する組織間でのみ使用できる
C. デプロイは一方向の単一トランザクションで行われる
D. 2つの組織間で変更セットを送信するには、デプロイメント接続が必要
E. 変更セットはレコードの転送に使用できる
B. 変更セットは、関連する組織間でのみ使用できる
C. デプロイは一方向の単一トランザクションで行われる
D. 2つの組織間で変更セットを送信するには、デプロイメント接続が必要A、E⇒変更セットのデプロイはメタデータ(構造)を対象としたものでデータは対象外
https://help.salesforce.com/s/articleView?id=sf.changesets.htm&type=5
before insertトリガーの代わりにafter insertトリガーを使用する利点はどれか。
A. 開発者は新しいレコードの項目を更新する際に入力規則を回避できる
B. 開発者は新しいレコードを参照する他のオブジェクトを挿入できる
C. 開発者は外部サービスにコールアウトを行うことができる
D. 開発者はクエリなしで新しいレコードの項目を変更できる
B. 開発者は新しいレコードを参照する他のオブジェクトを挿入できるafterであればIDが発行されているのでそれを参照する関連レコードを作成できる。
A⇒afterトリガーの実行前にも入力規則が評価される。
C⇒beforeでもafterでも@futureを使えばコールアウト可能
https://help.salesforce.com/s/articleView?id=000386018&type=1
D⇒beforeの利点
会社のブランドガイドラインを使用してフォーマットされたPDF見積書を作成し、それを商談レコードに自動的に保存するようにしたい。
開発者がこの機能を実現する方法はどれか(2つ)
A. カスタムスタイルを使用してVisualforceページを作成する
B. 会社の書式設定を実装するVisual workflowを作成する
C. AppExchangeからアプリケーションをインストールして文書を生成する
D. メールテンプレートを作成してプロセスビルダーで使用する
A. カスタムスタイルを使用してVisualforceページを作成する
C. AppExchangeからアプリケーションをインストールして文書を生成するSalesforceアプリ上でPDFを生成するにはVisualforceを作成するか、同等の機能を持ったAppExchangeを探してインストールする。
DescribeSObjectResultを使用して、現在のユーザーがオブジェクトのレコードを編集できるか判断するために、開発者が使用できるApexメソッドはどれか。
A. canUpdate()
B. canEdit()
C. isUpdateable()
D. isEditable()
C. isUpdateable()編集する権限があればtrue、なければfalseが返される。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_sobject_describe.htm#apex_Schema_DescribeSObjectResult_isUpdateable
開発者がサンドボックスの全体的なコードカバレッジを判断できるのはどこか(2つ)
A. 「Apex テスト実行」ページ
B. 開発者コンソール の [Test Suite Run] パネル
C. 「Apex クラス」ページ
D. 開発者コンソールの [Tests] タブ
C. 「Apex クラス」ページ
D. 開発者コンソールの [Tests] タブC⇒設定>Apexクラスで「組織のコードカバー率を見積る」をクリックすると組織全体のコードカバー率を確認できる。
D⇒クラスごとのカバー率だけでなく全体のカバー率(Overall)も確認できる。
開発者がコントローラ拡張よりもカスタムコントローラを使用することを検討する理由は何か。
A. SOQLクエリのガバナ制限を引き上げるため
B. ページのすべてのロジックを実装し、デフォルトのSalesforce機能を回避するため
C. 標準コントローラの組み込み機能を活用するため
D. ユーザーの共有設定と権限を強制するため
B. ページのすべてのロジックを実装し、デフォルトのSalesforce機能を回避するためコントローラ拡張は、基本部分は標準コントローラまたは既存のカスタムコントローラの機能を使ったうえで、追加でカスタムした動作を実現したいときに使う。
また、ユーザーの共有設定と権限を強制したいときに使用する。
https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_controller_def.htm
開発者は金融システムのApexクラスを実装している。このクラスでは、変数creditAmountとdebtAmountは、一度値が代入されると変更できないようにする必要がある。
値が1回しか代入されないようにするために、開発者が変数を宣言する方法はどれか(2つ)
A. staticキーワードを使用し、クラスのコンストラクタでその値を割り当てる
B. finalキーワードを使用し、クラスのコンストラクタでその値を割り当てる
C. staticキーワードを使用し、その値をstaticイニシャライザに割り当てる
D. finalキーワードを使用し、変数を宣言するときにその値を割り当てる
B. finalキーワードを使用し、クラスのコンストラクタでその値を割り当てる
D. finalキーワードを使用し、変数を宣言するときにその値を割り当てるfinalキーワードがついた変数は値を一度だけ割り当てるもので、変数の宣言時かコンストラクター内で割り当てるかの2つの方法がある。
staticはクラスレベルで値が保持され、インスタンス間で共有される者であって、値が一度のみで固定になるわけではない。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_keywords_final.htm
Apexで@InvocableMethodアノテーションを使用する場合の考慮事項はどれか(3つ)
A. @InvocableMethodアノテーションを使用するメソッドはstaticとして宣言する必要がある。
B. @InvocableMethodアノテーションを使用するメソッドはPublicまたはGlobalとして宣言できる。
C. @InvocableMethodアノテーションを使用するメソッドは複数の入力パラメータを持つことができる。
D. @InvocableMethodアノテーションを使用するメソッドは戻り値を定義する必要がある。
E. @InvocableMethodアノテーションを使用するメソッドは、Apexクラスごとに1つだけ定義できる。
A. @InvocableMethodアノテーションを使用するメソッドはstaticとして宣言する必要がある。
B. @InvocableMethodアノテーションを使用するメソッドはPublicまたはGlobalとして宣言できる。
E. @InvocableMethodアノテーションを使用するメソッドは、Apexクラスごとに1つだけ定義できる。A、B⇒付加するメソッドはstaticかつ、publicまたはglobalの必要がある
C⇒入力パラメータは1つまでで、リストかリストのリストの必要がある。
D⇒戻り値はnullでも可能。null以外の場合はリストかリストのリストの必要がある。
E⇒クラスの1つのメソッドのみ付加できる
また、他のアノテーションと併用はできない。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_annotation_InvocableMethod.htm?q=invocablemethod
ApexPages.currentPage().getParameters()を使用してVisualforceコントローラからURLパラメータを取得する場合の戻り値のデータ型は何か。
A. List
B. Map
C. String[]
D. Enum
B. MapgetParametersメソッドの戻り値はMap<String, String>型
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_System_PageReference_getParameters.htm
開発者がVisualforceページでカスタムスタイルを使用する際に用いるものはどれか(3つ)
A. <apex:stylesheet>タグ
B. インラインCSS
C. <apex:style>タグ
D. <apex:stylesheets>タグ
E. 静的リソース
A. <apex:stylesheet>タグ
B. インラインCSS
E. 静的リソースVisualforceでカスタムスタイルを使用するには方法が2つある。
・静的リソースとしてアップロードしたCSSファイルを<apex:stylesheet>タグで参照する(A・E)
・<style>タグ内でインラインCSSコードを定義する(通常のHTMLページと同じ)(B)
https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_styling_custom.htm
@isTestアノテーションに関して正しい説明はどれか(3つ)
A. @isTest(SeeAllData=false)が付けられたクラス内の@isTest(SeeAllData=true)が付けられたメソッドは、すべての組織データにアクセスできる
B. @isTest(SeeAllData=true)が付けられたクラス内の@isTest(SeeAllData=false)が付けられたメソッドは、すべての組織データにアクセスできる。
C. テストメソッドを含むクラスは、@isTestアノテーションの有無に関係なく、Apexコードの制限にカウントされる。
D. クラスが@isTest(SeeAllData=false)で付けられている場合でも、テスト内で製品と価格表は表示される。
E. クラスが@isTest(SeeAllData=false)で付けられている場合でも、テスト内でプロファイルは表示される。
A. @isTest(SeeAllData=false)が付けられたクラス内の@isTest(SeeAllData=true)が付けられたメソッドは、すべての組織データにアクセスできる
B. @isTest(SeeAllData=true)が付けられたクラス内の@isTest(SeeAllData=false)が付けられたメソッドは、すべての組織データにアクセスできる。
E. クラスが@isTest(SeeAllData=false)で付けられている場合でも、テスト内でプロファイルは表示される。A⇒メソッドへの @IsTest(SeeAllData=true)はクラスの @IsTest(SeeAllData=false) よりも優先される
B⇒クラスにすでに @IsTest(SeeAllData=true)が付加されていてもメソッドへの@IsTest(SeeAllData=false) は無視される。つまり、そのメソッドは組織のデータにアクセスできる。
C⇒@IsTestが付加されたクラスは、Apex コードの組織内の上限の 6 MB には含まれない
D⇒getStandardPricebookIdメソッドでテストで組織データを照会できるかに関係なく、組織内の標準価格表のIDを取得できるが製品はできない。
E⇒@IsTest(SeeAllData=false)でも組織の管理に使用するオブジェクト (ユーザーやプロファイルなど) にはアクセスできる
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_annotation_isTest.htm
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_test.htm#apex_System_Test_getStandardPricebookId
新しいカスタム例外クラスを作成する正しいコードはどれか。
A. public class CustomException extends Exception{}
B. CustomException ex = new (CustomException)Exception();
C. public class CustomException implements Exception{}
E. (Exception)CustomException ex = new Exception();
A. public class CustomException extends Exception{}extendsキーワードを使って組み込みのExceptionクラスを拡張して作成する。クラス名は「Exception」で終わる必要がある。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_exception_custom.htm
サードパーティのJavaScriptフレームワークを使用して作成され、Visualforceページを使用して公開された多数のカスタムアプリケーションがある。
これらのアプリケーションを更新して、Lightning Experienceの外観に似たスタイルを適用したい。ビジネス要求を最も迅速かつ効果的に満たすために何をすべきか。
A. 定義で属性LightningStyleSheetsをtrueに設定する
B. カスタムアプリケーションで使用されるVisualforceページで、Lightning Experience、Lightning Communities、およびモバイルアプリで利用可能にするオプションを有効にする
C. Salesforce Lightning Design SystemのCSSスタイルシートをJavaScriptアプリケーションに組み込む
D. すべてのVisualforceページをLightningコンポーネントとして書き直す
ごみ箱に送られたレコードの監査証跡を作成する必要があるとき、 どのタイプのトリガーを作成すべきか。
A. after delete
B. after undelete
C. before undelete
D. before delete
A. after delete証跡は削除が完了した後の状態であるべきなのでafter deleteトリガーを使用する。Trigger.oldにアクセスすれば削除されたレコードを参照できる。
before deleteでは削除が完了していないものも含まれる可能性があるため間違い。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_triggers_context_variables.htm
ごみ箱から復元されたレコードの監査証跡を作成する必要があるとき、どのタイプのトリガーを作成すべきか。
A. before delete
B. after delete
C. before undelete
D. after undelete
D. after undelete証跡は復元が完了した後の状態であるべきなのでafter undeleteトリガーを使用する。Trigger.newにアクセスすれば復元されたレコードを参照できる。
before undeleteでは復元が完了していないものも含まれる可能性があるため間違い。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_triggers_context_variables.htm
SalesforceのISVパートナーであるA社は、管理パッケージアプリケーションを開発している。ユーザーはアプリケーションモジュールの1つであるBodyfatというApexクラスとcalculateBodyfat()メソッドを使用して体脂肪を計算できる。
製品の所有者は、ISVのパッケージ名前空間の外部でカスタマイザーを開発するときに、アプリケーション利用者がこのメソッドにアクセスできるようにしたい。
パッケージ名前空間の外部でcalculateBodyFatメソッドにアクセスできるようにするには、開発者はどの手段を取るべきか。
A. publicアクセス修飾子を使用してクラスとメソッドを宣言する
B. globalアクセス修飾子を使用してクラスとメソッドを宣言する
C. クラスをpublicとして宣言し、メソッドでglobalアクセス修飾子を使用する
D. クラスをpublicとして宣言し、メソッドでpublicアクセス修飾子を使用する
B. globalアクセス修飾子を使用してクラスとメソッドを宣言するA、D⇒publicでは同じ名前空間内か無名名前空間内でしかアクセスできない。
C⇒クラスがpublicではその配下のメソッドがglobalでも名前空間外からアクセスできない。
※名前空間=パッケージ
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_access_modifiers.htm
開発者が組織内でテストを実行するための方法はどれか(3つ)
A. Bulk API
B. Tooling API
C. 設定メニュー
D. Salesforce DX
E. メタデータ API
B. Tooling API
C. 設定メニュー
D. Salesforce DXB⇒Salesforceのカスタム開発ツールを作成できるAPIで、開発にかかわる機能も備えている
https://developer.salesforce.com/docs/atlas.ja-jp.salesforce1api.meta/salesforce1api/apis_tooling_introducing.htm
C⇒設定>Apexテスト実行 から可能
D⇒Salesforceの開発ツール
新しいApexクラスをテストするために、特定の項目値を持つレコードを用意する必要があります。データがテストで利用可能であることを確認するために何をすべきか。
A. 匿名Apexを使用して、必要なデータを作成する。
B. SOQLを使用して、必要なデータを組織にクエリする。
C. Test.loadData()を使用し、静的リソースでCSVファイルを参照する。
D. Test.loadData()を使用し、ドキュメント内のJSONファイルを参照する。
C. Test.loadData()を使用し、静的リソースでCSVファイルを参照する。A、B⇒テストクラスがデータにアクセスできないので間違い
D⇒Test.loadDataメソッドは静的リソースからデータを読み込むもので、JSONにも対応していないので間違い
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_testing_load_data.htm
有効なApexの代入はどれか。
A. Integer x = 5*1.0;
B. Integer x = 5.0;
C. Double x = 5;
D. Float x = 5.0;
C. Double x = 5;A、B⇒Integerは整数しか扱えないので小数を含む値は不可。
D⇒Floatというデータ型はApexにはない。浮動小数点数はDoubleを使用する。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/langCon_apex_primitives.htm
ApexとVisualforceページを使用する場合、MVCアーキテクチャのモデルを表すコードのタイプはどれか。
A. SOQLを使用して取引先レコードのリストをクエリするコントローラ拡張メソッド
B. 取引先レコードのリストを保存するコントローラ拡張メソッド
C. コントローラ拡張メソッドから返された取引先レコードのリスト
D. 取引先レコードのリストを処理するカスタムJavaScript
C. コントローラ拡張メソッドから返された取引先レコードのリストSalesforceにおけるMVCアーキテクチャのモデルはSalesforceのデータ構造やデータに対する操作を表す。よってCが正解。
A、B、D⇒MVCアーキテクチャにおけるコントローラー(C)に該当するので間違い。
トリガーでApexヒープ制限のエラーに遭遇した場合、このエラーを回避する方法はどれか(2つ)
A. 変数を宣言するときにtransientキーワードを使用する。
B. 関連するオブジェクトを更新するときに、関連するオブジェクトの項目をクエリしてコレクションに保存する。
C. 使用後にコレクションを削除するか、nullに設定する。
D. 大きなクエリ結果を単一のコレクションに割り当ててコレクションをループする代わりに、SOQLのループを使用する。
C. 使用後にコレクションを削除するか、nullに設定する。
D. 大きなクエリ結果を単一のコレクションに割り当ててコレクションをループする代わりに、SOQLのループを使用する。ヒープ制限のエラーはメモリに保存されるデータ量が制限を超えているために発生する (同期処理で 6 MB、非同期処理で 12 MB)。
A⇒transientキーワードはVFページのコントローラや拡張機能内の変数に使うなら有効。
ベストプラクティスとしては不要になった変数の値は削除したりループ処理のスコープ外とする、SOQL for Loopを使うことが挙げられる。
https://help.salesforce.com/s/articleView?id=000395030&type=1
レコードが特定のレコードタイプに割り当てられている場合にのみ実行するApexメソッドを作成する必要がある。
必要なレコードタイプIDをレコードタイプ名で動的に決定できる方法はどれか(2つ)
A. SOAP APIへのアウトバウンドWebサービス呼び出しを行う
B. DescribeSObjectResultクラスでgetRecordTypeInfosByDeveloperNameメソッドを使用する
C. Apexクラスの定数としてIDをハードコードする
D. RecordTypeオブジェクトでSOQLクエリを実行する
B. DescribeSObjectResultクラスでgetRecordTypeInfosByDeveloperNameメソッドを使用する
D. RecordTypeオブジェクトでSOQLクエリを実行するgetRecordTypeInfosByDeveloperNameメソッドはレコードタイプのAPI名とレコードタイプ情報をMapで返す。
A⇒無関係
C⇒「動的」ではないので間違い。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_sobject_describe.htm#apex_Schema_DescribeSObjectResult_getRecordTypeInfosByDeveloperName
Visualforceページで外部CSSからのスタイリングが必要な場合、開発者はどのタグを含める必要があるか。
A. apex:includeStyles
B. apex:includeScript
C. apex:require
D. apex:stylesheet
D. apex:stylesheetVisualforceでカスタムスタイルを使用するには方法が2つある。
・静的リソースとしてアップロードしたCSSファイルを<apex:stylesheet>タグで参照する
・<style>タグ内でインラインCSSコードを定義する(通常のHTMLページと同じ)
https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_styling_custom.htm
Apexクラスのprivateメソッドの単体テストをどのように作成すべきか。
A. SeeAllDataアノテーションを使用
B. Apexクラスにテストメソッドを追加
C. TestVisibleアノテーションを使用
D. Apexクラスをglobalにする
C. TestVisibleアノテーションを使用TestVisibleアノテーションはテストしたいメソッドに付加する
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_annotation_testvisible.htm
次のクラスとトリガーのコードがある。baseCost変数にクラス変数smokerChargeの値を設定するためにXXXにどのコードを挿入すべきか。
public class InsuranceRates{
public static final Decimal smokerCharge = 0.01;
}
trigger ContactTrigger on Contact(before insert){
InsuranceRates rates = new InsuranceRates();
Decimal baseCost = XXX;
}
A. rates.smokerCharge
B. InsuranceRates.smokerCharge
C. ContactTrigger.InsuranceRates.smokerCharge
D. rates.getSmokerCharge()
B. InsuranceRates.smokerCharge静的変数やメソッドはそのクラス全体で共有されるものであるため、アクセスするにはインスタンスではなくクラスに対して呼び出す。
静的メンバーをインスタンスから呼び出すことはできない。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_static.htm
貸倉庫業のある企業には、特定のアカウントによってレンタルされているすべてのContainer__cのテーブルを表示するVisualforceページがある。
一部の顧客が100,000を超えるコンテナをレンタルしているため、ビューステートの最大制限エラーとなる。
ページの読み込みエラーを解決するために、Visualforceページについて何を変更すべきか。
A. SOQLのOFFSETでJavaScript Remotingを使用する
B. StandardSetControllerを使用してページネーションを実装する
C. 遅延読み込みと一時的なリスト変数を使用する
D. OffsetControllerを使用してページネーションを実装する
B. StandardSetControllerを使用してページネーションを実装するsetPageSize(pageSize)メソッドでページネーションを設定できる。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_pages_standardsetcontroller.htm
A⇒OFFSET句は2000レコードまでのため間違い
C⇒ビューステートのサイズは減らせるが、ビューステートの最大限エラーの根本的な解決にはならない
D⇒OffsetControllerは存在しない
新しいSalesforceアプリケーションを構築するために、宣言型開発のみを使用することにした。
アプリケーションのデータベースレイヤーを構築するために使用すべきオプションはどれか(3つ)
A. フロー
B. 積み上げ集計項目
C. トリガー
D. リレーションシップ
E. カスタムオブジェクトとカスタム項目
B. 積み上げ集計項目
D. リレーションシップ
E. カスタムオブジェクトとカスタム項目宣言型開発はプログラミングなどを使わない方法のこと。データ構造にかかわるものはB・D・E
Lightningコンポーネントが取引先責任者のレコードを検索するために使用できるApexクラス「ContactController」を作成する必要がある。
Lightningコンポーネントのユーザーがアクセス権を持つ取引先責任者のレコードのみを検索できるようにするため、正しくレコードを制限するための方法は何か(2つ)
A. public class ContactController
B. public with sharing class ContactController
C. public without sharing class ContactController
D. public inherited sharing class ContactController
B. public with sharing class ContactController
D. public inherited sharing class ContactControllerA⇒明示的に指定しない場合は実行時の共有ルールに従うため、呼び出し元のクラスの共有ルールに依存する。共有設定を明示しないのは推奨されないため間違い。
D⇒Lightningコンポーネントのコントローラークラスでこの宣言をすると自動的にwith sharingとして実行される。
https://developer.salesforce.com/docs/atlas.en-us.248.0.apexcode.meta/apexcode/apex_classes_keywords_sharing.htm
匿名ブロックで実行されるApexコードに関して正しい答えはどれか(2つ)
A. コードは、runAs()ステートメントで指定されたユーザーの権限で実行される
B. コードは、ログインしているユーザーの権限で実行される
C. コードは、すべてのオブジェクトとフィールドにアクセスできるシステムモードで実行される
D. すべてのDML操作は自動的にロールバックされる
E. 成功したDML操作は自動的にコミットされる
B. コードは、ログインしているユーザーの権限で実行される
E. 成功したDML操作は自動的にコミットされる
maxAttempts と呼ばれる整数変数があり、一度maxAttemptsが初期化されるとトリガー実行の間で変数の状態を共有しながら、Apex処理の間その値を確実に保持する必要がある。
これらの要求を満たすためにどのようにmaxAttemptsを宣言する必要があるか。
A. staticキーワードとfinalキーワードを使用して、maxattemptsを定数として宣言する。
B. maxattempts をヘルパークラスの変数として宣言する。
C. maxattempts をヘルパークラスの private static 変数として宣言する。
D. maxattempts をトリガー定義のメンバ変数として宣言する。
A. staticキーワードとfinalキーワードを使用して、maxattemptsを定数として宣言する。static finalキーワードを使用すると変数を一度のみの初期化が許可される定数として宣言でき、以降は変更できなくなる。
staticキーワードのみを使用した定数はクラスが読み込まれるたびに初期化される。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_keywords_final.htm
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_static.htm
SOSL検索によって返されるデータ型はどれか。
A. List<List<Account>, List<Opportunity>>
B. Map<sObject, sObject>
C. List<List<sObject>>
D. Map<Id, sObject>
C. List<List<sObject>>SOSLは複数オブジェクトにまたがって検索可能のため検索にヒットしたsObjectのリストのリストで返される。
https://trailhead.salesforce.com/ja/content/learn/modules/apex_database/apex_database_sosl
ApexクラスをRESTfulWebサービスとして公開するアノテーションはどれか
A. @RemoteAction
B. @HttpInvocable
C. @AuraEnabled
D. @RestResource
D. @RestResourceA⇒VisualforceページからJavaScriptを介してApexメソッドを呼び出す
B⇒存在しない
C⇒LightningコンポーネントからApexメソッドを呼び出す
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_annotation_rest_resource.htm
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_annotation.htm
クロスオブジェクト数式項目に関する記述のうち正しいものはどれか(3つ)
A. クロスオブジェクト数式項目は、最大10リレーション離れているオブジェクトの項目を参照できる
B. クロスオブジェクト数式項目は、主従関係または参照関係の項目を参照できる
C. クロスオブジェクト数式項目は、子項目を参照して平均を実行できる
D. クロスオブジェクト数式項目は、ユーザーがアクセスできないデータをレコードに公開する可能性がある
E. クロスオブジェクト数式項目は積み上げ集計項目を参照できる
A. クロスオブジェクト数式項目は、最大10リレーション離れているオブジェクトの項目を参照できる
B. クロスオブジェクト数式項目は、主従関係または参照関係の項目を参照できる
D. クロスオブジェクト数式項目は、ユーザーがアクセスできないデータをレコードに公開する可能性があるC⇒積み上げ集計項目のような機能はない。子の(参照元)が親(参照先)の項目値を取得できる機能。
D⇒積み上げ集計項目は参照できない
https://help.salesforce.com/s/articleView?id=sf.customize_cross_object.htm&type=5
https://help.salesforce.com/s/articleView?id=sf.fields_creating_cross_object_notes.htm&type=5
ループ処理でリスト内の各取引先責任者をチェックするコードで、”Boss”というタイトルの取引先責任者が見つかった場合forループの外側のコードの最初の行にジャンプする必要がある。
要件を実装するために必要なコードはどれか。
A. break;
B. continue;
C. next;
D. exit;
A. break;B⇒ループの現在の処理をスキップし次の処理にジャンプする
C、D⇒Apexには存在しない
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/langCon_apex_loops.htm
次のApexステートメントで、SOQLクエリによって複数のAccountが返された場合どうなるか。
Account myAccount = [SELECT Id, Name FROM Account];
A. 変数myAccountは自動的にListデータ型にキャストされる
B. 最初に返された Account が myAccount に代入される
C. クエリは失敗し、エラーがデバッグログに書き込まれる
D. 未処理の例外がスローされ、コードが終了する
D. 未処理の例外がスローされ、コードが終了するSystem.QueryException: List has more than 1 row for assignment to SObjectという例外がスローされてコードが終了する。
C⇒コードが続行するので間違い。
Apexテストメソッドがサンドボックスで失敗することが判明した。問題を特定するためにテストメソッド内のコードをコピーし、開発者コンソールの匿名実行ツールを使用してコードを実行したところ、コードは例外やエラーなしで実行された。
テストメソッドがサンドボックスで失敗し、開発者コンソールで合格したのはなぜか。
A. テストメソッドは @future メソッドを呼び出しているため
B. テストメソッドのコードに構文エラーがあるため
C. テストメソッドは、特定のユーザーとして実行するためにSystem.runAsを使用しないため
D. テストメソッドはサンドボックス内の既存のデータに依存しているため
D. テストメソッドはサンドボックス内の既存のデータに依存しているため通常テストクラスとメソッドは組織のデータにはアクセスできない。問題のテストメソッドがサンドボックス内のデータに依存しているためにコピーして匿名実行では成功したが、テストメソッドとして実行する場合では失敗した。
組織でカスタムページがロードされたときにパフォーマンスの問題の原因を突き止めるためにトラブルシューティングを行う必要がある。
トラブルシューティングに使用すべきツールはどれか。
A. Salesforce CLI
B. AppExchange
C. 開発者コンソール
D. Visual Studio Code IDE
C. 開発者コンソール開発者コンソールではログや実行時間の確認などパフォーマンスの問題を特定できる機能が備わっている。
A、D⇒開発に関わるものではあるが直接問題を特定するものではない
B⇒直接関係がない
スキーマビルダーを使用して開発者が実行できるアクションはどれか(2つ)
A. カスタムオブジェクトを作成し、そのオブジェクトに参照関係を定義する
B. 標準オブジェクトとシステムオブジェクトのみを含むビューを表示する
C. カスタム項目を作成し、既存のページレイアウトに自動的に追加する
D. 項目のないオブジェクトとリレーションのビューを作成する
A. カスタムオブジェクトを作成し、そのオブジェクトに参照関係を定義する
B. 標準オブジェクトとシステムオブジェクトのみを含むビューを表示するB⇒カスタムオブジェクトも表示できるが、問題文は「実行できるアクション」を問うているのでBが正解。
C⇒ページレイアウトに追加はできない
D⇒スキーマビルダーかに関わらず、項目のないオブジェクトを作成することはできない。
デバッグログフィルター設定はどこから設定できるか(2つ)
A. ウェブUI内の監視ユーザー名の[Filters]リンク
B. 監視対象ユーザーの名前
C. デバッグログのレコードの[詳細を表示]リンク
D. クラスまたはトリガーの詳細ページの[追跡フラグ]タブ
A. ウェブUI内の監視ユーザー名の[Filters]リンク
D. クラスまたはトリガーの詳細ページの[追跡フラグ]タブここでいう「デバッグログフィルター設定」はデバッグログレベルの設定のことを指している。
A⇒設定>デバッグログ>ユーザー追跡フラグのユーザー名の隣にある[Filters]リンクの遷移先で変更可能
D⇒設定>Apexクラス(またはApexトリガー)>個別のクラス(トリガー)の詳細ページの追跡フラグタブ から設定可能
以下のコードについて、どのようにstagename項目のラベルを取得できるか。
Opportunity opp = [select id, stagename from Opportunity Limit 1];
A. “opp.stagename.label”を呼び出す
B. “opp.stagename.getdescribe().getlabel()”を呼び出す
C. “opportunity.stagename.label”を呼び出す
D. “opportunity.stagename.getdescribe().getlabel()”を呼び出す
D. “opportunity.stagename.getdescribe().getlabel()”を呼び出す取得したいのはレコード(Opportunityクラスのインスタンス)の値ではなくラベル(表示名、クラス(設計図、メタデータ)の情報)なので、opportunity.stagenameに対してgetDescribeメソッドを使用し、その戻り値のDescribeSObjectResultにgetlabelメソッドを使用することで取得できる。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_class_Schema_SObjectType.htm#apex_Schema_SObjectType_getDescribe
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_sobject_describe.htm#apex_Schema_DescribeSObjectResult_getLabel
テキストエリア (リッチ)項目が自動的に割り当てられるプリミティブデータ型はどれか。
A. Blob
B. Text
C. Object
D. String
D. String有効なHTMLタグであればStringとして扱って書式を設定できる。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/langCon_apex_primitives.htm
カスタムコントローラでカスタム例外が正しく機能することを確認するために単体テストを作成したが、例外がスローされたためにテストが失敗した。
この問題を解決して例外を適切にテストするために取るべき手順はどれか。
A. 単体テスト内でtry/catchを使用して例外をキャッチする
B. 単体テスト内でfinallyブロックを使用して、例外を投入する
C. データベースメソッドを、allまたはnoneをFALSEに設定して使用する
D. カスタムコントローラ内でTest.isRunningTest()を使用する
A. 単体テスト内でtry/catchを使用して例外をキャッチするコードをtryで囲み発生した例外をcatch内でdebugメソッドなどを使用して原因を特定する必要がある。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_exception_trycatch_example.htm
データの一意なキーと値のペアを提供するコレクション型はどれか。
A. List
B. Set
C. Array
D. Map
D. MapApexのコレクションはList、Map、Setのみ。そのうちキーと値のペアでデータを扱うのがMap(日本語だと「対応付け」)。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/langCon_apex_collections.htm?q=Enum+
Apex処理が100件のAccountレコードと2,000件のContactレコードを挿入した後、500件のOpportunityレコードを挿入しようとしてDML例外が発生した。
AccountレコードはallOrNone引数をfalseに設定してdatabase.insert()メソッドを呼び出すことで挿入され、ContactおよびOpportunityレコードはスタンドアロンinsert文(通常のInsert 変数名;)を使用して挿入される。
この処理でデータベースにコミットされるレコードの総数はいくつか。
A. 2,000
B. 2,100
C. 0
D. 100
D. 100Database.insertメソッドでallOrNone引数をfalseに設定すると成功した分はコミットされるので、その後エラーが発生してもその分はロールバックされずに残る。よってAccount100件がコミットされた状態となる。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_database.htm#apex_System_Database_insert
Apexで変数型とプリミティブデータ型のマッピングについて正しい説明はどれか(3つ)
A. 数値はDecimalにマッピングされる
B. 数値はIntegerにマッピングされる
C. テキストエリアはString型のListにマッピングされる
D. 日付/時間はDatetimeにマッピングされる
E. チェックボックスはBooleanにマッピングされる
A. 数値はDecimalにマッピングされる
D. 日付/時間はDatetimeにマッピングされる
E. チェックボックスはBooleanにマッピングされるC⇒テキストエリアは単一のString型にマッピングされる
with sharingキーワードを使用するVisualforceページとApexコントローラを作成した。
このページは営業マネージャが使用し、実行者に報告する営業担当者が所有する取引先のみを表示する必要がある。
取引先に対する組織全体の共有は非公開に設定されている。開発者が取るべき追加の手順はどれか。
A. 1つのプロファイル、1つの権限セット、1つのロールを作成する
B. 2つのプロファイル、1つの権限セット、1つのロールを作成する
C. 1つのプロファイル、1つの権限セット、2つのロールを作成する
D. 1つのプロファイル、2つの権限セット、1つのロールを作成する
C. 1つのプロファイル、1つの権限セット、2つのロールを作成するロールを使うことで階層構造の権限設定を実現できる。営業マネージャーロールとその下に営業担当者ロールを作成すると、営業マネージャーロールのユーザーは営業担当者ロールのユーザーが所有者のレコードにのみアクセス可能となる。プロファイルと権限セットはどのオブジェクトや項目にアクセス可能かを制御する。
https://help.salesforce.com/s/articleView?id=sf.security_controlling_access_using_hierarchies.htm&type=5
ContactSearchApexクラスのセキュリティレビューを実行する必要がある。このクラスで以下のメソッドがセキュリティ上の脅威であることが判明した。
SOQL インジェクション攻撃を防ぐためにメソッドを改善する方法はどれか(2つ)
List<Contact> performSearch(String lastName) {
return Database.query('Select Id, FirstName, LastName FROM Contact WHERE LastName Like%' + lastName +'%');
}
A. クラスに@ReadOnlyアノテーションとwith sharingキーワードを使用する。
B. escapeSingleQuotes メソッドを使用して、使用前にパラメータをサニタイズする。
C. パラメータに正規表現式を使用して特殊文字を削除する。
D. 変数バインディングを使用し、動的クエリを静的SOQLに置き換える。
B. escapeSingleQuotes メソッドを使用して、使用前にパラメータをサニタイズする。
D. 変数バインディングを使用し、動的クエリを静的SOQLに置き換える。SOQLインジェクション対策は静的クエリとバインド変数を使用するか、String.escapeSingleQuotesメソッドを使用する
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/pages_security_tips_soql_injection.htm
Apex テストクラスで @testSetup アノテーションを使用することについて正しい記述はどれか(3つ)
A. isTest(SeeAllData=True) アノテーションが使用されている場合、@testSetup アノテーションは使用できない
B. テストデータは、クラス内のすべてのテストメソッドに対して 1 回挿入される
C. testSetup メソッドで作成されたレコードを、個々のテストメソッドで更新することはできない
D. テストクラスの各テストメソッドが実行される前に、@testSetup メソッドが自動的に実行される
A. isTest(SeeAllData=True) アノテーションが使用されている場合、@testSetup アノテーションは使用できない
B. テストデータは、クラス内のすべてのテストメソッドに対して 1 回挿入される
D. テストクラスの各テストメソッドが実行される前に、@testSetup メソッドが自動的に実行される@testSetupアノテーションを付加したメソッドを使うと、各テストメソッドで使用する共通のレコードセットを最初に一度のみの実行で作成できるので効率的。作成されたレコードセットへの変更は各テストメソッド終了後にロールバックされる。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_testing_testsetup_using.htm
以下のコードについて、retrieveRecordsリストが空の場合コードの実行が中断されるようにするためにSOQLクエリの後に何をすべきか。
try {
List <Accounts> retrieveRecords = [SELECT Id FROM Account WHERE Website = null];
} catch(Exception e){
//例外ロジック
}
A. retrieveRecords変数の状態をチェックし、変数が空の場合はカスタム例外をスローする。
B. retrieveRecords変数の状態をチェックし、変数が空の場合はSystem.assert(false)を使用する。
C. retrieveRecords変数の状態をチェックし、変数が空の場合はリストの最初の要素にアクセスする。
D. retrieveRecords変数の宣言を、リストのAccountから単一のAccountに置き換える。
B. retrieveRecords変数の状態をチェックし、変数が空の場合はSystem.assert(false)を使用する。System.assert(false)とすることで必ずエラーになる。assertメソッドでの失敗はtry/catch ブロックを使用して捕捉できない。
他の選択肢は例外が発生してもtry/catch ブロックで捕捉されるため実行は中断されない。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_system.htm#apex_System_System_assert
取引先オブジェクトの’after update’トリガーを使用して、取引先に関連するすべての取引先責任者を更新する。
以下に示すトリガーコードはランダムに失敗する。その原因は次のうちどれか。
List<Contact> theContacts = new List<Contact>();
for (Account a : Trigger.new) {
for (Contact c : [SELECT Id, Account_Date__c FROM Contact WHERE AccountId = :a.Id]) {
c.Account_Date__c = Date.today();
theContacts.add(c);
}
}
update theContacts;
A. theContactsが空の場合は例外がスローされる
B. Account_Date__cがnullの場合、例外がスローされる
C. トリガーは、forループで200 以上のレコードを処理する
D. SOQLクエリがforループ内にある
D. SOQLクエリがforループ内にあるA⇒空のリストにupdateを実行してもエラーにはならない
B⇒nullだったとしてもDate.today()を代入しているのでエラーにならない
C⇒ループで200レコード処理することが直接のエラー原因にはならない
Visualforceページと、ページ上で発生するさまざまなボタンやイベントを処理するメソッドを持つカスタムコントローラを作成した。
本番環境にデプロイするために何をすべきか。
A. Visualforceページをカバーするテストクラスを作成する
B. Visualforceページをカバーするテストページを作成する
C. カスタムコントローラをカバーするテストページを作成する
D. カスタムコントローラをカバーするテストクラスを作成する
D. カスタムコントローラをカバーするテストクラスを作成するVisualforce自体にテストはできない
オブジェクトのVisualforceを使用してボタンをオーバーライドしたい。
どんな要件を満たしている必要があるか。
A. コントローラまたは拡張機能にPageReferenceメソッドを設定する。
B. オブジェクトにstandardController属性を設定する。
C. action属性をコントローラのメソッドに設定する。
D. オブジェクトレコードは、コントローラまたは拡張機能でインスタンス化する必要があります。
B. オブジェクトにstandardController属性を設定する。Visualforceページで上書きしたいオブジェクトの標準コントローラを呼び出す必要がある。例:<apex:page standardController = "myObject__c" >
https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_controller_std_associate.htm
https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_controller_customize_override.htm
すべての値が一意であることを保証するために使用されるApexコレクションはどれか。
A. List
B. Enum
C. Set
D. sObject
C. SetApexのコレクションはList、Map、Setのみ。そのうちSetが一意の要素のみを扱うもの。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/langCon_apex_collections.htm?q=Enum+
MVCパラダイムの観点から、VisualforceよりもLightning Webコンポーネントベースの開発を使用してSalesforceアプリケーションのビューレイヤーを実装することの利点はどれか(2つ)
A. アプリケーションが自己完結型で再利用可能である
B. 豊富なコンポーネントエコシステム
C. サーバー側のランタイムデバッグ
D. 自動コード生成
A. アプリケーションが自己完結型で再利用可能である
B. 豊富なコンポーネントエコシステムLWCを使うメリット
・Salesforce全体でコンポーネントを再利用し、開発者の生産性を最大化
・アプリ機能の容易な拡張性
・カスタムコンポーネント: AppExchange からダウンロードするか、独自のコンポーネントを作成できる
・モバイルデバイスに最適化されたレスポンシブデザインの作成を支援するビルダ
・デバイスのフォームファクタを問わず優れた機能を発揮するベースコンポーネント
https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_intro_when_use_lwc.htm
https://trailhead.salesforce.com/ja/content/learn/modules/lwc-for-visualforce-developers/get-started-with-lightning-development?trail_id=migrate-from-visualforce-to-lightning-web-components
メールアドレス’dev@uc.com’を持つ取引先責任者とユーザーを取得したい場合、使用すべきSOSL文はどれか。
A. FIND {dev@uc.com} IN Email Fields RETURNING Contact (Email), User (Email)
B. FIND {Email = ‘dev@uc.com’} RETURNING Contact (Email), User (Email)
C. FIND {Email = ‘dev@uc.com’} IN Contact, User
D. FIND Email IN Contact, User FOR {dev2uc.com}
A. FIND {dev@uc.com} IN Email Fields RETURNING Contact (Email), User (Email)FIND句の後に検索キーワードを入力し、IN句で検索対象の項目を指定する。RETURNING句を使うと返す結果セットからオブジェクトを絞り込める。
https://developer.salesforce.com/docs/atlas.ja-jp.soql_sosl.meta/soql_sosl/sforce_api_calls_sosl_syntax.htm
ユーザーがAccountの「Postal Code」を更新する際、Accountのカスタムテキスト項目「Timezone」は、カスタムオブジェクト「PostalCodeToTimezone__c」の情報を基に自動的に更新される必要がある。この機能を実装するため、開発者はどの手法を採用すべきか
A. Accountのワークフロールールを作成する
B. Accountの割り当てルールを作成する
C. Accountのカスタムトリガーを作成する
D. Accountの承認プロセスを作成する
C. Accountのカスタムトリガーを作成するA⇒参照できるのは同一オブジェクトのみ
B⇒特定の条件に基づいてレコードを特定のユーザーやキューに割り当てる機能
D⇒レコードの作成や更新を承認するワークフローを作成する機能
カスタムVisualforceコントローラとして使用するクラスの要件は何か。
A. PageReferenceを返すコンストラクタを持つ最上位のApexクラス
B. PageReferenceを拡張する最上位のApexクラス
C. デフォルトの引数なしコンストラクタを持つ最上位のApexクラス
D. コントローラインターフェースを実装した最上位のApexクラス
C. デフォルトの引数なしコンストラクタを持つ最上位のApexクラスカスタムコントローラーは引数をとらないデフォルトのコンストラクターを外部の最上位クラスに使用する Apex クラス。パラメーターを含むカスタムコントローラーコンストラクターを作成することはできない。
https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_controller_custom.htm
顧客に教育ビデオを視聴してもらうための推進計画を実施し、顧客は数日間にわたりビデオを視聴することができ、その進捗は記録される。動画をすべて視聴完了すると、顧客に報奨ポイントが付与される。動画がSalesforceで完了としてマークされた際、外部のWebサービスを呼び出してユーザーにポイントを付与する必要がある。
この要件をSalesforceのafter updateトリガー内で外部Webサービスへの呼び出しとして実装したが、実装後にSystem.CalloutExceptionが発生した。このエラーを解消するためにどのような対応をすべきか。
A. after update トリガーを before insert トリガーに置き換える。
B. 外部 Web サービスと統合する REST サービスを作成する。
C. 外部呼び出しを try-catch ブロックで囲み、例外を処理する。
D. @future(callout=true)を使用して、コールアウトを非同期メソッドに移動する。
D. @future(callout=true)を使用して、コールアウトを非同期メソッドに移動する。トリガでコールアウトを同期的に実行することはできない。@future(callout=true)を付加した非同期にコールアウトするメソッドを作成して、トリガから呼び出す必要がある。
https://help.salesforce.com/s/articleView?id=000386018&type=1
SalesforceにはDeveloper Sandbox、Developer Pro Sandbox、Partial Copy Sandbox、Full Sandboxの4つのサンドボックスタイプが存在する。その中でPartial Copy SandboxとFull Sandboxの特徴はどれか(2つ)
A. メタデータの一部分のみを含む
B. サンドボックスのテンプレートが利用できる
C. より頻繁な更新をサポートする
D. より多くのデータレコードを保存できる
B. サンドボックスのテンプレートが利用できる
D. より多くのデータレコードを保存できるテンプレートを利用できるのはPartialとFullだけで、データ容量はPartialは5GB、Fullは本番組織と同じで、Devは200MB、DevProは1GB。
A⇒メタデータは4つのタイプですべてコピーされるので間違い。さらにPartialとFullはデータの一部もコピーされる。
C⇒Partialは5日おき、Fullは29日おきに更新されるのに対して、他2タイプの更新は1日おきでより頻繁であるため間違い。
https://help.salesforce.com/s/articleView?id=sf.data_sandbox_environments.htm&type=5
Before InsertトリガーのTrigger.oldコンテキスト変数の値は何か。
A. sObjectの空のリスト
B. null
C. Idなしで新しく作成されたsObjectのリスト
D. Undefined
B. nullbefore insertのTrigger.oldはレコードが存在していない状態なのでnullになる。
D⇒Apexに「Undefined」という状態はない。
Visualforce ページで標準アクションをオーバーライドするには、<apex:page>タグでどの属性を定義する必要があるか。
A. pageReference
B. override
C. controller
D. standardController
D. standardControllerVisualforceページで上書きしたいオブジェクトの標準コントローラを呼び出す必要がある。例:<apex:page standardController = "myObject__c" >
上書き自体はオブジェクトマネージャーから設定する。
https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_controller_std_associate.htm
https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_controller_customize_override.htm
本番環境にデプロイする際に必要なプロセスはどれか(2つ)
A. すべてのトリガーのテストカバレッジは75%以上である必要がある
B. すべてのトリガーのテストカバレッジは少なくとも1%以上である必要がある
C. すべてのApexコードのテストカバレッジは、少なくとも75%以上である必要がある
D. すべてのテストとトリガーのテストカバレッジを合わせて75%以上である必要がある
リードオブジェクトにはカスタム項目の優先メール(Prior_Email__c)がある。以下のトリガーは、メール項目(Email)が変更されるたびに現在のメール(Email)を優先メール項目(Prior_Email__c)にコピーするものである。このトリガーはどのタイプの組み込み例外を発生させるか。
trigger test on Lead (before update) {
List<Lead> leadsToUpdate = new List<Lead>();
A. NullPointerException
B. CompileTimeException
C. DmlException
D. LimitException
C. DmlExceptionbefore updateトリガーの中でupdateを使っているため無限ループとなる可能性があり、このような操作はSalesforceに許可されていないのでDMLExceptionが発生する。before updateは文字通り更新前の状態なのでトリガーレコードを更新したい場合は代入するだけでその後のコミットで更新が保存されるので、DML操作は必要ない。
https://help.salesforce.com/s/articleView?id=000385060&type=1
サポートされていない言語を使用できるプラットフォーム機能はどれか(2つ)
A. Heroku Acm
B. Docker
C. Buildpacks
D. App.json
B. Docker
C. BuildpacksB⇒Linuxのコンテナ技術を使って独立した環境を構築することでサポート外の言語も使用できる
C⇒アプリケーションのソースコードをあらゆるクラウド上で実行可能なコンテナイメージに変換する技術でGoogleやHeroku等がそれぞれのビルドパックを公開しているため、それを使うことでサポート外の言語も使用できる
https://knowledge.sakura.ad.jp/13265/
https://buildpacks.io/
テストメソッドのガバナ制限をどのように回避すべきか。
A. レコードを作成するメソッドで@TestVisibleを使用する。
B. Test.loadData()を使用して、静的リソースからデータをロードする。
C. 既存のデータを使用するために、@IsTest(SeeAllData=true)を使用する。
D. Test.startTest()を使用して、ガバナ制限をリセットする。
D. Test.startTest()を使用して、ガバナ制限をリセットする。テスト対象のコードがテストされるポイントをマークする役割があり、startTestとstopTestの間のコードはリセットされたガバナ制限セットを消費することで通常の実行と同じ条件でテスト可能となる。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_testing_tools_start_stop_test.htm
searchTermを指定してAccountsのリストを返すApexメソッドgetAccountsは、Lightning Webコンポーネントで使用できる。getAccountsメソッドを使用するLightning Webコンポーネントのプロパティの正しい定義はどれか。
A.
@wire(getAccounts, {searchTerm: ‘$searchTerm’})
accoutList;
B.
@wire(getAccounts, ‘$searchTerm’)
accountList;
C.
@AuraEnabled(getAccounts, {searchTerm: ‘$searchTerm’})
accountList;
D.
@AuraEnabled(getAccounts, ‘$searchTerm’)
accountList;
デバッグログに関する次の記述のうち正しいものはどれか(3つ)
A. デバッグログレベルは累積され、FINEログレベルにはDEBUG、INFO、WARN、ERRORレベルで記録されたすべてのイベントが含まれる
B. デバッグログの最大サイズは5MB
C. 最新の20件のデバッグログのみが保存される
D. デバッグログは、特定のユーザー、クラス、およびトリガーに設定できる
E. システムデバッグログは24時間保存される
A. デバッグログレベルは累積され、FINEログレベルにはDEBUG、INFO、WARN、ERRORレベルで記録されたすべてのイベントが含まれる
D. デバッグログは、特定のユーザー、クラス、およびトリガーに設定できる
E. システムデバッグログは24時間保存されるB⇒各デバッグログの最大サイズは20MB
C⇒ログの件数が基準ではない。過去24時間のログが保存される(監視デバッグログは7日間)
https://help.salesforce.com/s/articleView?id=sf.code_debug_log.htm&type=5
AccountListという名前のList<Account>コレクション内の各Accountを反復処理するための有効な選択肢はどれか(2つ)
A. for (Integer i=0; i < AccountList.Size(); i++) {…}
B. for (Account theAccount : AccountList) {…}
C. for (AccountList) {…}
D. for (List L : AccountList) {…}
A. for (Integer i=0; i < AccountList.Size(); i++) {…}
B. for (Account theAccount : AccountList) {…}Apexのforループには3パターンある。正解の2つの他に、SOQLforループが該当する。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/langCon_apex_loops_for.htm
次のコードの実行時間を短縮するために、開発者が取るべき行動はどれか。
List<Account> allAccounts = [SELECT Id FROM Account];
List<Contact> allContacts = [SELECT Id, AccountId FROM Contact];
for (Account a : allAccounts) {
for (Contact c : allContacts) {
if (c.AccountId == a.Id) {
// do work
}
}
}
A. 取引先責任者のSOQLにGROUP BYオプションを追加する
B. allaccountsに対してMap<Id,Account>を使用する
C. SOQL用のApexヘルパークラスを作成する
D. Contactループの中にAccountループを入れる
B. allaccountsに対してMap<Id,Account>を使用する選択肢の方法を取ることでIDとAccountレコードを分けて保持することができ、forループをが1つで済むために効率化される(ListのタイプはIdではなくAccountなのでそのままだと直接c.AccountIdで検索できない)。
List<Account> allAccounts = [SELECT Id FROM Account];
List<Contact> allContacts = [SELECT Id, AccountId FROM Contact];
Map<Id, Account> acctsMap = new Map<Id, Account>(allAccounts);
for (Contact c : allContacts) {
if (acctsMap.containsKey(c.AccountId)) {
System.debug('関連レコードあり');
}
}
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_map.htm#apex_System_Map_ctor
AccountレコードまたはContactレコードを処理できるApexメソッドが必要である場合、正しいコードはどれか。
A. Public void doWork(Account || Contact)
B. Public void doWork(Record theRecord)
C. Public void doWork(sObject theRecord)
D. Public void doWork(Account Contact)
C. Public void doWork(sObject theRecord)メソッドで扱うデータが複数想定される、また特定できない場合は汎用sObject型を引数として設定する。汎用sObject型はすべてのsObject型の基本となるデータ型であるため、複数のsObject型のデータを受け取ることができる
https://trailhead.salesforce.com/ja/content/learn/modules/apex_database/apex_database_sobjects
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/langCon_apex_SObject_types.htm
複数のLightningウェブコンポーネントを含む天気アプリを作成した。コンポーネントの1つはToggleと呼ばれ華氏または摂氏の単位を切り替える。Toggleコンポーネントでユーザーが華氏から摂氏またはその逆に切り替えると、その情報はTemperatureコンポーネントに送信され、温度が変換されて表示される。これを実現するにはどのような方法が推奨されるか。
A. コンポーネント間の通信を処理するカスタムイベントを作成する。
B. ToggleコンポーネントでTemperatureコンポーネントのメソッドを呼び出す。
C. コンポーネント間の通信にアプリケーションイベントを使用する。
D. コンポーネント間の通信にはLightning Message Serviceを使用する。
A. コンポーネント間の通信を処理するカスタムイベントを作成する。LWCコンポーネント間の子⇒親または同じ階層での通信はカスタムイベントを作成する(親⇒子はプロパティで渡す)。Toggleで切り替えられたというイベントをTemperatureに送り、変換された温度が表示するコンポーネントに返される。
C⇒アプリケーションイベントはAuraコンポーネントで使用するもの
D⇒Lightning Message Serviceは親子コンポーネント外との通信に使用するもの
https://developer.salesforce.com/docs/platform/ja-jp/lwc/guide/events.html
組織内でテストを実行するための方法は何か(2つ)
A. Tooling API
B. 開発者コンソール
C. メタデータ API
D. Bulk API
A. Tooling API
B. 開発者コンソールC⇒Salsforce内のデータ構造や設定にアクセスするAPIなのでテストは関係ない
https://developer.salesforce.com/docs/atlas.ja-jp.api_meta.meta/api_meta/meta_intro.htm
D⇒大量のデータを操作するAPIなのでテストは関係ない
https://developer.salesforce.com/docs/atlas.ja-jp.api_asynch.meta/api_asynch/asynch_api_intro.htm
A. ExtensionB save()
B. Standard controller save()
C. ExtensionA save()
D. ランタイムエラーが発生する
C. ExtensionA save()コントローラー拡張が複数ある時、上書きは一番左の拡張、つまりカンマ区切りリストの最初の拡張で定義されているメソッドによって定義される。
https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/pages_controller_extension.htm
以下のコードから、コントローラ変数を作成するために使用できるステートメントはどれか(3つ)
public class AccountListController {
public List<Account> getAccounts() {
return controller.getRecords();
}
}
A. Apexpages.standardsetcontroller controller = new apexpages.standardsetcontroller(database.query(‘select id from account’));
B. Apexpages.standardsetcontroller controller = new apexpages.standardsetcontroller(database.getquerylocator(‘select id from account’));
C. Apexpages.standardcontroller controller = new apexpages.standardcontroller(database.getquerylocator(‘select id from account’));
D. Apexpages.standardcontroller controller = new apexpages.standardcontroller([select id from account]);
E. Apexpages.standardsetcontroller controller = new apexpages.standardsetcontroller(database.getquerylocator([select id from account]));
A. Apexpages.standardsetcontroller controller = new apexpages.standardsetcontroller(database.query(‘select id from account’));
B. Apexpages.standardsetcontroller controller = new apexpages.standardsetcontroller(database.getquerylocator(‘select id from account’));
E. Apexpages.standardsetcontroller controller = new apexpages.standardsetcontroller(database.getquerylocator([select id from account]));StandardControllerは単一のレコードを扱い、StandardSetControllerクラスはレコードのリストを扱う。
インスタンス生成するにはsObjectリストかDatabase.QueryLocatorを使用する。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_pages_standardsetcontroller.htm
getQueryLocatorは引数としてSOQLクエリ文字列でもSOQLクエリでも受け取れる。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_database.htm#apex_System_Database_getQueryLocator
StatusComponentというLightning Webコンポーネントを作成し、Accountレコードページに挿入した。このコンポーネントを利用できるようにするために、開発者が行うべきことはどれか(2つ)
A. <target>Lightning_RecordPage</target>をstatusComponent.js-meta.xmlファイルに追加する。
B. <target>Lightning_RecordPage</target>をstatusComponent.jsファイルに追加する。
C. <masterLabel>Account</masterLabel>をstatusComponent.js-meta.xmlファイルに追加する。
D. <isExposed>true</isExposed>をstatusComponent.js-meta.xmlファイルに追加する。
A. <target>Lightning_RecordPage</target>をstatusComponent.js-meta.xmlファイルに追加する。
D. <isExposed>true</isExposed>をstatusComponent.js-meta.xmlファイルに追加する。コンポーネント設定ファイル(.js-meta.xml)はLightningアプリケーションビルダーで使用するためのメタデータを提供する役割がある。
A⇒<target>タグはコンポーネントを追加可能なページの種別を指定する
D⇒<isExposed>タグがtrueにしないとアプリケーションビルダーに表示されない
https://trailhead.salesforce.com/ja/content/learn/modules/lightning-web-components-basics/push-lightning-web-component-files
C⇒masterLabelはコンポーネントのタイトルで要件の実現には直接関係ない
https://developer.salesforce.com/docs/platform/ja-jp/lwc/guide/reference-configuration-tags.html?q=masterLabel
if (isOK == false && theString == 'Hello') {
x = 1;
} else if (isOK == true && theString =='Hello') {
x = 2;
} else if (isOK != null && theString == 'Hello') {
x = 3;
} else {
x = 4;
}
A. 1
B. 2
C. 3
D. 4
D. 4ApexでのBoolean型は初期化されていない場合、値はnullである。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/langCon_apex_primitives.htm
アプリケーションイベントは従来のpublish-subscribeモデルに従っている。
イベントを発生させるにはどのメソッドを使用するか。
A. emit()
B. fireEvent()
C. fire()
D. registerEvent()
C. fire()Auraコンポーネントのイベントを起動するのはJavaScriptのfireメソッド。コンポーネント内で登録したイベントを以下のように起動する。
cmp.getEvent("myEvent").fire();
A、B、Dは存在しないメソッド。
https://developer.salesforce.com/docs/atlas.ja-jp.lightning.meta/lightning/events_component_fire.htm
A. テストデータを含む静的リソースを作成
B. テストクラスで@isTest(isParallel=true)を使用
C. テストクラスで@isTest(seeAllData=true)を使用
D. Test.loadDataを使用して、テストメソッドにデータを入力
A. テストデータを含む静的リソースを作成
D. Test.loadDataを使用して、テストメソッドにデータを入力テストデータの作成方法として、テストクラス内でレコードリストを作成するほかに、静的リソースとしてデータをアップロードしTest.loadDataメソッドでインポートする方法がある。
例:List<sObject> accts = Test.loadData(Account.sObjectType, 'myResource');
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_testing_load_data.htm
非同期メソッドまたはfutureメソッドに関する情報を確認できる場所はどこか(2つ)
A. Apex ジョブ
B. 一時停止中の失敗したフローインタビュー
C. [時間ベースのワークフロー]モニター
D. Apex Flex キュー
A. Apex ジョブ
D. Apex Flex キューA⇒設定>Apexジョブ
D⇒設定>Apex Flexキュー
B,Cはフローに関するもの。
Salesforce の様々な種類のケースを独立した要件でテストできるようにするために、一連のテスト全体の基本データセット (取引先、取引先責任者、商品、納入商品) を作成する必要がある。
各単体テストに必要なデータを効率的に生成できるのはどの方法か。
A. voidメソッドで@TestSetupを使用する
B. 単体テストクラスの先頭に@isTest(seeAllData = true)を追加する
C. 単体テストのTest.startTest()の前にテストデータを作成する
D. スタブAPIを使ってモックを作成する
A. voidメソッドで@TestSetupを使用する@testSetupアノテーションを付加したメソッドを使うと、各テストメソッドで使用する共通のレコードセットを最初に一度のみの実行で作成できるので効率的。作成されたレコードセットへの変更は各テストメソッド終了後にロールバックされる。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_testing_testsetup_using.htm
多くの開発者からなるチームが、本番組織と同じ構成を持つ個々の組織で作業している。このシナリオに最も適しているのはどのタイプの組織か。
A. Developer Sandbox
B. Developer Edition
C. Full Sandbox
D. Partner Developer Edition
A. Developer SandboxDeveloper Sandboxは少なくとも10個は作成できる。
B⇒本番組織と同じ構成ではない
C⇒本番組織と同じ構成だが、1つしか作成できないので複数人が個々の組織で作業できない
D⇒スクラッチ組織の一種でパートナーがSalesforceの機能を試す用途。本番組織と同じ構成ではない。
https://help.salesforce.com/s/articleView?id=sf.data_sandbox_environments.htm&type=5
https://developer.salesforce.com/docs/atlas.ja-jp.sfdx_dev.meta/sfdx_dev/sfdx_dev_scratch_orgs_editions_and_allocations.htm
Salesforce組織内のすべてのデータと添付ファイルを月に1回バックアップしたい。この要件を満たすためにどのアプローチを使用すべきか。
A. データローダーのコマンドラインを使用する
B. データエクスポートのスケジュールされたジョブを定義する
C. スケジュール可能なApexクラスを作成する
D. レポートをスケジュールする
B. データエクスポートのスケジュールされたジョブを定義する設定>データのエクスポートの「エクスポートをスケジュール」で、「画像、ドキュメント、および添付ファイルを含める」と「すべてのデータを含める」にチェックを付けて毎月の任意のタイミングでエクスポートするように設定できる。
https://help.salesforce.com/s/articleView?id=sf.admin_exportdata.htm&type=5
トリガーが同じオブジェクトとイベントに関連付けられている場合の実行順序に関して正しい説明はどれか。
A. トリガーはトリガー名のアルファベット順に実行されます。
B. トリガーの実行順序は保証されません。
C. 変更された順序で実行されます。
D. トリガーは作成された順序で実行されます。
B. トリガーの実行順序は保証されません。1つのオブジェクトに複数トリガーがある場合はその実行順序は保証されない。つまり決まっていない。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_triggers_order_of_execution.htm
インスタンス化できないShippingCalculatorクラスを作成する必要があり、サブクラスがオーバーライドできるcalculateメソッドの実用的なデフォルト実装を含める必要がある。 ShippingCalculatorクラスの正しい実装はどれか。
A.
Public abstract class ShippingCalculator {
public override calculate() { /*implementation*/ }
}
B.
Public abstract class ShippingCalculator {
public virtual void calculate() { /*implementation*/ }
}
C.
Public abstract class ShippingCalculator {
public abstract calculate() { /*implementation*/ }
}
D.
Public abstract class ShippingCalculator {
public void calculate() { /*implementation*/ }
}
B.
Public abstract class ShippingCalculator {
public virtual void calculate() { /*implementation*/ }
}abstractでクラス定義することで、署名のみで本文が定義されていないメソッドが含まれることを宣言する。overrideキーワードを使用したメソッドで上書きするにはメソッドをvirtual※かabstractで宣言する。また、「実用的なデフォルト実装」とあるため、abstractでは中身が定義できない。よってメソッドはvirtualで宣言する。
※拡張や上書きを許可することを示す
abstractクラスはインスタンス化できない。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_defining.htm
継続的インテグレーションの一環として、デプロイと単体テストの実行をスクリプト化するために、開発者は何を使用する必要がありますか。
A. 開発者コンソール
B. VS Code
C. Salesforce CLI
D. 匿名実行
C. Salesforce CLI単体テストとデプロイを実行するコマンドをスクリプトとしておくと、継続的にそれらを行う場合は効率的。
デプロイスクリプトを使用して、開発サイクル中にサンドボックスに自動的にデプロイしたい。サンドボックスにデプロイするスクリプトを実行するために使用できるツールはどれか(2つ)
A. 開発者コンソール
B. Salesforce CLI
C. Ant 移行ツール
D. 変更セット
B. Salesforce CLI
C. Ant 移行ツールAnt移行ツールはメタデータを操作する機能だが、Spring24で廃止済みのため現在はSalesforceCLIのみ。
D⇒変更セットでもデプロイはできるがスクリプトの実行はサポートしていないので間違い
https://developer.salesforce.com/docs/atlas.ja-jp.daas.meta/daas/meta_development.htm
Accountオブジェクトのafterトリガーは、Accountのすべての子OpportunityでDML更新操作を実行する。 Opportunityオブジェクトにアクティブなトリガーはないが、特定の状況で「最大トリガー深度を超えました」エラーが発生する。Accountトリガーの再帰的な起動を説明する理由はどれか(2つ)
A. Opportunityを変更すると、Accountの積み上げ集計項目が更新される。
B. Opportunityの変更により、Accountの項目が自動的に更新されるクロスオブジェクトのワークフローが実行されている。
C. 無関係な並列保存操作中にAccountに変更が加えられている
D. 条件に基づく共有ルールの評価中にAccountに変更が加えられている
A. Opportunityを変更すると、Accountの積み上げ集計項目が更新される。
B. Opportunityの変更により、Accountの項目が自動的に更新されるクロスオブジェクトのワークフローが実行されている。AやBのような更新によってafter updateトリガーが起動して無限ループになり、最終的に再帰的な呼び出しが16回を超えるとガバナ制限に達してエラーとなる(LimitException)。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_gov_limits.htm
レコードによってトリガーされるフローを作成している。特定の基準が満たされた場合、フローはApexメソッドを呼び出していくつかのタイプのオブジェクトを含む複雑な検証を実行する必要がある。Apexメソッドを作成する場合、メソッドをフロー内で使用できるようにするためにどのアノテーションを使用すべきか。
A. @future
B. @InvocableMethod
C. @AuraEnaled
D. @RemoteAction
B. @InvocableMethod@InvocableMethodを付加したメソッドはフローで呼び出せる。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_annotation_InvocableMethod.htm
ワークフローで既存のAccountのカスタム項目の値を更新する。トリガーによって更新する予定のカスタム項目の値にどのようにアクセスしますか。
A. before updateトリガーを記述し、Trigger.newから項目値にアクセスする。
B. before insertトリガーを記述し、Trigger.newから項目値にアクセスする。
C. after insertトリガーを記述し、Trigger.oldから項目値にアクセスする。
D. after updateトリガーを記述し、Trigger.oldから項目値にアクセスする。
A. before updateトリガーを記述し、Trigger.newから項目値にアクセスする。B,C⇒「既存のAccount」なので新規作成は関係ない
D⇒「トリガーによって更新する予定のカスタム項目の値」にアクセスしたいのでTrigger.old(更新される前の古い値)は間違い
Apexのカスタム例外に関して正しいものはどれか(3つ)
A. カスタム例外クラスは、例外クラス以外のクラスを拡張できる
B. カスタム例外クラスは、1つまたは複数のインターフェースを実装できる
C. カスタム例外クラスにメンバ変数またはメソッドを含めることはできない
D. カスタム例外クラスは、組み込み例外クラスを拡張する必要がある
E. カスタム例外クラス名は「Exception」で終わる必要がある
B. カスタム例外クラスは、1つまたは複数のインターフェースを実装できる
D. カスタム例外クラスは、組み込み例外クラスを拡張する必要がある
E. カスタム例外クラス名は「Exception」で終わる必要があるA⇒カスタム例外クラスは例外クラスを拡張する
C⇒メンバ変数やメソッドを含めることができる
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_exception_custom.htm
親LightningWebコンポーネント内にネストされた子LightningWebコンポーネントを作成した。親コンポーネントは文字列値を子コンポーネントに渡す必要がある。これを達成できる方法はどれか(2つ)
A. 親コンポーネントは、カスタムイベントを使用して、データを子コンポーネントに渡す
B. 親コンポーネントはApexコントローラークラスを使用して、子コンポーネントにデータを送信
C. 親コンポーネントは子コンポーネントのメソッドを呼び出す
D. 親コンポーネントは、パブリックプロパティを使用して、データを子コンポーネントに渡す
C. 親コンポーネントは子コンポーネントのメソッドを呼び出す
D. 親コンポーネントは、パブリックプロパティを使用して、データを子コンポーネントに渡すLWCコンポーネント間の親⇒子への通信は@apiデコレータが付加されたプロパティ(公開プロパティ)に値を渡すか、または@apiデコレータが付加されたメソッド(公開メソッド)をコールする
https://developer.salesforce.com/docs/platform/ja-jp/lwc/guide/create-components-data-binding.html
https://developer.salesforce.com/docs/platform/ja-jp/lwc/guide/create-javascript-methods.html
コンポーネントとアプリケーションのイベント処理に関するベストプラクティスはどれか(2つ)
A. イベントハンドラで低レベルのイベントを処理し、高レベルのイベントとして再起動する。
B. コンポーネントイベントではなく、アプリケーションイベントを使用する。
C. ロジックをヘルパーに配置して、コンポーネントバンドルでイベントロジックを再利用する。
D. アプリケーションレベルで処理されるべきアクションを伝達するためにコンポーネントイベントを使用する。
A. イベントハンドラで低レベルのイベントを処理し、高レベルのイベントとして再起動する。
C. ロジックをヘルパーに配置して、コンポーネントバンドルでイベントロジックを再利用する。A⇒高レベルのイベントとはビジネスロジックイベントに相当するものなどを指す
B⇒より最適化された通信が可能のため、できる限りコンポーネントイベントを使用することが推奨されている(アプリケーションイベントはレガシー)
C⇒コンポーネントの状態に応じて異なるアクションを動的に呼び出せる
D⇒アプリケーションレベルで処理されるべきアクションはアプリケーションイベントを使用するべき
https://developer.salesforce.com/docs/atlas.ja-jp.lightning.meta/lightning/events_best_practices.htm
Apexクラスとインターフェースに関して、次のうち正しいステートメントはどれか(2つ)
A. クラスは複数のレベルの内部クラスを持つことができる
B. インターフェースのデフォルトの修飾子はprivate
C. クラスのデフォルトの修飾子はprivate
D. 例外クラスはExceptionというワードで終わる必要がある
C. クラスのデフォルトの修飾子はprivate
D. 例外クラスはExceptionというワードで終わる必要があるA⇒1つ下のレベルまでしか持てない
B⇒デフォルトでglobal
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_defining.htm
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_access_modifiers.htm
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_interfaces.htm
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_exception_custom.htm
あるクラスに対するテストを作成しており、機能を検証するためにレコードを挿入する必要がある。テストクラスのすべてのメソッドに対してレコードを作成するには、どのアノテーションを使うべきか。
A. @StartTest
B. @PreTest
C. @TestSetup
D. @isTest(SeeAllData=true)
C. @TestSetup@testSetupアノテーションを付加したメソッドを使うと、各テストメソッドで使用する共通のレコードセットを最初に一度のみの実行で作成できるので効率的。作成されたレコードセットへの変更は各テストメソッド終了後にロールバックされる。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_testing_testsetup_using.htm
開発者チームは、さまざまな組織構成で独立して作業できるソース主導型のプロジェクトに取り組んでいる。どのタイプのSalesforce組織を使用して開発を行うべきか。
A. スクラッチ組織
B. Developer Sandbox
C. Full Sandbox
D. 開発者組織
A. スクラッチ組織スクラッチ組織とは機能や設定を様々なエディションでエミュレート可能なソース駆動型開発に適したもの。
B、C⇒もとになった組織と同じ構成であるため、「さまざまな組織構成」にはマッチしない
D⇒Developer Editonのことと思われる。個人開発者や小規模プロジェクト向けなのでスケールや柔軟性に乏しいため間違い
https://developer.salesforce.com/docs/atlas.ja-jp.sfdx_dev.meta/sfdx_dev/sfdx_dev_scratch_orgs.htm
https://admin.salesforce.com/blog/2023/sandboxes-vs-scratch-orgs-and-how-to-use-them
商談がClosed Wonのフェーズに達したときに、商談を編集できないようにロックしたい。これを達成するために開発者が使用すべき戦略はどれか(2つ)
A. フロービルダーを使用する。
B. 入力規則を使用する。
C. プロセスの自動化設定を使用する。
D. トリガーを使用する。
B. 入力規則を使用する。
D. トリガーを使用する。特定の項目の入力を禁止するように入力規則を設定したり、トリガーで要件に合致したレコードに対してaddErrorメソッドを使用して意図的に例外を出す方法がある。
A⇒フローやプロセスビルダーでは編集できないようにエラーを出すことはできない。
C⇒プロセスの自動化設定はフローのデフォルトユーザーの設定などをするものなので関係ない
https://help.salesforce.com/s/articleView?id=sf.customize_functions_priorvalue.htm&type=5
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_triggers_exceptions.htm
PaymentProcessorインタフェースで定義されている支払いに準拠した小切手処理支払機能を提供するCheckPaymentProcessorクラスを実装する必要がある。
PaymentProcessorインタフェースクラスを使用する正しい実装はどれか。
public interface PaymentProcessor {
void pay(Decimal amount);
}
A
Public class CheckPaymentProcessor extends PaymentProcessor {
public void pay(Decimal amount) {
// 実装の詳細
}
}
B
public class CheckPaymentProcessor extends PaymentProcessor {
public void pay(Decimal amount);
}
C
public class CheckPaymentProcessor implements PaymentProcessor {
public void pay(Decimal amount) {
// 実装の詳細
}
}
D
public class CheckPaymentProcessor implements PaymentProcessor {
public void pay(Decimal amount);
}
C
public class CheckPaymentProcessor implements PaymentProcessor {
public void pay(Decimal amount) {
// 実装の詳細
}
}インターフェースはメソッドの中身を定義しないクラスのようなものなので、implementsでインターフェースを実装するクラスメソッドに具体的な処理を記述する必要がある。
extendsはクラスの継承に使用し中身のメソッドやプロパティもそのまま継承しそれを拡張する用途で使う。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_interfaces.htm
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_extending.htm?q=extends
データクリーンアップ戦略の一環として、関連するアカウントが削除されたときに関連する商談レコードを自動的に削除したい。このビジネス要件を満たすには、どの自動化ツールを使用すべきか。
A. プロセスビルダー
B. レコードトリガーフロー
C. ワークフロールール
D. スケジュールされたジョブ
B. レコードトリガーフローA⇒レコードの削除をトリガーにすることはできないので間違い。また、廃止予定なので使用は非推奨。
https://help.salesforce.com/s/articleView?id=sf.process_overview.htm&type=5
C⇒ほかのオブジェクトに対しての操作はできない
D⇒「削除されたときに関連する商談レコードを自動的に削除」にマッチしない
会社名「Sample Company」を持つすべてのリード、取引先、および取引先責任者のIDおよび名前を取得するために正しいステートメントはどれか。
A. FIND Sample Company IN CompanyName Fields RETURNING lead(ld. name), account(id, name), contact(id, name)
B. FIND ‘Sample Company’ IN Name Fields RETURNING lead(id, name), account(id, name), contact(id, name)
C. SELECT lead(id, name), account(Id, name), contact(id, name) FROM Lead, Account, Contact WHERE Name = “Sample Company"
D. SELECT Lead.id. Lead.Name, Account.Id, Account.Name, Contact.Id, Contact.Name FROM Lead, Account, Contact WHERE CompanvName 'Sample Company’
B. FIND ‘Sample Company’ IN Name Fields RETURNING lead(id, name), account(id, name), contact(id, name)複数オブジェクトにまたがってデータを検索したい場合はSOQLではなくSOSLを使用する。
IN句で絞れる検索対象項目は以下いずれかのみ。
・ALL FIELDS(デフォルト)
・NAME FIELDS
・EMAIL FIELDS
・PHONE FIELDS
・SIDEBAR FIELDS
https://developer.salesforce.com/docs/atlas.ja-jp.soql_sosl.meta/soql_sosl/sforce_api_calls_sosl_syntax.htm
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/langCon_apex_SOQL.htm
カスタムオブジェクトであるEngineering_Support__cを使用して、ユーザーがエンジニアリングチームにサポートを要求できるサポートプロセスがある。ユーザーは、複数のEngineering_Support__cレコードを1つの商談レコードに関連付けることができる必要がある。さらに、Engineering_Support__c レコードに関する集計情報を商談レコードに表示する必要がある。これらの要件をサポートするために、開発者は何を実装すべきか。
A. 商談からEngineering_Support__cへの主従関係
B. Engineering_Support__cから商談への主従関係
C. 商談からEngineering_Support__cへの参照関係
D. Engineering_support__cから商談への参照関係
B. Engineering_Support__cから商談への主従関係1つの商談に複数のEngineering_Support__cでかつ積み上げ集計項目が必要になるので、Bが正解。リレーションは従で設定する。
Developer sandboxにテストデータを追加するために使用できるsfコマンドはどれか(2つ)
A. data upsert bulk
B. data import tree
C. data upsert async
D. data upsert object
A. data upsert bulk
B. data import treeA⇒Bulk API2.0を使用してcsvファイルでレコードをupsertできる
B⇒sObject Tree APIを使用してJSONファイルでレコードをインポートできる
C,D⇒存在しないコマンド
https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_data_commands_unified.htm#cli_reference_data_upsert_bulk_unified
https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_data_commands_unified.htm#cli_reference_data_import_tree_unified
商談が紐づいている取引先の削除を禁止したいときどのコードが正しいか。
A.
trigger AccountDeletion on Account (before delete) {
for (Account acct : [SELECT Id FROM Account WHERE Id IN (SELECT AccountId FROM Opportunity) AND Id IN :Trigger.old]){
Trigger.oldMap.get(acct.Id).addError('商談が紐づく取引先は削除できません。');
}
}
B.
trigger AccountDeletion on Account (after delete) {
for (Account acct : [SELECT Id FROM Account WHERE Id IN (SELECT AccountId FROM Opportunity) AND Id IN :Trigger.old]){
Trigger.oldMap.get(acct.Id).addError('商談が紐づく取引先は削除できません。');
}
}
C.
trigger AccountDeletion on Account (before delete) {
for (Account acct : [SELECT Id FROM Account WHERE Id IN (SELECT AccountId FROM Opportunity) AND Id IN :Trigger.old]){
Trigger.oldMap.get(acct.Id).addInvalid('商談が紐づく取引先は削除できません。');
}
}
D.
trigger AccountDeletion on Account (after delete) {
for (Account acct : [SELECT Id FROM Account WHERE Id IN (SELECT AccountId FROM Opportunity) AND Id IN :Trigger.old]){
Trigger.oldMap.get(acct.Id).addInvalid('商談が紐づく取引先は削除できません。');
}
}
A.
trigger AccountDeletion on Account (before delete) {
for (Account acct : [SELECT Id FROM Account WHERE Id IN (SELECT AccountId FROM Opportunity) AND Id IN :Trigger.old]){
Trigger.oldMap.get(acct.Id).addError('商談が紐づく取引先は削除できません。');
}
}削除する前に禁止する必要があるのでbefore、addErrorメソッドでエラーメッセージを画面に表示する。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_triggers_exceptions.htm
外部webサービスへコールアウトするメソッドをテストしたい。どのコードを使用するのが正しいか。
A.
global class MyCalloutMock implements HttpCalloutMock {
global HTTPResponse respond(HTTPRequest req) {
// Create a fake response.
// Set response values, and
// return response.
}
}
B.
global class MyCalloutMock extends HttpCalloutMock {
global HTTPResponse respond(HTTPRequest req) {
// Create a fake response.
// Set response values, and
// return response.
}
}
C.
global class MyCalloutMock implements testCalloutMock {
global HTTPResponse respond(HTTPRequest req) {
// Create a fake response.
// Set response values, and
// return response.
}
}
D.
global class MyCalloutMock extends testCalloutMock {
global HTTPResponse respond(HTTPRequest req) {
// Create a fake response.
// Set response values, and
// return response.
}
}
A.
global class MyCalloutMock implements HttpCalloutMock {
global HTTPResponse respond(HTTPRequest req) {
// Create a fake response.
// Set response values, and
// return response.
}
}コールアウトはHttpCalloutMockインターフェースを使って疑似コールアウトクラスを作ることでテストする。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_restful_http_testing_httpcalloutmock.htm
フローをAuraコンポーネントで呼び出す記述はどれか
A. aura:flow
B. aura-flow
C. lightning-flow
D. lightning:flow
D. lightning:flow以下の形式で呼び出す。
<lightning:flow aura:id="flowData" ></lightning:flow>
https://developer.salesforce.com/docs/atlas.ja-jp.lightning.meta/lightning/components_using_flow_cmp.htm
AccountControllerクラスのgetAccountメソッドをLightningWebコンポーネントで呼び出したいときの正しい記述は?
A. import getAccount from '@salesforce/apex/namespace.AccountController';
B. import getAccount from '@salesforce/apex/namespace.AccountController.getAccount';
B. import getAccount from '@salesforce/apex/namespace.AccountController.getAccount';以下の形式でインポートしてから@wireをつけてメソッドを呼び出す。
import apexMethodName from '@salesforce/apex/namespace.classname.apexMethodReference';
https://developer.salesforce.com/docs/platform/ja-jp/lwc/guide/apex-wire-method.html
try/catchでキャッチできない例外はどれか
A. NoAccessException
B. DMLException
C. LimitException
D. カスタム例外
C. LimitExceptionガバナ制限を超えたことによる例外であるLimitExceptionはキャッチできない。また、System.assert メソッドに失敗した場合に発生する例外やライセンスの例外もキャッチできない。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_exception_statements.htm
virtualで定義したクラスlaptopがある時に正しい記述はどれか
A.
public class silverLaptop extends Laptop {
//任意の処理
}
}
B.
public class silverLaptop implements Laptop {
//任意の処理
}
}
A.
public class silverLaptop extends Laptop {
//任意の処理
}
}virtualで定義されたクラスは上書きや拡張を許可する。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_extending.htm
2024年4月ごろの受験に向けて勉強に使った暗記カードです。