Skip to main content

無料の花束プロモーションを実行するオートメーションを作成する

メモ

メモ

日本語で受講されている方へ
Challenge は日本語の Trailhead Playground で開始し、かっこ内の翻訳を参照しながら進めていってください。Challenge での評価は英語データを対象に行われるため、英語の値のみをコピーして貼り付けるようにしてください。日本語の組織で Challenge が不合格だった場合は、(1) この手順に従って [Locale (地域)] を [United States (米国)] に切り替え、(2) [Language (言語)] を [English (英語)] に切り替えてから、(3) [Check Challenge (Challenge を確認)] ボタンをクリックしてみることをお勧めします。

翻訳版 Trailhead を活用する方法の詳細は、自分の言語の Trailhead バッジを参照してください。

このステップでは、すべての注文の状況を確認するための新しいクラスと新しいメソッドを作成します。注文が有効化されると、注文にボーナス花束を自動的に追加します。

コードを見るときは、// で始まるテキストはコードのコメントであることを忘れないでください。コードでは、コメントでコードブロック (1 行以上のコード) の目的を説明します。コメントは、記述すべきコード、既存のコードの処理、失敗したコードが実行するはずだった処理を開発者が理解するのに役立ちます。

クラスとメソッドを作成する

  1. 設定 をクリックして、[Developer Console (開発者コンソール)] を選択します。
  2. [File (ファイル)] | [New (新規)] | [Apex Class (Apex クラス)] をクリックします。
  3. このクラスに OrderItemUtility という名前を付けて、[OK] をクリックします。
  4. 既存のコードを次のコードに置き換えます。
    //Create the class
    public class OrderItemUtility {
        //Create the method that will add free bonus bouquet when order is activated
        public static void addBonusBouquet(List<Order> ordersFromTrigger) {
            //TO DO 3.1: Determine if we have a bonus product and get its ID to add to the order
                //TO DO 2.1: Create a list to store any new bouquets we'll insert later
                //TO DO 2.2: Loop over orders in ordersFromTrigger, for each order (called currentOrder) do something
                    //TO DO 2.3: Verify the order status is 'Activated'
                        //TO DO 2.4: Create a new bouquet and set values
                        //TO DO 2.5: Add the freeBouquet sObject to your list
                    //TO DO 2.6: Close the "if" and "for loop" sections
                //TO DO 3.2: Use DML to add the new list of newBouquets
            //TO DO 3.3: Close the if section
        } //end method
    } //end class
  5. [File (ファイル)] | [Save (保存)] をクリックして、クラスを保存します。

新しい花束を作成するためのオートメーションを追加する

次に、オートメーションをクラスに追加します。コードに追加の行を貼り付けると、コードコメント (//) が空白行に追加されます。コードを貼り付けるときには、余分なコメントを忘れずに削除してください。

  1. 新しいボーナス花束を格納するためのリストを作成します。
    クラスの //TO DO 2.1 のコメントの下に次のコードを貼り付けます。
    List<OrderItem> newBouquets = new List<OrderItem>();
  2. for ループを使用して、トリガーから送られる注文を反復処理します。(トリガーは後で作成します。)
    クラスの //TO DO 2.2 のコメントの下に次のコードを貼り付けます。
    for(Order currentOrder : ordersFromTrigger) {

    これは for ループの最初の部分です。トリガーからすべての注文を取得して、ordersFromTrigger リストに追加します。for ループは各注文を評価して、注文に currentOrder という名前を付けます。
メモ

ここでは開き中括弧 ( { ) しか指定されていませんが、これはまだ注文の処理が終わっていないためです。for ループはこのステップの後のほうで閉じます。

  1. 次に各注文を (作成した currentOrder 変数を使用して) 調べ、その注文が有効化されているかどうかを確認します。有効化されていれば、他の処理を行います。有効化されていなければ、次の注文で同じ確認を行います。
    クラスの //TO DO 2.3 のコメントの下に次のコードを貼り付けます。
    if(currentOrder.Status == 'Activated') {

    for ループのコードと同じように、開き中括弧しかありません。有効化されている各注文の処理が完了した後で、閉じ中括弧を追加します。
  2. 有効化されている注文を見つけたら、新しい OrderItem (注文品目) の sObject を作成します。
    クラスの //TO DO 2.4 のコメントの下に次のコードを貼り付けます。
    OrderItem freeBouquet = new OrderItem(
        OrderId = currentOrder.id, //this is the order we're linking the bouquet to
        //PricebookEntryId = entry.id,
        numberOfFlowers__c = 3,
        description = 'FREE Bouquet',
        Quantity = 1,
        colorTheme__c = 'Spectacular Sunset',
        percentOfOpening__c = 0,
        UnitPrice = 0.00
    );
    ここでは freeBouquet という OrderItem (注文品目) sObject を作成し、その項目に値を割り当てます。
  3. //TO DO 2.1 で作成したリストに sObject を追加します。
    クラスの //TO DO 2.5 のコメントの下に次のコードを貼り付けます。
    newBouquets.add(freeBouquet);

    Apex に組み込まれている add メソッドを使用して、リストに項目を追加しやすいようにします。
    newBouquets.add(freeBouquet);
    このステートメントでは、newBouquets はリストの名前、add はメソッド、freeBouquet (かっこ内) は newBouquets リストに追加する sObject です。
  4. 最後に if ステートメント (有効化されている注文に対してのみ実行されるコード) と for ループ (ループが有効化されているすべての注文を処理する際に各注文に対して実行されるコード) を完成させます。
    クラスの //TO DO 2.6 のコメントの下に次のコードを貼り付けます。
        } //end if
    } //end for loop
    クラスファイルは次のようになります。
    //Create the class
    public class OrderItemUtility {
        //Create the method that will add free bonus bouquet when order is activated
        public static void addBonusBouquet(List<Order> ordersFromTrigger) {
            //TO DO 3.1: Determine if we have a bonus product and get its ID to add to the order
                //TO DO 2.1: Create a list to store any new bouquets we'll insert later
                List<OrderItem> newBouquets = new List<OrderItem>();
                //TO DO 2.2: Loop over orders in ordersFromTrigger, for each order (called currentOrder) do something
                for(Order currentOrder : ordersFromTrigger) {
                    //TO DO 2.3: Verify the order status is 'Activated'
                    if(currentOrder.Status == 'Activated') {
                        //TO DO 2.4: Create a new bouquet and set values
                        OrderItem freeBouquet = new OrderItem(
                            OrderId = currentOrder.id, //this is the order we're linking the bouquet to
                            //PricebookEntryId = entry.id,
                            numberOfFlowers__c = 3,
                            description = 'FREE Bouquet',
                            Quantity = 1,
                            colorTheme__c = 'Spectacular Sunset',
                            percentOfOpening__c = 0,
                            UnitPrice = 0.00
                        );
                        //TO DO 2.5: Add the freeBouquet sObject to your list
                        newBouquets.add(freeBouquet);
                    //TO DO 2.6: Close the "if" and "for loop" sections
                    } //end if
                } //end for loop
                //TO DO 3.2: Use DML to add the new bouquet to the Order
            //TO DO 3.3: Close the if section
        } //end method
    } //end class
  5. [File (ファイル)] | [Save (保存)] をクリックして、OrderItemUtility クラスを保存します。

次の単元では、Salesforce からデータを取得したり Salesforce にデータを送信したりする方法を学習し、トリガーを作成します。そしていよいよコードをテストします。

Salesforce ヘルプで Trailhead のフィードバックを共有してください。

Trailhead についての感想をお聞かせください。[Salesforce ヘルプ] サイトから新しいフィードバックフォームにいつでもアクセスできるようになりました。

詳細はこちら フィードバックの共有に進む