-
Lightning Web コンポーネントにAuraコンポーネントを含めることはできるか ユーザインターフェースできない 逆にAuraにはLightning Web コンポーネントを含めることができる
https://developer.salesforce.com/docs/platform/ja-jp/lwc/guide/interop-intro.html -
マルチテナントプラットフォームのApexで気を付けるべきことは? デベロッパーの基本ガバナ制限を超えないようにクエリを使用し、最小限の項目とレコード操作をする 例えば1トランザクションでDMLステートメントの合計は150、SOQLクエリの合計は100まで
https://developer.salesforce.com/docs/atlas.ja-jp.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_apexgov.htm -
LightningプラットフォームのMVCアーキテクチャのコントローラーは何で構成されているか(3つ) デベロッパーの基本
MVC=モデルビューコントローラー1. Visualforceが参照するStandard Controllerメソッド
2. Apex
3. JavaScript 1でクライアント側の要求を受信・処理し、2と3でサーバー側の処理をして結果をクライアント側に返す
↓MVCアーキテクチャについて
https://digitalidentity.co.jp/blog/creative/mvc-mvvm.html -
取引先レコードが変更されたときに、関連する商談の選択リスト項目を更新するという要件に対するベストプラクティス デベロッパーの基本レコードトリガーフローを作成する ワークフロールールは同一オブジェクトしか更新できない
ワークフロールールやプロセスビルダーは将来廃止予定なので使わない
https://help.salesforce.com/s/articleView?id=001096524&type=1 -
自社の商品とそのオプション(どの商品にも付けられる)をレコードを関連付けて、孤立したレコードを防いで管理したいときのベストプラクティスはどれか
A. 商品とオプションで1対多の主従関係にする
B. オプションに商品に対する参照関係項目を作る
C. 商品とオプションそれぞれと参照関係をもつ連結オブジェクトを作成して、多対多の関係を作る
D. 商品とオプションそれぞれと主従関係をもつ連結オブジェクトを作成して、多対多の関係を作る デベロッパーの基本D. 商品とオプションそれぞれと主従関係をもつ連結オブジェクトを作成して、多対多の関係を作る 連結オブジェクトが従で、商品とオプションが主となる2つの主従関係項目を作成する
https://help.salesforce.com/s/articleView?id=sf.relationships_manytomany.htm&type=5 -
転職活動の支援を事業とするA社が転職希望者とその面談を管理したいとき、以下の要件を満たすために適したアクションを2つはどれか
要件
1. 転職希望者レコードに実施した面談の回数を表示する
2. 面談レコードと転職希望者レコードのセキュリティはそれぞれ独立にする
A. 転職希望者オブジェクトと面談オブジェクト間に主従関係を作成する
B. 転職希望者オブジェクトと面談オブジェクト間に参照関係を作成する
C. 転職希望者オブジェクトに面談レコードをカウントする積み上げ集計項目を作成する
D. 面談オブジェクトに転職希望者オブジェクトの項目を更新するレコードトリガーフローを作成する デベロッパーの基本B. 転職希望者オブジェクトと面談オブジェクト間に参照関係を作成する
D. 面談オブジェクトに転職希望者オブジェクトの項目を更新するレコードトリガーフローを作成する 主従関係だと従に参照権限がある場合は主にも参照権限が必要となり独立しない。要件を満たすには参照関係を選ぶ。
積み上げ集計項目は参照関係では使えないのでフローを使う。 -
ユーザーがリードとの取引を開始する際に、リードレコードのリードソース項目を入力するように強制したいときのベストプラクティスはどれか
A. 入力規則
B. トリガーフロー
C. Apexトリガー
D. 数式項目 デベロッパーの基本A. 入力規則 Apexトリガーでも可能だがより簡単な入力規則がベストプラクティス
取引を開始するとリードレコードは参照のみとなる。 -
商談レコードの表示権限は持たせずに、各取引先レコードでそのすべての関連商談で最新の完了予定日を確認できるようにするためのベストプラクティスはどれか
A. 取引先オブジェクトに関連する商談の完了予定日を「最大」で集計する積み上げ集計項目を作成する
B. 取引先オブジェクトに最新の商談の完了予定日を照会するクエリを作成する
C. 商談オブジェクトに取引先の項目を更新するフローを作成する
D. 取引先オブジェクトに関連する商談の完了予定日を「最大」で集計する数式項目を作成する デベロッパーの基本A. 取引先オブジェクトに関連する商談の完了予定日を「最大」で集計する積み上げ集計項目を作成する 数式項目では関連レコードの集計(SUM、MAX、MIN等)はできず「#Error!」が返される。
ワークフロールールは関連レコードの値をもとに項目を更新することはできない。
トリガーは実現可能だがより簡単な方法があるでベストプラクティスではない -
以下のコードはafter insertで実行されるApexトリガーだが実行するとエラーとなる。問題点は何か(1つ)。
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. 請求書に取引先との主従関係項目を作成する 主にアクセス権があればそのすべての子レコードにアクセスできる -
あるオブジェクトのカスタム項目が不要になったとき削除するにはどうすればよいか デベロッパーの基本削除したい項目へのすべての参照を削除してから削除する Apexやフロー等で参照されたままでは削除できない
-
Salesforce 組織にデータをインポートして更新するときに既存のレコードと照合する方法はどれか(2つ)
A. 名前項目をインポートファイルの列と照合する
B. 自動採番項目をインポートファイルの列と照合する
C. ID項目をインポートファイルの列と照合する
D. 外部ID項目をインポートファイルの列と照合する デベロッパーの基本C. ID項目をインポートファイルの列と照合する
D. 外部ID項目をインポートファイルの列と照合する -
データの品質を確保するために有用な宣言型の方法は以下のうちどれか(3つ)
A. 入力規則
B. ワークフローアラート
C. ルックアップ検索条件
D. 例外処理
E. ページレイアウト デベロッパーの基本A. 入力規則
C. ルックアップ検索条件
E. ページレイアウト 「宣言型の方法(Declarative Method)」とはコーディングなしの開発方法という意味
https://www.salesforce.com/eu/blog/click-not-code-an-intro-to-declarative-development/#:~:text=The%20Salesforce%20Platform%2C%20unlike%20traditional,drag%2Dand%2Ddrop%20interface. -
通貨項目はApexではどのプリミティブデータ型に割り当てられるか デベロッパーの基本Decimal型 通貨項目には自動的に Decimal 型が割り当てられる
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/langCon_apex_primitives.htm -
レコード数が不明のとき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';
} プロセスの自動化とロジックA ifは条件を上から順に評価され、条件に合致すると以降は評価されない -
変数のスコープについて正しい記述はどれか(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つ) プロセスの自動化とロジックシステム管理者と承認者
-
ページがApexコントローラーをコールし、さらにApexクラスをコールしてガバナ制限に達した場合、生じた変更はどうなるか プロセスの自動化とロジックエラーとなるまでの変更はすべてロールバックされる
-
100件の取引先レコードがあるとき、以下のコードを実行すると取引先レコードは何件になるか。
Account myAcct = new Account(Name='MyAccount');
insert myAcct;
for(Integer i=0; x<150; x++){
Account newAcct = new Account(Name='MyAccount' + i);
try {
insert newAcct;
} catch (Exception ex) {
System.debug(ex);
}
}
insert new Account(Name='MyAccount'); プロセスの自動化とロジック100件 最初のinsertは成功するが、forループの中にinsertがあり、DMLステートメント数150のガバナ制限に引っかかってエラーになるので変更はロールバックされ、取引先レコードは100件のままになる。最後のinsertにはエラーのために到達しない。 -
ループ内での使用を避けるべきステートメントはどれか(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操作する -
レコードを作成する以下のコードで、作成するレコードセットの一部でエラーになるものが含まれていても作成できるものだけは実行されるようにしたい。
そのためにコードの[空白]部分にどれを挿入すべきか。
List<Property__c> prpts = helperClass.createProperties();
try {
[空白]
} catch (Exception ex) {
System.debug(ex);
}
A. insert prpts;
B. Database.insert(prpts, false);
C. Database.insert(prpts, System.ALLOW_PARTIAL);
D. Database.insert(prpts); プロセスの自動化とロジックB. Database.insert(prpts, false); Database.insert(recordToInsert, allOrNone)
’allOrNone’ は Boolean 値で、falseの場合はDML操作が失敗しても、残りの操作が正常に実行される。true(既定値)の場合は、DML操作がすべて正常に実行されないとエラーになる。
https://developer.salesforce.com/docs/atlas.ja-jp.248.0.apexref.meta/apexref/apex_methods_system_database.htm#apex_System_Database_insert -
SOSLクエリで返されるデータ構造は何か プロセスの自動化とロジックsObjectのリストのリスト
-
以下のコードを実行すると何が表示されるか。
List<Account> acct = [SELECT Id FROM Account LIMIT 10];
delete acct;
Database.emptyRecycleBin(acct);
System.debug(Limits.getDMLStatements());
System.debug(Limits.getLimitDMLStatements()); プロセスの自動化とロジック2
150 getDMLStatements()は、コールされたDMLステートメントの数を返す。クエリでのデータ取得はDMLステートメントではない。
getLimitDMLStatements()は、コール可能なDMLステートメント合計数を返す(残りの数ではない)。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_limits.htm#apex_System_Limits_getDMLStatements -
Smithという姓をもつ取引先責任者レコードがない場合何が返ってくるか
Contact ct = [SELECT Id, FirstName, LastName, Email FROM Contact WHERE LastName='Smith']; プロセスの自動化とロジックSystem.QueryException レコード行が見つからないという意味。
ただし、変数(ここではct)が単一のレコードではなくリストで宣言されている場合は例外とならず空のリストが返されれる。 -
1つの親オブジェクトから単一のSOQLクエリで返すことができる子レコードのレベルはいくつか プロセスの自動化とロジック1 サブクエリを使って親-子リレーション、子-親リレーション両方とも最大5レベルまで返すことができる
https://developer.salesforce.com/docs/atlas.ja-jp.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_soslsoql.htm
https://help.salesforce.com/s/articleView?id=release-notes.rn_api_soql_5level.htm&release=244&type=5 -
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;
}
}
} プロセスの自動化とロジックforループ内にSOQLクエリが配置されている ガバナ制限(SOQLクエリは100まで)に引っかかるのでループ内にSOQLクエリは入れない。
https://developer.salesforce.com/docs/atlas.ja-jp.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_apexgov.htm -
取引先責任者レコードに関連する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トリガーで受け取ったレコードにそのトリガー内でアクセスしたいときに使用するコンテキスト変数は何か。 プロセスの自動化とロジックTrigger.new Trigger.newはinsert,update,undeleteトリガーでのみ使用できる。
レコードへの変更はbeforeトリガーでのみ可能。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_triggers_context_variables.htm -
after deleteトリガーで受け取ったレコードにそのトリガー内でアクセスしたいときに使用するコンテキスト変数は何か。 プロセスの自動化とロジックTrigger.old Trigger.oldはupdate,deleteトリガーでのみ使用できる。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_triggers_context_variables.htm -
現在のユーザーがApexであるオブジェクトのレコードを作成できるか、DescribeSObjectResultで判断するにはどのメソッドを使うか プロセスの自動化とロジックisCreatableメソッド 作成する権限があればtrue、なければfalseが返される。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_sobject_describe.htm#apex_Schema_DescribeSObjectResult_isCreateable -
トリガーの実行順序で、beforeトリガーとafterトリガーの間に行われるのは何か(3つ) プロセスの自動化とロジック・システム検証手順の再実行
・入力規則
・重複ルール 「システム検証手順」は以下をチェックする
・レイアウト固有のルールへの準拠
・レイアウトレベルおよび項目定義レベルで必要な値
・有効な項目形式
・最大項目サイズ
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_triggers_order_of_execution.htm -
保存後フローはafterトリガーの前に実行される 〇か×か プロセスの自動化とロジック× afterトリガーの後に保存後フローが実行される
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_triggers_order_of_execution.htm -
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. コントローラー拡張内 ユーザーインターフェースD. コントローラー拡張内 -
Visualforceページで使用する画像、スタイルシート、JavaScript、ライブラリ等のWebコンテンツを参照するベストプラクティスは何か ユーザーインターフェース静的リソースとしてアップロードする
-
標準の商談ビューボタンを上書きするには、Visualforceページのコントローラで何を使用すべきか。
A. ページネーション用の関連リストをサポートするStandardSetController
B. StandardControllerを参照するコールバックコンストラクタ
C. 商談オブジェクトの変数を初期化するコンストラクタ
D. あらかじめ組み込まれた機能の商談オブジェクトのStandardController ユーザーインターフェースD. あらかじめ組み込まれた機能の商談オブジェクトのStandardController A⇒ページネーションやリストビューに関する機能
B、C⇒コンストラクタは呼び出されたときに実行されるコードブロックで合ってボタンの上書きには直接関係ない -
外部JavaScriptファイルをVisualforceページに読み込むために使用するタグは何か(2つ) ユーザーインターフェース<apex:includeScript>
<script> -
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 Experience LightningコンポーネントはAuraコンポーネントとLightning Web コンポーネントの総称。
Salesforceコミュニティとは顧客やパートナー、従業員が製品やサービスについて情報交換ができるサイトのこと。コミュニティビルダーで構築できる。 -
Lightningコンポーネントリソースのサフィックスは何か ユーザーインターフェース.cmp
-
Lightningコンポーネントは、プラットフォームイベントの自動登録メカニズムを備えている。〇か×か ユーザーインターフェース× プラットフォームイベントはオブジェクトマネージャーの各オブジェクトの設定で定義する
登録はempAPIコンポーネントを使用してリスンするイベントを登録する
https://developer.salesforce.com/docs/atlas.ja-jp.platform_events.meta/platform_events/platform_events_subscribe_lc.htm -
開発者が新しい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のテストに使用するテストデータを読み込むために使用するものとは何か。 テスト、デバッグ、リリース静的リソース Test.loadDataメソッドを使用してあらかじめ登録した静的リソース(csv形式)から読み込む。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_testing_load_data.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 -
管理パッケージを作成できるのはどのSalesforce環境か テスト、デバッグ、リリースDeveloper Edition 管理パッケージとはSalesforceアプリのコンポーネントを含むコンテナで、組織にアプリをインストールする仕組み。Dreamhouseとかも該当する。
-
ユーザーが生成したDebugステートメントを表示するために必要な最低限のログレベルは何か テスト、デバッグ、リリースDEBUG System.debugで表示される内容
https://help.salesforce.com/s/articleView?id=sf.code_setting_debug_log_levels.htm&type=5 -
LightningコンポーネントからApexメソッドおよびプロパティへのアクセスを可能にするアノテーションはどれか
A. @RestResource
B. @HttpInbocable
C. @AuraEnabled
D. @RemoteActionC. @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. 重複ルールの実行B⇒A⇒E⇒D⇒C Dでレコードは一時的に保存されるので、そのあとにCのafterトリガーが実行される。
詳しくはドキュメントの「トリガーと実行の順序」をよく読んでおく。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_triggers_order_of_execution.htm -
共有について正しいものはどれか(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. Sandbox SalesforceDXはCLIなどを含む開発ツールB. Dev Hub Dev 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. JavaScript LightningコンポーネントはAuraコンポーネントとLightning Webコンポーネントの総称D. JavaScript JavaScriptはクライアント側を実装する言語
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 -
以下のコード実行時に、取引先オブジェクトのListViewを返すものはどれか
system.debug(controller.getListViewOptions());
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. CancelB. Save
D. Cancel B⇒変更を保存し更新後の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. FirstNameC. 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.SalesTaxC. 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 IDEA. VSCode Lightning 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を使うことでガバナ制限の追加セットを作成されるので、それまでにテストデータ作成などで消費したガバナ制限がリセットされて、通常の実行と同じ条件でテストが可能になる。 -
Test.startTestメソッドはどのような動作をするかテスト用に新しくガバナ制限セットを追加し、それまでのガバナ制限の消費をリセットする。 テスト対象のコードがテストされるポイントをマークする役割があり、startTestとstopTestの間のコードはリセットされたガバナ制限セットを消費することで通常の実行と同じ条件でテスト可能となる。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_testing_tools_start_stop_test.htm -
Test.stopTestメソッドはどのような動作をするかstartTest実行前(リセットされる前)のガバナ制限が適用され、テスト対象のコードが非同期処理の場合はその処理が即座に実行される(つまり同期的に実行される)。 通常startTestメソッドと組み合わせて使用し、テスト対象のコードのテストが終了するポイントをマークする役割を持つ。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_testing_tools_start_stop_test.htm -
カスタムボタンとカスタムリンクでサポートされるコンテンツソースはどれか(2つ)
A. VisualForceページ
B. 静的リソース
C. URL
D. Chatterファイル
E. LightningページA. VisualForceページ
C. URL Lightning Experienceでサポートされているコンテンツソース
・URL
・Visualforceページ
・OnClick JavaScript(非推奨)
https://help.salesforce.com/s/articleView?id=sf.defining_custom_links_fields.htm&type=5 -
建設会社の運用管理者は、機械と呼ばれるカスタムオブジェクトを使用してクレーンやその他の機械の使用と保守を管理する。
管理者は、機械をさまざまな建設作業に割り当て、各作業に関連する日付とコストを追跡できるようにしたいと考えている。
また、1つの建設作業に複数の機械を割り当てられるようにしたい。これらの要件を満たすために開発者は何をすべきか。
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. ClassB. Object すべてのApexデータ型がObject型から継承される。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/langCon_apex_primitives.htm -
次のコードを実行時、どのメッセージがログに記録されるか。
try {
List<String> nameList;
Account a;
String s = a.Name;
nameList.add(s);
} catch (ListException le) {
System.debug('List Exception');
} catch (NullPointerException npe) {
System.debug('NullPointer Exception');
} catch (Exception e) {
System.debug('Generic Exception');
}
A. メッセージは記録されない
B. Generic Exception
C. List Exception
D. NullPointer ExceptionD. 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);B,C SOQLインジェクション対策は静的クエリとバインド変数を使用する(B)かString.escapeSingleQuotesメソッドを使用する(C)
Aはバインド変数を宣言する記述がないため間違い。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/pages_security_tips_soql_injection.htm -
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. StandardSetControllerD. StandardSetController StandardSetControllerクラスはレコードのリストを扱うもので、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. EnumB. Map getParametersメソッドの戻り値は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. 定義で属性LightningStyleSheetsをtrueに設定する Lightning Experience または Salesforce モバイルアプリに表示される Visualforce ページにLightning Experience UI と一致するスタイルを設定する場合は、<apex:page> タグに lightningStylesheets="true" を設定する。
ただし、ページがSalesforce Classicで表示される場合、Lightning Experience のスタイル設定は適用されない。
https://developer.salesforce.com/docs/atlas.ja-jp.pages.meta/pages/vf_dev_best_practices_slds_lightningstylesheets.htm -
ごみ箱に送られたレコードの監査証跡を作成する必要があるとき、 どのタイプのトリガーを作成すべきか。
A. after delete
B. after undelete
C. before undelete
D. before deleteA. 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 undeleteD. 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. メタデータ APIB. Tooling API
C. 設定メニュー
D. Salesforce DX B⇒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. 取引先レコードのリストを処理するカスタムJavaScriptC. コントローラ拡張メソッドから返された取引先レコードのリスト 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:stylesheetD. apex:stylesheet Visualforceでカスタムスタイルを使用するには方法が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 ContactControllerB. public with sharing class ContactController
D. public inherited sharing class ContactController A⇒明示的に指定しない場合は実行時の共有ルールに従うため、呼び出し元のクラスの共有ルールに依存する。共有設定を明示しないのは推奨されないため間違い。
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. @RestResourceD. @RestResource A⇒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 IDEC. 開発者コンソール 開発者コンソールではログや実行時間の確認などパフォーマンスの問題を特定できる機能が備わっている。
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. StringD. 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. MapD. Map Apexのコレクションは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. 100D. 100 Database.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. sObjectC. Set Apexのコレクションは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. UndefinedB. null before insertのTrigger.oldはレコードが存在していない状態なのでnullになる。
D⇒Apexに「Undefined」という状態はない。 -
Visualforce ページで標準アクションをオーバーライドするには、<apex:page>タグでどの属性を定義する必要があるか。
A. pageReference
B. override
C. controller
D. standardControllerD. 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 -
本番環境にデプロイする際に必要なプロセスはどれか(2つ)
A. すべてのトリガーのテストカバレッジは75%以上である必要がある
B. すべてのトリガーのテストカバレッジは少なくとも1%以上である必要がある
C. すべてのApexコードのテストカバレッジは、少なくとも75%以上である必要がある
D. すべてのテストとトリガーのテストカバレッジを合わせて75%以上である必要があるB. すべてのトリガーのテストカバレッジは少なくとも1%以上である必要がある
C. すべてのApexコードのテストカバレッジは、少なくとも75%以上である必要がある 運用環境のデプロイを実施するための条件
・運用環境における全テストの合計カバー率が 75% 以上※
・各Apexトリガの単体テストカバー率が 1 %以上
※運用組織全体で評価される。例えば 1 つの Apex クラスにテストが存在しない (カバー率 0%) 場合でも、全体で75%以上のカバー率があればデプロイできる。ただし、その内Apex トリガは最低 1% のカバー率がないと、どんな場合もデプロイに失敗する。
https://help.salesforce.com/s/articleView?id=000384442&type=1 -
リードオブジェクトにはカスタム項目の優先メール(Prior_Email__c)がある。以下のトリガーは、メール項目(Email)が変更されるたびに現在のメール(Email)を優先メール項目(Prior_Email__c)にコピーするものである。このトリガーはどのタイプの組み込み例外を発生させるか。
trigger test on Lead (before update) {
List<Lead> leadsToUpdate = new List<Lead>();
for(Lead leadRecord : trigger.new){
if(leadRecord.Email != trigger.oldMap.get(leadRecord.Id).Email){
leadRecord.Prior_Email__c = trigger.oldMap.get(leadRecord.Id).Email;
leadsToUpdate.add(leadRecord);
}
}
if(leadsToUpdate.size() > 0) {
update leadsToUpdate;
}
}
A. NullPointerException
B. CompileTimeException
C. DmlException
D. LimitExceptionC. DmlException before 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.jsonB. Docker
C. Buildpacks B⇒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;A.
@wire(getAccounts, {searchTerm: ‘$searchTerm’})
accoutList; LWCでApexメソッドを呼び出すには以下のように記述する※。
@wire(apexMethodName, { apexMethodParams })
propertyOrFunction;
apexMethodParamsはメソッドの引数で、頭に$を付けることで動的に値を渡せる(ここではsearchTerm)
propertyOrFunctionはメソッドによって取得されたデータを格納するもの(ここではaccountList)
※呼び出されるApexメソッドには@AuraEnabled(cacheable=true)が付加されている必要がある
https://developer.salesforce.com/docs/platform/ja-jp/lwc/guide/apex-wire-method.html -
デバッグログに関する次の記述のうち正しいものはどれか(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 APIA. 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 -
2つのカスタムコントローラ拡張を持っており、それぞれにsave()メソッドがある。次のVisualforceページではどのsave()メソッドが呼び出されるか。
<apex:page standardController="Account" extensions="ExtensionA, ExtensionB">
<apex:commandButton action="{!save}" value="Save" ></apex:commandButton>
</apex:page>
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 -
以下のコードを実行した場合xの値はどれか。
Boolean isOK;
Integer x;
String theString = 'Hello';
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. 4D. 4 Apexでの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 -
取引先オブジェクトにトリガーを作成し、そのトリガーが正常に一度に多数のレコードを処理できるかテストしたいと考えています。開発者チームは、一意の名前を持つ200個の取引先レコードでトリガーをテストする必要があると判断しました。
最小限のコード量で単体テスト内のテストデータを作成するためには、どのような作業を行う必要がありますか。2つ選びなさい。
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 EditionA. Developer Sandbox Developer 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. @RemoteActionB. @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 objectA. data upsert bulk
B. data import tree A⇒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 -
Lightningコンポーネントで通貨型のカスタム項目Salary__cにユーザーが入力できるようにするコードは何か<lightning-input-field field-name="Salary__c"> </lightning-input-field> https://developer.salesforce.com/docs/component-library/bundle/lightning-input-field/documentation
-
フローをAuraコンポーネントで呼び出す記述はどれか
A. aura:flow
B. aura-flow
C. lightning-flow
D. lightning:flowD. 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
ログイン