ablog

不器用で落着きのない技術者のメモ

Salesforce の APEX を使ってみる

Apex クイックスタート に従って Salesforce の APEX を使ってみた。

カスタムオブジェクトを作成する

f:id:yohei-a:20210517072836p:plain

  • [設定]-[オブジェクトマネージャー]で、[作成]-[カスタムオブジェクト]を選択し、以下を入力して [保存] をクリック
    • 表示ラベル: Book
  • [オブジェクトマネージャー]で "Book" をクリックし、[項目とリレーション]をクリックする
  • [新規]をクリックし、以下の通り入力して保存する
    • データ型: 数値
    • 項目の表示ラベル: Price
    • 文字数: 16
    • 小数点の位置: 2
Apex クラスを作成する
  • [設定]-[Quick Find (クイック検索)] ボックスに「Apex 」と入力し、[Apex クラス]を選択する

f:id:yohei-a:20210517072656p:plain

  • クラスエディタに以下のコードを入力して保存する
public class MyHelloWorld {
   public static void applyDiscount(Book__c[] books) {
      for (Book__c b :books){
         b.Price__c *= 0.9;
      }
   }
}
Apex トリガを作成する
  • [オブジェクトマネージャー]で「Book」を選択し、[新規]をクリック、以下のコードを入力して保存する
trigger HelloWorldTrigger on Book__c (before insert) {
 
   Book__c[] books = Trigger.new;
 
   MyHelloWorld.applyDiscount(books);
}
テストクラスを作成する
  • [設定]-[Quick Find (クイック検索)] ボックスに「Apex 」と入力し、[Apex クラス]を選択する
  • クラスエディタに以下のコードを入力して保存する
@isTest 
private class HelloWorldTestClass {
    static testMethod void validateHelloWorld() {
       Book__c b = new Book__c(Name='Behind the Cloud', Price__c=100);
       System.debug('Price before inserting new book: ' + b.Price__c);
 
       // Insert book
       insert b;
    
       // Retrieve the new book
       b = [SELECT Price__c FROM Book__c WHERE Id =:b.Id];
       System.debug('Price after trigger fired: ' + b.Price__c);
 
       // Test that the trigger correctly updated the price
       System.assertEquals(90, b.Price__c);
    }
}
テストを実行する
  • 開発者コンソールを起動する

f:id:yohei-a:20210517073647p:plain

  • [Test]-[New Run]を選択する
  • 「HelloWorldTestClass」を選択、[Add Selected] をクリックし、[Run] をクリックする。

f:id:yohei-a:20210517074114p:plain

データを確認する
  • 開発者コンソールの [Query Editor] タブを選択し、以下のようにクエリを実行するとデータを参照できる。
SELECT Book__c.Name, Book__c.Price__c from Book__c
  • [Create New] をクリックすると、レコードを追加することができる

f:id:yohei-a:20210517074207p:plain