2011-02-28

Force.com : Trigger Context


Trigger Contextのメモ



○ 変数



  • メソッド
    メソッド戻り値メモ
    Trigger.isExecuting
    Trigger.isInsertBoolean trueinsert 処理か否か
    Trigger.isUpdateBoolean trueupdate 処理か否か
    Trigger.isDeleteBoolean truedelete 処理か否か
    Trigger.isBeforeBoolean true保存処理前
    Trigger.isAfterBoolean true保存処理後
    Trigger.isUndeleteBoolean trueごみ箱からレコードを復元 処理か否か
    Trigger.newsObject[]更新するオブジェクトレコード
    Trigger.newMapMap<Id, sObject>更新するオブジェクトレコード
    Trigger.oldsObject[]更新する前のオブジェクトレコード
    Trigger.oldMapMap<Id, sObject>更新する前のオブジェクトレコード
    Trigger.size


  • サポートの条件
    before after
    insert update delete insert update delete
    new
    newMap
    old
    oldMap



◇ 環境

  • Salesforce - Developer Edition - API バージョン 20.0



◇ 参考


Force.com : Profile.UserType


Profile.UserType について



○ UserType

ラベル備考
StandardStandard
PowerPartnerPartnerパートナーポータル
CSPLitePortalHigh Volume Portalカスタマーポータル
CustomerSuccessCustomer Portal Userカスタマーポータル
PowerCustomerSuccessCustomer Portal Managerカスタマーポータル
CSNOnly Chatter Free User(だと思う)
※ ラベルは若干違うかもしれない。(日本語の環境だと特に?)



◇ 環境

  • Salesforce - Developer Edition - API バージョン 20.0



◇ 参考


Force.com : Apex で SOQL 処理 - select



Apex で SOQL 処理 - select



○ 取引先(Account)のレコードを 1 件取得したい

■ Account.Id からレコードを取得する
  1. 取引先に[取引先名:foo]のレコードを追加しておく
  2. 1. で追加したレコードの Account.Id からレコードを取得する
// 1.
Account a = new Account(Name='foo');
try {
    insert a;
} catch (DmlException e) {
    System.debug('***** NG : ' + e);
}

// 2.
Account account = [SELECT Id, Name FROM Account WHERE Id = :a.Id];

■ Account.Name からレコードを取得する
  1. 取引先に[取引先名:foo]のレコードを追加しておく
  2. Account.Name = 'foo' からレコードを取得する
// 1.
Account a = new Account(Name='foo');
try {
    insert a
} catch (DmlException e) {
    System.debug('***** NG : ' + e);
}

// 2.
Integer cnt = [SELECT COUNT() FROM Account WHERE Name = :a.Name];
if(cnt > 0) {
 Accouont account = [SELECT Id, Name WHERE Name = :a.Name LIMIT 1];
}



○ 取引先(Account)のレコードを複数件取得したい

■ 配列で取得
  1. 取引先に[取引先名:foo][取引先名:boo][取引先名:bar]のレコードを追加しておく
  2. 1. で追加したレコードの Account.Id からレコードを取得する
// 1.
Account[] as = new Account[]{new Account(Name='foo'), new Account(Name='boo'), new Account(Name='bar')};
try {
    insert as;
} catch (DmlException e) {
    System.debug('***** NG : ' + e);
}

// 2.
Set<Id> accountIds = new Set<Id>();
for(Account a : as) {
 accountIds.add(a.Id);
}
Account[] accounts = [SELECT Id, Name FROM Account WHERE Id IN :accountIds LIMIT 200];

■ List で取得
  1. 取引先に[取引先名:foo][取引先名:boo][取引先名:bar]のレコードを追加しておく
  2. 1. で追加したレコードの Account.Id からレコードを取得する
// 1.
Account[] as = new Account[]{new Account(Name='foo'), new Account(Name='boo'), new Account(Name='bar')};
try {
    insert as;
} catch (DmlException e) {
    System.debug('***** NG : ' + e);
}

// 2.
Set<Id> accountIds = new Set<Id>();
for(Account a : as) {
 accountIds.add(a.Id);
}
List<Account> accounts = [SELECT Id, Name FROM Account WHERE Id IN :accountIds LIMIT 200];

■ Map で取得
  1. 取引先に[取引先名:foo][取引先名:boo][取引先名:bar]のレコードを追加しておく
  2. 1. で追加したレコードの Account.Id からレコードを取得する
// 1.
Account[] as = new Account[]{new Account(Name='foo'), new Account(Name='boo'), new Account(Name='bar')};
try {
    insert as;
} catch (DmlException e) {
    System.debug('***** NG : ' + e);
}

// 2.
Set<Id> accountIds = new Set<Id>();
for(Account a : as) {
 accountIds.add(a.Id);
}
Map<Id, Account> accounts = new Map<Id, Account>([SELECT Id, Name FROM Account WHERE Id IN :accountIds LIMIT 200]);




○ 取引先(Account)のレコードを 1 件の取引先名(Name)を取得したい

■ Account.Id からレコードを取得する
  1. 取引先に[取引先名:foo]のレコードを追加しておく
  2. 1. で追加したレコードの Account.Id からレコードの Account.Name を取得する
// 1.
Account a = new Account(Name='foo');
try {
    insert a;
} catch (DmlException e) {
    System.debug('***** NG : ' + e);
}

// 2.
String account = [SELECT Id, Name FROM Account WHERE Id = :a.Id].Name;




○ 取引先(Account)のレコードを 200 件以上取得したい

こっち (別記事 :  Force.com : 取引先(Account)のレコードを 200 件以上取得したい)



◇ 環境

  • Salesforce - Developer Edition - API バージョン 20.0



◇ 参考