Apex setReadOnlyApplicationModeでアプリケーションモードを参照のみに設定する
環境
Salesfoce
構文
public static Void setReadOnlyApplicationMode(Boolean applicationMode)
Salesforce のアップグレードおよびダウンタイム中に参照のみモードをシミュレートするには、Apex テストにおける組織のアプリケーションモードを参照のみに設定します。アプリケーションモードは、Apex テストの各実行が終了するとデフォルトのモードにリセットされます。
使用例
アプリケーションモードを参照のみに設定し、新しい取引先レコードを挿入しようとしています。
結果は例外となります。
その後、アプリケーションモードはリセットされ、正しく挿入されます。
サンプルコード
@isTest
private class ApplicationReadOnlyModeTestClass {
public static testmethod void test() {
// テストアカウントを作成
Account testAccount = new Account(Name = 'TestAccount');
insert testAccount;
// アプリケーションの読み取り専用モードを設定.
Test.setReadOnlyApplicationMode(true);
// 読み取り専用モードを確認
System.assertEquals(
ApplicationReadWriteMode.READ_ONLY,
System.getApplicationReadWriteMode());
// アカウントオブジェクトの作成
Account testAccount2 = new Account(Name = 'TestAccount2');
try {
// テストアカウントを取得
Account testAccountFromDb =
[SELECT Id, Name FROM Account WHERE Name = 'TestAccount'];
System.assertEquals(testAccount.Id, testAccountFromDb.Id);
//InvalidReadOnlyUserDmlException例外
insert testAccount2;
System.assertEquals(false, true);
} catch (System.InvalidReadOnlyUserDmlException e) {
// Expected
}
// 読み取り専用アプリケーション モード
Test.setReadOnlyApplicationMode(false);
insert testAccount2;
Account testAccount2FromDb =
[SELECT Id, Name FROM Account WHERE Name = 'TestAccount2'];
System.assertEquals(testAccount2.Id, testAccount2FromDb.Id);
}
}
@isTest
private class ApplicationReadOnlyModeTestClass {
public static testmethod void test() {
// テストアカウントを作成
Account testAccount = new Account(Name = 'TestAccount');
insert testAccount;
// アプリケーションの読み取り専用モードを設定.
Test.setReadOnlyApplicationMode(true);
// 読み取り専用モードを確認
System.assertEquals(
ApplicationReadWriteMode.READ_ONLY,
System.getApplicationReadWriteMode());
// アカウントオブジェクトの作成
Account testAccount2 = new Account(Name = 'TestAccount2');
try {
// テストアカウントを取得
Account testAccountFromDb =
[SELECT Id, Name FROM Account WHERE Name = 'TestAccount'];
System.assertEquals(testAccount.Id, testAccountFromDb.Id);
//InvalidReadOnlyUserDmlException例外
insert testAccount2;
System.assertEquals(false, true);
} catch (System.InvalidReadOnlyUserDmlException e) {
// Expected
}
// 読み取り専用アプリケーション モード
Test.setReadOnlyApplicationMode(false);
insert testAccount2;
Account testAccount2FromDb =
[SELECT Id, Name FROM Account WHERE Name = 'TestAccount2'];
System.assertEquals(testAccount2.Id, testAccount2FromDb.Id);
}
}
@isTest private class ApplicationReadOnlyModeTestClass { public static testmethod void test() { // テストアカウントを作成 Account testAccount = new Account(Name = 'TestAccount'); insert testAccount; // アプリケーションの読み取り専用モードを設定. Test.setReadOnlyApplicationMode(true); // 読み取り専用モードを確認 System.assertEquals( ApplicationReadWriteMode.READ_ONLY, System.getApplicationReadWriteMode()); // アカウントオブジェクトの作成 Account testAccount2 = new Account(Name = 'TestAccount2'); try { // テストアカウントを取得 Account testAccountFromDb = [SELECT Id, Name FROM Account WHERE Name = 'TestAccount']; System.assertEquals(testAccount.Id, testAccountFromDb.Id); //InvalidReadOnlyUserDmlException例外 insert testAccount2; System.assertEquals(false, true); } catch (System.InvalidReadOnlyUserDmlException e) { // Expected } // 読み取り専用アプリケーション モード Test.setReadOnlyApplicationMode(false); insert testAccount2; Account testAccount2FromDb = [SELECT Id, Name FROM Account WHERE Name = 'TestAccount2']; System.assertEquals(testAccount2.Id, testAccount2FromDb.Id); } }