User Interface (Objectives 1, 2, 3) Flashcards

1
Q

Salesforce ユーザー インターフェイスでユーザーにエラー メッセージを表示するために使用できるのは、次のうちどれですか?

3つの答えを選んでください。

A. lightning:notificationsLibrary
B. apex:errorMessages
C. apex:pageMessages
D. LightningException
E. lightning-platform-show-toast-event

A

A. lightning:notificationsLibrary
C. apex:pageMessages
E. lightning-platform-show-toast-event

Lightning:notificationsLibraryコンポーネントはAuraコンポーネントでエラーメッセージを生成するために使用できますが、lightning-platform-show-toast-eventコンポーネントはLightning Webコンポーネントに使用できます。apex:pageMessages コンポーネントは、Visualforce ページにメッセージを表示します。

Lightningコンポーネントにサーバー側のエラーメッセージを送信するには、正しい例外タイプはAuraHandledExceptionです。コンポーネント apex:errorMessages は存在しません。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

アクション属性を受け入れることができるタグは次のうちどれですか?

3つの答えを選んでください。

A. <apex:outputPanel>
B. <apex:pageBlock>
C. <apex:commandButton>
D. <apex:page>
E. <apex:actionPoller>

A

C. <apex:commandButton>
D. <apex:page>
E. <apex:actionPoller>

次のタグは、アクション属性を受け入れることができます。

<apex:commandButton>
<apex:commandLink>
<apex:actionPoller>
<apex:actionSupport>
<apex:actionFunction>
<apex:page>
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

ドロップダウンフィルタを検索ページに追加し、ユーザがドロップダウンで選択した取引先レコードに基づいて検索結果をフィルタリングできるようにする必要があります。開発者は、Lightning コンボボックスコンポーネントと、取引先レコードのリストを返す APEX コントローラメソッドを追加しました。メソッドは多数のレコードを返しますが、コンボボックスは空のリストを表示しています。以下のLightningウェブコンポーネントコントローラとAPEXコードがある場合、この問題を解決するためにAPEXクラスにどのような変更を加えることができますか?

Lightning web component controller ###

import { LightningElement, track, wire } from 'lwc';
import getAccounts from '@salesforce/apex/TestComponentController.getAccounts';
/** more code here **/

export default class TestComponent extends LightningElement {

    @track accounts;
    @wire(getAccounts) accounts;

   /** other code here **/
}

APEX class ###

public with sharing class TestComponentController {
    
    /** other code here **/
    
    @AuraEnabled (cacheable=true)
    public static List<Account> getAccounts() {
        
        List<Account> accounts = [SELECT Id, Name FROM Account];
        return accounts;
    }
}

A. getAccountsメソッドはMapデータ型を返す必要があります。
B. クラスは、getAccounts によって返される List データを自動的にフォーマットするために、LightningComponentUI インターフェースを実装する必要があります。
C. getAccounts メソッドは、キー値データがコロンで区切られた String データ型である Set データ型を返す必要があります。
D. getAccountsメソッドでコンボボックスコンポーネントが必要とするデータをフォーマットするために、ラッパークラスをクラスに追加することができます。

A

D. getAccountsメソッドでコンボボックスコンポーネントが必要とするデータをフォーマットするために、ラッパークラスをクラスに追加することができます。

ラッパー・クラス(コンテナ・クラス)は、カスタム・データ構造として機能することができる。コンボボックスコンポーネントは 「label 」と 「value 」フィールドのデータを必要とします。ラッパークラスは、要求された構造に従い、それに応じて返されるデータをフォーマットするように設計することができます。

現在のオプションを考えると、MapデータもSetデータも実現可能なソリューションではありません。LightningComponentUI インターフェースは存在しません。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Lightning Web コンポーネントは、Lightning-datatable コンポーネントを使用して、ドナーの名前と血液型を含むレコードを表示する必要があります。ロードされると、Lightningコンポーネントはサーバー側コントローラからデータを取得し、テーブルに入力する必要があります。以下のクライアントコントローラがある場合、開発者はApexコントローラからどのようなデータ型でデータを返すべきですか?

import { LightningElement, track } from 'lwc';
import getDonors from '@salesforce/apex/DonorController.getDonors';

const columns = [
    { label: 'Name', fieldName: 'Name' },
    { label: 'Blood Type', fieldName: 'Blood_Type\_\_c' }
];

export default class SearchQuestions extends LightningElement {

    @track data = []; // for lightning-datatable data attribute
    @track columns = columns; // lightning-datatable columns attribute

    connectedCallback() {

        getDonors()
            .then(result => {
                this.data = result; // populate the table
            })
            .catch(error => { console.log(error); });
    }
}

A. ラッパーApexクラスとして
B. カンマ区切りの値
C. sObjectレコードのリストとして
D. sObjectレコードのJSONデータとして

A

C. sObjectレコードのリストとして

SOQLクエリから返されるsObjectレコードのリストは、ApexコントローラでLightningデータテーブルコンポーネントに入力するために使用できます。コレクション以外に、基本的なデータ型(Integer、String、Dateなど)、標準/カスタムオブジェクト、Apexクラスがサポートされています。

サーバーサイドコントローラーから返されるすべてのデータは、Lightningフレームワークによって自動的にJSON形式にシリアライズされます。データを手動でJSONにフォーマットすると、このシナリオではデータが破損します。Lightning データテーブル コンポーネントは、カンマ区切りの値を処理するようには設計されていません。標準またはカスタムのオブジェクトレコードのコレクションがサポートされているため、ラッパーのApexクラスは必要ありません。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

reRender’属性と’rendered’属性に関する次の記述のうち、正しいものはどれですか?
答えを2つ選んでください。

A. reRender’ 属性は <apex:outputPanel> タグで指定できます。
B. どちらの属性も = 記号の後にブール値を指定します。
C. reRender' 属性は、ページのどの部分を更新するかを指定するために使われます。
D. rendered' 属性は、ページのあるセクションをユーザに表示するかどうかを指定します。</apex:outputPanel>

A

C. reRender’ 属性は、ページのどの部分を更新するかを指定するために使われます。
D. rendered’ 属性は、ページのあるセクションをユーザに表示するかどうかを指定します。

reRender’属性は、ボタンやリンクのような要素の属性として使われ、リフレッシュされるべきページのセクションを特定します。’rendered’属性は、ブール値を受け入れ、特定の要素がページ上に表示されるべきかどうかを指定します。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

以下のLightningコンポーネントのマークアップの動作について正しいものは?
答えを3つ選んでください。

<div class="slds-grid slds-wrap">    
  <div class="slds-col slds-size_1-of-1 slds-medium-size_8-of-12">
    <span>Cell A</span>
  </div>
  <div class="slds-col slds-size_1-of-1 slds-large-size_4-of-12">
    <span>Cell B</span>
  </div>
</div>

A. 大きなデバイスでは、セル B は 12 カラムのグリッドレイアウトの 4 カラムを占めます。
B. 大型デバイスでは、セルAは12列グリッドレイアウトの8列を占めます。
C. ミディアムデバイスでは、セルAは12列グリッドの8列を占めま す。
D. 小型デバイスでは、セルAは12カラムのグリッドレイアウトの8カラムを占めます。
E. ミディアム・デバイスでは、セルBは12列グリッドレイアウトの4列を占めます。

A

A. 大きなデバイスでは、セル B は 12 カラムのグリッドレイアウトの 4 カラムを占めます。
B. 大型デバイスでは、セルAは12列グリッドレイアウトの8列を占めます。
C. ミディアムデバイスでは、セルAは12列グリッドの8列を占めま す。

セルAはミディアム・サイズの属性のため、ミディアム・デバイスでは8カラムを占めます。ラージ・デバイスでは、より大きな画面でどのように振る舞うべきかを定義する属性が設定されていないため、8列を占めるままです。ラージ・デバイスでは、セルBはマークアップで定義されたlarge size属性により4カラムを占めます。

セルAのデフォルトの動作は 「slds-size_1-of-1 」であり、グリッドの12カラムすべてを占有します。スモール・デバイス用の属性は定義されていないので、セルAはスモール・スクリーンで12カラムを占有します。同様に、セルBの場合、中型デバイス用の属性が定義されていないため、中型スクリーンでは12カラムを占有したままとなります。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

企業で毎日使用される特定のビジネスプロセスをユーザが実行できるように、Visualforce ページが作成されました。ユーザがボタンをクリックすると、要求が送信され完了したことを示すメッセージがユーザインタフェースに表示されるようにしたい。ページから送信された要求は、非同期で処理されます。この要件を満たすのに適した Visualforce コンポーネント定義はどれですか?

A. <apex:requestStatus onSubmitText="Please wait..." onCompleteText="Request completed!" id="myStatus" />
B. <apex:actionStatus startText="Please wait..." stopText="Request completed!" id="myStatus" />
C. <apex:submit start="Please wait..." stop="Request completed!" id="myStatus" />
D. <apex:message onSubmitText="Please wait..." onCompleteText="Request completed!" id="myStatus" />

A

B. <apex:actionStatus startText="Please wait..." stopText="Request completed!" id="myStatus" />

Visualforce の <apex:actionStatus> コンポーネントをページに追加すると、非同期リクエストのステータスを表示できます。このコンポーネントをサポートする Visualforce タグは、ステータスタグで <apex:actionStatus> コンポーネントの id を定義することにより、このコンポーネントを参照できます。例えば、<apex:commandButton>がクリックされると、参照された<apex:actionStatus>コンポーネントは、非同期リクエストが送信される前に、その’startText’属性の値を表示します。リクエストが完了すると、’stopText’値が表示されます。

<apex:message> コンポーネントは、Visualforce コントローラからの警告メッセージやエラーメッセージを表示するために使用します。onSubmitText’ および ‘onCompletedext’ 属性は無効です。その他のオプションには無効なコンポーネントが含まれています。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

ある開発者がLightningページをデザインしており、Lightning Data Service(LDS)を使用するのが適切なツールかどうかを判断しています。LDSについて正しいものはどれですか?
答えを3つ選んでください。

A. LDSは、Apexコードを記述することなくCRUD機能を提供します。
B. LDSはJavaScriptと組み合わせて使用する必要があります。
C. LDSは、1つのコンポーネントが変更されたときに、通常は追加のコードなしで、複数のコンポーネントをリフレッシュすることができます。
D. LDSは特定のコンテナでのみ利用可能です。
E. LDSはレコードの一括更新に使用できます。

A

A. LDSは、Apexコードを記述することなくCRUD機能を提供します。
C. LDSは、1つのコンポーネントが変更されたときに、通常は追加のコードなしで、複数のコンポーネントをリフレッシュすることができます。
D. LDSは特定のコンテナでのみ利用可能です。

LDSは基本的なCRUD操作をサポートしており、読み取り専用の操作はJavaScriptを使わずに完全にマークアップで行うことができます。レコードIDを使用して、一度に1つのレコードのみを操作することができます。

レコードを使用するすべてのコンポーネントが同じキャッシュデータを共有するため、パフォーマンスが向上し、ユーザーインターフェースからそのようなレコードに加えられた変更は、影響を受けるすべてのコンポーネントでリフレッシュを生成します。

また、LDSは以下のコンテナで利用可能です:
1) Lightning Experience
2) Salesforce app
3) Experience Builder sites
4) Lightning Out
5) Lightning Components for Visualforce
6) Standalone Lightning apps
7) Lightning for Gmail
8) Lightning for Outlook

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Aura コンポーネントで作業しているとき、開発者はクライアント側コントローラから非同期にアクセスできる複雑なサーバー側ロジックを作成する必要があります。これを実装するには何をしなければなりませんか?
答えを 2 つ選んでください。

A. ボタンの ‘onclick’ 属性でサーバー側のメソッドを指定します。
B. AuraEnabled でサーバー側メソッドをアノテートする。
C. Lightning データサービスを使用して、カスタムサーバーサイドオペレーションを構築する。
D. enqueueAction() 関数を使用してサーバーサイドメソッドを呼び出す。

A

B. AuraEnabled でサーバー側メソッドをアノテートする。
D. enqueueAction() 関数を使用してサーバーサイドメソッドを呼び出す。

Aura コンポーネントは、クライアント側コントローラを使用して、$A.enqueueAction() 関数を使用して非同期サーバー側コールを実行できます。リクエストは、サーバーからの応答を受信したときに実行されるコールバック関数で指定されます。クライアント側コントローラから呼び出せるのは、サーバー側クラスで @AuraEnabled アノテーションが付けられたメソッドのみです。

ライトニングデータサービスは、基本的なCRUD操作のみを可能にし、複雑なサーバーサイドロジックやカスタムロジックプロセッシングには適していません。ボタンの ‘onclick’ 属性は、クライアントサイド JavaScript 関数を呼び出すために使用されます。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Continuation クラスを実装する Aura コンポーネントのコントローラを想定した場合、以下の Apex クラスにどのような適切な変更を加えれば、長時間コールアウトを機能させることができますか?
答えを2つ選んでください。

// Client-side controller
({
    runContinuation : function(cmp) {

        var action = cmp.get("c.postRequest");
        
        action.setCallback(this, function(response) {
            var state = response.getState();
            if (state === "SUCCESS") {
                console.log(JSON.stringify(response.getReturnValue()));
            } else if (state === "ERROR") {
                var errors = response.getError();
                if (errors) {
                    console.error(errors);
                }
            }
        });
        
        $A.enqueueAction(action);
    }
})

// Apex class
public with sharing class TestContinuation {
    
    // Callout endpoint as a named credential URL
    private static final String CALLOUT_URL = '<endpoint url here>';
    
    // action method
    @AuraEnabled
    public static Object postRequest() {
        
      Continuation con = new Continuation(40);
      con.continuationMethod = 'callbackMethod';
      con.state = 'All good!';
      
      HttpRequest req = new HttpRequest();
      req.setMethod('GET');
      req.setEndpoint(CALLOUT_URL);
      
      con.addHttpRequest(req);
      return con;
    }
    
    // callback method
    @AuraEnabled
    public static Object callbackMethod(List<String> labels, Object state) {
        
      HttpResponse response = Continuation.getResponse(labels[0]);
      String result = response.getBody();
      return result;
    }
}

A. コールバック・メソッドに ‘continuation=true’ アノテーションを追加します。
B. 継続インスタンスを返すメソッドに ‘cacheable=true’ アノテーションを追加します。
C. 継続インスタンスを返すアクション・メソッドに ‘continuation=true’ アノテーションを追加します。
D. 継続チェーンに関与するすべてのメソッドに ‘cacheable=true’ アノテーションを追加します。

A

C. 継続インスタンスを返すアクション・メソッドに ‘continuation=true’ アノテーションを追加します。
D. 継続チェーンに関与するすべてのメソッドに ‘cacheable=true’ アノテーションを追加します。

継続メソッドのみがキャッシュ可能として定義されている場合、エラーがスローされます。コールバック・メソッドのみがキャッシュ可能として定義されている場合、クライアント側キャッシュ・メカニズムで使用される関数である JavaScript の setStorable() 関数は使用できません。2つのメソッドのいずれもキャッシュ可能として定義されていない場合、APIバージョン44以上でも機能制限が発生します。機能的な安定性を確保するために、継続メソッドやコールバックメソッドなど、継続チェーン内の すべてのメソッドに ‘cacheable=true’ アノテーションを定義することを推奨します。

継続インスタンスを返すメソッドでは ‘continuation=true’ アノテーションが必要であり、 コールバックメソッドでは必要ありません。

継続メソッドがキャッシュ可能でコールバックメソッドがキャッシュ可能でない場合、例外がスローされます。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Cosmic Technologyでは、Salesforceのレガシーシステムを使用しており、オポチュニティの作成にVisualforce Page Overrideを使用しています。Lightning Experienceへの移行の一環として、従来のApex:PageMessage機能の代わりに、コントローラメソッドの結果(成功、エラー、警告、または情報)に基づいて変化する動的な通知を表示したいと考えています。これは、Lightning Experienceで使用されるVisualforceページに適用する必要があります。開発者はどの関数を使用すればよいですか?

A. force:showToast Aura event
B. sforce.one.showToast({toastParams})
C. force.showToast({toastParams})
D. force.one.showToast({toastParams})

A

B. sforce.one.showToast({toastParams})

トーストは、ページのビュー上部のヘッダの下にメッセージを表示するために使用します。sforce.one.showToast({toastParams}) メソッドを使用して、Visualforce ページにトーストを表示します。このメソッドは、タイトル、メッセージ、およびタイプを定義するためのパラメータを受け付けます。

force:showToast Aura イベントは、Lightning Aura コンポーネントでトーストを表示するために使用されます。force.showToast({toastParams}) および force.one.showToast({toastParams}) は有効なメソッドではありません。

force:showtoast 関数は、Visualforce ページでサポートされている JavaScript 関数です。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

ページ上のすべてのコンポーネントに対して生成されたメッセージを表示するために、Visualforceページで使用されるタグは次のうちどれですか?

A. <apex:errorMessage/>
B. <apex:pageMessages/>
C. <apex:pageMessage/>
D. <apex:errorMessages/>

A

B. <apex:pageMessages/>

コントローラが生成したすべてのコンポーネントのメッセージを、単一の<apex:pageMessages/>要素で表示することができます。

<apex:pageMessage/>タグは、参照される単一のコンポーネントに対するメッセージを表示するために使用されます。他のオプションには無効なタグが含まれています。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

ある開発者が、Visualforceページが最初に読み込まれたときに、InitializePageという名前のコントローラメソッドを呼び出したいと考えています。Visualforceページにコードを記述する適切な方法は何ですか?

A. <apex:page action='{!InitializePage}'>
B. <apex:page onLoad='InitializePage'>
C. <apex:page action='InitializePage'>
D. <apex:page onLoad='{!InitializePage}'>

A

A. <apex:page action='{!InitializePage}'>

Visualforce ページでコントローラメソッドを参照するには、Visualforce タグの action 属性でメソッド名を {!} 記法を使用して定義する必要があります。

onLoad 属性は、JavaScript メソッドを呼び出すための HTML イベント属性です。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Salesforce の開発者は、カスタム Visualforce ページにエラーハンドラを実装する必要があります。開発者はどのツールやテクニックを使用する必要がありますか?
答えを 3 つ選んでください。

A. パフォーマンスに影響するため、try-catch ブロックの使用を避ける。
B. Visualforce ページに <apex:pageMessages></apex:pageMessages> タグを記述する。
C. ApexPages.addMessage() を Apex から呼び出して、Visualforce ページにメッセージを追加します。
D. 例外を AuraHandledException として渡す
E. try-catch ブロックを使用してエラーメッセージをキャッチし、ユーザーフレンドリーなメッセージを生成する。

A

B. Visualforce ページに <apex:pageMessages></apex:pageMessages> タグを記述する。
C. ApexPages.addMessage() を Apex から呼び出して、Visualforce ページにメッセージを追加します。
E. try-catch ブロックを使用してエラーメッセージをキャッチし、ユーザーフレンドリーなメッセージを生成する。

Apex コードで try-catch ブロックを使用してシステム・メッセージを傍受し、よりユーザフレンドリなメッセージを作成します。これらのメッセージを Visualforce ページに表示するには、ApexPages.addMessage() を呼び出し、Visualforce ページに <apex:pageMessages></apex:pageMessages> ブロックがあることを確認します。AuraHandledException は、Lightning ページにエラーメッセージを送信するために使用されます。

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Cosmic Solutionsは、営業チーム用のLightning Webコンポーネントを構築しています。以下のHTMLマークアップとクライアント側コントローラを考慮した場合、’getRecords’ Apexメソッドに使用するオプションはどれですか?

<!-- salesComponent.html -->

<template>
    <lightning-layout multiple-rows="true">
        <template for:each={data} for:item="account">
            <lightning-layout-item size="4" key={account.Id}>
                {account.Name}
                <lightning-layout multiple-rows="true">
                    <template for:each={account.Contacts} for:item="contact">
                        <lightning-layout-item size="3" key={contact.Id}>
                            {contact.Name}
                        </lightning-layout-item>
                    </template>
                </lightning-layout>
            </lightning-layout-item>
        </template>
    </lightning-layout>
</template>

// salesComponent.js

import { LightningElement, track } from 'lwc';
import getRecords from '@salesforce/apex/SalesController.getRecords';
export default class SalesComponent extends LightningElement {
    @track data = [];
    renderedCallback() {
        getRecords().then(result => {
            this.data = result;
        });
    }
}

// SalesController.cls:

@AuraEnabled
public static [return type] getRecords() {
    [method body]
}

A.

public static List<Account> getRecords(){
    return [
        SELECT Name, (SELECT Name FROM Contacts)
        FROM Account
    ];
}

B.

public static List<Contact> getRecords(){
    return [
        SELECT Name, Account.Name
        FROM Contact WHERE AccountId != NULL
    ];
}

C.

public static Map<Id, List<Contact>> getRecords(){
    Map<Id, List<Contact>> accounts = new Map<Id, List<Contact>>();
    for (Account acc : [ SELECT Name, (SELECT Name FROM Contacts) FROM Account]) {
        accounts.put(acc.Id, acc.Contacts);
    }
    return accounts;
}

D.

public static List<List<Account>> getRecords(){
    return [
        SELECT Name, (SELECT Name FROM Contacts)
        FROM Account
    ];
}
A

A.

public static List<Account> getRecords(){
    return [
        SELECT Name, (SELECT Name FROM Contacts)
        FROM Account
    ];
}

マークアップに基づき、Lightningウェブコンポーネントは’for:each={data}’ディレクティブを使用して各アカウントをループし、次のアカウントに移動する前に’for:each={account.Contacts}’ディレクティブを使用して関連するすべての連絡先を表示します。

Apexメソッドが必要なデータ形式をサポートするには、各アカウントがすべての関連連絡先を含む取引先のリストを返す必要があります。この要件は、次の構文に基づくSOQL文を定義することで満たすことができます:

SELECT ParentField, (SELECT ChildField FROM {ChildRelationshipName}) FROM {ParentObject}

たとえば:

SELECT Name, (SELECT Name FROM Contacts) FROM Account

How well did you know this?
1
Not at all
2
3
4
5
Perfectly