外部オブジェクトと標準オブジェクトの関連付け
標準/カスタムオブジェクトを親とし、外部オブジェクトを子としたい
- 間接参照関係項目を使用する.
help: 外部オブジェクトの間接参照関係項目
外部オブジェクトを親とし、標準子 / カスタムオブジェクトを子としたい
- 外部参照関係項目を使用する.
JSON対応のAPI
Pub/SubのAPI
- Streaming API.
Apex
選択リストの操作
Schema.DescribeFieldResult F = Account.Industry.getDescribe(); List<Schema.PicklistEntry> P = F.getPicklistValues();
Apex Reference Guide: PicklistEntry Class
あるレコードタイプに対しての情報を取得する
RecordType recType = [SELECT Id,Name FROM RecordType WHERE SobjectType='Contact' AND DeveloperName='PartnerContact' LIMIT 1]; Schema.DescribeSObjectResult result = Schema.SObjectType.Contact; // これ Map<Id,Schema.RecordTypeInfo> mapRecTypes = result.getRecordTypeInfosById(); Schema.RecordTypeInfo recordTypeInfo = mapRecTypes.get(recType.id);
レコードタイプの開発者名を取得
Schema.DescribeSObjectResult dsr = Schema.SObjectType.Account; System.debug(dsr.getRecordTypeInfosByDeveloperName());
項目権限レベルのチェック
if (Schema.sObjectType.Contact.fields.Email.isAccessible()) {
Contact c = [SELECT Email FROM Contact WHERE Id= :Id];
}
Apex Reference Guide: Enforcing Object and Field Permissions
Get App metadata
Schema.DescribeTabSetResult[] r = Schema.describeTabs();
全SObjectのメタデータ取得
Map<String, Schema.SObjectType> m = Schema.getGlobalDescribe(); for(String s : m.keySet()) { DescribeSObjectResult dsr = m.get(s).getDescribe(); System.debug('Object Name : ' + dsr.getName()); }
SObjectタイプを取得する
Schema.DescribeSobjectResult[] r = Schema.describeSObjects(s); for(Schema.DescribeSobjectResult result : r) { System.debug('Label of sObject: ' + result.getLabel()); }
項目が現在のユーザにて参照可能か確認する
Schema.DescribeFieldResult dfr = Account.Description.getDescribe(); System.debug(dfr.isAccessible());
数式フィールドが空白を0として扱うかチェック
Schema.DescribeFieldResult dfr = Opportunity.TestFormula__c.getDescribe(); System.debug(dfr.isFormulaTreatNullNumberAsZero());
Integer型変数の桁チェック
Schema.DescribeFieldResult dfr = Account.NumberOfEmployees.getDescribe(); System.debug(dfr.getDigits());
カスタム例外を作成する
- カスタム例外は、内部クラスだけでなくトップレベル・クラスにもなり、メンバ変数、メソッド、コンストラクタをサポートする.
- カスタム例外は組み込み例外クラスを拡張したもので、その名前は 'Exception' で終わる必要があります.
- カスタム例外と組み込み例外は、ジェネリックなExceptionを除いて、明示的にスローすることができます.
- 例外をキャッチした場合、スローされたカスタム例外のパラメータとして例外を渡すなどして、例外を再スローすることができます。これは、メソッドが他のメソッドから呼び出され、例外処理を呼び出し元のメソッドに委譲する必要がある場合に便利です.
- すべての例外をキャッチできるわけではないことに注意してください。キャッチできない例外は LimitException と AssertException です.
- 下記のようなCustom Exception Classとメソッドを実装する.
public class MyCustomException extends Exception { class testException extends Exception {} public void logException(Boolean flag) { if(flag == false) { throw new textException('test exception'); else { // } }
- あとはtry-catchで使用する.
try { testException te = new testException(); te.logException(false); } catch { System.debug('exception! + error.getMessage()); }
User Interface
静的リソースのCSSをVisualforceで読み込む
<apex:stylesheet/>
を使って、静的リソースのURLを取得する.
<apex:stylesheet value="{!URLFOR($Resource.StyleResource, 'cosmic.css')}"/>
読みこめるレコードの最大数
- 10000件.
StandardSetController
をDatabase.getQueryLocator()
でインスタンス化した場合は、例外がthrowされる.- SObjectのリストでインスタンス化した場合は10000レコードに切り捨てられ、例外は発生しない.
ApexPages.StandardSetController ssc = new ApexPages.StandardSetController(Database.getQueryLocator( [SELECT...] // SOQL ));
複数選択されたレコードの処理
getSelected()
で選択レコードを取得.getRecord()
で選択されたSObjectが返却される.
取引先と個人取引先について
Name
が入力されている場合はbuisnessアカウント.LastName
が入力されている場合あpersonアカウント.
標準ページのボタンアクションをオーバーライドしたい
- 標準コントローラーを使用する.
- コントローラー拡張は機能追加時に使用する.
Cross-Site Scripting (XSS) 攻撃を無効化する手段
HTMLENCODE()
- この関数を使用すると、HTML コンテキストに反映する前に、入力の HTML エンコーディングを追加で実行できます.JSENCODE()
- この関数を使用すると、JavaScript コンテキストでリフレクションの前に入力の JavaScript エンコーディングを実行できます.JSINHTMLENCODE()
- 自動 HTML エンコーディングが導入される前は、開発者は HTML 内の JavaScript イベントハンドラにマージフィールドを含めるときにこの関数を呼んでいました.JSENCODE(HTMLENCODE())
- この関数は、JSINHTMLENCODE()
の代わりに使用できます。
Aura ComponentのComponent / Application Event
- Componentイベント
- Application イベント
SOQLで項目レベルセキュリティーを考慮する場合
stripInaccessible
メソッドを使う.- これを使えば、SOQLクエリを変えることなく、READができないユーザに対してはその項目を除去したクエリ結果を取得できる.
List<Custom__c> cst = [SELECT Name, xxxx FROM Custom__c ]; SobjectAccessDecision decision = Securiy.stripInaccesible(AccessType.READABLE, cst); List<Custom__c> cstStrip = decision.getRecords();
暗号化
Crypto
クラスのメソッドを使用して暗号化・解読
public static Blob encryptData(String data) { // initialization vector must be 16 bytes Blob initializationVector = Blob.valueOf('Example of IV123'); Blob key = Crypto.generateAesKey(256); Blob dataBlob = Blob.valueOf(data); Blob encryptedData = Crypto.encrypt('AES256', key, initializationVector, dataBlob); Blob decryptedData = Crypto.decrypt('AES256', key, initializationVector, encryptedData); System.debug(decryptedData.toString()); return encryptedData; } }``` ## Testing ### テスト時に実際のデータを使用したい場合 - Testクラスに`@isTest(seeAllData=True)`を追加する. - デフォルトではFalse. ### 新規・既存ユーザでテストを行いたい場合 `System.runAs(userVar)`を使用する. ### Scheduled JobをSOQLで取得したい場合 - 下記どちらかを使う.
AsyncApexJob jobInfo = [SELECT Status, NumberOfErrors FROM AsyncApexJob WHERE JobType = 'ScheduledApex' LIMIT 1];
CronTrigger ct = [SELECT State, TimesTriggered FROM CronTrigger LIMIT 1];