Translate

2011年5月3日火曜日

Apexトリガのサンプルコード

以下のコードは、
Force.com開発者コース研修のDEV541内演習1-1です。

ApexトリガHelloWorldPositionTriggerから
ApexクラスHelloWorldPositionClassを呼び出す
シンプルなコード。




// Apex Code 演習1-1
// 募集職種(Position__c)に新規レコードが格納される直前、もしくは更新直前に
// 処理される
//
// 起動はSystem権限で行われる
//
// Apexトリガを宣言する場合、classキーワードの代わりにtriggerを使う
// onの後に発生元オブジェクト、括弧内は発生の原因となるイベントを書く
trigger HelloWorldPositionTrigger on Position__c (before insert, before update) {

  // Apexクラスのクラス名、トリガ名、メソッド名、変数名などは
  // 大文字小文字区別しない

  // Apexトリガ内で使えそうなTriggerクラスの主要な静的フィールド
  // Trigger.new: トリガ発生元となったレコード群
  // Trigger.newMap: 同じく発生元となったレコード群だが
  //                 IDとレコードのMapとして使える
  // Trigger.old: トリガ発生元となったレコード群だがレコード操作前の
  //              状態で格納されている
  // Trigger.oldMap: Mapのold版
  // Trigger.isInsert: 発生原因が新規追加の場合、真
  // Trigger.isUpdate: 発生原因が更新だった場合、真
  // Trigger.isDelete: 発生原因が削除だった場合、真
  // Trigger.isUndelete: 発生原因がゴミ箱から復帰の場合、真
  // Trigger.isBefore: 発生原因が格納直前の場合、真
  // Trigger.isAfter: 発生原因が格納直後の場合、真
  List<position__c> positions = Trigger.new;

  // ApexクラスHelloWorldPositionClassの静的メソッドhelloWorld()を
  // 呼び出している
  // メソッド呼び出しはそっくりJavaとおなじ
  // 勿論インスタンスメソッドとしても実装できる
  HelloWorldPositionClass.helloWorld(positions);
}



こっちがApexトリガから
呼び出されるApexクラス。





// アクセス修飾子はほぼJavaと同じ
// (globalやwebserviceなどJavaにないものもある)
public class HelloWorldPositionClass {
  // 静的メソッドhelloWorld()
  // 引数: positions 募集職種レコード群
  // 戻り値: なし
  public static void helloWorld(List<Position__c> positions){
    // Java5風のfor文も書ける
    for (Position__c p:positions){
      // Javaと違うのは文字列はシングルクォート
      // で囲むこと
      if (p.Hello__c != 'World') {
        // カスタムオブジェクトや項目は__cがつく
        p.Hello__c = 'World'; 
      }
    }
  }
}



宣言的なトリガ(ワークフロー)では

起動時に条件や対象レコードの選択が出来たが、

Apexコードでトリガを書く場合は

このtriggerクラスで

条件チェックやレコードのより分けをして

実際の処理を別のクラスに記述するのが

一般的である。



この辺りはコーディングなので

正直実装はバラバラになってしまうので

コーディング規約で開発者間で品質が均質に

したほうがいいだろう。



追記:

この処理両方とも insert や update がなく、

単にTrigger.new上のレコード情報を上書きしているだけ

である。

これはbefore insert, before updateでのトリガ起動

であるためこの処理の後に

実際の追加・更新処理が働くため記述されていない。

0 件のコメント:

ClaudeをOpenAI O1のように思考させるDifyサンプルを試す

 Difyの「探索」タブにはさまざまなサンプルが載っており、その1つに「Thinking Claude (OpenAI O1 Alternative)」というものがある。   このサンプルがどういうものか、未だに自分でも解けない以下の問題をためしに聞いてみることにした。 『人類の...